Não é permitido executar pkexec
no plano de fundo por fork e exec e, em seguida, finalizar o pai. O processo se torna órfão e pertence a init
(ppid == 1). Consulte o link .
Você está dando o controle de um aplicativo para outro usuário (geralmente root). A maneira padrão é executar o aplicativo com pkexec
como root em um script de shell. Desta forma, o pai é um shell e não init
.
g. GParted ( /usr/bin/gparted-pkexec
) e GameConqueror ( /usr/bin/gameconqueror
) fazem isso como mostrado abaixo:
-
Crie um script de shell como
/usr/local/bin/foo.sh
:#!/bin/sh pkexec "/usr/sbin/foo" "$@"
-
Conceder permissão executável ao script acima:
chmod +x /usr/local/bin/foo.sh
-
Se você estiver usando o arquivo
.desktop
, altere o valorExec
como:Exec=/usr/local/bin/foo.sh
-
Certifique-se de que seu arquivo de políticas em
/usr/share/polkit-1/actions/
tenha a seguinte entrada para permitir a GUI:<annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
É isso!