Warum funktioniert gksu / gksudo oder das Starten einer grafischen Anwendung mit sudo nicht mit Wayland?

44

Ich habe Ubuntu 17.10 installiert. Jetzt habe ich Probleme mit 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

Wenn ich nicht benutze -g, ist der Passwortdialog deaktiviert. Es sieht also nach einem Problem beim Erstellen eines tty für root aus.

Irgendein Rat?

Alex Chapiro
quelle
1
gksudofunktioniert in einer Wayland-Sitzung nicht , Sie können zu einer Xorg-Sitzung wechseln und es versuchen.
Pomsky
2
Der Fehler selbst, wenn ein X-Fehler "display:: 1 kann nicht geöffnet werden". Wayland ist so konzipiert, und nach Ansicht der Entwickler sollten Sie grafische Anwendungen nicht als Root von der Befehlszeile aus ausführen. Sie können mit xhost umgehen.
Panther
1
gksu -dg synaptic Das solltest du sowieso nie tun.
Rinzwind
3
@N0rbert hör auf, den 17.10 zu Fragen hinzuzufügen, die den 17.10 erwähnen. Versions-Tags sind zu verwenden, wenn die Frage für diese Version spezifisch ist. Die meisten dieser Fragen sind allgemein anwendbar, wo immer Wayland, GNOME Shell usw. verfügbar sind, und dies schließt frühere und zukünftige Versionen ein.
muru
@maru. 16.04 LTS ist aktuell, 17.04 ist in der Nähe von EOL, also bedeutet normales 17.10 Wayland und Standard-GNOME-Shell, also ist das 17.10-Tag nützlich, denke ich. Es ist schwierig, Fragen zu finden, bei denen Benutzer Probleme mit 17.10 haben, aber hier keine Antworten und Kommentare haben . Sie brauchen Antworten, haben aber vergessen, 17.10-Tags hinzuzufügen, wenn sie gefragt werden. Ich kann aufhören, Tags hinzuzufügen. Es war ein guter Wille.
Nr.rbert

Antworten:

55

Beachten Sie, dass diese Antwort nur für Ubuntu-Versionen gilt, die Wayland verwenden. 17.10 ist die erste Version, die Wayland standardmäßig verwendet.

Es ist ein Feature, kein Bug! Es ist ein Konstruktionsmerkmal von Wayland, dass Sie grafische Anwendungen nicht als Root vom Terminal aus starten können.

Die Hauptgespräche finden natürlich auf den Fedora-Seiten statt. Siehe Fedora-Fehler # 1274451 und Grafikanwendungen können auf Ask Fedora nicht als Root in Wayland ausgeführt werden (z. B. gedit, beesu, gparted, nautilus) . Es gibt aber auch Diskussionen über die Ubuntu-Sites ( Ubuntu-Entwickler sind sich nicht sicher, ob Wayland in 17.10 - OMG! Ubuntu standardmäßig verwendet wird ).

Ubuntu-Fehlerbericht: pkexec'ed-Anwendungen können in der Wayland-Sitzung nicht gestartet werden

Mögliche Problemumgehung - Wenn Sie Systemdateien mit einem grafischen Editor (z. B. gedit) bearbeiten, verwenden Sie ein Befehlszeilentool wie z. B. nanooder vimoder emacs. nanoist in der Regel einfacher für neue Benutzer, vimist leistungsfähiger und verfügt über mehr Funktionen, siehe dieses Vim-Tutorial oder ähnliches.

Wenn Sie grafische Apps wirklich als Root ausführen möchten oder müssen , müssen Sie zunächst festlegen, xhostdass ein Fallback auf Xserver erzwungen wird.

So legen Sie die ausgeführten Berechtigungen fest:

xhost si:localuser:root 

Wenn Sie fertig sind, entfernen Sie die Berechtigungen

xhost -si:localuser:root 

Sie können eine grafische / Desktop-Option hinzufügen, um dies gemäß diesem synaptischen Fehlerbericht zu tun

pkexec'ed-Anwendungen können mit xhost +si:localuser:rootplatziertem XDG-Autostart wie folgt geheilt werden (N0rberts Idee):

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

Sie könnten diesen xhost-Befehl zu .bashrc hinzufügen, aber ich würde ein Paar Aliase empfehlen

alias gsuon='xhost si:localuser:root'

alias gsuoff='xhost -si:localuser:root'

Sie können die Aliase beliebig benennen.

Für Details siehe:


Wechseln Sie zurück zu Xorg

Wenn Sie Xorg aus irgendeinem Grund bevorzugen, können Sie auswählen, dass es beim Anmelden auf Xorg ausgeführt wird

