Executando um programa de inicialização no terminal com sudo

8

Eu preciso executar um script python em um terminal, myscript.py na inicialização (no Lubunt). Este script requer raiz.

Eu configurei um .desktoparquivo que executa o seguinte comando:

lxterminal --command="python /home/d/Jarvis/alarm.py && /bin/bash"

A janela do terminal é aberta na inicialização e executa o script, mas fecha quando o script Python retorna um erro (porque não está sendo executado como raiz). Quando eu mudo Exec=para isso ...

lxterminal --command="sudo python /home/d/Jarvis/alarm.py && /bin/bash"

... (comando de prefixo com sudo) que funciona. No entanto , o terminal é aberto na inicialização e exibe o

[sudo] password for d: \

prompt, exigindo que eu digite minha senha. Eu gostaria que a execução do script python na inicialização fosse completamente automática, sem interação do usuário.

Como posso fazer isso?

Brandon
fonte

Respostas:

5

Se você quiser no login e não na inicialização (como não vejo como o LXTerminal pode ser aberto sem que o servidor X esteja ativo), é necessário adicionar uma exceção ao arquivo / etc / sudoers para que você não seja solicitado sua senha.

Para fazer isso, execute sudo visudoe adicione o seguinte:

<your username> ALL = NOPASSWD: /home/d/Jarvis/alarm.py

Certifique-se de adicionar isso no final do arquivo para que isso funcione. Eu também definiria as permissões de alarm.pycomo executável para que isso funcionasse. Portanto, faça isso para defini-lo como executável:

chmod +x /home/d/Jarvis/alarm.py

Espero que ajude!

kroq-gar78
fonte
Isso funciona! Muito obrigado! Ainda tenho um problema ... Quando executo "alarm.py" em vez de "python alarm.py", recebo erros 'import: not found' para os principais módulos python (por exemplo, datetime). Acho que não consigo copiar esses módulos para / Jarvis /, então o que faço?
Brandon
@Brandon Você pode ter que definir a PYTHONPATHvariável, mas isso é apenas um palpite. Para isso, eu iria criar um script chamado 'alarm_starter.sh' com o seguinte conteúdo: PYTHONPATH={what ever it should be} sudo /home/d/Jarvis/alarm.py. Eu realmente não tenho certeza disso, no entanto. Talvez isto ajude: docs.python.org/tutorial/modules.html#the-module-search-path
KROQ-gar78
9

Scripts personalizados que são executados na inicialização como raiz podem ser executados via rc.local.

Edite /etc/rc.localcom direitos de root:

sudo nano /etc/rc.local

e colocar a linha

python /home/d/Jarvis/alarm.py

pouco antes da última linha, o que deveria dizer exit 0. Reinicie para ver se funcionou.

phoibos
fonte
Isso resolveu meu problema para programas de inicialização automática no Raspbian.
21717 Daniel Daniel