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