Correndo em erros reconectando-se a uma sessão de tela GNU que tunela o X sobre o SHH

4

Após o tunelamento do X através de uma conexão SSH usando a tela do controle remoto, como posso recolocar a sessão da tela de outra máquina e fazer o tunelamento do X para essa outra máquina?

Ou recebo erros de tipo "não é possível abrir a exibição" ou os túneis de aplicativos para o primeiro computador. Eu suponho que tem algo a ver com ENV vars na sessão de tela, mas não sei como corrigir o erro.

    
por Matt Alexander 18.02.2012 / 18:50

1 resposta

5

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.

    
por 18.02.2012 / 19:19