Não é possível executar a aplicação GUI como um usuário diferente usando 'pkexec'

1

Eu criei o seguinte arquivo de políticas em /usr/share/polkit-1/actions/com.xyz.xyz.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>   
        <vendor>XYZ Technologies Inc.</vendor>   
        <vendor_url>http://www.xyz.com</vendor_url>   
        <action id="org.xyz.policykit.pkexec.run-xyz">
            <description>Run XYZ</description>
            <message>Authentication is required to run XYZ</message>
            <defaults>
                <allow_any>no</allow_any>
                <allow_inactive>no</allow_inactive>
                <allow_active>auth_admin</allow_active>
            </defaults>
            <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/xyz</annotate>
            <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>   
        </action> 
    </policyconfig>

e arquivo da área de trabalho em /usr/local/share/applications/xyz-gui-root.desktop

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Name[en_in]=XYZ administrator (root)
Exec=pkexec xyz
Comment[en_IN]=Launches XYZ administrator
Name=XYZ administrator (root)
Comment=Launches XYZ administrator
Icon[en_IN]=/xyz/xyzroot.png
Icon=/xyz/xyzroot.png

Quando pesquiso XYZ e executo Activity->Search , ele não mostra nenhuma atividade, nem mesmo solicita senha. Mas, ao clicar duas vezes no arquivo xyz-gui-root.desktop , ele funciona como esperado com a autenticação por senha.

Se eu mudar

Exec=pkexec xyz

como

Exec=gnome-terminal -x pkexec xyz

funciona bem com Activity->Search com autenticação, mas abre um terminal indesejado.

O que eu sinto falta nos arquivos acima? Como posso evitar que o terminal indesejado seja aberto com gnome-terminal entry? Existe alguma maneira de executar o aplicativo GUI com autenticação usando pkexec ou qualquer outro método como consolehelper ?

Obrigado antecipadamente!

    
por Nitinkumar Ambekar 16.12.2017 / 14:30

1 resposta

1

A resposta completa para minha pergunta é aqui . Resumindo:

1) Crie um script de shell como /usr/local/bin/foo.sh:

#!/bin/sh
pkexec "/usr/sbin/foo" "$@"

2) Dê permissão executável ao script acima:

chmod +x /usr/local/bin/foo.sh

3) Se você estiver usando o arquivo .desktop, altere o valor do Exec como:

Exec=/usr/local/bin/foo.sh

4) Verifique se o seu arquivo de políticas em / usr / share / polkit-1 / actions / possui a seguinte entrada para permitir a GUI:

<annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>

É isso!

    
por 18.12.2017 / 11:15