Warum wird pkexec für grafische Anwendungen gegenüber gksudo bevorzugt?

10

Bitte stellen Sie eine Ubuntu-Dokumentation zur Verfügung, die dies widerlegt: https://help.ubuntu.com/community/RootSudo Warum funktioniert pkexec auf meinem vollständig aktualisierten 13.04-System nicht?

$ pkexec gedit somefile.txt
No protocol specified

** (gedit:13135): WARNING **: Could not open X display
Cannot open display: 
Run '/usr/bin/gedit --help' to see a full list of available command line options
chili555
quelle
pkexec ist kein Ersatz für gksu. Es ist nicht beabsichtigt, dass Sie so manuell ausführen.
Psusi
2
Ich habe weder nach gksu gefragt noch erwähnt.
Chili555
Eine sehr gute Antwort über das pkexecAusführen der GUI ohne Konfiguration: askubuntu.com/a/332847/89385
akostadinov
Installieren Sie policykit-1-gnome. Sehen Sie hier für weitere Details und Erklärungen.
user303371

Antworten:

7

Warum funktioniert es nicht?

Standardmäßig können Sie pkexeckeine grafischen (X11) Anwendungen ausführen. Von der Manpage:

 The environment that PROGRAM will run it, will be set to a minimal
 known and safe environment in order to avoid injecting code through
 LD_LIBRARY_PATH or similar mechanisms. In addition the PKEXEC_UID
 environment variable is set to the user id of the process invoking
 pkexec.
     As a result, pkexec will not allow you to run X11 applications
     as another user since the $DISPLAY and $XAUTHORITY environment
     variables are not set.
 These two variables will be retained if the
 org.freedesktop.policykit.exec.allow_gui annotation on an action is set
 to a nonempty value; this is discouraged, though, and should only be
 used for legacy programs.

Wie in der Manpage angegeben, können Sie es zum Laufen bringen, obwohl ich wirklich nicht weiß, ob dies irgendwie gefährlich oder empfohlen ist .

Um beispielsweise gedit zu aktivieren, können Sie /usr/share/polkit-1/actions/com.ubuntu.gedit.policyFolgendes erstellen :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
 "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
<policyconfig>
  <vendor>gedit</vendor>
  <vendor_url>gedit</vendor_url>
  <icon_name>accessories-text-editor</icon_name>
  <action id="org.freedesktop.policykit.pkexec.gedit">
   <description>Run "gedit"</description>
   <message>Authentication is required to run Text Editor</message>
   <defaults>
     <allow_any>auth_admin</allow_any>
     <allow_inactive>auth_admin</allow_inactive>
     <allow_active>auth_admin</allow_active>
   </defaults>
     <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
     <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
   </action>  
</policyconfig>

Dann pkexec geditsollte wie erwartet funktionieren:

Geben Sie hier die Bildbeschreibung ein

Wie Sie sich vorstellen können, wird dies nur geditfunktionieren. Wenn Sie allow_gui"org.freedesktop.policykit.exec" (die Standardaktion) hinzugefügt haben , sollte dies theoretisch für alle Anwendungen funktionieren, aber in meinen Tests habe ich das gleiche Ergebnis wie bei Ihnen erhalten.

Warum wird pkexec bevorzugt?

Hier finden Sie eine Diskussion über die Stärken von pkexec.

Salem
quelle
3
Wird gksudo für grafische Anwendungen bevorzugt und NICHT pkexec?
Chili555
1
Ich denke schon. Wenn gksudoverfügbar, ist es viel einfacher, es zu verwenden, als einzelne Aktionen für jede App zu erstellen, die Sie verwenden müssen (wenn es keine "globale" Möglichkeit gibt, dies zu tun).
Salem
1
@ Salem- Dann frage ich mich, warum meine Antwort für die Verwendung von pkexec bearbeitet und genehmigt wurde, wenn sie nicht für grafische Anwendungen vorgesehen ist und, wie Sie lesen können, nicht funktioniert hat. askubuntu.com/questions/313619/… Es muss etwas geben, das ich nicht verstehe.
Chili555
@ chili555 Wenn diese Bearbeitung Ihre Frage motiviert hat, sollten Sie dies bei Meta stellen. In 13.04 müssen Sie entweder installieren gksudooder konfigurieren pkexec(Sie können auch verwenden, sudo -iaber das funktioniert nicht mit Alt + F2, auch bekannt als "Ausführen"). Ich finde das erste VIEL einfacher. Wenn jemand anders gut denkt ... scheint mir falsch, etwas vorzuschlagen, das nicht wie beabsichtigt funktioniert, aber mir fehlt möglicherweise etwas ...
Salem
Du und ich beide. Ich werde in Meta fragen.
Chili555