Después de iniciar sesión como otro usuario, ¿cómo ejecuto los 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 respuesta funciona en mi Ubuntu 16.04 y Mir (con ligeras adaptaciones):
Ejecute el comando x como otro usuario usando xauth
Wrapper bash script:
Por conveniencia, creé un script de envoltura bash , que quizás quieras descargar
/usr/local/bin/xsudo
y marcar ejecutable (chmod +x /usr/local/bin/xsudo
).Luego simplemente ejecuta:
Alternativas potenciales:
pam_xauth
(s. Esta respuesta ) Sin embargo, esto no funciona para mí por alguna razón. (Todavía recibo el error de que Firefox no puede conectarse a la pantalla en: 0)xhost +local:
o similar, lo que hará quegksudo -u hawat firefox
funcione sin ningún script de envoltura. Sin embargo, tenga en cuenta que esto abre una brecha de seguridad : cualquier usuario activo en su host local podrá acceder a su teclado, mouse, pantalla, etc.fuente
Después de pasar demasiado tiempo en esto, descubrí que con Gnome en Ubuntu 16.04, el valor correcto es
DISPLAY=:1
, noDISPLAY=:0
como lo ha sido desde tiempos inmemoriales.fuente
export DISPLAY =: 0 funciona bien, pero esta es una solución temporal ya que debe escribir esto cada vez que abra el terminal.
Solución permanente: El problema podría deberse a la variable env_keep en / etc / sudoers. Agregue la siguiente línea al final de / etc / sudoers usando gedit o sudo visudo
Nota: Recuerde usar siempre "+ =" al agregar a env_keep. En caso de que haya algún otro env_keep con "=" cámbielo a "+ =" porque usar "=" anulará otros valores.
fuente
visudo
contenedor, que proporciona algunas comprobaciones de cordura antes de escribir un nuevo archivo sudoers.