Nie można połączyć się z X Server podczas uruchamiania aplikacji za pomocą sudo

29

Kiedy uruchamiam jakieś oprogramowanie za pomocą sudopolecenia, pokazuje to błąd

cannot connect to X server

Na przykład, jeśli uruchomię następujące polecenie:

$ sudo gedit /etc/profile

Otrzymuję polecenie

(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.

Lub jeśli działam super-boot-manager, pojawia się następujący błąd

buc: cannot connect to X server

Proszę pomóż.

Apurba
źródło
Skąd uciekasz super-boot-manger?
Thor
Najpierw próbowałem uruchomić super-boot-managerbezpośrednio z unun lunchera, to nie zadziałało. Potem wypróbowałem to z terminala, a potem dostałem masaż błędem.
Apurba,
Jak w terminalu w graficznym środowisku użytkownika? Co znaczy: echo $DISPLAYpowiedzieć? Należy uruchomić go bez sudojako super-boot-managerprzebiegów sudowewnętrznie.
Thor
echo $DISPLAYdaje :0.0. I nie biegnę super-boot-managerjak sudo. Używam tylko polecenia super-boot-managerz terminala.
Apurba,
1
Wreszcie problem został rozwiązany. Właśnie dodałem wiersz: Defaults env_keep="DISPLAY XAUTHORITY"na końcu visudo. Dzięki wszystkim, szczególnie @Thor za życzliwą pomoc.
Apurba,

Odpowiedzi:

39

Musisz zezwolić użytkownikowi root na dostęp do serwera X:

xhost local:root

I skieruj polecenie w prawo DISPLAY:

sudo DISPLAY=$DISPLAY gedit /etc/profile
Thor
źródło
To rozwiązało problem z otwieraniem geditjako sudo, ale nadal nie można zjeść lunchu super-boot-manager. Pokazuje ten sam błąd
Apurba
15

Wreszcie problem został rozwiązany. Właśnie dodałem wiersz:

Domyślne env_keep = "DISPLAY XAUTHORITY"

na końcu visudo.

Aby to zrobić, musisz biec

sudo visudo

otworzy plik, a następnie doda powyższą linię na końcu.

Dzięki wszystkim, szczególnie @Thor za życzliwą pomoc

Apurba
źródło
1
Domyślne env_keep = „DISPLAY” działa dla mnie.
bagustris
Zawsze szukałem tej odpowiedzi wysoko i nisko. Chciałbym móc wielokrotnie głosować za wami za odpowiedzi. Dziękuję bardzo! :)
Ev-
4

Uzupełnienie odpowiedzi @ Thora:

Uruchom xhost local:rootwcześniej sudo gedit. Aby to zrobić na stałe, dodaj linię

xhost local:root

do pliku ~ / .xinitrc 1 . Utwórz plik, jeśli nie istnieje.


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

adabru
źródło
Dziękujemy za udzielenie odpowiedzi, która zapewnia niestałe rozwiązanie.
2NinerRomeo