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 ambienteDISPLAY
. -
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 cookie123456
”. O arquivo de autoridade X é normalmente indicado na variável de ambienteXAUTHORITY
. 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 .