Putty-> Cygwin X11 Forwarding "Impossible d'ouvrir l'affichage" Erreur

11

J'utilise Putty sur une machine Windows pour ssh dans un autre serveur. Une fois sur place, j'essaie d'utiliser le transfert X11 pour faire apparaître des fenêtres sur mon ordinateur. Le système distant n'est pas le problème car il s'agit d'un grand système qui est utilisé avec succès par de nombreux autres utilisateurs de la même manière.

Je me connecte au système via Putty sans problème, puis je lance startxwindans cygwin. Cependant, lors de l'exécution xtermdans Putty, je reçois l'erreur xterm Xt error: Can't open display: localhost:##.0où les signes dièse sont deux entiers dont la valeur change à chaque connexion.

  • J'ai le transfert X11 activé dans les paramètres Putty
  • J'ai essayé de régler "l'emplacement d'affichage X" sur localhost:0
  • Je me suis assuré de télécharger le package X11 pour cygwin
  • J'ai essayé d'utiliser juste startxau lieu destartxwin
  • J'ai essayé setenv DISPLAY localhost:0etsetenv DISPLAY my.ip.address

Malheureusement, le problème persiste. J'ai épuisé mes ressources Google sur ce sujet et j'apprécierais donc grandement toute aide. Merci!

Tyler
la source
localhost:##.0Quels chiffres réels voyez-vous ici? Quel type de logiciel X utilisez-vous sur l'ordinateur Windows?
Kenster

Réponses:

11

Les mises à jour récentes de Cygwin ont changé son serveur X pour ne pas écouter les connexions TCP par défaut. Au lieu de cela, Cygwin's X utilise (l'implémentation Cygwin) des sockets de domaine Unix, et PuTTY (en tant que programme Windows natif) ne sait pas comment les utiliser.

La FAQ Cygwin X et les listes de diffusion Cygwin contiennent plus de détails.

Ma solution a été de prendre le raccourci Cygwin standard qui utilise startxwin pour lancer X:

C:\cygwin\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/startxwin"

et le remplacer par une invocation directe de xinit avec mes options souhaitées (ajouter -listen tcpet supprimer -auth):

C:\cygwin\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/xinit /etc/X11/xinit/startxwinrc -- /usr/bin/XWin :0 -multiwindow -listen tcp"

C'est moins sûr que les nouveaux paramètres par défaut de Cygwin; il ne doit être utilisé que sur un système mono-utilisateur, et la configuration de votre pare-feu pour bloquer les connexions à XWin peut être judicieuse.

Josh Kelley
la source
où exécuter cela ?? dans le terminal cygwin / PS / CMD
yellowandred
1
@yellowandred Il commence par `C:`, c'est donc un chemin de style Windows, pas un terminal Cygwin. Je viens de le mettre dans la section Cible de mon raccourci Windows. CMD devrait fonctionner. PowerShell devrait fonctionner, mais vous devrez peut-être mettre à jour le devis.
Josh Kelley
6

Comme alternative à ce que Josh Kelley a dit, vous pouvez également modifier le fichier startxwin et ajouter le "-listen tcp" aux arguments du serveur par défaut.

Ancien: defaultserverargs = "- multiwindow"

Nouveau: defaultserverargs = "- multiwindow -listen tcp"

Toujours avec l'authentification activée, j'ai dû pointer du mastic vers le fichier d'authentification créé par le script startxwin. Le mien était situé ici: c: \ cygwin64 \ home \ USERNAME.Xauthority

Puisque ce fichier est recréé, vous devrez redémarrer les sessions de mastic après avoir réinitialisé votre xserver.

Pour des raisons de sécurité, vous pouvez également autoriser uniquement les connexions à partir de l'hôte local, car c'est ici que le mastic le transmet.

Sir Launcelot
la source
4

J'ai essayé de définir "X display location" sur localhost: 0

Veuillez plutôt essayer de définir "X display location" sur ': 0.0'!

export DISPLAY=:0.0

Josh Kelley a mentionné la FAQ Cygwin X :

3.13. J'ai mis à jour et maintenant les clients X ne peuvent pas se connecter

A1:

Depuis le serveur X 1.17, par défaut, le serveur n'écoute pas les connexions TCP / IP, acceptant uniquement les connexions locales sur un socket de domaine Unix.

Pour les clients locaux, utilisez DISPLAY =: 0.0, plutôt que DISPLAY = localhost: 0.0, DISPLAY = 127.0.0.1: 0.0, DISPLAY = :: 1: 0.0, etc.

user3248784
la source
0

Comme d'autres l'ont dit, l'astuce consiste à ajouter -listen tcpaux arguments du serveur. Cependant, je recommande de le faire en appelant startxwin -- -listen tcppour laisser startxwinconstruire le reste de la xinitcommande.

Dans un raccourci du menu Démarrer:

C:\cygwin\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/startxwin -- -listen tcp"
Dominic Lemire
la source