SSH, экран и XDISPLAY

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
4 114
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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


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

Ответ принят как подходящий

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

Предполагая, что ваша локальная оболочка соответствующим образом устанавливает переменную 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" #...

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

Другие вопросы по теме