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


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, der Passwortdialog ist deaktiviert. Sieht also aus wie ein Problem beim Erstellen eines Tty für root.

Irgendein Rat?


36
2017-10-04 13:58


Ursprung


gksudo wird nicht funktionieren in a Wayland-Sitzung, Du darfst Wechseln Sie zu einer Xorg-Sitzung und versuche. - pomsky
Der Fehler selbst, wenn ein X-Fehler "kann die Anzeige nicht öffnen:: 1". Wayland ist auf diese Weise konzipiert und nach Ansicht der Entwickler sollten Sie keine grafischen Anwendungen als root über die Befehlszeile ausführen. Du kannst mit xhost umgehen. - Panther
gksu -dg synapticDas solltest du sowieso nie tun. - Rinzwind
Wenn Sie eine der aufgeführten Möglichkeiten ausprobiert haben, markieren Sie diese Antwort bitte als richtig. Um dies zu tun, drücken Sie einfach den Haken neben Ihrer bevorzugten Antwort. - IndexOutOfBoundsException
@ N0rbert hör auf das Hinzufügen 17.10 zu den Fragen, die 17.10 erwähnen. Version-Tags sind zu verwenden, wenn die Frage für diese Version spezifisch ist. Die meisten dieser Fragen sind überall dort anwendbar, wo Wayland, GNOME Shell usw. verfügbar sind, und das schließt ältere und zukünftige Versionen ein. - muru


Antworten:


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

Es ist ein Feature, kein Fehler! Es ist ein Design-Feature von Wayland, dass Sie keine grafischen Anwendungen als Root vom Terminal aus starten können.

Die Hauptdiskussionen sind natürlich auf den Fedora-Seiten. Sehen Fedora-Fehler # 1274451 und Grafische Anwendungen können nicht als root in Wayland (z. B. gedit, beesu, gparted, nautilus) auf Ask Fedora ausgeführt werden. Aber es gibt auch Diskussionen auf den Ubuntu-Seiten (Ubuntu Devs Unsicher über die Verwendung von Wayland standardmäßig in 17.10 - OMG! Ubuntu).

Ubuntu-Fehlerbericht: Es ist nicht möglich, pkexec-Anwendungen auf einer Wayland-Sitzung zu starten

Mögliche Umgehung - Wenn Sie Systemdateien mit einem grafischen Editor bearbeiten (z. B. gedit), verwenden Sie ein Befehlszeilenprogramm wie z nano oder vim oder emacs. nano ist in der Regel einfacher für neue Benutzer, vim ist leistungsfähiger und hat mehr Funktionen, sehen Sie dieses Vim-Tutorial o.ä.

Auf jeden Fall, wenn Sie wirklich wollen oder müssen Führe grafische Apps als root aus, einstellen xhost zuerst, die Fallback zu Xserver erzwingt.

Um Berechtigungen festzulegen, gehen Sie wie folgt vor:

xhost si:localuser:root 

Wenn Sie fertig sind, Berechtigungen zu entfernen

xhost -si:localuser:root 

Sie können dazu eine grafische / Desktop-Option hinzufügen dieser synaptische Fehlerbericht

Plexec'ed-Anwendungen können mit geheilt werden xhost +si:localuser:root in XDG Autostart wie folgt platziert (N0rbert 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 Befehl xhost 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 Xorg bei der Anmeldung auswählen

Sehen Wie wechselst du in Ubuntu 17.10 von Wayland zurück zu Xorg?


46
2017-10-04 14:36



Funktioniert diese Problemumgehung? mit Mir auch? - Eliah Kagan
Ich weiß nichts über MIR, vielleicht. - Panther
Oder nur xhost +local: - chaskes
"Es ist ein Merkmal, kein Fehler!" ... Seufzer. Diese Art von Dingen ist genau der Grund, warum ich meine Freunde und Kollegen nicht dazu bewegen kann, zu Linux zu wechseln. Die Verwendung von VIM und Nano ist keine Alternative zu GEdit. Gedit funktioniert wie Notepad, während Sie für diese anderen CRTL-Code lernen müssen. Und nimm zum Beispiel Nano mit den Begriffen "Write Out" anstatt "Save" .... Sehr unfreundlich. - JHBonarius
Das bricht auch völlig kaputt, was eine wichtige Sache ist, auf die man zugreifen kann. Was auch immer passiert mit "Versuche nicht, dumme Leute daran zu hindern, dumme Dinge zu tun; du wirst es nur schaffen, schlaue Leute daran zu hindern, schlaue Dinge zu tun." - Matthew Najmon


