Por que o pkexec é preferido sobre o gksudo para aplicações gráficas?

10

Por favor, forneça a documentação do Ubuntu que refuta isso: https://help.ubuntu.com/community/RootSudo Por que, no meu sistema 13.04 totalmente atualizado, o pkexec não funciona?

$ pkexec gedit somefile.txt
No protocol specified

** (gedit:13135): WARNING **: Could not open X display
Cannot open display: 
Run '/usr/bin/gedit --help' to see a full list of available command line options
chili555
fonte
O pkexec não é uma queda no substituto do gksu. Não se destina a você executar manualmente assim.
psusi
2
Não perguntei nem mencionei gksu.
chili555
Uma resposta muito boa em fazer pkexeccorrer GUI sem configurar: askubuntu.com/a/332847/89385
akostadinov
Instale policykit-1-gnome. Veja aqui para detalhes e explicações.
user303371

Respostas:

7

Por que não funciona?

Por padrão pkexec, não permite executar aplicativos gráficos (X11). Na página do manual:

 The environment that PROGRAM will run it, will be set to a minimal
 known and safe environment in order to avoid injecting code through
 LD_LIBRARY_PATH or similar mechanisms. In addition the PKEXEC_UID
 environment variable is set to the user id of the process invoking
 pkexec.
     As a result, pkexec will not allow you to run X11 applications
     as another user since the $DISPLAY and $XAUTHORITY environment
     variables are not set.
 These two variables will be retained if the
 org.freedesktop.policykit.exec.allow_gui annotation on an action is set
 to a nonempty value; this is discouraged, though, and should only be
 used for legacy programs.

Conforme declarado na página de manual, você pode fazê-lo funcionar, embora eu realmente não saiba se isso é perigoso ou recomendado .

Para habilitar o gedit, por exemplo, você pode criar /usr/share/polkit-1/actions/com.ubuntu.gedit.policycom o seguinte conteúdo:

<?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.0/policyconfig.dtd">
<policyconfig>
  <vendor>gedit</vendor>
  <vendor_url>gedit</vendor_url>
  <icon_name>accessories-text-editor</icon_name>
  <action id="org.freedesktop.policykit.pkexec.gedit">
   <description>Run "gedit"</description>
   <message>Authentication is required to run Text Editor</message>
   <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>

Em seguida, pkexec geditdeve funcionar como esperado:

insira a descrição da imagem aqui

Como você pode imaginar, isso só vai dar geditcerto. Em teoria, se você adicionou allow_guiao "org.freedesktop.policykit.exec" (a ação padrão) isso deve funcionar para todos os aplicativos, mas nos meus testes obtive o mesmo resultado que o seu.

Por que o pkexec é preferido?

Aqui você pode encontrar uma discussão sobre os pontos fortes de pkexec.

Salem
fonte
3
Então, para aplicações gráficas, o gksudo é o preferido e NÃO o pkexec?
chili555
1
Eu acho. Se gksudoestiver disponível, é muito mais fácil usá-lo, em vez de criar ações únicas para cada aplicativo que você precisa usar (se não houver uma maneira "global" de fazê-lo).
Salem
1
@ Salem- Então me pergunto por que minha resposta foi editada e aprovada para usar o pkexec quando não se destina a ser usada para aplicativos gráficos e, como você pode ler, não funcionou. askubuntu.com/questions/313619/… Deve haver algo que eu não entendo.
Chile555
@ chili555 Se essa edição foi o que motivou sua pergunta, você deve fazer isso no Meta. Na 13.04, você precisa instalar gksudoou configurar pkexec(você também pode usar, sudo -imas isso não funcionará com Alt + F2, também conhecido como "Executar"). Acho o primeiro muito mais fácil. Se alguém pensa de outra maneira bem ... Para me parece errado sugerir algo que não vai funcionar como pretendido, mas eu pode estar faltando alguma coisa ...
Salem
1
pkexecrealmente pode executar GUI sem configuração: askubuntu.com/a/332847/89385
akostadinov