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
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!