Як запустити програми GUI як root, використовуючи pkexec?


16

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

Я знаю, що я можу запустити програму GUI як root на sudo&, gksudoале я хочу знати, що як запустити програми GUI як root за допомогою 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 про дію встановлена ​​на порожнє значення; це, однак, не перешкоджає використанню лише для застарілих програм.

Зараз я не знаю, що робити для цього.

Таким чином, допоможіть мені з'ясувати, як запускати програми GUI як root за допомогою pkexec. Або це можливо чи ні?


BTW, натхненний gparted-pkexecкомандою, яка чудово працює. Як gpartedкористуватися pkexec?


(Пізніше знайдено) Пов'язане: Як налаштувати pkexec?
Пандія

Ознайомтесь із цим посиланням, воно працювало на мене.
TinyRickHole

Відповіді:


11

Це можна зробити, додавши власні дії до політика. Якщо ви хочете запустити 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 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] |
               +----------------------------------------------------------+

Так, я нарешті знайшов його в manpage ( man pkexec) також!
Пандія

Чи можете ви допомогти мені на unix.stackexchange.com/q/204638/66803 ?
Пандія

@Pandya, справжня помилка - "Відмова в наданні послуги мертвим батькам", є деякі повідомлення про помилки, коли я переглядаю це. Для вирішення проблеми ви можете створити виконуваний файл у / usr / local / bin, який містить щось на зразок: #! / bin / sh "pkexec" "nautilus" та запустіть його з F7. Я думаю, що це має спрацювати.
taliezin

ГАРАЗД. Я спробував зробити виконаний файл, який добре працює з F7.
Пандія

2
Я дуже розчарований, що такий інструмент змусив мене налаштувати щось за межами / etc та ще гірше під / usr / share замість / usr / local / share.
niels
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.