Come eseguo le applicazioni GUI come root usando pkexec?


15

Sto usando Trisquel GNU / Linux-Libre fornito con Gnome3 Flashback Desktop Environment.

So che posso eseguire l'applicazione GUI come root da sudo& gksudoma voglio sapere che come posso eseguire le applicazioni GUI come root con l'aiuto di pkexec?

Quando ho tenta di eseguire gedit(o qualsiasi altra applicazione come: nautilus) da pkexec geditallora viene richiesta la password per l'autenticazione: -

immagine dello schermo

Dopo aver inserito la password, esce con errore: -

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

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

Quindi, sembra che qualcosa vada storto con l'ambiente di visualizzazione.

Ho anche provato con DISPLAY=:0 pkexec geditma non funziona.


Le seguenti informazioni sono disponibili da man pkexec: -

L'ambiente in cui PROGRAM lo eseguirà verrà impostato su un ambiente minimo noto e sicuro per evitare l'iniezione di codice tramite LD_LIBRARY_PATH o meccanismi simili. Inoltre, la variabile di ambiente PKEXEC_UID è impostata sull'ID utente del processo che richiama pkexec. Di conseguenza, pkexec non ti consentirà di eseguire le applicazioni X11 come un altro utente poiché le variabili di ambiente $ DISPLAY e $ XAUTHORITY non sono impostate. Queste due variabili verranno mantenute se l'annotazione org.freedesktop.policykit.exec.allow_gui su un'azione è impostata su un valore non vuoto; questo è scoraggiato, tuttavia, e dovrebbe essere utilizzato solo per programmi legacy.

Ora non so cosa fare per raggiungere questo obiettivo.

Quindi, aiutami a scoprire come eseguire le applicazioni della GUI come root tramite pkexec. O è possibile o no?


A proposito, ispirato dal gparted-pkexeccomando che funziona bene. Come gpartedusare pkexec?


(Più tardi trovato) Correlato: Come configurare pkexec?
Pandya,

Dai un'occhiata a questo link ha funzionato per me.
TinyRickHole,

Risposte:


11

Può essere fatto aggiungendo azioni personalizzate a policykit. Se vuoi eseguire gedit come root pkexecdevi creare un nuovo file, /usr/share/polkit-1/actions/org.freedesktop.policykit.gedit.policyad esempio:

<?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>

Infine pkexec geditdovrebbe funzionare come previsto.


Visita la manpage o il Manuale di riferimento che lo spiega con ESEMPIO come: -

$ 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] |
               +----------------------------------------------------------+

Sì, l'ho finalmente trovato anche in manpage ( man pkexec)!
Pandya,


@Pandya, il vero errore è "Rifiutando di rendere il servizio ai genitori morti", ci sono alcune segnalazioni di bug quando ho cercato su Google. Per risolvere il problema, puoi creare un file eseguibile in / usr / local / bin che contiene qualcosa come: #! / bin / sh "pkexec" "nautilus" ed eseguilo con F7. Penso che dovrebbe funzionare.
Taliezin,

OK. Ho provato realizzando un eseguibile che funziona bene con F7.
Pandya,

2
Sono davvero deluso dal fatto che un tale strumento mi abbia costretto a configurare qualcosa al di fuori di / etc e peggio ancora in / usr / share invece di / usr / local / share.
Niels,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.