Putty-> Cygwin X11 Forwarding Ошибка «Не удается открыть дисплей»

11

Я использую Putty на машине Windows, чтобы ssh на другой сервер. Оказавшись там, я пытаюсь использовать переадресацию X11, чтобы открыть окна на моем компьютере. Удаленная система не является проблемой, поскольку это большая система, которая успешно используется многими другими пользователями таким же образом.

Я захожу в систему через Putty без проблем, а затем запускаю startxwinв cygwin. Однако после запуска xtermв Putty мне выдается ошибка, в xterm Xt error: Can't open display: localhost:##.0которой знаки фунта представляют собой два целых числа, значение которых меняется при каждом входе в систему.

  • У меня включена переадресация X11 в настройках Putty
  • Я попытался установить "X display location" в localhost:0
  • Я гарантированно загрузил пакет X11 для Cygwin
  • Я пытался использовать только startxвместоstartxwin
  • Я пытался setenv DISPLAY localhost:0иsetenv DISPLAY my.ip.address

К сожалению, проблема сохраняется. Я исчерпал ресурсы Googling по этой теме, и поэтому буду очень признателен за любую помощь. Благодаря!

Тайлер
источник
localhost:##.0Какие реальные цифры вы видите здесь? Какое программное обеспечение X вы используете на компьютере с Windows?
Кенстер

Ответы:

11

Последние обновления Cygwin изменили свой X-сервер, чтобы он не прослушивал TCP-соединения по умолчанию. Вместо этого Cygwin X использует (реализация Cygwin) доменные сокеты Unix, а PuTTY (как нативная программа Windows) не знает, как их использовать.

В Cygwin X Часто задаваемые вопросы и Cygwin рассылки списков больше деталей.

Мое решение состояло в том, чтобы взять стандартный ярлык Cygwin, который использует startxwin для запуска X:

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

и замените его прямым вызовом xinit с моими желаемыми параметрами (добавьте -listen tcpи удалите -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"

Это менее безопасно, чем новые значения по умолчанию Cygwin; его следует использовать только в однопользовательской системе, и настройка вашего брандмауэра для блокировки подключений к XWin может быть целесообразной.

Джош Келли
источник
где запустить это ?? в терминале
Cygwin
1
@yellowandred Начинается с `C:`, поэтому это путь в стиле Windows, а не терминал Cygwin. Я просто поместил его в раздел «Цель» моего ярлыка Windows. CMD должен работать. PowerShell должен работать, но вам, возможно, придется обновить цитату.
Джош Келли
6

В качестве альтернативы тому, что сказал Джош Келли, вы также можете отредактировать файл startxwin и добавить «-listen tcp» к параметрам сервера по умолчанию.

Старый: defaultserverargs = "- многооконный"

Новое: defaultserverargs = "- multiwindow -listen tcp"

Также с включенной аутентификацией мне пришлось указать putty на файл аутентификации, созданный скриптом startxwin. Моя была расположена здесь: c: \ cygwin64 \ home \ USERNAME.Xauthority

Поскольку этот файл воссоздан, вам придется перезапускать сеансы замазки после сброса вашего xserver.

В целях безопасности вы также можете разрешить соединения только с локального хоста, так как именно здесь putty передает его.

Сэр ланселот
источник
4

Я попытался установить «X display location» на localhost: 0

Пожалуйста, попробуйте установить «X display location» на «: 0.0»!

export DISPLAY=:0.0

Джош Келли упомянул Cygwin X FAQ :

3,13. Я обновился, и теперь X-клиенты не могут подключиться

A1:

Начиная с X-сервера 1.17, по умолчанию сервер не прослушивает соединения TCP / IP, а только принимает локальные соединения на доменном сокете unix.

Для локальных клиентов используйте DISPLAY =: 0.0, а не DISPLAY = localhost: 0.0, DISPLAY = 127.0.0.1: 0.0, DISPLAY = :: 1: 0.0 и т. Д.

user3248784
источник
0

Как уже говорили другие, хитрость заключается в добавлении -listen tcpк серверу аргументов. Тем не менее, я рекомендую сделать это, позвонив, startxwin -- -listen tcpчтобы позволить startxwinсобрать остальную часть xinitкоманды.

В ярлыке меню «Пуск»:

C:\cygwin\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/startxwin -- -listen tcp"
Доминик Лемир
источник