Eu coloquei essa linha sudoers
:
Cmnd_Alias NVIDIA = /sbin/sh -c 'echo ON > /proc/acpi/bbswitch; modprobe nvidia; modprobe nvidia_drm modeset=1'
user ALL=(ALL) ALL, NOPASSWD: /sbin/systemctl suspend,NVIDIA
Meu sudo -l
me mostra:
sudo -l
User user may run the following commands on devbox:
(ALL) ALL, NOPASSWD: /sbin/systemctl suspend, /sbin/sh -c 'echo ON > /proc/acpi/bbswitch; modprobe nvidia; modprobe nvidia_drm modeset\=1'
No entanto, se eu tentar executar /sbin/sh -c 'echo ON > /proc/acpi/bbswitch; modprobe nvidia; modprobe nvidia_drm modeset=1'
, ainda serei solicitado a inserir a senha.
Suspeito que haja algo sobre =
o sinal que tenho no modeset
argumento para carregamento da nvidia.
Primeiro, certifique-se de sempre usar
visudo
para editar arquivos/etc/sudoers
. Ele realizará verificações de sintaxe para você, de modo que é menos provável que você se exclua.Agora, use esse comando para remover a primeira vírgula inadequada (entre
ALL
eNOPASSWD
):A seguir, saiba que seu
modeset
comando é muito complexo para ser definido de forma direta e confiável nosudoers
arquivo. Considere este comando (com ou semsudo
):As aspas serão analisadas pelo seu próprio shell (interativo) e a string citada será passada como uma única palavra. O
sh
verá dois argumentos-c
edate >/tmp/date
; as aspas nunca são vistas pelo comando. Da mesma forma, as citações aqui nunca serão vistas porsudo
:O
sudo
verá três argumentossh
,,-c
edate >/tmp/date
.Portanto, minha sugestão seria que você criasse um script de shell curto que executasse a ação necessária e o adicionasse ao seu
sudoers
arquivo. (Execute o seguinte bloco de comandos como root - usesudo -s
para obter um shell de root.)Agora adicione esta linha
sudoers
usando ovisudo
comando:Depois
/usr/local/bin
de adicionado ao seu,$PATH
basta invocá-lo com sua conta de usuário normal como um comando padrão,