Como executo aplicativos GUI como root usando o pkexec?

14

Estou usando o Trisquel GNU / Linux-Libre, que vem com o Gnome3 Flashback Desktop Environment.

Eu sei que posso executar aplicativos GUI como root por sudo& gksudomas quero saber que Como faço para executar aplicativos GUI como root com a ajuda de pkexec?

Quando tento executar gedit(ou qualquer outro aplicativo como nautilus:) até pkexec geditentão, ele solicita a senha para autenticação: -

captura de tela

Após digitar a senha, ela sai com erro: -

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

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

Então, parece que algo está errado com o ambiente de exibição.

Eu também tentei com, DISPLAY=:0 pkexec geditmas não funciona.


As informações a seguir estão disponíveis em man pkexec: -

O ambiente em que o PROGRAM o executará será definido como um ambiente conhecido e seguro mínimo para evitar a injeção de código por meio de LD_LIBRARY_PATH ou de mecanismos semelhantes. Além disso, a variável de ambiente PKEXEC_UID é configurada para o ID do usuário do processo que chama o pkexec. Como resultado, o pkexec não permitirá que você execute aplicativos X11 como outro usuário, pois as variáveis ​​de ambiente $ DISPLAY e $ XAUTHORITY não estão definidas. Essas duas variáveis ​​serão mantidas se a anotação org.freedesktop.policykit.exec.allow_gui em uma ação for configurada para um valor não vazio; isso é desencorajado, porém, e deve ser usado apenas para programas herdados.

Agora não sei o que fazer para conseguir isso.

Assim, ajude-me a descobrir como executar aplicativos GUI como root por meio de pkexec. Ou isso é possível ou não?


Entre, inspirado pelo gparted-pkexeccomando que funciona bem. Como gpartedusar pkexec?

Pandya
fonte
(Mais tarde encontrado) Relacionado: Como configurar o pkexec?
Pandya
Confira este link que funcionou para mim.
TinyRickHole 24/03

Respostas:

10

Isso pode ser feito adicionando ações personalizadas ao kit de políticas. Se você deseja executar o gedit como root pkexec, deve criar um novo arquivo, /usr/share/polkit-1/actions/org.freedesktop.policykit.gedit.policypor exemplo:

<?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 geditdeve funcionar como esperado.


Visite a página de manual ou o Manual de Referência, que explica com EXEMPLO, 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
fonte
Sim, finalmente encontrei também na página de manual ( man pkexec)!
Pandya
Você pode me ajudar em unix.stackexchange.com/q/204638/66803 ?
Pandya
@ Pandya, o erro real é "Recusando prestar serviço a pais mortos", existem alguns relatórios de erros quando pesquisei por ele. Como solução alternativa, você pode criar um arquivo executável em / usr / local / bin, que contém algo como: #! / bin / sh "pkexec" "nautilus" e execute-o com F7. Eu acho que isso deve resultar.
Taliezin 22/05/2015
ESTÁ BEM. Eu tentei tornar o executável que está funcionando bem com o F7.
Pandya 23/05
2
Estou realmente desapontado que essa ferramenta tenha me forçado a configurar algo fora de / etc e pior ainda em / usr / share em vez de / usr / local / share.
niels