Почему не делают gksu/gksudo или запуск графического приложения с sudo работают с Уэйлендом?

Я установил 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 для корня.

Совет?

47
задан 29 October 2017 в 17:35

7 ответов

Лучше сначала проверьте, действительно ли Wayland запущен, прежде чем предоставлять права root

if [ $XDG_SESSION_TYPE = "wayland" ]; then
    xhost +si:localuser:root
fi
6
ответ дан 22 November 2019 в 23:59

Если вы используете Ubuntu 17.04 или выше, рекомендуется использовать бэкэнд администратора gvfs . Просто добавьте admin: // в начало полного пути к файлу, который вы хотите открыть в приложении, таком как Текстовый редактор или Приложения для файлов .

Например, чтобы изменить параметры загрузки, откройте

admin:///etc/default/grub

. Этот метод использует PolicyKit и по-прежнему будет работать с Ubuntu 17.10 по умолчанию Wayland, в то время как sudo и gksu для приложений с графическим интерфейсом не работают.

5
ответ дан 22 November 2019 в 23:59

Для приложений, использующих 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 в терминале перед запуск привилегированного приложения

3
ответ дан 22 November 2019 в 23:59

Обратите внимание, что этот ответ относится к версиям 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'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 по какой-либо причине, вы можете выбрать запуск на Xorg при входе в систему

См. Как переключиться с Wayland обратно на Xorg в Ubuntu 17.10?

58
ответ дан 22 November 2019 в 23:59

enter image description here Решения

В Wayland часто сложно запускать прикладные программы с графическим интерфейсом пользователя с повышенными правами (sudo -H, gksu ...) разрешения. Рекомендуется выполнять такие задачи с помощью инструментов командной строки.

Но есть обходные пути, если у вас есть инструмент с графическим интерфейсом, который хорошо работает для вас и требует повышенных разрешений. (Я использую два таких стандартных инструмента: Synaptic Package Manager, synaptic и инструмент разбиения Gparted, gparted . Я использую MakeUSB для создания загрузочных USB-накопителей, mkusb тоже, но он может запускать части, требующие повышенных разрешений, без графики.)

xhost и sudo -H

  1. Существует обходной путь, позволяющий графическим приложениям, принадлежащим другим пользователям, кроме зарегистрированных в журнале у пользователя в Wayland,

      xhost + si: localuser: root
     
  2. gksu и gksudo не входят в состав стандартной Ubuntu и не работают здесь, но они работают в Xorg.

    Вместо этого вы можете использовать

      sudo -H
     
  3. Это хорошая идея, чтобы впоследствии запретить использование графических приложений, принадлежащих другим пользователям, кроме вошедшего в систему пользователя,

      xhost -si: localuser: root
     

Бэкэнд администратора gvfs

В Ubuntu 17.10 (gvfs> = 1.29.4) вы можете использовать бэкэнд администратора gvfs. Обратите внимание, что вам нужен полный путь,

gedit admin:///path/to/file

Теоретическибэкэнд-метод gvfs admin (который использует polkit) лучше и безопаснее (чем xhost и xudo -H ), независимо от используемого вами пользовательского интерфейса.

Вы не запускаете все приложение как root. Повышение привилегий происходит только в случае крайней необходимости. См. Следующую ссылку и ссылки на нее,

nautilus-admin

Также можно использовать nautilus-admin для файловых операций с повышенными разрешениями и использовать gedit с повышенными разрешениями. Это описано в следующем ответе AskUbuntu:

Временный доступ root к рабочему столу 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. Это может быть удобно в использовании, но его сложнее настроить. Обратите внимание, что вам следует установить только одну из альтернатив, поскольку однострочная функция будет мешать работе в этой более сложной системе.

Три файла

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 выглядит следующим образом:

enter image description here

Вы можете загрузить файл значка или архив со всеми тремя файлами по этой ссылке,

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 поле:

enter image description here

Меню оболочки Gnome:

enter image description here

консоль gks и gparted:

enter image description here

Пользовательский сценарий и файл рабочего стола

Если у вас есть только несколько приложений с графическим интерфейсом, которым требуются повышенные права, вы можете создать для них собственные сценарии и файлы рабочего стола и не вводить команду (имя приложения). Вам нужно будет ввести только пароль, что не сложнее по сравнению с предыдущими версиями 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:

enter image description here

21
ответ дан 22 November 2019 в 23:59

На самом деле следующий код почти работает:

#! /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 считают, что мы не должны искать обходные пути.

0
ответ дан 22 November 2019 в 23:59

Если приложение поддерживает Wayland API, вы можете запустить его от имени пользователя root с помощью команды sudo -EH application .

-E switch сообщает sudo о необходимости сохранения переменных среды (а также WAYLAND_SOCKET и XDG_RUNTIME_DIR), необходимых для промежуточных приложений. Всегда лучше использовать эту опцию, чем неприятный взлом xhost, предложенный в других ответах. xhost позволяет приложению запускаться из-под оболочки X, что менее безопасно, чем использование Wayland (общий буфер обмена, кейлоггинг и т. д.). Уловка sudo -EH не будет работать с приложением, которое не было переписано для Wayland, например gparted, но будет работать с gedit и т. Д.

1
ответ дан 22 November 2019 в 23:59

Другие вопросы по тегам:

Похожие вопросы: