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

15

Я использую Trisquel GNU / Linux-Libre, который поставляется с Gnome3 Flashback Desktop Environment.

Я знаю , что я могу запустить приложение GUI , как корень по sudo& , gksudoно я хочу знать , что Как запускать приложения с графическим интерфейсом , как корень с помощью pkexec?

Когда я пытаюсь запустить gedit(или любое другое приложение, например nautilus:), pkexec geditтогда он запрашивает пароль для аутентификации: -

Скриншот

После ввода пароля он завершается с ошибкой: -

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

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

Таким образом, кажется, что-то не так с отображением среды.

Я также пытался с, DISPLAY=:0 pkexec geditно не работает.


Следующая информация доступна от man pkexec: -

Среда, в которой PROGRAM будет его запускать, будет установлена ​​на минимально известную и безопасную среду, чтобы избежать внедрения кода через LD_LIBRARY_PATH или аналогичные механизмы. Кроме того, для переменной среды PKEXEC_UID задан идентификатор пользователя процесса, вызывающего pkexec. В результате pkexec не позволит вам запускать приложения X11 от имени другого пользователя, поскольку переменные окружения $ DISPLAY и $ XAUTHORITY не установлены. Эти две переменные будут сохранены, если для примечания org.freedesktop.policykit.exec.allow_gui для действия задано непустое значение; Это не рекомендуется и должно использоваться только для устаревших программ.

Теперь я не знаю, что делать, чтобы этого добиться.

Таким образом, Помогите мне узнать, как запускать приложения с графическим интерфейсом от имени пользователя root pkexec. Или это возможно или нет?


Кстати, вдохновленный gparted-pkexecкомандой, которая работает нормально. Как gpartedиспользовать pkexec?

Pandya
источник
(Позже нашел) Связанный: Как настроить pkexec?
Пандя
Проверьте эту ссылку, она работала для меня.
TinyRickHole

Ответы:

11

Это можно сделать, добавив пользовательские действия в policykit. Если вы хотите запустить gedit от имени пользователя root, pkexecвам нужно создать новый файл, /usr/share/polkit-1/actions/org.freedesktop.policykit.gedit.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>

Наконец-то pkexec geditдолжно работать как положено.


Посетите man-страницу или справочное руководство, которое объясняет это как EXAMPLE, например:

$ 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
источник
Да, я наконец-то нашел это и в manpage ( man pkexec)!
Pandya
Можете ли вы помочь мне по адресу unix.stackexchange.com/q/204638/66803 ?
Пандя
@Pandya, настоящая ошибка - «Отказ в предоставлении услуг мертвым родителям», есть некоторые сообщения об ошибках, когда я гуглял на это. Для временного решения вы можете создать исполняемый файл в / usr / local / bin, который содержит что-то вроде: #! / bin / sh "pkexec" "nautilus" и запустить его с помощью F7. Я думаю, что это должно работать.
Тализин
OK. Я попытался сделать исполняемый файл, который отлично работает с F7.
Pandya
2
Я очень разочарован, что такой инструмент заставил меня настроить что-то вне / etc и более худшее в / usr / share вместо / usr / local / share.
Нильс