X11 Encaminhando pela tela do 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 do X11 sejam encaminhados pela tela quando estou ssh (isso é uma palavra?). Atualmente, se eu tentar executar o 'gedit' através da tela, ele será aberto no computador 'servidor' e não no meu cliente. Se eu fizer o mesmo fora da tela, então está tudo bem. Mas eu quero que tudo fique bem quando eu usar a tela também!

Obrigado!

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

    
por Sandro 28.10.2010 / 06:10

7 respostas

31

Para fazer isso manualmente, depois de ter o SSHed ativado, mas antes de reconectar a tela, verifique sua variável de ambiente DISPLAY:

echo $DISPLAY

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

export DISPLAY=:N.0

em que : N.0 é o que o echo mostrou antes da anexação. Isso não será perfeito, já que alguns aplicativos podem estar esperando falar com o Session D-Bus, que é um pouco mais complexo para enviar através da conexão SSH.

    
por Kees Cook 28.10.2010 / 17:36
10

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

X Aplicativos Remotos Persistentes

O Xpra oferece a funcionalidade do GNU Screen para aplicativos X.

Permite ao usuário visualizar aplicativos X remotos em sua máquina local e desconectar e reconectar da máquina remota sem perder o estado de os aplicativos em execução.

    
por Avihay 20.10.2011 / 14:04
7

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

    
por Dustin Kirkland 01.12.2010 / 16:03
2

É assim que eu funciono quando estou executando o byobu

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

echo $DISPLAY > $HOME/.display.env

Em seguida, adicione esta linha a .bashrc :

if [ ! -z ${SSH_CONNECTION+x} ]; then
  export DISPLAY=$(cat $HOME/.display.env) 
fi
    
por harre 25.05.2016 / 02:36
1

Parece que o problema é que a variável de ambiente XAUTHORITY não é preservada na sessão de tela. Eu resolvi isso adicionando o seguinte ao meu .bashrc. Eu 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

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

    
por Mark 03.03.2015 / 17:20
0

O FreeNX é um aplicativo maravilhoso para trabalhar com exibições remotas.

    
por Habitual 01.12.2010 / 16:14
0

Com base na sugestão do @harre, descobri que esta é a melhor solução de trabalho, pelo menos para o RHEL via Putty. Eu sei que há uma maneira melhor do que criar um arquivo que contenha o var, mas isso funciona fora do portão para obter X11 para ter acesso ao DISPLAY quando carregado via gnu screen .

Solução automatizada

Adicione 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 escolha de caminho)

#~/etc/.bash-screen-x11
# sets back display var.
if [ -z $STY ]; then
  export DISPLAY=$(cat $HOME/.display.env)
fi
    
por Brian Thomas 12.09.2017 / 04:00