Запуск программы запуска в терминале с помощью 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 при запуске было полностью автоматическим без вмешательства пользователя.

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

Ответы:


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

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


Это работает! Спасибо огромное! У меня все еще есть одна проблема ... Когда я запускаю «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. Перезагрузитесь, чтобы увидеть, сработало ли это.


Это решило мою проблему для автозапуска программ на Raspbian.
Даниэль Харрис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.