enter image description here 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.

Aber es gibt Workarounds, wenn Sie ein GUI-Tool haben, das gut für Sie funktioniert und erhöhte Berechtigungen benötigt. (Ich verwende zwei solche Standardwerkzeuge: den Synaptic Package Manager, synaptic und das Partitionierungswerkzeug Gparted, gparted. Ich benutze MakeUSB, um USB-Boot-Laufwerke zu erstellen, mkusbauch, aber es kann die Teile ausführen, die erhöhte Berechtigungen ohne Grafiken benötigen.)

xhost und sudo -H

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

    xhost +si:localuser:root
    
  2. gksu und gksudo sind 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 von gvfs (die polkit verwendet) besser und sicherer (als xhost und xudo -H), unabhängig von der von Ihnen verwendeten Benutzeroberfläche.

Sie führen nicht die gesamte Anwendung als root aus. Eine Privilege-Eskalation findet nur statt, wenn dies unbedingt erforderlich ist. Sehen Sie den folgenden Link und Links davon,

Nautilus-Admin

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

Temporärer Zugriff für root auf die Wayland Desktop-Funktion gks

Bitte vermeide es sudo GUI-program. Es kann dazu führen, dass das System die Konfigurationsdateien für Ihre normale Benutzerkennung überschreibt rootKonfiguration und setzen Sie Besitz und Berechtigungen passend root und sperren Sie Ihre reguläre Benutzer-ID. Sie sollten GUI-Anwendungen mit ausführen sudo -H, der die Konfigurationsdateien schreibt rootHeimatverzeichnis /root. Beispiel:

sudo -H gedit myfile.txt

Aber es gibt ein Risiko, dass Sie vergessen -H. Stattdessen können Sie z. B. eine Funktion erstellen gks

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

und speichern Sie es in Ihrem ~/.bashrc in der Nähe der Aliase. Dann kannst du rennen

gks gedit myfile.txt

ähnlich wie du es benutzt hast gksudo Vor.

Testen

Sie können überprüfen, wie sudo, sudo -H und gks arbeite 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

nach dem Beispiel im vorherigen Abschnitt.

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

Anstatt eine einfache einzeilige Funktion hinzuzufügen ~/.bashrcSie können ein System erstellen, das auch ohne Bash funktioniert. Es kann bequem zu verwenden sein, ist jedoch komplizierter einzurichten. Bitte beachten Sie, dass Sie nur eine der Alternativen installieren sollten, da die einzeilige Funktion die Verwendung dieses komplizierteren Systems stört.

Drei Dateien

Das Shellskript 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.svg sieht aus wie das:

enter image description here

Sie können die Icon-Datei oder einen Tarball mit allen drei Dateien von diesem Link herunterladen,

wiki.ubuntu.com/Wayland/gks

