Kit-> Cygwin X11 Przekazywanie „Nie można otworzyć wyświetlacza” Błąd

11

Używam Putty na komputerze z systemem Windows, aby ssh na innym serwerze. Tam staram się używać X11 do przekazywania okien na mój komputer. System zdalny nie stanowi problemu, ponieważ jest to duży system, który jest z powodzeniem wykorzystywany przez wielu innych użytkowników w ten sam sposób.

Bez problemu loguję się do systemu za pośrednictwem Putty, a następnie uruchamiam startxwinw cygwin. Jednak po uruchomieniu xtermw Putty pojawia się błąd, w xterm Xt error: Can't open display: localhost:##.0którym znaki funta to dwie liczby całkowite, których wartość zmienia się przy każdym logowaniu.

  • Mam włączone przekazywanie X11 w ustawieniach Putty
  • Próbowałem ustawić „Lokalizacja wyświetlania X” na localhost:0
  • Zapewniłem pobranie pakietu X11 dla cygwin
  • Próbowałem użyć właśnie startxzamiaststartxwin
  • Próbowałem setenv DISPLAY localhost:0isetenv DISPLAY my.ip.address

Niestety problem nadal występuje. Wyczerpałem swoje zasoby Googling na ten temat i dlatego byłbym bardzo wdzięczny za wszelką pomoc. Dzięki!

Tyler
źródło
localhost:##.0Jakie rzeczywiste liczby tutaj widzisz? Jakiego rodzaju oprogramowania X używasz na komputerze z systemem Windows?
Kenster,

Odpowiedzi:

11

Ostatnie aktualizacje Cygwin zmieniły jego serwer X, aby domyślnie nie nasłuchiwał połączeń TCP. Zamiast tego X Cygwina używa (implementacja Cygwin) gniazd domeny uniksowej, a PuTTY (jako natywny program Windows) nie wie, jak z nich korzystać.

W Cygwin X FAQ i Cygwin mailing list mieć więcej szczegółów.

Moim rozwiązaniem było skorzystanie ze standardowego skrótu Cygwin, który używa startxwin do uruchomienia X:

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

i zastąp go bezpośrednim wywołaniem xinit z moimi żądanymi opcjami (dodaj -listen tcpi usuń -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"

Jest to mniej bezpieczne niż nowe ustawienia domyślne Cygwin; powinien być używany tylko w systemie dla jednego użytkownika, a konfiguracja zapory ogniowej w celu blokowania połączeń z XWin może być mądra.

Josh Kelley
źródło
gdzie to uruchomić? w terminalu cygwin / PS / CMD
yellowandred
1
@yellowandred Zaczyna się na `C:`, więc jest to ścieżka w stylu Windows, a nie terminal Cygwin. Po prostu umieściłem go w sekcji Cel mojego skrótu Windows. CMD powinno działać. PowerShell powinien działać, ale może być konieczne zaktualizowanie cytowania.
Josh Kelley,
6

Alternatywnie do tego, co powiedział Josh Kelley, możesz również edytować plik startxwin i dodać „-listen tcp” do domyślnych argumentów serwera.

Old: defaultserverargs = "- multiwindow"

Nowość: defaultserverargs = "- multiwindow -listen tcp"

Również przy włączonym uwierzytelnianiu musiałem wskazać kit na plik uwierzytelnienia utworzony przez skrypt startxwin. Mój znajdował się tutaj: c: \ cygwin64 \ home \ USERNAME.Xauthority

Ponieważ ten plik jest odtwarzany, po zresetowaniu serwera xserver będziesz musiał ponownie uruchomić sesje szpachlowania.

Ze względów bezpieczeństwa możesz zezwolić tylko na połączenia z hosta lokalnego, ponieważ w tym miejscu kit przekazuje je dalej.

Sir Launcelot
źródło
4

Próbowałem ustawić „X display location” na localhost: 0

Spróbuj zamiast tego ustawić „X display location” na „: 0.0”!

export DISPLAY=:0.0

Josh Kelley wspomniał o Cygwin X FAQ :

3.13 Zaktualizowałem i teraz klienci X nie mogą się połączyć

A1:

Od wersji X serwera 1.17 serwer domyślnie nie nasłuchuje połączeń TCP / IP, akceptując tylko połączenia lokalne w gnieździe domeny unix.

W przypadku klientów lokalnych użyj DISPLAY =: 0,0 zamiast DISPLAY = localhost: 0,0, DISPLAY = 127.0.0.1: 0,0, DISPLAY = :: 1: 0,0 itd.

użytkownik3248784
źródło
0

Jak powiedzieli inni, sztuczka polega na dodaniu -listen tcpargumentów serwera. Jednak polecam to zrobić, wywołując, startxwin -- -listen tcpaby startxwinzbudować resztę xinitpolecenia.

W skrócie do menu Start:

C:\cygwin\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/startxwin -- -listen tcp"
Dominic Lemire
źródło