Я установил MythBuntu на компьютер. MythTV не поддерживает Пульт Asus AI ИК-приемник, поэтому я искал возможные решения. Один из них был Скрипт Python который действует как мост между окном терминала и целевым приложением.
Его должен выполнять обычный пользователь Bjorn с привилегиями root (sudo) между входом пользователя в систему и загрузкой MythTV без запроса пароля. Пока я пытался поставить python Linux_Asus_AI_remote.py, sudo Linux_Asus_AI_remote.py, sudo python Linux_Asus_AI_remote.py в /etc/rc.local
Вопросы:
Он должен выполняться после входа пользователя в систему, MythTV запускается автоматически и получает фокус, получая нажатия клавиш, генерируемые из Linux_Asus_AI_remote.py
выполняется ли rc.local до или после входа пользователя в систему?
Как безопасно выполнить скрипт с правами root, не спрашивая у пользователя пароль? (Имейте в виду, что приложение должно продолжать работать в фоновом режиме, а у пользователя, когда ему требуются дополнительные привилегии, по-прежнему нужно запрашивать пароль.)
Скрипт-тест:
После входа пользователя в систему я открыл окно терминала и вошел sudo python Linux_Asus_AI_remote.py. Все работает нормально, как только я ввел правильный пароль и переключился на MythTV.
Он не должен завершать скрипт через 15 минут, и пользователю все равно необходимо ввести пароль, чтобы получить дополнительные разрешения.
Заранее спасибо.
вам, вероятно, нужно разрешить выполнение сценария, изменив разрешения на 755.
Я быстро погуглил и нашел это: http://embraceubuntu.com/2005/09/07/adding-a-startup-script-to-be-run-at-bootup/
Я уверен, что принцип тот же для скрипта Python.
rc.local запускается при загрузке системы, то есть задолго до входа пользователя в систему.
У вас есть два варианта запуска сценария. Один из них - использовать visudo (8) для настройки команды, разрешающей запуск, с NOPASSWD:
в записи команды, а затем просто используйте sudo для запуска команды, возможно, из / etc / profile и любых других файлов, необходимых для любых оболочек, которые люди могут использовать. Это может быть так же просто, как сбросить что-нибудь в /etc/profile.d/, если он существует. Например, если все, кто авторизуется, будут в группе video
тогда когда ты бежишь visudo
вам нужно такое правило:
%video ALL=NOPASSWD: /path/to/Linux_Asus_AI_remote.py
а затем вы должны вызвать:
sudo /path/to/Linux_Asus_AI_remote.py
Другой вариант - использовать pam_exec
запускать команду после входа в систему с правами root; это чище, но более опасно, потому что, если вы сделаете ошибку, вы можете пропустить свою систему и не сможете войти в систему. Если вы хотите изучить это, прочтите модули PAM и то, как работают аутентификация и авторизация, и посмотрите в /etc/pam.d/; Кроме того, хорошо подумайте, как вы ограничите это действие только для соответствующих пользователей.
Какой бы метод вы ни выбрали, вы, вероятно, захотите убедиться, что он не произойдет, если вы войдете в систему как root, чтобы уменьшить мусор, который позволяет пользователю с правами администратора войти в систему.