Участник:HihinRuslan/waylnd and root: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Строка 4: Строка 4:
=== Пример проблемы ===
=== Пример проблемы ===
При попытке запустить графическое приложение от имени root с помощью su, sudo или pkexec в сеансе Wayland (например, GParted или Gedit), происходит ошибка, подобная этой:
При попытке запустить графическое приложение от имени root с помощью su, sudo или pkexec в сеансе Wayland (например, GParted или Gedit), происходит ошибка, подобная этой:
<syntaxhighlight lang="text">
<syntaxhighlight lang="bash">
# gedit
# gedit
No protocol specified
No protocol specified
Строка 20: Строка 20:
Для этого выполните следующую команду от имени текущего (непривилегированного) пользователя:
Для этого выполните следующую команду от имени текущего (непривилегированного) пользователя:


<syntaxhighlight lang="text">
<syntaxhighlight lang="bash">
$ xhost si:localuser:root
$ xhost si:localuser:root
</syntaxhighlight>
</syntaxhighlight>
Чтобы удалить этот доступ после закрытия приложения:
Чтобы удалить этот доступ после закрытия приложения:
<syntaxhighlight lang="text">
<syntaxhighlight lang="bash">
$ xhost -si:localuser:root
$ xhost -si:localuser:root
</syntaxhighlight>
</syntaxhighlight>
Строка 30: Строка 30:
=== Использование pkexec ===
=== Использование pkexec ===
Вы можете запустить приложение с графическим интерфейсом с помощью:
Вы можете запустить приложение с графическим интерфейсом с помощью:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ pkexec env WAYLAND_DISPLAY=«$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY» XDG_RUNTIME_DIR=/run/user/0 program
$ pkexec env WAYLAND_DISPLAY=«$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY» XDG_RUNTIME_DIR=/run/user/0 program
</syntaxhighlight>
</syntaxhighlight>
что сохраняет переменную окружения WAYLAND_DISPLAY.
что сохраняет переменную окружения WAYLAND_DISPLAY.


=== Использование sudo -E ===
=== Использование sudo -E ===
Вы можете запустить приложение с помощью:
Вы можете запустить приложение с помощью:
$ sudo -E program
<syntaxhighlight lang="bash">
Если вы хотите, чтобы переменная окружения HOME была установлена для целевого пользователя, используйте:
$ sudo -EH program
$ sudo -EH program
что сохраняет переменные окружения, такие как WAYLAND_DISPLAY. И установит переменную окружения HOME была установлена для целевого пользователя
</syntaxhighlight>
что сохраняет переменные окружения, такие как WAYLAND_DISPLAY и установит переменную окружения HOME была установлена для целевого пользователя

Версия от 15:59, 24 октября 2024

Повышение привилегий в XWayland

Свободный перевод [1]

Пример проблемы

При попытке запустить графическое приложение от имени root с помощью su, sudo или pkexec в сеансе Wayland (например, GParted или Gedit), происходит ошибка, подобная этой:

# gedit
No protocol specified
Unable to init server: Could not connect: Connection refused

(gedit:2349): Gtk-WARNING **: cannot open display: :0

До Wayland запуск графических приложений с повышенными привилегиями можно было правильно реализовать, создав политику Polkit, или, что более опасно, запустив команду в терминале, добавив к ней sudo; но в (X)Wayland это больше не работает, поскольку по умолчанию разрешено подключать клиентов только пользователю, запустившему X-сервер (см. сообщение об ошибке и коммиты upstream, на которые оно ссылается).

По возможности избегайте запуска графических приложений от имени root

Использование xhost

Для этого выполните следующую команду от имени текущего (непривилегированного) пользователя:

$ xhost si:localuser:root

Чтобы удалить этот доступ после закрытия приложения:

$ xhost -si:localuser:root

Использование pkexec

Вы можете запустить приложение с графическим интерфейсом с помощью:

$ pkexec env WAYLAND_DISPLAY=«$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY» XDG_RUNTIME_DIR=/run/user/0 program

что сохраняет переменную окружения WAYLAND_DISPLAY.

Использование sudo -E

Вы можете запустить приложение с помощью:

$ sudo -EH program

что сохраняет переменные окружения, такие как WAYLAND_DISPLAY и установит переменную окружения HOME была установлена для целевого пользователя