Вопрос
Я использую screen для сохранения моего рабочего сеанса и подключения к одному и тому же сеансу с нескольких компьютеров.Как я могу настроить SSH и экран таким образом, чтобы переменная XDISPLAY внутри мой постоянный сеанс просмотра экрана всегда настроен на компьютер, с которого я в данный момент подключаюсь?
т. е.Я запускаю сеанс просмотра экрана на работе и использую gvim, который использует X-сервер, запущенный на моей рабочей машине.Позже я подключаюсь к тому же сеансу из дома и тоже хочу использовать gvim.Но на этот раз я хочу, чтобы gvim использовал X-сервер на моем домашнем компьютере.Я понимаю, что мог бы вручную обновлять XDISPLAY каждый раз, когда подключаюсь с другого компьютера, но я бы предпочел автоматизированную систему.
Бонусные баллы, если я действительно смогу двигаться gvim с моего рабочего компьютера на мой домашний компьютер во время его работы.Я пытался xmove ( перемещение ) но никогда не мог заставить его играть по-хорошему.
Решение
Следующее решение выполняется вручную, но нет причин, по которым вы не могли бы этого сделать используйте псевдоним или скрипт, чтобы это выполнялось автоматически при удаленном входе в систему.
Предполагая, что ваша локальная оболочка соответствующим образом устанавливает переменную DISPLAY,
вы могли бы использовать screen -X
отправить commads в удаленном экране
подключение.
# set future remote shells started by screen to have the correct XDISPLAY
% screen -X "setenv XDISPLAY $DISPLAY" #...
# set up the keystroke F1 to update the XDISPLAY in current shells
% screen -X "bindkey -k k1 stuff export XDISPLAY=$DISPLAY\015" #...
Если вы знаете, что все ваши окна были оставлены в оболочке (не в запущенном редакторе или чем-то подобном), вы могли бы использовать :at
чтобы изменить XDISPLAY
вместо привязки ключа:
# update the XDISPLAY in all current windows
% screen -X "at % stuff export XDISPLAY=$DISPLAY\015" #...
В качестве альтернативы, если вы знаете какой-либо способ получения значения переменной среды родительского процесса, то вы могли бы использовать это вместе с перехватом запроса вашей командной строки, чтобы получить значение экрана XDISPLAY (заданное setenv) и обновить его для командной строки.
Другие советы
Не существует "тривиального" способа изменить переменные среды во внешних процессах.
Простым решением может быть сохранение вашего XDISPLAY
в файл при входе в систему и использовании PROMPT_COMMAND
чтобы прочитать этот файл перед печатью следующего запроса.
Для перемещения X-приложений посмотрите на что-то вроде X11vnc
или Xvnc
.
Меня также интересует ответ на этот вопрос.Разве не должно быть возможно перечислить SSH-процессы для вашего пользователя, отсортированные по времени, и, возможно, указать среду для этого процесса?