SSH, экран и XDISPLAY - PullRequest
       22

SSH, экран и XDISPLAY

9 голосов
/ 29 октября 2008

Я использую экран, чтобы сохранить мой рабочий сеанс и подключиться к одному и тому же сеансу с нескольких компьютеров. Как настроить SSH и экран таким образом, чтобы переменная XDISPLAY внутри моего сеанса постоянного экрана всегда была настроена на компьютер, с которого я в данный момент подключаюсь?

есть. Я запускаю сеанс экрана на работе и использую gvim, который использует X-сервер, работающий на моей рабочей машине. Позже я подключаюсь к той же сессии из дома, а также хочу использовать gvim. Но на этот раз я хочу, чтобы gvim использовал X-сервер на моей домашней машине. Я понимаю, что могу вручную обновлять XDISPLAY каждый раз, когда подключаюсь с другой машины, но я бы предпочел автоматизированную систему.

Бонусные баллы, если я действительно смогу переместить gvim со своей рабочей машины на мою домашнюю машину во время ее работы. Я пытался xmove , но никогда не мог заставить его играть хорошо.

Ответы [ 3 ]

5 голосов
/ 22 марта 2009

Ниже приводится ручное решение, но нет причин, по которым вы не могли используйте псевдоним или сценарий для автоматического выполнения при удаленном входе в систему.

Предполагая, что ваша локальная оболочка устанавливает переменную DISPLAY соответствующим образом, вы можете использовать screen -X для отправки следующих команд на удаленный экран до подключение.

# 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" #...

В качестве альтернативы, если вы знаете какой-либо способ получения значения переменной окружения родительского процесса, вы можете использовать его вместе с ловушкой подсказки вашей оболочки, чтобы получить значение SCREEN для XDISPLAY (как установлено setenv) и обновить его для оболочки.

3 голосов
/ 29 октября 2008

Не существует "тривиального" способа изменения переменных среды в сторонних процессах.

Простым решением может быть сохранение вашего XDISPLAY в файле при входе в систему и использование PROMPT_COMMAND для чтения этого файла перед печатью следующего приглашения.


Для перемещения приложений X посмотрите на что-то вроде X11vnc или Xvnc.

0 голосов
/ 29 октября 2008

Мне также интересен ответ на этот вопрос. Разве нельзя иметь возможность перечислить процессы SSH для вашего пользователя, отсортированные по времени, и, возможно, определить среду для этого процесса?

...