Encaminhamento X11 na tela Gnu, é possível?


32

Eu uso o GNU Screen constantemente. Mas, eu tenho tentado descobrir se há alguma maneira de fazer com que os aplicativos X11 encaminhem a tela quando estou fazendo o ssh (isso é uma palavra?). Atualmente, se eu tentar executar o 'gedit' na tela, ele será aberto no meu computador 'servidor' e não no meu cliente. Se eu fizer o mesmo fora da tela, tudo estará bem. Mas quero que tudo fique bem quando uso a tela também!

Obrigado!

PS: Eu pesquisei o problema no google e vejo menção ao xmove, mas não consigo encontrar o pacote que contém o xmove no meu ubuntu. (ubuntu 10.10)


Não tenho tempo para encontrar uma resposta completa agora, mas você precisa que algumas variáveis ​​de ambiente sejam definidas corretamente. Provavelmente, você pode descobrir quais estão olhando para o seu ambiente fora da tela.
JanC 28/10/10

Respostas:


32

Para fazer isso manualmente, depois de efetuar o SSH, mas antes de reconectar à tela, verifique sua variável de ambiente DISPLAY:

echo $DISPLAY

Depois de anexar novamente à tela, defina explicitamente a variável de ambiente:

export DISPLAY=:N.0

onde : N.0 é o que foi echomostrado antes do anexo. Isso não será perfeito, pois alguns aplicativos podem esperar falar com o Session D-Bus, que é um pouco mais complexo para enviar pela conexão SSH.


1
Impressionante! Isso parece funcionar para a maioria dos aplicativos. Estou tentando exibir minha tela 'fu'. Você tem alguma idéia ou, pelo menos, pode me indicar a direção geral de como eu posso automatizar isso? Obrigado!
Sandro

Já fiz coisas estranhas como scripting algo como: echo $DISPLAY > $HOME/.display.txt; screen -x -de depois outro na tela para executar que fazexport DISPLAY=$(cat $HOME/.display.txt)
Kees Cozinhe

é exatamente isso que tenho tentado realizar. Mas até agora sem sorte. Tentar fazer com que a exportação aconteça é um grande obstáculo, já que executá-lo em um script não é bom, preciso de alguma forma fornecê-lo ... e o setenv também não parece ter o toque mágico.
Sandro

Para obter o tipo de script . /path/to/scriptonde scriptestá #export DISPLAY=$(cat $HOME/.display.txt)
Kees Cook

Isso pressupõe que você não tem inicialização automática da tela no login (a la byobu)
Um estudante em uma universidade

11

existe um programa chamado xpra nos repositórios, é como a tela gnu para o x11. não é muito difícil trabalhar com:

Aplicativos remotos persistentes X

O Xpra oferece a funcionalidade dos aplicativos GNU Screen for X.

Ele permite que o usuário visualize aplicativos X remotos em sua máquina local, desconecte e reconecte-se da máquina remota sem perder o estado dos aplicativos em execução.


2
Eu escrevi sobre como realmente integrar o xpra ao Screen para obter a persistência do console e do aplicativo X11: krlmlr.github.io/integrating-xpra-with-screen . Funciona para mim.
krlmlr

7

O Byobu reconecta automaticamente os agentes ssh e gpg. Eu poderia fazê-lo reconectar a variável de exibição, se isso for útil para você ...


Parece nem passar a variável de exibição em NOVAS sessões criadas em uma sessão ssh com encaminhamento do X11. Seria maravilhoso se isso acontecesse ... Eu parei de usá-lo por causa da dor de cabeça de ter que desativar o byobu de inicialização automática para que se possa usar o encaminhamento do X11.
Um estudante em uma universidade

2

Foi assim que o fiz funcionar ao executar o byobu

Adicione esta linha no .bash_login antes da linha "_byobu_source ..":

echo $DISPLAY > $HOME/.display.env

E adicione esta linha ao .bashrc :

if [ ! -z ${SSH_CONNECTION+x} ]; then
  export DISPLAY=$(cat $HOME/.display.env) 
fi

1

Parece que o problema é que a variável de ambiente XAUTHORITY não é preservada na sessão de tela. Resolvi isso adicionando o seguinte ao meu .bashrc. Não achei que isso fosse necessário, mas acho que você faz o que deve:

# ensure X forwarding is setup correctly, even for screen
XAUTH=~/.Xauthority
if [[ ! -e "${XAUTH}" ]]; then
 # create new ~/.Xauthority file
 xauth
fi
if [[ -z "${XAUTHORITY}" ]]; then
 # export env var if not already available.
 export XAUTHORITY="${XAUTH}" 
fi

Não espero que seja a melhor solução ou a mais concisa, mas funciona.



0

Com base na sugestão @harre, achei a melhor solução para trabalhar, pelo menos para RHEL via Putty. Eu sei que há uma maneira melhor do que criar um arquivo que contém o var, mas isso funciona fora do portão X11para ter acesso ao DISPLAYquando carregado via gnu screen.

Solução automatizada

Adicionar a .bashrc(ou .bash_profile, dependendo do seu caso de uso)

#.bashrc
if [ -f ~/etc/.bash-screen-x11 ]; then
   echo $DISPLAY > $HOME/.display.env
   source ~/etc/.bash-screen-x11
fi

Em seguida, adicione o seguinte arquivo (ou sua opção de caminho)

#~/etc/.bash-screen-x11
# sets back display var.
if [ -z $STY ]; then
  export DISPLAY=$(cat $HOME/.display.env)
fi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.