37

When I am running some software using sudo command it showing error like

cannot connect to X server

For example if I run the following command:

$ sudo gedit /etc/profile

I am getting following command

(gedit:6758): WARNING **: Command line `dbus-launch --autolaunch=84b871d735f31ffe014dc9ba00000009 --binary-syntax --close-stderr' 
exited with non-zero exit status 1: 
Autolaunch error: X11 initialization failed. 
Cannot open display:
Run 'gedit --help' to see a full list of available command line options.

Or if I am running super-boot-manager I am getting following error

buc: cannot connect to X server

Please help.

11
  • Where do you run super-boot-manger from?
    – Thor
    Aug 15, 2012 at 9:49
  • First I have tried to run super-boot-manager directly from unity luncher, it did not worked. Then I have tried it from terminal, then I got those error massage.
    – Apurba
    Aug 15, 2012 at 13:21
  • As in a terminal within the graphical user environment? What does: echo $DISPLAY say? You should run it without sudo as super-boot-manager runs sudo internally.
    – Thor
    Aug 15, 2012 at 15:23
  • echo $DISPLAY is giving :0.0. And I am not running super-boot-manager as sudo. I am running just using command super-boot-manager from terminal.
    – Apurba
    Aug 16, 2012 at 19:36
  • 2
    Finally the problem is solved. I have just added the line: Defaults env_keep="DISPLAY XAUTHORITY" at the end of visudo. Thanks to all, specially @Thor for kind help.
    – Apurba
    Aug 17, 2012 at 8:03

4 Answers 4

53

You need to allow the root user access to the X server:

xhost local:root

And point the command to the right DISPLAY:

sudo DISPLAY=$DISPLAY gedit /etc/profile
5
  • That solved the problem with opening gedit as sudo, but still can't lunch super-boot-manager. It is showing same error
    – Apurba
    Aug 15, 2012 at 5:44
  • 1
    I've just learned that sudo -H should be used when starting graphical applications, to avoid file corruption of X-related files.
    – jpaugh
    May 23, 2020 at 9:44
  • setting the DISPLAY in sudo was not even required for me - Debian Buster.
    – Joerg S
    Oct 27, 2020 at 23:02
  • How can I make this permanent?
    – user508402
    Oct 3, 2021 at 19:56
  • @user508402: that depends on many things. You should probably post this as a new question, where you detail your current setup, i.e. shell, window manager etc.
    – Thor
    Oct 5, 2021 at 12:59
20

Finally the problem is solved. I have just added the line:

Defaults env_keep="DISPLAY XAUTHORITY"

at the end of visudo.

To do that you have to run:

sudo visudo

it will open the file then add the above line at the end.

Thanks to all, specially @Thor for kind help

2
  • 2
    Defaults env_keep="DISPLAY" works for me.
    – sugab
    Mar 9, 2015 at 16:28
  • I have been searching high and low for this answer forever. I wish I could upvote both of you multiple times for your answers. Thank you so very much! :)
    – Ev-
    Dec 28, 2016 at 6:38
5

Supplementing @Thor's answer, run:

xhost local:root

before sudo gedit. To make this permanent, add the line

xhost local:root

to the ~/.xinitrc 1 file. Create the file if it doesn't exist.


1 https://askubuntu.com/a/720120/452398

1
  • Thank you for providing an answer that provides a non-permanent solution. Jan 5, 2019 at 0:07
0

set DISPLAY and XAUTHORITY variable environment before running your scrip. for example in systemctl service file:

[Unit]
Description=Start Clock

[Service]
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/pi/.Xauthority
ExecStart=/usr/bin/python3 /home/pi/clock.py
Restart=always
RestartSec=10s
KillMode=process
TimeoutSec=infinity

[Install]
WantedBy=graphical.target

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .