我在电脑上安装了 MythBuntu。MythTV 不支持华硕AI遥控器红外接收器,所以我寻找可能的解决方案。其中一个是Python 脚本它充当终端窗口和焦点应用程序之间的桥梁。
它需要由普通用户执行比约恩在用户登录和 MythTV 加载之间使用 root 权限 (sudo),无需输入密码。到目前为止,我尝试过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 分钟后终止脚本,并且用户仍然需要输入密码才能获得额外的权限。
提前致谢。
答案1
rc.local 在系统启动时运行,因此在用户登录之前就运行了。
您有两种运行脚本的选项。一种是使用 visudo(8) 设置允许运行的命令,NOPASSWD:
在命令条目中使用标签,然后只需使用 sudo 启动命令,可能来自 /etc/profile 以及人们可能使用的任何 shell 所需的任何其他文件。如果存在 /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 身份登录时会发生这种情况,以减少让管理员用户进入系统所涉及的麻烦。
答案2
您可能需要通过将权限更改为 755 来允许执行该脚本。
我快速谷歌了一下并发现了这一点: http://embraceubuntu.com/2005/09/07/adding-a-startup-script-to-be-run-at-bootup/
我确信 Python 脚本的原理是一样的。