Обнаружение ошибок, связанных с сеансом экрана GNU, который туннелирует X по SHH
После туннелирования X через SSH-соединение с использованием экрана на пульте дистанционного управления, как я могу заново подключить сеанс экрана с другой машины и туннеля X к этой другой машине?
Я либо получаю ошибки типа "не могу открыть дисплей", либо приложение туннелирует к первому компьютеру. Я предполагаю, что это связано с переменными ENV в сеансе экрана, но я не уверен, как исправить ошибку.
1 ответ
При использовании экрана вам придется скопировать необходимые переменные среды вручную.
Отсоединиться от экрана сеанса, запустить echo $DISPLAY
и скопируйте значение.
Теперь присоедините и запустите export DISPLAY="copied value"
,
При создании сеанса Screen сервер экрана автоматически наследует копию текущей среды, которая в дальнейшем наследуется оболочками или другими процессами, которые вы запускаете в новых окнах Screen внутри сеанса.
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 наследовать новую среду, но все равно не может ничего сделать с уже запущенными окнами.