Как мне запускать приложения с графическим интерфейсом от имени пользователя root с помощью pkexec?

Можно использовать yum groupinstall GNOME, и после того, как все существует, удалите группу LXDE.

14
13.05.2015, 13:02
3 ответа

Это можно сделать, добавив пользовательские действия в PolicyKit. Если вы хотите запустить GEDIT как root с PKEExec , вы должны создать новый файл /usr/share/polkit-1/Action/org.freedesktop.policykit.ugeit.policy Например :

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

Наконец PKEExec Gedit должен работать, как ожидалось.


Посетите Manpage или справочное руководство , который объясняет его на примере, как: -

$ 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] |
               +----------------------------------------------------------+
10
27.01.2020, 19:51

Для меня, с Ubuntu, для запуска hardinfo как root ,

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY hardinfo

работает хорошо. Этот совет взят с любого(французского форума Ubuntu).

4
31.12.2020, 16:25

Если вам это нужно только для одного пользователя, вы можете поделиться файлом cookie для вашего текущего $DISPLAYс данным пользователем, например. root, без использованияpam_xauth:

sudo xauth -f /root/.Xauthority add $(xauth list $DISPLAY)

После того как вы запустите эту команду (, вы должны сделать это только один раз за сеанс ), вы можете запускать программы с графическим интерфейсом с помощью pkexec, просто поделившись своим$DISPLAY:

pkexec env DISPLAY=$DISPLAY gparted

Также обратите внимание, что вам очень редко нужно запускать редактор как root. Если вам нужно изменить файл, принадлежащий другому пользователю, вы можете сделать это в любой достаточно современной системе, используя GVfs :

.
gedit admin:///etc/fstab

Это запускает агент аутентификации polkit (, запрашивающий пароль ), как это делает pkexec, но вместо того, чтобы запускать редактор от имени пользователя root, он предоставляет ему неограниченный доступ к одному файлу.

0
11.11.2021, 17:01

Теги

Похожие вопросы