35

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.

10
  • Where do you run super-boot-manger from?
    – Thor
    Aug 15 '12 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 '12 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 '12 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 '12 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 '12 at 8:03
50

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
3
  • 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 '12 at 5:44
  • 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 '20 at 9:44
  • setting the DISPLAY in sudo was not even required for me - Debian Buster.
    – Joerg S
    Oct 27 '20 at 23:02
19

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.
    – bagustris
    Mar 9 '15 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 '16 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 file ~/.xinitrc 1. 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 '19 at 0:07
0

Actually the code you are running has cv2.imshow() or any other display commands, for remote running of code you have to comment them, and better save for visualization.

1
  • Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
    – Community
    2 days ago

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.