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.

Peachy
  • 7,235
  • 10
  • 40
  • 47
Apurba
  • 1,438

4 Answers4

55

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
Thor
  • 3,678
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

Apurba
  • 1,438
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

adabru
  • 240
  • 4
  • 7
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

Hamid
  • 101