After logging in as another user how do I run GUI programs?
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:~$
export DISPLAY=:0
worked for me. Make sure you execute the command on the connecting system, not on the system you're connecting to!This answer works on my Ubuntu 16.04 and Mir (with slight adaptations):
Run x command as another user using xauth
Wrapper bash script:
For convenience, I created a wrapper bash script, that you might want to download to
/usr/local/bin/xsudo
and mark executable (chmod +x /usr/local/bin/xsudo
).Then simply run:
Potential Alternatives:
pam_xauth
(s. this answer) However this doesn't work for me for some reason. (I still get the error about firefox not being able to connect to the display at :0)xhost +local:
or similar, which will makegksudo -u hawat firefox
work without any wrapper script. However be aware that this opens a security loophole: Any active user on your local host will be able to access your keyboard, mouse, screen etc.After spending way too much time on this, I discovered that with Gnome on Ubuntu 16.04, the correct value is
DISPLAY=:1
, notDISPLAY=:0
as it has been from time immemorial.export DISPLAY=:0 works fine but this is a temporary solution since you need to type this each time when you open the terminal.
Permanent Solution : The problem might be due to env_keep variable in /etc/sudoers. Add the following line at the end of /etc/sudoers using gedit or using sudo visudo
Note : Keep in mind to always use "+=" while adding to env_keep. In case if there are any other env_keep with "=" change them to "+=" because using "=" will override other values.