Gnome 3 - atalho de teclado personalizado para executar o comando como root?

1

As teclas de função de luz de fundo do meu teclado parecem não funcionar, então escrevi um script para alterar o brilho do teclado, que deve ser executado como root. É invocado assim ...

sudo /usr/bin/local/backlight inc
sudo /usr/bin/local/backlight dec 

Isso funciona bem no terminal, mas não funciona como o comando de um atalho de teclado personalizado que criei por meio das configurações do teclado.

Apenas supondo aqui, mas o problema pode ser que o comando, quando chamado pelo atalho de teclado, não esteja sendo executado sob o meu usuário, mas como outra pessoa, que não estaria no arquivo sudoers?

    
por Josiah 02.10.2014 / 08:20

2 respostas

1

O Gnome 3 usa um mecanismo de autorização chamado polkit , portanto, o caminho certo para execute esse executável como root por meio do pkexec :

pkexec allows an authorized user to execute PROGRAM as another user. If username is not specified, then the program will be executed as the administrative super user, root.

Para autorizar o usuário na sessão ativa a executar esse comando como root, você terá que definir uma nova ação (conforme a especificação acima) por meio de um arquivo XML em /usr/share/polkit-1/actions , vamos chamá-lo de org.fedora.pkexec.kbback.policy .

Conteúdo de /usr/share/polkit-1/actions/org.fedora.pkexec.kbback.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>

  <icon_name>input-keyboard</icon_name>
  <action id="org.fedora.pkexec.kbback">
    <message>Authentication is required to Change Keyboard Backlight</message>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/usr/local/bin/backlight</annotate>
  </action>

</policyconfig>

O próximo passo é atribuir os comandos aos seus atalhos de teclado através das configurações do teclado do GNOME:

pkexec /usr/local/bin/backlight inc
pkexec /usr/local/bin/backlight dec 

(nota: usei /usr/local/bin/backlight como o caminho para o meu executável, você terá que alterar o arquivo de ação e os dois comandos se o caminho do seu executável for diferente)

    
por 02.10.2014 / 22:17
0

Acho que você precisa usar gksudo neste caso. Cito a partir da página gksudo(1) man:

gksu is a frontend to su and gksudo is a frontend to sudo. Their pri‐ mary purpose is to run graphical commands that need root without the need to run an X terminal emulator and using su directly

Portanto, parece que o problema aqui é que os comandos iniciados pelo atalho de teclado não têm um (pseudo) dispositivo de terminal conectado a eles, o que faz com que sudo falhe e gksudo seja usado.

    
por 02.10.2014 / 08:43