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:~$ 4 Answers
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:
xsudo hawat firefoxPotential Alternatives:
- As a far simpler alternative, you might look into
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) - In a lot of forums you might see the command
xhost +local:or similar, which will makegksudo -u hawat firefoxwork 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. - There used to be sux, which has been discontinued for some reason - you might still be able to download and use it though. As far as I can tell, it did something similar to my script only a lot more. Unfortunately I couldn't find out, why this is no longer maintained. (Maybe because we should now use pam_xauth instead - s. first alternative)
After spending way too much time on this, I discovered that with Gnome on Ubuntu 16.04, the correct value is DISPLAY=:1, not DISPLAY=: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
Defaults env_keep+="DISPLAY"
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.
1