Como criar um atalho na área de trabalho que inicia um programa de linha de comando como root sem exigir senha

Como criar um atalho na área de trabalho que inicia um programa de linha de comando como root sem exigir senha

Estou tentando criar um atalho na área de trabalho que altera a entrada do meu monitor, executando sudo /usr/bin/ddcutil -d 1 setvcp 60 0xFsem exigir uma senha. Eu fiz uma entrada nosudoers.ddiretório e se o comando for executado a partir do terminal, nenhuma senha será necessária conforme o esperado, mas quando clico no atalho ele solicita uma senha. Como o que precisa ser feito para que esse atalho funcione sem senha?

Arquivo .desktop:

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Windows 10
Comment=Switch Display to Windows Virtual Machine
Icon=/usr/share/icons/windows-icon.png
Terminal=true
Exec=sudo /usr/bin/ddcutil -d 1 setvcp 60 0xF

arquivo sudoers:

myusername ALL = NOPASSWD: /usr/bin/ddcutil

A soluçãoaquinão funciona porque o gksu está obsoleto e está usandopkexecem vez disso, conforme sugerido em uma das respostas, ainda solicita uma senha.

Responder1

A solução parece estar usandopkexeccom umKit de políticasconfiguração.Esta respostacobre mais detalhes sobre as configurações do PolicyKit. Ele é voltado para a execução de aplicativos GUI sem a necessidade de senha, mas também se aplica principalmente a aplicativos não gráficos.

No meu caso, o arquivo .desktop foi atualizado para substituirsudocompkexec.Terminais=pode ser definido comoverdadeirooufalso:

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Windows 10
Comment=Switch Display to Windows Virtual Machine
Icon=/usr/share/icons/windows-icon.png
Terminal=false
Exec=pkexec /usr/bin/ddcutil -d 1 setvcp 60 0xF

Então, uma entrada no PolicyKit teve que ser feita em/usr/share/polkit-1/actions/com.ubuntu.pkexec.ddcutil.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>

  <action id="com.ubuntu.pkexec.ddcutil">
    <defaults>
      <allow_active>yes</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/ddcutil</annotate>
  </action>

</policyconfig>

/var/log/auth.logparece ser onde as mensagens do PolicyKit são registradas, se necessário para depuração.

informação relacionada