Kopieren Sie die [extrahierten oder kopierten und 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

Logout / Login oder Neustart, und es sollte ein funktionierendes Desktop-Icon sein. Es wird von einem Terminal-Fenster wie mit der einfachen Lösung mit der Funktion funktionieren.

Alt F2 Box:

enter image description here

Gnome-Shell-Menü:

enter image description here

gks Konsole und gparted:

enter image description here

Benutzerdefiniertes Skript und Desktopdatei

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

Beispiel mit dem einfachen GUI-Programm xlogo das kommt mit dem Programmpaket x11-apps:

Das Shellskript gkslogo (vereinfacht im Vergleich zu 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 benutzte die gleiche Symboldatei gks.svg

Kopieren Sie die [kopierten und eingefügten] Dateien an die folgenden Speicherorte:

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

gks [logo] Konsole und xlogo:

enter image description here


18
2017-10-04 14:51



Ist der "Temporäre Zugriff für root auf den Wayland Desktop über die Funktion gks" eine sicherere Methode (z. B. das Hinzufügen einer Datei wie /etc/xdg/autostart/xhost.destop wie auch vorgeschlagen), denn es endet mit der Wiederherstellung der ursprünglichen Umgebung? Und können wir sicher ersetzen sudo -H mit gksu im Alias, um die Verwendung in .desktop-Dateien usw. zu verwenden? - Sadi
Ja, ich denke, es ist sicherer, den Root-Zugriff nur dann auf den Desktop zuzulassen, wenn dies erforderlich ist. Und ja, du kannst ersetzen sudo -H mit gksu In der Funktion funktioniert es möglicherweise besser für Ihre Anwendungen. - sudodus
Wie geht es mit dem Alt-F2 oder Gnome Shell Menü? - Alex Chapiro
"Wayland ist so konzipiert, dass keine erhöhten Berechtigungen (sudo -H, gksu ...) mit GUI-Anwendungsprogrammen zulässig sind." - falsch. Wayland erlaubt Root-Anwendungen ganz gut. Sie können dies sehen, indem Sie laufen sudo -E gedit. Derzeit ist ein Fehler in gdm Dort wird der Xwayland X11-Kompatibilitätsserver so konfiguriert, dass er XAUTHORITY nicht unterstützt, was für X11-Anwendungen erforderlich ist, die als root ausgeführt werden. Native Wayland-Anwendungen, die als root ausgeführt werden, funktionieren einwandfrei. - psusi
@psusi, ich modifizierte die Antwort, um Aussagen über das Design und die Absichten von Wayland zu vermeiden. - sudodus


Überprüfen Sie besser, ob Wayland wirklich läuft, bevor Sie das Root-Recht erhalten

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

6
2017-10-07 10:52





Wenn Sie verwenden Ubuntu 17.04 oder höher, es wird empfohlen, das zu verwenden gvfs Admin-Backend. Einfach hinzufügen Administrator:// an den Anfang des vollständigen Dateipfads, den Sie in einer App wie dem öffnen möchten Texteditor oder der Dateien Apps.

Um beispielsweise die Boot-Einstellungen zu ändern, öffnen Sie

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 nicht funktionieren.


5
2017-10-23 18:45



Vielen Dank. Für mich hat das am besten funktioniert gedit (Außer einem seltsamen Verhalten, wenn es einfach als gedit admin:), sehr merkwürdig mit Nautilus (fast nutzlos), und total versagt mit synaptisch. Irgendwelche Ideen? - Sadi
Es wird nicht mit Synapsen funktionieren. Es sollte zwar in Nautilus gut funktionieren, aber Sie müssen ein Verzeichnis wählen, nicht eine Datei wie admin:///etc/ - Jeremy Bicha
Es funktioniert irgendwie mit Nautilus aber du wirst sehen, was ich meine ("sehr seltsam", "fast nutzlos"), selbst wenn du direkt ein Verzeichnis öffnest und anfängst zu versuchen, dies und das zu tun ;-) - Sadi
@Sadi Ich habe keine Ahnung was "dies und das" ist. Sie könnten einen Fehler melden, wenn es nicht richtig funktioniert. - Jeremy Bicha


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

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 gebrochen (siehe Fehler 1713313 und Fehler 1713311 ).


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

Schreib einfach xhost +si:localuser:root im Terminal vor dem Start privilegierter Anwendung


3
2017-10-22 10:45





Eigentlich funktioniert folgender Code fast schon:

#! /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 entschuldige mich für den naiven Stil der Bash-Codierung - ich bin eine Art Neuling  mit diesem Thema). T funktioniert nicht stabil von Alt-F2, wenn die letzte Auswahl kein Terminal war; In diesem Fall können wir den Fokus nicht auf den Passwort-Dialog setzen. Sieht so aus, als ob er im Gnome-Menü funktioniert. Jedenfalls < 1. Es ist keine 100% ige Lösung. 2. Es scheint mir, dass Ubuntu-Architekten denken, dass wir keine Arbeitsumgebungen suchen sollten.


0
2017-10-26 02:10



Ich denke du willst "$@" (Anstatt von "$1" "$2" ...). - muru
Ja natürlich :-) Das sind nur Spuren meiner Experimente - Alex Chapiro


Wenn eine Anwendung die Wayland API unterstützt, können Sie sie als root using ausführen sudo -EH application Befehl.

Der -E-Schalter weist Sudo an, Umgebungsvariablen (sowie WAYLAND_SOCKET und XDG_RUNTIME_DIR) beizubehalten, die für Wayland-Anwendungen benötigt werden. Es ist immer besser, diese Option gegenüber dem bösartigen xhost-Hack zu verwenden, der in anderen Antworten vorgeschlagen wird. Mit xhost kann die Anwendung unter X-Wrapper ausgeführt werden, was weniger sicher ist als die Verwendung von Wayland (gemeinsame Zwischenablage, Keylogging usw.). Der sudo -EH-Trick funktioniert nicht mit einer Anwendung, die nicht für Wayland neu geschrieben wurde, wie zB gparted, sondern mit gedit etc. funktionieren würde.


0
2018-05-03 19:08