Я пытаюсь туннелировать x window. Если сделать:
user@local: ssh -X user@remote xclock
это работает. Однако если я сначала войду в систему, а затем запущу программу, то она не работает.
user@local: ssh -X user@remote
user@remote: xclock
No protocol specified
Error: Can't open display: :0
Что пошло не так?
Редактировать
Я проверил $DISPLAY
переменную на пульте дистанционного управления:
user@local: ssh -X user@remote "echo $DISPLAY"
:0.0
Установка того же значения на пульте дистанционного управления после входа в систему не работает. Установка $DISPLAY
на :10.0
предложенное работает.
user@local: ssh -X user@remote
user@remote: DISPLAY=:10.0 xclock
Я все еще не понимаю, зачем мне нужны разные значения $DISPLAY для интерактивного и неинтерактивного сеанса.
решение1
Проверьте, что переменнаяОТОБРАЖАТЬбыть правильно настроенлокальный хост:10.0. Если это не так,
export DISPLAY=localhost:10.0
, тогда попробуйтеxclockснова.
Но почему мне нужно, чтобы «DISPLAY» был равен 10,0, а не 0,0?
TheX-сервер(илиX-окно, илиХ11) это именно то, что сервер, ожидающий, когда приложения подключатся к нему, чтобы отобразить их. Это происходит на вашем ПК, где приложения подключаются к X-серверу через сокет, расположенный в/тмп, обычно называемый/tmp/.X11-unix. Однако, как и все серверы,Х11можно связаться с удаленных ПК и графически отобразить приложения, работающие на удаленных ПК.
Однако эта возможность несет в себе множество рисков для безопасности, поэтому открыть ваш сервер X11 для удаленных приложений очень сложно (вам необходимо указать одну и ту же опцию как минимум три раза в разных файлах конфигурации).
Теперь введитесш, что вместо этого делает это безопасным: это-Y/-Xвариантсшкоторый безопасно обрабатывает (также шифруя трафик) все детали открытия вашего локального сервера X11 для удаленного приложения. Однако, когда вы хотите отобразитьудаленныйxclock локально, вы должны указать удаленному приложению, что сервер X11, к которому необходимо подключиться, не является его собственным сервером X11, а находится на удаленном компьютере (том, с которого вы запустилисшсессия). Так чтоxclockдолжен отправить свой выводнетк локальной розетке в/тмпа к сетевому порту (это127.0.0.1:6010, которыйсшмилостиво сокращается долокальный хост:10), из которогосшпозаботится об отправке его обратно на ваш локальный ПК, где в конечном итоге вывод будет отображен в графическом виде.
Если вы не хотите, чтобы различные ssh-подключения (у вас их может быть несколько) были разделены10единицы, как влокальный хост:10.0, локальный хост:20.0, ...) вам следует изменить утверждение
X11DisplayOffset 10
в/etc/ssh/sshd_configна что угодно (хотя, честно говоря, я не вижу для этого никаких причин).
Именно это утверждение делает удаленные дисплеи доступными.нетв порту6000(что было былокальныйхост:0.0), но на порту6010. Вы можете проверить это сами:
$ ssh -Y vps
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Apr 17 02:47:42 2017 from
root@vps:~# ss -lntp | grep 6010
LISTEN 0 0 127.0.0.1:6010 *:* users:(("sshd",16172,8))
LISTEN 0 0 ::1:6010 :::* users:(("sshd",16172,7))