Почему gksu/gksudo или запуск графического приложения с sudo не работают с Wayland?
Я установил Ubuntu 17.10. Теперь у меня проблемы с gksu
:
$ gksu -dg synaptic
No ask_pass set, using default!
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
STARTUP_ID: gksu/synaptic/8760-0-alex-XPS-15-9530_TIME4974977
cmd[0]: /usr/bin/sudo
cmd[1]: -H
cmd[2]: -S
cmd[3]: -p
cmd[4]: GNOME_SUDO_PASS
cmd[5]: -u
cmd[6]: root
cmd[7]: --
cmd[8]: synaptic
buffer: -GNOME_SUDO_PASS-
brute force GNOME_SUDO_PASS ended...
Yeah, we're in...
Unable to init server: Could not connect: Connection refused
(synaptic:8767): Gtk-WARNING **: cannot open display: :1
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
xauth_env: (null)
dir: /tmp/libgksu-HgUjgQ
Если я не использую -g
, диалог пароля отключен. Так выглядит проблема с созданием tty для root.
Любой совет?
8 ответов
Обратите внимание, что этот ответ специфичен для версий Ubuntu, использующих Wayland, 17.10 является первым выпуском, использующим Wayland по умолчанию.
Это особенность, а не ошибка! Особенностью Wayland является то, что вы не можете запускать графические приложения как root с терминала.
Основные обсуждения, конечно, на сайтах Fedora. См. Ошибку Fedora № 1274451, а графические приложения нельзя запускать с правами root на wayland (например, gedit, beesu, gparted, nautilus) в Ask Fedora. Но на сайтах Ubuntu также есть некоторые обсуждения (разработчики Ubuntu не уверены в использовании Wayland по умолчанию в 17.10 - OMG! Ubuntu).
Отчет об ошибке в Ubuntu: невозможно запустить pkexec-приложения в сеансе Wayland
Потенциальный обходной путь - если вы редактируете системные файлы с помощью графического редактора (такого как gedit), используйте инструмент командной строки, такой как nano
или же vim
или же emacs
, nano
как правило, легче для новых пользователей, vim
более мощный и имеет больше возможностей, см. этот учебник Vim или аналогичный.
В любом случае, если вы действительно хотите или вам нужно запускать графические приложения от имени пользователя root, установите xhost
первое, что заставляет отступить на Xserver.
Чтобы установить разрешения, выполните:
xhost si:localuser:root
Когда вы закончите, чтобы удалить разрешения
xhost -si:localuser:root
Вы можете добавить графический / рабочий стол, чтобы сделать это в соответствии с этим синаптическим отчетом об ошибках.
Приложения pkexec могут быть исцелены
xhost +si:localuser:root
помещается в автозапуск XDG следующим образом (идея Нерберта):cat <<EOF | sudo tee /etc/xdg/autostart/xhost.desktop [Desktop Entry] Name=xhost Comment=Fix graphical root applications Exec="xhost +si:localuser:root" Terminal=false Type=Application EOF
Вы можете добавить эту команду xhost в.bashrc, но я бы посоветовал пару псевдонимов
alias gsuon='xhost si:localuser:root'
alias gsuoff='xhost -si:localuser:root'
Вы можете назвать псевдонимы как хотите.
Подробнее см.:
- https://bugs.launchpad.net/ubuntu/+source/backintime/+bug/1713313
- https://bugs.launchpad.net/ubuntu/+source/nmap/+bug/1713311
- Arch Wiki: Запуск X приложений от имени root
- Arch Wiki: Xhost
- Что такое xhost и xhost +si?
Вернитесь к Xorg
Если вы предпочитаете Xorg по какой-либо причине, вы можете выбрать запуск Xorg при входе в систему.
Посмотрите, как вы переключаетесь с Wayland обратно на Xorg в Ubuntu 17.10?
Решения
В Wayland часто сложно запускать прикладные программы с графическим интерфейсом с повышенными (sudo -H, gksu ...) разрешениями. Это хорошая идея, чтобы делать такие задачи с помощью инструментов командной строки.
Но есть обходные пути, если у вас есть инструмент с графическим интерфейсом, который хорошо работает для вас и требует повышенных разрешений. (Я использую два таких стандартных инструмента: менеджер пакетов Synaptic, synaptic
и инструмент разбиения Gparted, gparted
, Я использую MakeUSB для создания загрузочных USB-накопителей, mkusb
тоже, но он может запускать части, которые требуют повышенных разрешений без графики.)
xhost
а также sudo -H
Существует обходной путь, позволяющий использовать графические прикладные программы, принадлежащие другим пользователям, а не зарегистрированному пользователю в Wayland,
xhost +si:localuser:root
gksu
а такжеgksudo
не связаны со стандартной Ubuntu и не работают здесь, но они работают в Xorg.Вместо этого вы можете использовать
sudo -H
Это хорошая идея, чтобы впоследствии предотвратить графические прикладные программы, принадлежащие другим пользователям, а не зарегистрированным пользователям,
xhost -si:localuser:root
административный сервер gvfs
В Ubuntu 17.10 (gvfs >= 1.29.4) вы можете использовать административную часть gvfs. Обратите внимание, что вам нужен полный путь,
gedit admin:///path/to/file
Теоретически, бэкэнд-метод gvfs (который использует polkit) лучше и безопаснее (чем xhost
а также xudo -H
), независимо от используемого вами интерфейса.
Вы не запускаете все приложение как root. Повышение привилегий происходит только тогда, когда это строго необходимо. Смотрите следующую ссылку и ссылки из нее,
Это пост № 4. Смотрите также пост № 6 в той же теме.
Наутилус-админ
Также возможно использовать nautilus-admin
для файловых операций с повышенными разрешениями и использования gedit
с повышенными разрешениями. Это описано в следующем ответе AskUbuntu,
Временный доступ рута к рабочему столу Wayland через функцию gks
Пожалуйста, избегайте sudo GUI-program
, Это может привести к тому, что система перезапишет файлы конфигурации для вашего обычного идентификатора пользователя с root
Конфигурация и установить владельца и разрешения, чтобы соответствовать root
и заблокируйте свой обычный идентификатор пользователя. Вы должны запускать приложения с графическим интерфейсом с sudo -H
, который записывает файлы конфигурации в root
домашний каталог /root
, Пример:
sudo -H gedit myfile.txt
Но есть риск, что вы забудете -H
, Вместо этого вы можете создать функцию, например gks
gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }
и хранить его в своем ~/.bashrc
рядом с псевдонимами. Тогда вы можете запустить
gks gedit myfile.txt
таким же образом, как вы использовали gksudo
до.
тестирование
Вы можете проверить, как sudo
, sudo -H
а также gks
работать со следующими командами
sudodus@xenial32 ~ $ sudo bash -c "echo ~"
/home/sudodus
sudodus@xenial32 ~ $ sudo -H bash -c "echo ~"
/root
sudodus@xenial32 ~ $ gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }
sudodus@xenial32 ~ $ gks bash -c "echo ~"
localuser:root being added to access control list
/root
localuser:root being removed from access control list
sudodus@xenial32 ~ $
и конечно
gks gedit myfile.txt
согласно примеру в предыдущем разделе.
Метод, который работает через меню Alt-F2 и Gnome Shell
Вместо добавления простой однострочной функции ~/.bashrc
Вы можете создать систему, которая работает также без Bash. Это может быть удобно в использовании, но сложнее в настройке. Обратите внимание, что вам следует установить только одну из альтернатив, потому что однострочная функция будет мешать работе этой более сложной системы.
Три файла
Скрипт gks
:
#!/bin/bash
xhost +si:localuser:root
if [ $# -eq 0 ]
then
xterm -T "gks console - enter command and password" \
-fa default -fs 14 -geometry 60x4 \
-e bash -c 'echo "gks lets you run command lines with GUI programs
with temporary elevated permissions in Wayland."; \
read -p "Enter command: " cmd; \
cmdfile=$(mktemp); echo "$cmd" > "$cmdfile"; \
sudo -H bash "$cmdfile"; rm "$cmdfile"'
else
xterm -T "gks console - enter password" -fa default -fs 14 -geometry 60x4 -e sudo -H "$@"
fi
xhost -si:localuser:root;
Файл рабочего стола gks.desktop
:
[Desktop Entry]
Version=1.0
Categories=Application;System;
Type=Application
Name=gks
Description=Run program with temporary elevated permissions in Wayland
Comment=Run program with temporary elevated permissions in Wayland
Exec=gks %f
Icon=/usr/share/icons/gks.svg
Terminal=false
StartupNotify=false
GenericName[en_US.UTF-8]=Run program with temporary elevated permissions in Wayland
Значок файла gks.svg
выглядит так:
Вы можете скачать файл значка или архив со всеми тремя файлами по этой ссылке,
https://wiki.ubuntu.com/Wayland/gks
Скопируйте [извлеченные или скопированные и вставленные] файлы в следующие места,
sudo cp gks /usr/bin
sudo cp gks.desktop /usr/share/applications/
sudo cp gks.svg /usr/share/icons
Выйдите из системы, войдите в систему или перезагрузите компьютер, и там должен быть значок рабочего стола. Он будет работать из окна терминала, как в простом решении с функцией.
Alt F2 box:
Меню Gnome Shell:
gks console и gparted:
Пользовательский скрипт и файл рабочего стола
Если у вас есть только несколько приложений с графическим интерфейсом, которым требуются повышенные разрешения, вы можете создать для них пользовательские сценарии и файлы рабочего стола и не вводить команду (имя приложения). Вам нужно только ввести пароль, что не сложнее по сравнению с предыдущими версиями Ubuntu (вы должны ввести пароль в любом случае).
Пример с простой программой GUI xlogo
что идет с пакетом программ x11-apps
:
Скрипт gkslogo
(упрощенный по сравнению с gks
),
#!/bin/bash
xhost +si:localuser:root
xterm -T "gks console - enter password" -fa default -fs 14 -geometry 60x4 -e sudo -H xlogo
xhost -si:localuser:root;
Файл рабочего стола gkslogo.desktop
:
[Desktop Entry]
Version=1.0
Categories=Application;System;
Type=Application
Name=gkslogo
Description=Run program with temporary elevated permissions in Wayland
Comment=Run program with temporary elevated permissions in Wayland
Exec=gkslogo
Icon=/usr/share/icons/gks.svg
Terminal=false
StartupNotify=false
GenericName[en_US.UTF-8]=Run program with temporary elevated permissions in Wayland
Я был ленив и использовал тот же файл значка gks.svg
Скопируйте [скопированные и вставленные] файлы в следующие места,
sudo cp gkslogo /usr/bin
sudo cp gkslogo.desktop /usr/share/applications/
gks [logo] консоль и xlogo:
Если вы используете Ubuntu 17.04 или выше, рекомендуется использовать бэкэнд администратора gvfs. Просто добавьте admin:// в начало полного пути к файлу, который вы хотите открыть в приложении, таком как текстовый редактор или приложения "Файлы".
Например, чтобы изменить настройки загрузки, откройте
admin:///etc/default/grub
Этот метод использует PolicyKit и будет по-прежнему работать с настройками Wayland по умолчанию в Ubuntu 17.10, а sudo и gksu для приложений с графическим интерфейсом - нет.
Лучше проверить, действительно ли Wayland работает первым, прежде чем предоставить права root
if [ $XDG_SESSION_TYPE = "wayland" ]; then
xhost +si:localuser:root
fi
Для приложений, использующих su-to-root и pkexec, вы можете добавить этот код в /etc/xdg/autostart
(см. мой комментарий на панели запуска) на свой страх и риск:
cat <<EOF | sudo tee /etc/xdg/autostart/xhost.desktop
[Desktop Entry]
Name=xhost
Comment=Fix graphical root applications
Exec="xhost +si:localuser:root"
Terminal=false
Type=Application
EOF
Другие корневые приложения также не работают на Wayland (см. Ошибку 1713313 и ошибку 1713311).
Если вам не нужно постоянное решение, вы можете использовать метод @ravery:
просто введите
xhost +si:localuser:root
в терминале перед запуском привилегированного приложения
Если приложение поддерживает Wayland API, вы можете запустить его как root с помощью sudo -EH application
команда.
Ключ -E указывает sudo сохранять переменные среды (а также WAYLAND_SOCKET и XDG_RUNTIME_DIR), необходимые для приложений Wayland. Всегда лучше использовать эту опцию, чем хакерский xhost, предложенный в других ответах. xhost позволяет запускать приложение из-под оболочки X, которая менее безопасна, чем использование Wayland (общий буфер обмена, ведение кейлог и т. д.). Трюк sudo -EH не будет работать с приложением, которое не было переписано для wayland, как, например, gparted, но будет работать с gedit и т. Д.
На самом деле следующий код почти работает:
#! /bin/bash
set -e
if [ -z "$1" ] ; then
echo "Application is not specified" ; exit
fi
if [ $XDG_SESSION_TYPE = "wayland" ]; then
if [[ -t 1 ]]; then
xhost +si:localuser:root
sudo -u root "$@"
xhost -
exit 0
fi
fi
gksu "$@"
(прошу прощения за наивный стиль bash-кодирования - я новичок в этом вопросе). T не работает стабильно из Alt-F2, если последний выбор не был терминалом; в этом случае мы просто не можем установить фокус на диалоге пароля. Похоже, он работает из меню Gnome. Во всяком случае< 1. Это не 100% решение. 2. Мне кажется, что архитекторы Ubuntu думают, что мы не должны искать какие-либо обходные пути..
Это основано на ответе Томаса Гайо-Сионнеста .
Я чувствую, что это заслуживает отдельного ответа, так как это очень просто и избавило меня от многих проблем. Создайте сценарий оболочки со следующим содержимым:
#!/usr/bin/env bash
socat UNIX-LISTEN:/tmp/.X11-unix/X1 UNIX-CONNECT:/tmp/.X11-unix/X0 & sudo DISPLAY=:1 "$@"
Сохраните его в каталоге на вашем
$PATH
, и дайте ему права на выполнение (
chmod +x ./wlsudo
). Затем вы сможете запускать приложения с графическим интерфейсом, используя
wlsudo
на месте
sudo
в Вейланде, например
wlsudo synaptic
просто работает .