Jak uruchomić aplikacje GUI jako root za pomocą pkexec?


16

Używam Trisquel GNU / Linux-Libre, która pochodzi z Gnome3 Flashback Desktop Environment.

Wiem, że mogę uruchomić aplikację GUI jako root przez sudo& gksudoale chcę wiedzieć, że Jak uruchomić aplikacje GUI jako root z pomocą pkexec?

Kiedy próbuje uruchomić gedit(lub jakakolwiek inna aplikacja jak: nautilus) by pkexec geditpotem prosi o hasło do uwierzytelniania: -

zrzut ekranu

Po wprowadzeniu hasła wychodzi z błędem: -

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

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

Wygląda więc na to, że coś jest nie tak ze środowiskiem wyświetlania.

Próbowałem też z, DISPLAY=:0 pkexec geditale nie działa.


Dostępne są następujące informacje man pkexec:

Środowisko, w którym PROGRAM je uruchomi, zostanie ustawione na minimalne znane i bezpieczne środowisko, aby uniknąć wstrzykiwania kodu przez LD_LIBRARY_PATH lub podobne mechanizmy. Ponadto zmienna środowiskowa PKEXEC_UID jest ustawiona na identyfikator użytkownika procesu wywołującego pkexec. W rezultacie pkexec nie pozwoli na uruchamianie aplikacji X11 jako inny użytkownik, ponieważ zmienne środowiskowe $ DISPLAY i $ XAUTHORITY nie są ustawione. Te dwie zmienne zostaną zachowane, jeśli adnotacja org.freedesktop.policykit.exec.allow_gui dla akcji jest ustawiona na niepustą wartość; jest to jednak odradzane i powinno się go stosować tylko w przypadku starszych programów.

Teraz nie wiem, co zrobić, aby to osiągnąć.

Pomóż mi więc dowiedzieć się, jak uruchamiać aplikacje GUI jako root za pomocą pkexec. Czy jest to możliwe, czy nie?


BTW, zainspirowany gparted-pkexecpoleceniem, które działa dobrze. Jak gpartedkorzystać pkexec?


(Później znaleziono) Powiązane: Jak skonfigurować pkexec?
Pandya

Sprawdź ten link, który zadziałał dla mnie.
TinyRickHole

Odpowiedzi:


11

Można to zrobić, dodając niestandardowe akcje do zestawu zasad. Jeśli chcesz uruchomić gedit jako root pkexec, musisz na przykład utworzyć nowy plik /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>

Wreszcie pkexec geditpowinno działać zgodnie z oczekiwaniami.


Odwiedź stronę podręcznika użytkownika lub instrukcję obsługi, która wyjaśnia to PRZYKŁADEM, np .:

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

Tak, w końcu znalazłem to również w manpage ( man pkexec)!
Pandya

Czy możesz mi pomóc na unix.stackexchange.com/q/204638/66803 ?
Pandya

@ Pandya, prawdziwym błędem jest „Odmowa świadczenia usługi zmarłym rodzicom”, pojawiają się raporty o błędach, kiedy go szukam. Aby obejść ten problem, możesz utworzyć plik wykonywalny w / usr / local / bin, który zawiera coś takiego: #! / bin / sh "pkexec" "nautilus" i uruchom go za pomocą F7. Myślę, że to powinno działać.
taliezin

DOBRZE. Próbowałem, tworząc plik wykonywalny, który działa dobrze z F7.
Pandya

2
Jestem naprawdę rozczarowany, że takie narzędzie zmusiło mnie do skonfigurowania czegoś poza / etc, a co gorsza w / usr / share zamiast / usr / local / share.
niels
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.