Ao usar tela , você terá que copiar manualmente as variáveis de ambiente necessárias.
Desanexe da sessão tela , execute echo $DISPLAY
e copie o valor.
Agora, reconecte e execute export DISPLAY="copied value"
.
Quando você cria uma sessão Screen, o servidor screen herda automaticamente uma cópia do ambiente atual, que é herdada pelos shells ou outros processos iniciados em novas janelas Screen dentro da sessão.
xterm (DISPLAY=":0")
└── bash (DISPLAY=":0")
└── screen (client) (DISPLAY=":0")
└── SCREEN (server) (DISPLAY=":0")
├── irssi (DISPLAY=":0")
├── mutt (DISPLAY=":0")
└── bash (DISPLAY=":0")
Quando você se conecta via SSH com o encaminhamento X11 ativado, o servidor SSH define a variável de ambiente $DISPLAY
apontando para o seu servidor X11.
No entanto, quando você reconecta a uma sessão de tela, os processos em execução nessa sessão não a verão; eles ainda estão segurando cópias do ambiente antigo .
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")
Isso ocorre porque um processo não tem permissão para atualizar ambientes de outros processos; só de si mesmo. Embora o processo do cliente screen tenha o novo ambiente, ele não pode fornecê-lo ao servidor screen ; o protocolo usado pelo Screen simplesmente não tem essa função.
Alguns outros multiplexadores, como tmux , permitem que os clientes enviem uma cópia de seu ambiente para o servidor ao reconectá-lo. Isto não é completamente efetivo; ele só permite que janelas recém-abertas do tmux herdam o novo ambiente, mas ainda não pode fazer nada sobre a execução de janelas.