Siehe Wie wechselt man in Ubuntu 17.10 von Wayland zurück zu Xorg?

Panther
quelle
Funktioniert diese Problemumgehung auch mit Mir ?
Eliah Kagan
Ich weiß nicht über MIR, es kann.
Panther
1
Oder einfachxhost +local:
chaskes
18
"Es ist ein Feature, kein Bug!" ... seufzt. Solche Dinge sind genau der Grund, warum ich meine Freunde und Kollegen nicht davon überzeugen kann, auf Linux umzusteigen. Die Verwendung von VIM und Nano ist keine Alternative zu GEdit. Gedit funktioniert wie ein Notizblock, während Sie den CRTL-Code für diese anderen lernen müssen. Und nimm zum Beispiel Nano, indem du Begriffe wie "Write Out" anstatt "Save" verwendest ... Sehr benutzerunfreundlich.
JHBonarius
9
Dies bricht auch gparted komplett ab, was ein bisschen wichtig ist, um Zugang zu haben. Was ist mit "Versuchen Sie nicht, dumme Leute daran zu hindern, dumme Dinge zu tun. Es wird Ihnen nur gelingen, kluge Leute daran zu hindern, kluge Dinge zu tun."
Matthew Najmon
21

Bildbeschreibung hier eingeben Lösungen

In Wayland ist es oft schwierig, GUI-Anwendungsprogramme mit erhöhten Berechtigungen (sudo -H, gksu ...) auszuführen. Es ist eine gute Idee, solche Aufgaben mit Befehlszeilentools auszuführen.

Es gibt jedoch Problemumgehungen, wenn Sie über ein GUI-Tool verfügen, das für Sie gut funktioniert und erhöhte Berechtigungen benötigt. (Ich verwende zwei solche Standardtools: den Synaptic Package Manager synapticund das Partitionierungstool Gparted gparted. Ich verwende MakeUSB auch zum Erstellen von USB-Boot-Laufwerken mkusb, aber es kann die Teile ausführen, für die erhöhte Berechtigungen ohne Grafiken erforderlich sind.)

xhost und sudo -H

  1. Es gibt eine Problemumgehung, um grafische Anwendungsprogramme zuzulassen, die anderen Benutzern als dem in Wayland angemeldeten Benutzer gehören.

    xhost +si:localuser:root
    
  2. gksuund gksudosind nicht mit Standard Ubuntu gebündelt und funktionieren hier nicht, aber sie funktionieren in Xorg.

    Stattdessen können Sie verwenden

    sudo -H
    
  3. Es ist eine gute Idee, grafische Anwendungsprogramme zu verhindern, die anderen Benutzern als dem angemeldeten Benutzer gehören.

    xhost -si:localuser:root
    

gvfs admin backend

In Ubuntu 17.10 (gvfs> = 1.29.4) können Sie das gvfs-Admin-Backend verwenden. Beachten Sie, dass Sie den vollständigen Pfad benötigen,

gedit admin:///path/to/file

Theoretisch ist die Backend-Methode gvfs admin (die polkit verwendet) besser und sicherer (als xhostund xudo -H), unabhängig von der von Ihnen verwendeten Benutzeroberfläche.

Sie führen nicht die gesamte Anwendung als Root aus. Die Eskalation von Berechtigungen erfolgt nur, wenn dies unbedingt erforderlich ist. Siehe den folgenden Link und Links von ihm,

nautilus-admin

Es ist auch möglich, nautilus-adminfür Dateioperationen mit erhöhten Berechtigungen und geditmit erhöhten Berechtigungen zu verwenden. Dies wird in der folgenden AskUbuntu-Antwort beschrieben:

Temporärer Zugriff für Root auf den Wayland-Desktop über die Funktion gks

Bitte vermeiden Sie sudo GUI-program. Dies kann dazu führen, dass das System die Konfigurationsdateien für Ihre reguläre Benutzer-ID mit der Konfiguration überschreibt rootund den Besitz und die Berechtigungen rootfestlegt, um Ihre reguläre Benutzer-ID anzupassen und zu sperren. Sie sollten GUI - Anwendungen mit laufen sudo -H, das schreibt die Konfigurationsdateien in root‚s Home - Verzeichnis /root. Beispiel:

sudo -H gedit myfile.txt

Es besteht jedoch die Gefahr, dass Sie es vergessen -H. Stattdessen können Sie beispielsweise eine Funktion erstellengks

gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }

und bewahren Sie es in der ~/.bashrcNähe der Aliase auf. Dann kannst du rennen

