Почему 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.

Любые советы?

36 голосов | спросил Alex Chapiro 4 +03002017-10-04T16:58:28+03:00312017bEurope/MoscowWed, 04 Oct 2017 16:58:28 +0300 2017, 16:58:28

7 ответов


46

Обратите внимание, что этот ответ относится к версиям Ubuntu с использованием Wayland, 17.10 является первой версией для использования Wayland по умолчанию.

Это не ошибка! Это конструктивная особенность Wayland, что вы не можете запускать графические приложения как root из терминала.

Основные обсуждения, конечно же, на сайтах Fedora. См. Ошибка Fedora # 1274451 и Графические приложения могут 'запускать как root в wayland (например, gedit, beesu, gparted, nautilus) в Ask Fedora . Но есть и некоторые обсуждения на сайтах Ubuntu ( Ubuntu Devs Uncertain об использовании 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 следующим образом (идея N0rbert):

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'

Вы можете назвать псевдонимы все, что пожелаете.

Подробнее см .:


Возврат к Xorg

Если вы предпочитаете Xorg по какой-либо причине, вы можете выбрать запуск на Xorg при входе в систему

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

ответил Panther 4 +03002017-10-04T17:36:07+03:00312017bEurope/MoscowWed, 04 Oct 2017 17:36:07 +0300 2017, 17:36:07
18

«введите Решения

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

Но есть обходные пути, если у вас есть инструмент GUI, который хорошо работает для вас и требует повышенных разрешений. (Я использую два таких стандартных инструмента: диспетчер пакетов Synaptic, 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 admin backend

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

gedit admin:///path/to/file

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

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

Наутилус-админ

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

Временный доступ для root на рабочий стол Wayland через функцию gks

Пожалуйста, избегайте sudo GUI-program. Это может привести к тому, что система перезапишет файлы конфигурации для вашего обычного идентификатора пользователя с помощью конфигурации root и установите права собственности и разрешения для соответствия root и заблокируйте свой обычный идентификатор пользователя. Вы должны запускать GUI-приложения с помощью sudo -H, который записывает файлы конфигурации в root /root. Пример:

sudo -H gedit myfile.txt

Но есть риск, что вы забудете -H. Вместо этого вы можете создать функцию, например gks

gks () { xhost +si:localuser:root; sudo -H "[email protected]"; xhost -si:localuser:root; }

и сохраните его в ~/.bashrc рядом с псевдонимами. Затем вы можете запустить

gks gedit myfile.txt

таким же образом, как раньше вы использовали gksudo.

Тестирование

Вы можете проверить, как sudo, sudo -H и gks работают со следующими командами

[email protected] ~ $ sudo bash -c "echo ~"
/home/sudodus
[email protected] ~ $ sudo -H bash -c "echo ~"
/root
[email protected] ~ $ gks () { xhost +si:localuser:root; sudo -H "[email protected]"; xhost -si:localuser:root; }
[email protected] ~ $ gks bash -c "echo ~"
localuser:root being added to access control list
/root
localuser:root being removed from access control list
[email protected] ~ $ 

иКонечно,

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

 введите описание изображения здесь>> </a> </p>

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

<p> <a href= 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 :

 введите описание изображения здесь>> </a> </p>

<p> Меню Gnome Shell: </p>

<p> <a href= введите описание изображения здесь>> </a> </p>

<p> консоль gks и gparted: </p>

<p> <a href= введите описание изображения здесь>> </a> </p>

<h2> Пользовательский скрипт и рабочий стол </h2>

<p> Если у вас есть только несколько графических приложений, для которых требуются повышенные права доступа, вы можете создать для них собственные скрипты и файлы рабочего стола и не вводить команду (имя приложения). Вы только вводите пароль, который не сложнее по сравнению с предыдущими версиями Ubuntu (вы все равно должны вводить пароль). </p>

<p> Пример с простой программой GUI <code>---- +: = 41 =: + ----</code>, которая поставляется с программным пакетом <code>---- +: = 42 =: + ----</code>: </p>

<p> Оболочка <strong> <code>---- +: = 43 =: + ----</code> </strong> (упрощенный по сравнению с <code>---- +: = 44 = + ----</code>), </p>

<pre><code>---- +: = 45 = + ----</code></pre>

<p> Рабочий стол <strong> <code>---- +: = 46 =: + ----</code> </strong>: </p>

<pre><code>---- +: = 47 = + ----</code></pre>

<p> Я ленился и использовал один и тот же файл значков <strong> <code>---- +: = 48 =: + ----</code> </strong> </p>

<p> Скопируйте [copy & вставляемых] в следующие места, </p>

<pre><code>---- +: = 49 = + ----</code></pre>

<p> gks [logo] консоль и xlogo: </p>

<p> <a href= введите описание изображения здесь>> </a> </p></body></html>

ответил sudodus 4 +03002017-10-04T17:51:30+03:00312017bEurope/MoscowWed, 04 Oct 2017 17:51:30 +0300 2017, 17:51:30
6

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

if [ $XDG_SESSION_TYPE = "wayland" ]; then
    xhost +si:localuser:root
fi
ответил eli chan 7 +03002017-10-07T13:52:21+03:00312017bEurope/MoscowSat, 07 Oct 2017 13:52:21 +0300 2017, 13:52:21
5

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

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

admin:///etc/default/grub

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

ответил Jeremy Bicha 23 +03002017-10-23T21:45:04+03:00312017bEurope/MoscowMon, 23 Oct 2017 21:45:04 +0300 2017, 21:45:04
3

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

ответил N0rbert 22 +03002017-10-22T13:45:02+03:00312017bEurope/MoscowSun, 22 Oct 2017 13:45:02 +0300 2017, 13:45:02
0

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

#! /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 "[email protected]"
       xhost  -  
       exit 0
    fi 
fi
gksu "[email protected]"

(пожалуйста, извините меня за наивный стиль кодирования bash - я своего рода новичок  с этим предметом). T не работает стабильно от Alt-F2, если последний выбор не был терминалом; в этом случае мы просто не можем установить фокус на диалог с паролем. Похоже, он работает из меню Gnome. В любом случае & Lt; 1. Это не 100% -ное решение. 2. Мне кажется, что архитекторы Ubuntu считают, что мы не должны искать какую-либо работу вокруг.

ответил Alex Chapiro 26 +03002017-10-26T05:10:18+03:00312017bEurope/MoscowThu, 26 Oct 2017 05:10:18 +0300 2017, 05:10:18
0

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

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

ответил ZAB 3 Maypm18 2018, 22:08:49

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132