Не удается подключиться к X-серверу при запуске приложения с помощью sudo

Когда я запускаю какое-то программное обеспечение, используя sudo команда, показывающая ошибку типа

cannot connect to X server

Например, если я выполню следующую команду:

$ sudo gedit /etc/profile

Я получаю следующую команду

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

Или если я бегу super-boot-manager Я получаю следующую ошибку

buc: cannot connect to X server

Пожалуйста, помогите.

Вам необходимо разрешить пользователю root доступ к X-серверу:

xhost local:root

И направьте команду вправо DISPLAY:

sudo DISPLAY=$DISPLAY gedit /etc/profile

Наконец-то проблема решена. Я только что добавил строку:

По умолчанию env_keep="ОТОБРАЖАТЬ XAUTHORITY"

в конце visudo.

Чтобы сделать это, вы должны бежать

судо висудо

он откроет файл, а затем добавит приведенную выше строку в конце.

Спасибо всем, особенно @Thor за любезную помощь

Дополнение к ответу @Thor:

Бежать xhost local:root до sudo gedit. Чтобы сделать это постоянным, добавьте строку

xhost local:root

в файл ~/.xinitrc 1. Создайте файл, если он не существует.


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

На самом деле код, который вы запускаете, имеет cv2.imshow() или любые другие команды отображения, для удаленного запуска кода вы должны их прокомментировать, а лучше сохранить для визуализации.

Наконец-то проблема решена. Я только что добавил строку: Defaults env_keep="DISPLAY XAUTHORITY" в конце visudo. Спасибо всем, особенно @Thor за любезную помощь.

Сначала я попытался запустить "super-boot-manager` непосредственно из unity luncher, но это не сработало. Затем я попробовал это с терминала, затем я получил эти сообщения об ошибках.

echo $DISPLAY выдает :0.0. И я не запускаю “super-boot-manager” как “sudo”. Я запускаю просто с помощью команды “super-boot-manager” из терминала.

кроме того, если я не использую часть DISPLAY=$DISPLAY в команде, gedit не открывается с помощью sudo

buc может быть запущен от имени другого пользователя, попробуйте удалить ограничения X с помощью xhost +.

Вы должны добавить свое решение в качестве ответа, это облегчит поиск другим.

Как в терминале в графической пользовательской среде? Что говорит: echo $DISPLAY? Вы должны запустить его без “sudo”, так как “super-boot-manager” запускает sudo внутри.

Откуда вы запускаете "super-boot-manger`?

Хорошее решение, забыл о sudoers env_keep.

Я создал сценарий для этой цели: Run a graphical application as root via sudo in a Wayland session · GitHub