Я установил 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 для корня.
Совет?
Лучше сначала проверьте, действительно ли Wayland запущен, прежде чем предоставлять права root
if [ $XDG_SESSION_TYPE = "wayland" ]; then
xhost +si:localuser:root
fi
Если вы используете Ubuntu 17.04 или выше, рекомендуется использовать бэкэнд администратора gvfs . Просто добавьте admin: // в начало полного пути к файлу, который вы хотите открыть в приложении, таком как Текстовый редактор или Приложения для файлов .
Например, чтобы изменить параметры загрузки, откройте
admin:///etc/default/grub
. Этот метод использует PolicyKit и по-прежнему будет работать с Ubuntu 17.10 по умолчанию Wayland, в то время как sudo и gksu для приложений с графическим интерфейсом не работают.
Для приложений, использующих 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 является то, что вы не можете запускать графические приложения с правами root с терминала.
Основные обсуждения, конечно же, ведутся на сайтах Fedora. См. Ошибка Fedora № 1274451 и Графические приложения нельзя запускать от имени пользователя root в Wayland (например, gedit, beesu, gparted, nautilus) в Ask Fedora . Но есть некоторые обсуждения на сайтах Ubuntu ( Разработчики Ubuntu не уверены в использовании Wayland по умолчанию в 17.10 - OMG! Ubuntu ).
Отчет об ошибке Ubuntu: Невозможно запустить pkexec'ed приложения в сеансе Wayland
Возможный обход - Если вы редактируете системные файлы с помощью графического редактора (например, gedit), используйте инструмент командной строки, такой как nano
или vim
] или emacs
. nano
обычно проще для новых пользователей, vim
более мощный и имеет больше функций, см. это руководство по Vim или подобное.
Во всяком случае, если вы действительно хотите или должны запускать графические приложения от имени пользователя root , сначала установите xhost
, что приведет к переходу на Xserver.
Чтобы установить разрешения, выполните:
xhost si:localuser:root
Когда вы закончите, чтобы удалить разрешения
xhost -si:localuser:root
Вы можете добавить графический / рабочий стол, чтобы сделать это согласно , этот отчет об ошибке синапсов
pkexec'ed приложения могут быть вылечены с помощью
xhost + si: localuser: root
в автозапуске XDG следующим образом (идея Нёрберта):cat << EOF | sudo tee /etc/xdg/autostart/xhost.desktop [Desktop Entry] Имя = xhost Комментарий = Исправить графические корневые приложения Exec = "xhost + si: localuser: root" Терминал = ложь Тип = Приложение EOF
Вы можете добавить эту команду xhost в .bashrc, но я бы посоветовал использовать пару псевдонимов
alias gsuon='xhost si:localuser:root'
alias gsuoff='xhost -si:localuser:root'
Вы можете называть псевдонимы как хотите.
Подробнее см .:
Если вы предпочитаете Xorg по какой-либо причине, вы можете выбрать запуск на Xorg при входе в систему
См. Как переключиться с Wayland обратно на Xorg в Ubuntu 17.10?
В Wayland часто сложно запускать прикладные программы с графическим интерфейсом пользователя с повышенными правами (sudo -H, gksu ...) разрешения. Рекомендуется выполнять такие задачи с помощью инструментов командной строки.
Но есть обходные пути, если у вас есть инструмент с графическим интерфейсом, который хорошо работает для вас и требует повышенных разрешений. (Я использую два таких стандартных инструмента: Synaptic Package Manager, synaptic
и инструмент разбиения Gparted, gparted
. Я использую MakeUSB для создания загрузочных USB-накопителей, mkusb
тоже, но он может запускать части, требующие повышенных разрешений, без графики.)
xhost
и sudo -H
Существует обходной путь, позволяющий графическим приложениям, принадлежащим другим пользователям, кроме зарегистрированных в журнале у пользователя в Wayland,
xhost + si: localuser: root
gksu
и gksudo
не входят в состав стандартной Ubuntu и не работают здесь, но они работают в Xorg.
Вместо этого вы можете использовать
sudo -H
Это хорошая идея, чтобы впоследствии запретить использование графических приложений, принадлежащих другим пользователям, кроме вошедшего в систему пользователя,
xhost -si: localuser: root
В Ubuntu 17.10 (gvfs> = 1.29.4) вы можете использовать бэкэнд администратора gvfs. Обратите внимание, что вам нужен полный путь,
gedit admin:///path/to/file
Теоретическибэкэнд-метод gvfs admin (который использует polkit) лучше и безопаснее (чем xhost
и xudo -H
), независимо от используемого вами пользовательского интерфейса.
Вы не запускаете все приложение как root. Повышение привилегий происходит только в случае крайней необходимости. См. Следующую ссылку и ссылки на нее,
ответ sisco311 в ветке форумов Ubuntu «Как лучше всего использовать gedit как root?»
Это сообщение №4. См. Также сообщение № 6.
Также можно использовать nautilus-admin
для файловых операций с повышенными разрешениями и использовать gedit
с повышенными разрешениями. Это описано в следующем ответе AskUbuntu:
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
в соответствии с примером в предыдущем разделе.
Вместо добавления простой однострочной функции в ~ / .bashrc
вы можете создать систему, которая также работает без bash. Это может быть удобно в использовании, но его сложнее настроить. Обратите внимание, что вам следует установить только одну из альтернатив, поскольку однострочная функция будет мешать работе в этой более сложной системе.
Shellscript 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
выглядит следующим образом:
Вы можете загрузить файл значка или архив со всеми тремя файлами по этой ссылке,
Скопируйте [извлеченные или скопированные и вставленные] файлы в следующие места:
sudo cp gks /usr/bin
sudo cp gks.desktop /usr/share/applications/
sudo cp gks.svg /usr/share/icons
Выйдите из системы / войдите в систему или перезагрузитесь, и там должен быть рабочий значок на рабочем столе. Он будет работать из окна терминала, как и простое решение с функцией.
Alt F2 поле:
Меню оболочки Gnome:
консоль gks и gparted:
Если у вас есть только несколько приложений с графическим интерфейсом, которым требуются повышенные права, вы можете создать для них собственные сценарии и файлы рабочего стола и не вводить команду (имя приложения). Вам нужно будет ввести только пароль, что не сложнее по сравнению с предыдущими версиями Ubuntu (вы все равно должны ввести пароль).
Пример с простой программой с графическим интерфейсом 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 [логотип] и xlogo:
На самом деле следующий код почти работает:
#! /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. Это не стопроцентное решение. 2. Мне кажется, что архитекторы Ubuntu считают, что мы не должны искать обходные пути.
Если приложение поддерживает Wayland API, вы можете запустить его от имени пользователя root с помощью команды sudo -EH application
.
-E switch сообщает sudo о необходимости сохранения переменных среды (а также WAYLAND_SOCKET и XDG_RUNTIME_DIR), необходимых для промежуточных приложений. Всегда лучше использовать эту опцию, чем неприятный взлом xhost, предложенный в других ответах. xhost позволяет приложению запускаться из-под оболочки X, что менее безопасно, чем использование Wayland (общий буфер обмена, кейлоггинг и т. д.). Уловка sudo -EH не будет работать с приложением, которое не было переписано для Wayland, например gparted, но будет работать с gedit и т. Д.