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 0xF
sem 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.