gks gedit myfile.txt

auf ähnliche Weise wie gksudozuvor.

Testen

Sie können prüfen , wie sudo, sudo -Hund die gksArbeit mit den folgenden Befehlen

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 ~ $ 

und natürlich

gks gedit myfile.txt

gemäß dem Beispiel im vorherigen Abschnitt.

Methode, die über das Menü Alt-F2 und Gnome Shell funktioniert

Anstatt eine einfache einzeilige Funktion hinzuzufügen ~/.bashrc, können Sie ein System erstellen, das auch ohne Bash funktioniert. Die Verwendung mag bequem sein, die Einrichtung ist jedoch komplizierter. Bitte beachten Sie, dass Sie nur eine der Alternativen installieren sollten, da die Einzeilenfunktion dieses kompliziertere System stört.

Drei Dateien

Das Muschelskript 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;

Die Desktop-Datei 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

Die Symboldatei gks.svgsieht folgendermaßen aus:

Bildbeschreibung hier eingeben

Sie können die Symboldatei oder einen Tarball mit allen drei Dateien über diesen Link herunterladen.

wiki.ubuntu.com/Wayland/gks

Kopieren Sie die [extrahierten oder kopierten & eingefügten] Dateien an die folgenden Speicherorte.

sudo cp gks /usr/bin
sudo cp gks.desktop /usr/share/applications/
sudo cp gks.svg /usr/share/icons

Abmelden / Anmelden oder Neustarten, und es sollte ein funktionierendes Desktopsymbol vorhanden sein. Es funktioniert von einem Terminalfenster aus wie bei der einfachen Lösung mit der Funktion.

Alt F2 Box:

Bildbeschreibung hier eingeben

Gnome Shell Menü:

Bildbeschreibung hier eingeben

gks Konsole und gparted:

Bildbeschreibung hier eingeben

Benutzerdefiniertes Skript und Desktop-Datei

Wenn Sie nur über wenige GUI-Anwendungen verfügen, für die erhöhte Berechtigungen erforderlich sind, können Sie benutzerdefinierte Skripts und Desktop-Dateien erstellen und die Eingabe des Befehls (Anwendungsname) vermeiden. Sie würden nur das Passwort eingeben, was im Vergleich zu den Vorgängerversionen von Ubuntu nicht schwieriger ist (Sie sollten das Passwort trotzdem eingeben).

Beispiel mit dem einfachen GUI-Programm xlogo, das mit dem Programmpaket geliefert wird x11-apps:

