Чому gksu / gksudo чи запуск графічної програми із судо не працюють з Wayland?


44

Я встановив 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.

Будь-яка порада?


1
gksudoне працюватиме в сеансі Wayland , ви можете перейти до сесії Xorg і спробувати.
pomsky

2
Сама помилка, якщо помилка X "не може відкрити дисплей:: 1". Wayland розроблений таким чином, і, на думку розробників, вам не слід запускати графічні програми як корінь з командного рядка. Ви можете попрацювати з xhost.
Пантера

1
gksu -dg synaptic Ти ніколи не повинен це робити.
Rinzwind

3
@ N0rbert перестань додавати 17.10 до запитань про 17.10. Теги версій повинні використовуватися, якщо питання стосується конкретного випуску. Більшість із цих питань, як правило, застосовні там, де доступні Wayland, GNOME Shell тощо. Це стосується минулих та майбутніх версій.
муру

@maru. 16.04 LTS є поточним, 17.04 - поблизу EOL, тому нормальний 17.10 означає Wayland та стандартний GNOME Shell, тому тег 17.10 корисний, я думаю. Це важко знайти питання, де користувачі мають проблеми з 17.10, але не мають відповідей і коментарів тут . Вони потребують відповіді, але забули додати тег 17.10, коли його запитали. Я можу припинити додавати тег. Це була доброзичливість.
N0rbert

Відповіді:


55

Зверніть увагу, що ця відповідь характерна для версій Ubuntu, що використовують Wayland, 17.10 є першим випуском, який використовує Wayland за замовчуванням.

Це особливість, а не помилка! Особливістю дизайну Wayland є те, що ви не можете запускати графічні програми як root з терміналу.

Основні дискусії, звичайно, на сайтах Fedora. Див. Помилку Fedora # 1274451, і графічні програми не можна запускати як корінь у шляху (наприклад, gedit, beesu, gparted, nautilus) у Ask Fedora . Але є певна дискусія і на сайтах Ubuntu ( Ubuntu Devs не впевнений у використанні Wayland за замовчуванням у 17.10 - OMG! Ubuntu ).

Звіт про помилку Ubuntu: Не вдається запустити програми pkexec'ed на сеансі Wayland

Потенційна робота навколо - При редагуванні системних файлів за допомогою графічного редактора (наприклад Gedit) використовувати інструмент командного рядка , такі як nanoабо vimабо emacs. nanoяк правило, легше для нових користувачів, vimє більш потужним і має більше функцій, див. підручник Vim або подібне.

У будь-якому випадку, якщо ви дійсно хочете або потрібно запускати графічні додатки як корінь , 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?


Чи працює цей спосіб вирішення і з Міром ?
Eliah Kagan

Я не знаю про MIR, можливо.
Пантера

1
Або простоxhost +local:
chaskes

18
«Це особливість, а не помилка!» ... зітхнув. Такі речі є саме причиною того, що я не можу переконати свого друга та колег перейти на Linux. Використання VIM та Nano не є альтернативою GEdit. Gedit працює як блокнот, тоді як для цих інших потрібно вивчити CRTL-код. І візьмемо для прикладу Nano, використовуючи такі терміни, як "Write Out" замість "Save" .... Дуже непривітно для користувачів.
JHBonarius

9
Це також повністю розбиває gparted, що важливо, щоб мати доступ до них. Що коли-небудь трапилося з "Не намагайтеся заважати дурним людям робити дурні речі; вам вдасться лише запобігти розумним людям робити розумні речі."?
Метью Наймон

21

введіть тут опис зображення Рішення

У Wayland часто важко запустити програми додатків GUI з підвищеними дозволами (sudo -H, gksu ...). Дуже добре робити такі завдання за допомогою інструментів командного рядка.

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

xhost і sudo -H

  1. Існує рішення, щоб дозволити графічні програми, що належать іншим користувачам, ніж користувач, який увійшов у Вейленді,

    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 (який використовує polkit) є кращим і безпечнішим (ніж xhostі xudo -H), незалежно від користувальницького інтерфейсу, який ви використовуєте.

Ви не запускаєте всю програму як root. Ескалація привілеїв відбувається лише тоді, коли це суворо необхідно. Дивіться наступне посилання та посилання з нього,

nautilus-адмін

Можна також використовувати nautilus-adminдля файлових операцій з підвищеними дозволами та використовувати geditз підвищеними дозволами. Це описано в наступній відповіді AskUbuntu,

Тимчасовий доступ для root на робочий стіл Wayland за допомогою функції gks

Будь ласка, уникайте sudo GUI-program. Це може призвести до того, що система перезаписує конфігураційні файли для вашого звичайного ідентифікатора користувача з rootконфігурацією 's та встановлює право власності та дозволи для встановлення rootта блокування вашого звичайного ідентифікатора користувача. Вам слід запустити програми GUI 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виглядає приблизно так:

введіть тут опис зображення

Ви можете завантажити файл значків або тарілку з усіма трьома файлами за цим посиланням,

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 коробка:

введіть тут опис зображення

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

введіть тут опис зображення

консоль gks і gparted:

введіть тут опис зображення

Спеціальний файл сценарію та робочого столу

Якщо у вас є лише кілька додатків GUI, для яких потрібні підвищені дозволи, ви можете створити для них власні сценарії та файли на робочому столі та уникнути введення команди (назва програми). Ви б лише ввели пароль, що не є складніше порівняно з попередніми версіями 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 [логотип] консолі та xlogo:

введіть тут опис зображення


Чи "Тимчасовий доступ для root на робочий стіл Wayland через функцію gks" є більш безпечним методом (наприклад, додаванням файлу, як /etc/xdg/autostart/xhost.destopце також пропонується), оскільки він закінчується відновленням початкового середовища? І ми можемо спокійно замінити sudo -Hз gksuв псевдонім, щоб використовувати вставки в .desktop файли і т.д.?
Саді

1
Так, я вважаю, що безпечніше дозволити кореневий доступ до робочого столу лише за необхідності. І так, ви можете замінити sudo -Hз gksuв функції, він може працювати краще для ваших додатків.
sudodus

1
+1 за надзвичайно ретельну відповідь. Подібно до вашої gksабревіатури, я мав налаштування gsuвикористовувати набори політики (нове майбутнє для 16.04) geditта nautilus. Коли 18.04 вийде, хоча я думаю, що я просто назву xhost +si...сценарій обгортки, gksuякий я ніколи не встановлюватиму з пакунків, починаючи з 18.04.
WinEunuuchs2Unix

2
"Wayland розроблений так, щоб забороняти підвищені (sudo -H, gksu ...) дозволи з прикладними програмами GUI." -- помилковий. Wayland дозволяє кореневі програми просто чудово. Ви можете побачити це, запустивши sudo -E gedit. В даний час виникла помилка, gdmде він налаштовує сервер сумісності Xwayland X11 так, щоб він не підтримував XAUTHORITY, що потрібно для додатків X11, що працюють як root для роботи. Програми Native Wayland, що працюють як root, просто працюють.
psusi

1
@psusi я змінив відповідь, щоб уникнути тверджень про дизайн та наміри Wayland.
sudodus

6

Краще перевірте, чи дійсно Wayland працює першим, перш ніж надавати права кореня

if [ $XDG_SESSION_TYPE = "wayland" ]; then
    xhost +si:localuser:root
fi

5

Якщо ви використовуєте Ubuntu 17.04 або новішої версії , рекомендується використовувати адміністративний сервер gvfs . Просто додайте admin: // на передню частину повного файлового шляху, який ви хочете відкрити, у такій програмі, як текстовий редактор або програми Files .

Наприклад, щоб змінити настройки завантаження, відкрийте

admin:///etc/default/grub

Цей метод використовує PolicyKit і все ще працюватиме за замовчуванням Wayland Ubuntu 17.10, тоді як sudo та gksu для GUI-програм не будуть.


1
Дякую. Для мене це найкраще працювало з gedit (за винятком дивної поведінки, коли його використовували просто як gedit admin:), дуже дивно з nautilus (майже марно), і повністю провалювався при синаптиці . Будь-які ідеї?
Саді

Це не буде працювати з синаптичним. Хоча це добре працює в nautilus, але вам потрібно вибрати каталог, не такий файл, якadmin:///etc/
Jeremy Bicha

Це наче працює з nautilus, але ви побачите, що я маю на увазі ("дуже дивно", "майже марно"), навіть коли ви безпосередньо відкриєте каталог, і почнете намагатися робити це і те ;-)
Саді

@Sadi Я поняття не маю, що таке "це і те". Ви можете подати помилку, якщо вона не працює належним чином.
Джеремі Біча

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термінал перед запуском привілейованого додатка


1

Якщо програма підтримує API Wayland, ви можете запустити його як root за допомогою sudo -EH applicationкоманди.

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


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 "$@"
       xhost  -  
       exit 0
    fi 
fi
gksu "$@"

(вибачте, будь ласка, за наївний стиль кодування баш-я такий собі новачок із цією темою). T не працює стабільно від Alt-F2, якщо останній вибір не був терміналом; у цьому випадку ми просто не можемо встановити фокус на діалоговому вікні пароля. Схоже, він працює з меню Gnome. Все одно <1. Це не 100% розчин. 2. Мені здається, що архітектори Ubuntu вважають, що ми не повинні шукати жодної роботи навколо.


1
Я думаю, що ти хочеш "$@"(замість "$1" "$2" ...).
муру

Так, звичайно :-) Це лише сліди моїх експериментів
Алекс Чапіро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.