Aus den folgenden Fragen
- Warum ist gksu nicht mehr standardmäßig installiert?
- Wann sollte pkexec vs. gksu / gksudo verwendet werden?
Wir sehen, dass gksu langfristig nicht mehr unterstützt wird und standardmäßig ab> = 13.04 nicht mehr installiert wird. Stattdessen sollten wir pkexec verwenden, das seine Aufgabe für nicht grafische Anwendungen, aber nicht für Anwendungen auf der GUI erfüllt:
pkexec gedit
beim Ersetzen von gksu in einer .desktop-Datei
EXEC=pkexec /usr/bin/gedit
oder wenn ich ein Python-Skript ausführe, um eine grafische Anwendung mit Root-Berechtigungen auszuführen, wird folgende Fehlermeldung angezeigt:
>>>subprocess.Popen(['pkexec','gedit'])
** (gedit:3203): WARNING **: Could not open X display
Wie müsste ich meine Skripte oder meine .desktop-Dateien neu schreiben, um einen Authentifizierungsdialog zu unterstützen und eine Anwendung als Root auszuführen, wenn dies nicht von gksu abhängen sollte?
sudo
ich gesehen habe, sagte etwas über die Integration der Unterstützung für gksu in sudo aus. Eine andere Sache zu betrachten ist,sudo -A
die laut der Manpage ein (möglicherweise) grafisches Login startet.Antworten:
Erstellen Sie zuerst eine
.policy
Aktionsdatei in/usr/share/polkit-1/actions/
. Es ist üblich, Aktionsdateien "herstellerhierarchisch" zu benennen, z. B.com.ubuntu.pkexec.gparted.policy
oderorg.debian.apt.policy
Fügen Sie dann den folgenden Inhalt ein:
Ersetzen Sie
[Short/Full Program Name/Path]
mit den entsprechenden Werten, zum Beispielgedit
,gedit Text Editor
und/usr/bin/gedit
.<action id>
value muss nicht mit dem ausgewählten Dateinamen übereinstimmen (und eine einzelne Datei kann mehrere Aktionen enthalten), aber herkömmlicherweise ist Dateiname das Präfix für alle Aktionen.Nach dem Speichern der Datei würde das spezifische Programm mit X und GUI und so weiter ausgeführt.
Ein weiterer Fix scheint zu sein: Fügen Sie die folgende Zeile in /etc/pam.d/polkit-1 hinzu:
quelle
Noch ein Fix für Benutzerskripte: Bestimmen Sie die entsprechenden Umgebungsvariablen in Ihrem Skript.
Sie können dazu ein Snippet wie das folgende verwenden:
(basierend auf der ACPI-
getXuser
Funktion)Wenn Sie feststellen, dass Ihre
.desktop
Datei immer noch nicht funktioniert, können Sie versuchen, siepkexec commandline
in einsh
Snippet zu verpacken , z.Das letzte Problem ist anscheinend ein bekannter Fehler:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=690339
https://bugzilla.xfce.org/show_bug.cgi?id=9373
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=650038
https://bugzilla.gnome.org/show_bug.cgi?id=686059
quelle