Como fazer o ssh para uma instância do X em execução remotamente?

2

Eu tenho uma instância X em execução no meu computador servidor e, ocasionalmente, conecto-me a ela remotamente por meio do TeamViewer. De vez em quando, o TeamViewer trava e não consigo reiniciá-lo remotamente. Existe uma maneira de acessar minha instância X em execução por meio do ssh e reiniciar o TeamViewer remotamente?

    
por Can Bal 11.10.2011 / 22:34

2 respostas

1

Um programa X precisa de duas informações para se conectar a um monitor X.

  • Ele precisa do endereço da exibição, que normalmente é :0 quando você está conectado localmente ou :10 , :11 , etc. quando você está conectado remotamente (mas o número pode mudar dependendo de quantas conexões X estão ativas). O endereço da exibição é normalmente indicado na variável de ambiente DISPLAY .

  • Precisa da senha para a exibição. X senhas de exibição são chamadas de cookies mágicos . Cookies mágicos não são especificados diretamente: eles são sempre armazenados em arquivos de autoridade X, que são uma coleção de registros do formulário “display :42 has cookie 123456 ”. O arquivo de autoridade X é normalmente indicado na variável de ambiente XAUTHORITY . Se $XAUTHORITY não estiver definido, os programas usarão ~/.Xauthority .

Você está tentando agir nas janelas exibidas em sua área de trabalho. Se você for a única pessoa que usa sua máquina de desktop, é muito provável que o nome de exibição seja :0 . Encontrar a localização do arquivo de autoridade X é mais difícil, porque com o gdm como configurado sob o Debian squeeze ou Ubuntu 10.04, ele está em um arquivo com um nome gerado aleatoriamente. (Você não teve nenhum problema antes porque as versões anteriores do gdm usavam a configuração padrão, ou seja, cookies armazenados em ~/.Xauthority .)

Se esta for uma ação única, você poderá detectar os valores de DISPLAY e XAUTHORITY de um processo em execução. Isso é estranho para automatizar. Você precisa descobrir o PID de um processo que está conectado à exibição na qual deseja trabalhar e, em seguida, obter as variáveis de ambiente em /proc/$pid/environ ( eval export $(</proc/$pid/environ tr \0 \n | grep -E '^(DISPLAY|XAUTHORITY)=') ).

Uma solução automática de longo prazo é copiar cookies quando você faz login na sua sessão X de área de trabalho. Adicione as seguintes linhas ao ~/.profile (ou algum outro script que é lido quando você efetua login):

case $DISPLAY:$XAUTHORITY in
  :*:?*)
    # DISPLAY is set and points to a local display, and XAUTHORITY is
    # set, so merge the contents of '$XAUTHORITY' into ~/.Xauthority.
    XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac

Em seguida, você pode executar programas no seu monitor X remoto simplesmente configurando DISPLAY :

ssh foo.example.com 'DISPLAY=:0 restart teamviewer'

Esta resposta é adaptada de uma resposta mais completa a uma pergunta semelhante sobre Unix Stack Exchange .

    
por Gilles 12.10.2011 / 02:28
0

Provavelmente, a maneira mais fácil é remotamente (via SSH) iniciar um vncserver na tela relevante. Depois disso, use o tunelamento SSH para conectar um cliente vnc da sua máquina remota através da conexão SSH ao servidor VNC.

    
por Sascha Vogt 12.10.2011 / 01:33