Failed to connect to Mir: Failed to connect to server socket: No such file or directory

Solution 1:

export DISPLAY=:0 worked for me. Make sure you execute the command on the connecting system, not on the system you're connecting to!

Solution 2:

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 firefox

Potential 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 make gksudo -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.
  • 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)

Solution 3:

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.

Solution 4:

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.