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?

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!


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.


Isso resolveu meu problema para programas de inicialização automática no Raspbian.
21717 Daniel Daniel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.