Após fazer login como outro usuário, como executo programas GUI?
thufir@doge:~$
thufir@doge:~$ sudo -u hawat -i
hawat@doge:~$
hawat@doge:~$ whoami
hawat
hawat@doge:~$
hawat@doge:~$ pwd
/home/hawat
hawat@doge:~$
hawat@doge:~$ echo $HOME
/home/hawat
hawat@doge:~$
hawat@doge:~$ firefox
No protocol specified
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused
Error: cannot open display: :0
hawat@doge:~$
Esta resposta funciona no meu Ubuntu 16.04 e Mir (com pequenas adaptações):
Execute o comando x como outro usuário usando xauth
Script bash do wrapper:
Por conveniência, criei um script bash de wrapper , para o qual você pode baixar
/usr/local/bin/xsudo
e marcar executável (chmod +x /usr/local/bin/xsudo
).Em seguida, basta executar:
Alternativas potenciais:
pam_xauth
(s. Esta resposta ) No entanto, isso não funciona para mim por algum motivo. (Ainda recebo o erro de o firefox não conseguir se conectar ao monitor em: 0)xhost +local:
ou similar, que irá fazergksudo -u hawat firefox
o trabalho sem qualquer script wrapper. No entanto, esteja ciente de que isso abre uma brecha de segurança : qualquer usuário ativo no host local poderá acessar o teclado, mouse, tela etc.fonte
Depois de gastar muito tempo nisso, descobri que, com o Gnome no Ubuntu 16.04, o valor correto é
DISPLAY=:1
, nãoDISPLAY=:0
como tem sido imemorial.fonte
export DISPLAY =: 0 funciona bem, mas esta é uma solução temporária, pois você precisa digitar isso sempre que abrir o terminal.
Solução permanente: O problema pode estar relacionado à variável env_keep em / etc / sudoers. Adicione a seguinte linha no final de / etc / sudoers usando gedit ou sudo visudo
Nota: Lembre-se de sempre usar "+ =" ao adicionar ao env_keep. Caso haja algum outro env_keep com "=", altere-os para "+ =", pois usar "=" substituirá outros valores.
fonte
visudo
wrapper, que fornece algumas verificações de sanidade antes de gravar um novo arquivo sudoers.