¿Cómo ejecuto aplicaciones GUI como root usando pkexec?

15

Estoy usando Trisquel GNU / Linux-Libre que viene con Gnome3 Flashback Desktop Environment.

Sé que puedo ejecutar la aplicación GUI como root con sudo& gksudopero quiero saber eso ¿Cómo puedo ejecutar aplicaciones GUI como root con la ayuda de pkexec?

Cuando intenta ejecutar gedit(o cualquier otra aplicación como: nautilus) por pkexec geditentonces se le solicitará una contraseña para la autenticación: -

captura de pantalla

Después de ingresar la contraseña, sale con error: -

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

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

Entonces, parece que algo va mal con el entorno de visualización.

También lo he intentado DISPLAY=:0 pkexec geditpero no funciona.


La siguiente información está disponible en man pkexec: -

El entorno en el que PROGRAM lo ejecutará se establecerá en un entorno mínimo conocido y seguro para evitar inyectar código a través de LD_LIBRARY_PATH o mecanismos similares. Además, la variable de entorno PKEXEC_UID se establece en el ID de usuario del proceso que invoca pkexec. Como resultado, pkexec no le permitirá ejecutar aplicaciones X11 como otro usuario ya que las variables de entorno $ DISPLAY y $ XAUTHORITY no están configuradas. Estas dos variables se conservarán si la anotación org.freedesktop.policykit.exec.allow_gui en una acción se establece en un valor no vacío; Sin embargo, esto se desaconseja y solo debe usarse para programas heredados.

Ahora no sé qué hacer para lograr esto.

Por lo tanto, ayúdame a descubrir cómo ejecutar aplicaciones GUI como root mediante pkexec. ¿ O es esto posible o no?


Por cierto, inspirado por el gparted-pkexeccomando que funciona bien. Cómo gpartedutilizar pkexec?

Pandya
fuente
(Más tarde encontrado) Relacionado: ¿Cómo configurar pkexec?
Pandya
Mira este enlace me funcionó.
TinyRickHole

Respuestas:

11

Se puede hacer agregando acciones personalizadas al juego de políticas. Si desea ejecutar gedit como root pkexec, debe crear un nuevo archivo, /usr/share/polkit-1/actions/org.freedesktop.policykit.gedit.policypor ejemplo:

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

Finalmente pkexec geditdebería funcionar como se esperaba.


Visite la página de manual o el Manual de referencia que lo explica con EJEMPLO como: -

$ 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
fuente
Sí, finalmente lo encontré en la página de manual ( man pkexec) también.
Pandya
¿Me pueden ayudar en unix.stackexchange.com/q/204638/66803 ?
Pandya
@Pandya, el error real es "Negarse a prestar servicio a los padres muertos", hay algunos informes de errores cuando busqué en Google. Para solucionar el problema, puede crear un archivo ejecutable en / usr / local / bin que contiene algo como: #! / bin / sh "pkexec" "nautilus" y ejecútelo con F7. Creo que debería funcionar.
Taliezin
OKAY. Lo intenté haciendo ejecutable que funciona bien con F7.
Pandya
2
Estoy realmente decepcionado de que dicha herramienta me haya forzado a configurar algo fuera de / etc y más peor en / usr / share en lugar de / usr / local / share.
Niels