Das Shellscript gkslogo(vereinfacht gegenüber 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;

Die Desktop-Datei 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

Ich war faul und habe die gleiche Symboldatei verwendet gks.svg

Kopieren Sie die [kopierten & eingefügten] Dateien an die folgenden Speicherorte,

sudo cp gkslogo /usr/bin
sudo cp gkslogo.desktop /usr/share/applications/

gks [logo] console und xlogo:

Bildbeschreibung hier eingeben

Sudodus
quelle
Ist der "Temporäre Zugriff für Root auf den Wayland-Desktop über die Funktion gks" eine sicherere Methode (z. B. als das Hinzufügen einer Datei, wie /etc/xdg/autostart/xhost.destopauch vorgeschlagen), da die ursprüngliche Umgebung wiederhergestellt wird? Und können wir sicher sudo -Hmit gksuim Alias ersetzen , um Einfügen in .desktop-Dateien usw. zu verwenden?
Sadi
1
Ja, ich halte es für sicherer, den Root-Zugriff auf den Desktop nur bei Bedarf zuzulassen. Und ja, Sie können sudo -Hmit gksuin der Funktion ersetzen , es funktioniert möglicherweise besser für Ihre Anwendungen.
Sudodus
1
+1 für eine sehr gründliche Antwort. Ähnlich wie bei Ihrer gksAbkürzung hatte ich das Setup gsu, um Policy Kits (die neue Zukunft für 16.04) für geditund zu verwenden nautilus. Wenn 18.04 rauskommt, werde ich wohl nur das xhost +si...Wrapper-Skript nennen, gksudas ich nie aus Paketen installieren werde, die mit beginnen 18.04.
WinEunuuchs2Unix
2
"Wayland wurde entwickelt, um mit GUI-Anwendungsprogrammen keine erhöhten Berechtigungen (sudo -H, gksu ...) zuzulassen." - falsch. Wayland ermöglicht Root-Anwendungen ganz gut. Sie können dies durch Laufen sehen sudo -E gedit. Derzeit ist ein Fehler gdmaufgetreten, bei dem der Xwayland X11-Kompatibilitätsserver so konfiguriert wird, dass XAUTHORITY nicht unterstützt wird. Dies ist erforderlich, damit X11-Anwendungen als Root ausgeführt werden können. Native Wayland-Anwendungen, die als Root ausgeführt werden, funktionieren einwandfrei.
Psusi
1
@psusi, ich habe die Antwort geändert, um Aussagen über das Design und die Absichten von Wayland zu vermeiden.
Sudodus
6

Überprüfen Sie besser zuerst, ob wayland wirklich läuft, bevor Sie root right erteilen

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

Wenn Sie Ubuntu 17.04 oder höher verwenden, wird empfohlen, das gvfs-Admin-Backend zu verwenden . Fügen Sie einfach Admin: // an der Vorderseite des vollständigen Dateipfad Sie in einer App wie das öffnen möchten Texteditor oder den Dateien Apps .

Öffnen Sie beispielsweise, um die Starteinstellungen zu ändern

admin:///etc/default/grub

Diese Methode verwendet PolicyKit und funktioniert weiterhin mit dem Wayland-Standard von Ubuntu 17.10, während sudo und gksu für GUI-Apps dies nicht tun.

Jeremy Bicha
quelle
1
Vielen Dank. Für mich funktionierte dies am besten mit gedit (mit Ausnahme eines seltsamen Verhaltens, wenn es einfach als verwendet wird gedit admin:), sehr seltsam mit Nautilus (fast nutzlos) und völlig fehlgeschlagen mit synaptic . Irgendwelche Ideen?
Sadi
Es wird nicht mit der Synaptik funktionieren. Es sollte in Nautilus gut funktionieren, aber Sie müssen ein Verzeichnis auswählen, nicht eine Datei wieadmin:///etc/
Jeremy Bicha 31.10.17
Es funktioniert irgendwie mit Nautilus, aber Sie werden sehen, was ich meine ("sehr seltsam", "fast nutzlos"), auch wenn Sie direkt ein Verzeichnis öffnen und versuchen, dies und das zu tun ;-)
Sadi
@Sadi Ich habe keine Ahnung, was "dies und das" ist. Sie könnten einen Fehler melden, wenn er nicht richtig funktioniert.
Jeremy Bicha
3

Für Anwendungen, die su-to-root und pkexec verwenden, können Sie diesen Code auf eigenes Risiko hinzufügen /etc/xdg/autostart(siehe meinen Kommentar im Launchpad ):

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

Andere Root-Anwendungen sind auch auf Wayland fehlerhaft (siehe Fehler 1713313 und Fehler 1713311 ).


Wenn Sie keine dauerhafte Lösung wünschen, können Sie die @ ravery-Methode verwenden:

Geben Sie einfach xhost +si:localuser:rootdas Terminal ein, bevor Sie die privilegierte Anwendung starten

Nrrbert
quelle
1

Wenn eine Anwendung die Wayland-API unterstützt, können Sie sie mit dem sudo -EH applicationBefehl root ausführen .

Der Schalter -E weist sudo an, die Umgebungsvariablen (sowie WAYLAND_SOCKET und XDG_RUNTIME_DIR) beizubehalten, die für Wayland-Anwendungen erforderlich sind. Es ist immer besser, diese Option gegenüber bösen xhost-Hacks zu verwenden, die in anderen Antworten vorgeschlagen wurden. Mit xhost kann die Anwendung unter einem X-Wrapper ausgeführt werden, der weniger sicher ist als die Verwendung von Wayland (freigegebene Zwischenablage, Keylogging usw.). Der sudo -EH-Trick funktioniert nicht mit einer Anwendung, die nicht für wayland umgeschrieben wurde, wie z. B. gparted, sondern mit gedit usw.

ZAB
quelle
0

Eigentlich funktioniert fast der folgende Code:

#! /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 "$@"

(Bitte entschuldigen Sie den naiven Stil der Bash-Codierung. Ich bin eine Art Neuling in diesem Thema.) T funktioniert mit Alt-F2 nicht stabil, wenn die letzte Auswahl kein Terminal war; In diesem Fall können wir den Fokus nicht auf den Passwortdialog setzen. Wie auch immer <1. Es ist keine 100% ige Lösung. 2. Es scheint mir, dass Ubuntu-Architekten der Meinung sind, dass wir keine Arbeit suchen sollen.

Alex Chapiro
quelle
1
Ich denke du willst "$@"(anstatt "$1" "$2" ...).
Muru
Ja natürlich :-) Dies sind nur die Spuren meiner Experimente
Alex Chapiro