
Para mim, é estranho que, ao usar a conexão ssh com encaminhamento X11, um usuário e root consigam ver xclock
, mas outro usuário não consiga ver isso. Por que?
mahmood@cluster:~$ xclock
^C
mahmood@cluster:~$ su
Password:
root@cluster:mahmood# xclock
^C
root@cluster:mahmood# su - hmousavi
hmousavi@cluster:~$ xclock
MobaXterm X11 proxy: Authorisation not recognised
Error: Can't open display: localhost:10.0
hmousavi@cluster:~$
PS: ^C
significa que consegui ver a xclock
janela, então pressionei ^C
para retornar ao terminal.
Responder1
A conexão a um monitor X11 requer duas informações: o nome de exibição (normalmente passado na DISPLAY
variável de ambiente) e obiscoito, que é uma senha para o display que todo aplicativo deve mostrar ao se conectar. Normalmente o cookie é armazenado em ~/.Xauthority
, mas pode ser armazenado em um arquivo diferente indicado pela XAUTHORITY
variável de ambiente.
Parece que o valor DISPLAY
definido por SSH foi preservado pelas duas chamadas para su
. No entanto, o cookie está em ~mahmood/.Xauthority
; quando você executa um programa como hmousavi, o programa procura um cookie ~hmousavi/.Xauthority
e encontra um valor diferente.
Em princípio, você poderia executar XAUTHORITY=~mahmood/.Xauthority xclock
, mas presumivelmente hmousavi não tem permissão para ler esse arquivo - o .Xauthority
arquivo não deve ser legível para outros usuários. Você pode usar o xauth
comando duas vezes, uma vez como mahmood para extrair o valor do cookie ( xauth list localhost:10.0
) e uma vez como hmousavi para importar esse valor ( xauth merge
), mas isso é complicado. A maneira mais fácil de fazer os aplicativos X11 funcionarem é usar o SSH totalmente, porque o SSH configura o encaminhamento do X11 automaticamente:
mahmood@cluster:~$ ssh -X hmousavi@localhost
hmousavi@cluster:~$ xclock
Adicione a chave pública SSH do mahmood à do hmousavi .ssh/authorized_keys
para permitir isso.