Помилка `Не вказано протокол` під час роботи з віддаленої машини через ssh


10

У мене є сценарій, просто запустити свій графічний (GUI) додаток, як показано нижче.

#cat gui.sh
#!/bin/bash 
./gui -display 127.0.0.1:0.0    

Коли я запускаю його з локальної машини ( ./gui.sh), він працює чудово. Але коли я намагаюся запустити його з віддаленої машини через ssh, я отримав наступну помилку.

[root@localhost]# ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui.sh""   
No protocol specified  
gdm: cannot connect to X server 192.168.3.77:0.0   
[root@localhost]#    

Я не знаю, який протокол він запитує чи я щось пропускаю? Я спробував безпосередньо, запустивши додаток, без скрипту [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""], але результат той самий. Я пробував різні комбінації, як ssh -Y, ssh -fYі більше, але результат той самий!
По-друге, для моєї заявки необхідна умова, що ми повинні спершу зайти в каталог, де знаходиться програма.
Будь-які рішення?

Відповіді:


5

Значення параметра -display 127.0.0.1:0.0залежить від guiпрограми, але велика ймовірність, що це означає "відображення на дисплеї X 127.0.0.1tons.0". Це перший локальний X-дисплей, доступ до якого здійснюється через TCP. Це майже напевно неправильно з двох причин. По-перше, локальний X-дисплей повинен бути :0, ні 127.0.0.1:0, оскільки включення IP-адреси змушує трафік проходити через TCP замість локального доступу. Перехід через TCP може не працювати залежно від того, приймає X-сервер з'єднання TCP. Навіть якщо це станеться, ви втратите оптимізацію, яку мають місцеві дисплеї.

Дисплей, який використовується, зазвичай позначається DISPLAYзмінною середовища, і ця змінна, як правило, встановлюється правильно автоматично. (Зазвичай, якщо DISPLAYмає неправильне значення, це тому, що ви з цим возилися. Основним винятком є ​​використання screenабо tmux.)

Ваша програма, ймовірно, шукає значення DISPLAYзмінної середовища, оскільки це, як правило, відбувається автоматично при викликах xlib. Тож вам варто просто зателефонувати ./gui, ваш сценарій не робить нічого корисного. Якщо ваша програма наполягає на -displayаргументі, змусьте її використовувати змінну середовища:

./gui -display "$DISPLAY"

4

ssh -Yі ssh -Xмає бути гарним початком, але чи пересилаєте ви також свій X-сервер?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

інакше це не спрацює.

Інша річ, яку слід перевірити, це змінна DISPLAY, вона повинна показувати щось подібне:

$ echo $DISPLAY
$ localhost:10.0

це було запущено після ssh -Y. Ця ж змінна порожня, якщо я ssh без -Yабо -X.

Для відмінностей між -Xі -Yпрочитайте man сторінку сторінки ssh.


3

У цьому відео пояснено, як вирішити помилку поетапно. Якщо ви не хочете дивитися, виконайте наступний текст:

Помилка, зазначена у протоколі, не вказує, що "користувач не знає, як запустити GUI-додаток", а "користувач не має дозволу на запуск програми GUI". На відео додаток GUI є dbca.

Ключовим фрагментом цього відео є виконання команди, xhost +яка надає користувачеві дозволи на віддалене відображення GUI з віддаленої системи, до локальної системи.


6
xhost +надасть доступ будь-кому для підключення до вашого дисплея. Я б порекомендувавxhost +local:[hostname or ip]
vimdude

Це і саме це виправило помилку для мене. +1
Юг Сінгх

1

Дебіан Джессі, додай також:

export XAUTHORITY=/.Xauthority

xhost +виправили мою проблему (на стороні клієнта)
небезпека89

Це допомогло, дякую! Моя XAUTHORITY була, /tmp/xauth-1000-_0але після початку двох додаткових сеансів X цей файл зник - залишився лише третій. Щоб виправити проблему для всіх вікон, я відновив її:ln -s ~/.Xauthority /tmp/xauth-1000-_0
joeytwiddle

0

Мене вразило те саме питання, яке я вирішив, змінивши змінну середовища DISPLAY з:

export DISPLAY=:0.0

до

export DISPLAY=:10
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.