3

После туннелирования X через соединение SSH с использованием экрана на пульте дистанционного управления, как я могу заново подключить сеанс экрана с другой машины и туннелировать X к этой другой машине?

Я либо получаю ошибки типа "не могу открыть дисплей", либо приложение туннелирует к первому компьютеру. Я предполагаю, что это имеет отношение к ENV-переменным в сеансе экрана, но я не уверен, как исправить ошибку.

1 ответ1

5

При использовании экрана вам придется скопировать необходимые переменные среды вручную.

Отключитесь от сеанса экрана , запустите echo $DISPLAY и скопируйте значение.

Теперь подключите и запустите export DISPLAY="copied value" .


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

xterm                        (DISPLAY=":0")
└── bash                     (DISPLAY=":0")
    └── screen (client)      (DISPLAY=":0")
        └── SCREEN (server)  (DISPLAY=":0")
            ├── irssi        (DISPLAY=":0")
            ├── mutt         (DISPLAY=":0")
            └── bash         (DISPLAY=":0")

Когда вы подключаетесь по SSH с включенной переадресацией X11, сервер SSH устанавливает переменную среды $DISPLAY указывающую на ваш сервер X11.

Однако при повторном подключении к сеансу Screen процессы, выполняющиеся внутри этого сеанса, не увидят его; они все еще держат копии старой среды.

sshd                         (DISPLAY="localhost:12")
└── bash                     (DISPLAY="localhost:12")
    └── screen (client)      (DISPLAY="localhost:12")

SCREEN (server)              (DISPLAY=":0")
├── irssi                    (DISPLAY=":0")
├── mutt                     (DISPLAY=":0")
└── bash                     (DISPLAY=":0")

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

Некоторые другие мультиплексоры, такие как tmux, разрешают клиентам отправлять копию своей среды на сервер после присоединения. Это не совсем эффективно; он только позволяет вновь открытым окнам tmux наследовать новую среду, но все равно не может ничего сделать с уже запущенными окнами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .