Запуск программы запуска в терминале с помощью sudo

8

Мне нужно запустить скрипт Python в терминале, myscript.py при запуске (на Lubunt). Этот скрипт требует root.

Я настроил .desktopфайл, который запускает следующую команду:

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

Окно терминала открывается при запуске и запускает скрипт, но затем закрывается, когда скрипт Python возвращает ошибку (потому что он не запускается от имени root). Когда я перехожу на Exec=это ...

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

... (префикс команды с sudo), который работает. Тем не менее , терминал открывается при запуске и отображает

[sudo] password for d: \

подсказка, требуя от меня ввести мой пароль. Я хотел бы, чтобы выполнение скрипта Python при запуске было полностью автоматическим без вмешательства пользователя.

Как я могу сделать это?

Brandon
источник

Ответы:

5

Если вы хотите это при входе в систему, а не при запуске (поскольку я не вижу, как можно открыть LXTerminal без запуска X-сервера), вам нужно добавить исключение в файл / etc / sudoers, чтобы вас не запрашивали твой пароль.

Для этого запустите, sudo visudoа затем добавьте следующее:

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

Убедитесь, что вы добавили это в конец файла, чтобы это работало. Я также установил бы права alarm.pyна исполняемый файл для этой работы. Итак, сделайте это, чтобы установить его как исполняемый файл:

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

Надеюсь, поможет!

KROQ-gar78
источник
Это работает! Спасибо огромное! У меня все еще есть одна проблема ... Когда я запускаю «alarm.py» вместо «python alarm.py», я получаю ошибки «import: not found» для основных модулей python (например, datetime). Я не думаю, что смогу скопировать эти модули в / Jarvis /, что мне делать?
Брэндон
@ Брендон Возможно, вам придется установить PYTHONPATHпеременную, но это всего лишь предположение. Для этого, я хотел бы создать сценарий под названием «alarm_starter.sh» со следующим содержимым: PYTHONPATH={what ever it should be} sudo /home/d/Jarvis/alarm.py. Я действительно не уверен в этом, хотя. Может быть, это поможет: docs.python.org/tutorial/modules.html#the-module-search-path
kroq-gar78
9

Пользовательские сценарии, которые выполняются при запуске от имени пользователя root, могут быть запущены через rc.local.

Изменить /etc/rc.localс правами root:

sudo nano /etc/rc.local

и поставить линию

python /home/d/Jarvis/alarm.py

как раз перед последней строкой, которая должна сказать exit 0. Перезагрузитесь, чтобы увидеть, сработало ли это.

Phoibos
источник
Это решило мою проблему для автозапуска программ на Raspbian.
Даниэль Харрис