web-dev-qa-db-fra.com

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

J'utilise PuTTY sur une machine Windows pour SSH sur un autre serveur. Une fois là-bas, j'essaie d'utiliser le transfert X11 pour faire apparaître des fenêtres sur mon ordinateur. Le système distant n’est pas en cause, car c’est un grand système 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 exécute startxwin dans cygwin. Cependant, lors de l'exécution de xterm dans PuTTY, l'erreur xterm Xt error: Can't open display: localhost:##.0 apparaît, où les signes dièse sont deux entiers dont la valeur change à chaque fois que je me connecte.

  • J'ai le transfert X11 activé dans les paramètres de PuTTY
  • J'ai essayé de définir "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 simplement startx au lieu de startxwin
  • J'ai essayé setenv DISPLAY localhost:0 et setenv DISPLAY my.ip.address

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

11
Tyler

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

Les FAQ de Cygwin X et Cygwinmailinglistes ont plus de détails.

Ma solution consistait à 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 remplacez-le par une invocation directe de xinit par les options souhaitées (ajoutez -listen tcp et supprimez -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"

Ceci est moins sécurisé que les nouvelles valeurs par défaut de Cygwin; il ne doit être utilisé que sur un système mono-utilisateur. Il peut être judicieux de configurer votre pare-feu pour bloquer les connexions à XWin.

11
Josh Kelley

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

Ancien: defaultserverargs = "- multiwindow"

Nouveau: defaultserverargs = "- multiwindow -listen tcp"

Aussi, avec l'authentification activée, je devais pointer PuTTY vers le fichier d'authentification créé par le script startxwin. Le mien était situé ici: c:\cygwin64\home\USERNAME.Xauthority

Ce fichier étant recréé, vous devrez redémarrer les sessions PuTTY après avoir réinitialisé votre serveur x.

Pour des raisons de sécurité, vous pouvez également n'autoriser que les connexions de localhost, car c'est ici que PuTTY le transfère.

6
Sir Launcelot

J'ai essayé de régler "l'emplacement d'affichage X" sur localhost: 0

Essayez de définir "Emplacement d'affichage X" sur ": 0.0" à la place!

export DISPLAY=:0.0

Josh Kelley a mentionné le FAQ de Cygwin X :

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

A1:

Depuis le serveur X 1.17, par défaut, le serveur n'écoute pas les connexions TCP/IP, il n'accepte que 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.

2
user3248784

C'est pour xming, mais peut-être que cette FAQ peut être utile? L'idée sous-jacente est la même, mais l'utilisation de xming au lieu de cygwin sur votre machine locale. https://wiki.utdallas.edu/wiki/display/FAQ/X11+Forwarding+using+Xming+and+PuTTY

0
Paul