Wie führe ich GUI-Anwendungen mit pkexec als Root aus?

14

Ich verwende Trisquel GNU / Linux-Libre, das mit Gnome3 Flashback Desktop Environment geliefert wird .

Ich weiß, dass ich GUI-Anwendungen von sudo& als Root ausführen kann, gksudoaber ich möchte wissen, wie ich GUI-Anwendungen mit Hilfe von als Root ausführen kann pkexec.

Wenn ich versuche zu laufen gedit(oder eine andere Anwendung wie: nautilus) durch pkexec geditdie Authentifizierung Es fragt nach Passwort für: -

Bildschirmfoto

Nach Eingabe des Passwortes wird es mit Fehler beendet: -

$ pkexec gedit
error: XDG_RUNTIME_DIR not set in the environment.

(gedit:6135): Gtk-WARNING **: cannot open display:

Es scheint also, dass etwas mit der Anzeigeumgebung nicht stimmt.

Ich habe es auch versucht, DISPLAY=:0 pkexec geditaber es funktioniert nicht.


Folgende Informationen erhalten Sie von man pkexec: -

Die Umgebung, in der PROGRAM sie ausführt, wird auf eine minimale bekannte und sichere Umgebung eingestellt, um das Einfügen von Code über LD_LIBRARY_PATH oder ähnliche Mechanismen zu vermeiden. Zusätzlich wird die Umgebungsvariable PKEXEC_UID auf die Benutzer-ID des Prozesses gesetzt, der pkexec aufruft. Daher können Sie mit pkexec keine X11-Anwendungen als anderer Benutzer ausführen, da die Umgebungsvariablen $ DISPLAY und $ XAUTHORITY nicht festgelegt sind. Diese beiden Variablen bleiben erhalten, wenn die Anmerkung org.freedesktop.policykit.exec.allow_gui zu einer Aktion auf einen nicht leeren Wert gesetzt wird. Dies wird jedoch nicht empfohlen und sollte nur für ältere Programme verwendet werden.

Jetzt weiß ich nicht, was ich tun soll, um dies zu erreichen.

Helfen Sie mir daher, herauszufinden, wie Sie GUI-Anwendungen als Root mithilfe von ausführen pkexec. Oder ist das möglich oder nicht?


Übrigens, Inspiriert von einem gparted-pkexecBefehl, der gut funktioniert. Wie gpartedverwenden pkexec?

Pandya
quelle
(Später gefunden) Siehe auch
Pandya
Schauen Sie sich diesen Link an, er hat bei mir funktioniert.
TinyRickHole

Antworten:

10

Dies kann durch Hinzufügen von benutzerdefinierten Aktionen zum PolicyKit erfolgen. Wenn Sie gedit als root ausführen möchten, pkexecmüssen Sie eine neue Datei erstellen, /usr/share/polkit-1/actions/org.freedesktop.policykit.gedit.policyzum Beispiel:

<?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/policyconfig.dtd">
<policyconfig>
    <action id="org.freedesktop.policykit.pkexec.gedit">
    <description>Run gedit program</description>
    <message>Authentication is required to run the gedit</message>
    <icon_name>accessories-text-editor</icon_name>
    <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>

Endlich pkexec geditsollte es funktionieren wie erwartet.


Besuchen Sie die Manpage oder das Referenzhandbuch, das dies mit BEISPIEL erklärt, wie:

$ man pkexec | grep -i ^Example -A 60
EXAMPLE
       To specify what kind of authorization is needed to execute the program /usr/bin/pk-example-frobnicate as
       another user, simply write an action definition file like this

           <?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/policyconfig.dtd">
           <policyconfig>

             <vendor>Examples for the PolicyKit Project</vendor>
             <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url>

             <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate">
               <description>Run the PolicyKit example program Frobnicate</description>
               <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description>
               <message>Authentication is required to run the PolicyKit example program Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <icon_name>audio-x-generic</icon_name>
               <defaults>
                 <allow_any>no</allow_any>
                 <allow_inactive>no</allow_inactive>
                 <allow_active>auth_self_keep</allow_active>
               </defaults>
               <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate>
             </action>

           </policyconfig>

       and drop it in the /usr/share/polkit-1/actions directory under a suitable name (e.g. matching the namespace of
       the action). Note that in addition to specifying the program, the authentication message, description, icon
       and defaults can be specified. Note that occurences of the strings $(user), $(program) and $(command_line) in
       the message will be replaced with respectively the user (of the form "Real Name (username)" or just "username"
       if there is no real name for the username), the binary to execute (a fully-qualified path, e.g.
       "/usr/bin/pk-example-frobnicate") and the command-line, e.g. "pk-example-frobnicate foo bar". For example, for
       the action defined above, the following authentication dialog will be shown:

           [IMAGE][2]

               +----------------------------------------------------------+
               |                     Authenticate                     [X] |
               +----------------------------------------------------------+
               |                                                          |
               |  [Icon]  Authentication is required to run the PolicyKit |
               |          example program Frobnicate                      |
               |                                                          |
               |          An application is attempting to perform an      |
               |          action that requires privileges. Authentication |
               |          is required to perform this action.             |
               |                                                          |
               |          Password: [__________________________________]  |
               |                                                          |
               | [V] Details:                                             |
               |  Command: /usr/bin/pk-example-frobnicate                 |
               |  Run As:  Super User (root)                              |
               |  Action:  org.fd.pk.example.pkexec.run-frobnicate        |
               |  Vendor:  Examples for the PolicyKit Project             |
               |                                                          |
               |                                  [Cancel] [Authenticate] |
               +----------------------------------------------------------+
Taliezin
quelle
Ja, ich habe es endlich auch in manpage ( man pkexec) gefunden!
Pandya
Können Sie mir unter unix.stackexchange.com/q/204638/66803 helfen ?
Pandya
@ Pandya, der wahre Fehler ist "Weigert sich, toten Eltern Dienste zu leisten". Es gibt einige Fehlerberichte, als ich danach googelte. Um dieses Problem zu umgehen, können Sie eine ausführbare Datei in / usr / local / bin erstellen, die Folgendes enthält: #! / bin / sh "pkexec" "nautilus" und starte es mit F7. Ich denke es sollte funktionieren.
Taliezin
IN ORDNUNG. Ich habe versucht, ausführbar zu machen, was mit F7 gut funktioniert.
Pandya
2
Ich bin wirklich enttäuscht, dass ein solches Tool mich gezwungen hat, etwas außerhalb von / etc und noch schlimmer unter / usr / share anstelle von / usr / local / share zu konfigurieren.
Niels