bash: acessar display do X com outro usuário

Quem usa linux dificilmente larga o famoso prompt de comando.
Isso se deve ao grande poder e à conhecida versatilidade do BASH.

Entretando, existem sempre algumas dificuldades que a grande maioria passa.
Neste POST está mais uma dessas, bem como a solução.

Talvez você precise executar um programa no modo gráfico, mas com sua inicialização partindo dum comando.
Isso talvez aconteça pois você quer visualizar os erros/outputs deste programa em específico.

Pra isso, simplesmente você faz:

hudson@vostrolab ~/ $ programa

Mas talvez a idéia seja simplesmente executar um programa com outro usuário. Então você pensa:

hudson@vostrolab ~/ $ su – usuario -c “xlogo”

E aí você obtém:

Password:
No protocol specified
Error: Can’t open display: :0

Isso acontece pois as chaves usadas para autenticar sua sessão do X (modo gráfico) não são mais válidas a partir do momento em que você troca de usuário.
Tal medida de segurança parece exagero, mas é uma herança de quando as sessões X eram muito usadas em rede.

Pra resolver essa, basta liberar sua sessão X para autenticar outros usuários, usando o comando xhost.
Isso deve ser feito antes de trocar de usuário.

hudson@vostrolab ~/ $ xhost +local:local
non-network local connections being added to access control list
hudson@vostrolab ~/ $ su – usuario -c “xlogo”
Password:
hudson@vostrolab ~/ $

xlogo foi usado como exemplo de aplicação, pois abre uma simples ‘janela’ na tela.
Nesse ponto da execução, você deve ver sua aplicação normalmente, seja um mozilla ou um thunderbird =).

Não esqueça de desfazer a autorização com o ‘menos’ ao invés do ‘mais’:

hudson@vostrolab ~/ $ xhost -local:local
non-network local connections being removed from access control list

Referências: http://www.tuxradar.com/content/command-line-tricks-smart-geeks

One thought on “bash: acessar display do X com outro usuário

  1. Se estiver acessando por SSH, não equeça que a variavel de ambiente DISPLAY não está configurada. Então você verá:

    $ xhost
    xhost: unable to open display “”

    Por isso, basta setá-la corretamente, de acordo com onde roda seu X.

    $ ps aux | grep X
    root 1269 1.4 1.6 151296 34852 tty8 Ss+ Jan27 296:09 /usr/bin/X :0 -audit 0 -auth /var/lib/mdm/:0.Xauth -nolisten tcp vt8

    Vimos que o X está rodando em ‘:0’, então:

    $ export DISPLAY=:0
    $ xhost
    access control enabled, only authorized clients can connect
    SI:localuser:hudson

    Pronto!

Leave a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *