Putty-> Cygwin X11 Forwarding "Anzeige kann nicht geöffnet werden" Fehler

11

Ich verwende Putty auf einem Windows-Computer, um auf einen anderen Server zu ssh. Dort versuche ich, mithilfe der X11-Weiterleitung Fenster auf meinen Computer zu laden. Das Remote-System ist nicht das Problem, da es sich um ein großes System handelt, das von vielen anderen Benutzern auf dieselbe Weise erfolgreich verwendet wird.

Ich startxwinlogge mich ohne Probleme über Putty in das System ein und laufe dann in cygwin. Beim Ausführen xtermin Putty wird jedoch der Fehler angezeigt, bei dem xterm Xt error: Can't open display: localhost:##.0die Nummernzeichen zwei Ganzzahlen sind, deren Wert sich bei jeder Anmeldung ändert.

  • Ich habe die X11-Weiterleitung in den Putty-Einstellungen aktiviert
  • Ich habe versucht, den "X-Anzeigeort" auf einzustellen localhost:0
  • Ich habe sichergestellt, dass das X11-Paket für Cygwin heruntergeladen wird
  • Ich habe versucht, nur startxstatt zu verwendenstartxwin
  • Ich habe es versucht setenv DISPLAY localhost:0undsetenv DISPLAY my.ip.address

Leider bleibt das Problem bestehen. Ich habe meine Googeln-Ressourcen zu diesem Thema erschöpft und würde mich über jede Hilfe sehr freuen. Vielen Dank!

Tyler
quelle
localhost:##.0Welche tatsächlichen Zahlen sehen Sie hier? Welche Art von X-Software führen Sie auf dem Windows-Computer aus?
Kenster

Antworten:

11

Die letzten Cygwin-Updates haben den X-Server so geändert, dass standardmäßig nicht auf TCP-Verbindungen gewartet wird. Stattdessen verwendet Cygwins X Unix-Domain-Sockets (die Cygwin-Implementierung von), und PuTTY (als natives Windows-Programm) weiß nicht, wie diese verwendet werden sollen.

Die Cygwin X FAQ und Cygwin Mailinglisten haben weitere Details.

Meine Lösung bestand darin, die Standard-Cygwin-Verknüpfung zu verwenden, die startxwin zum Starten von X verwendet:

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

und ersetzen Sie es durch einen direkten Aufruf von xinit mit meinen gewünschten Optionen (Hinzufügen -listen tcpund Entfernen -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"

Dies ist weniger sicher als die neuen Standardeinstellungen von Cygwin. Es sollte nur auf einem Einzelbenutzersystem verwendet werden. Die Konfiguration Ihrer Firewall zum Blockieren von Verbindungen zu XWin kann sinnvoll sein.

Josh Kelley
quelle
Wo soll das laufen? in Cygwin Terminal / PS / CMD
Yellowandred
1
@yellowandred Es beginnt mit `C:`, es handelt sich also um einen Pfad im Windows-Stil, nicht um ein Cygwin-Terminal. Ich habe es einfach in den Abschnitt Ziel meiner Windows-Verknüpfung eingefügt. CMD sollte funktionieren. PowerShell sollte funktionieren, aber Sie müssen möglicherweise das Angebot aktualisieren.
Josh Kelley
6

Alternativ zu den Aussagen von Josh Kelley können Sie auch die startxwin-Datei bearbeiten und den Standardserverargumenten das "-listen tcp" hinzufügen.

Alt: defaultserverargs = "- Multiwindow"

Neu: defaultserverargs = "- multiwindow -listen tcp"

Auch bei aktivierter Authentifizierung musste ich Putty auf die vom Startxwin-Skript erstellte Authentifizierungsdatei verweisen. Meins befand sich hier: c: \ cygwin64 \ home \ USERNAME.Xauthority

Da diese Datei neu erstellt wird, müssen Sie Putty-Sitzungen neu starten, nachdem Sie Ihren xserver zurückgesetzt haben.

Aus Sicherheitsgründen können Sie auch nur Verbindungen von localhost zulassen, da Putty diese hier weiterleitet.

Sir Launcelot
quelle
4

Ich habe versucht, den "X-Anzeigeort" auf localhost: 0 zu setzen

Bitte versuchen Sie stattdessen, den "X-Anzeigeort" auf ': 0.0' zu setzen!

export DISPLAY=:0.0

Josh Kelley erwähnte die Cygwin X FAQ :

3.13. Ich habe ein Upgrade durchgeführt und jetzt können X Clients keine Verbindung herstellen

A1:

Seit X Server 1.17 wartet der Server standardmäßig nicht auf TCP / IP-Verbindungen, sondern akzeptiert nur lokale Verbindungen auf einem Unix-Domain-Socket.

Verwenden Sie für lokale Clients DISPLAY =: 0.0 anstelle von DISPLAY = localhost: 0.0, DISPLAY = 127.0.0.1: 0.0, DISPLAY = :: 1: 0.0 usw.

user3248784
quelle
0

Wie andere gesagt haben, besteht der Trick darin -listen tcp, die Serverargumente zu ergänzen . Ich empfehle jedoch, dies durch Aufrufen startxwin -- -listen tcpzu tun , startxwindamit der Rest des xinitBefehls erstellt wird.

In einer Startmenü-Verknüpfung:

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