使用sudo在终端中运行启动程序


8

我需要在启动时(在Lubunt上)在终端myscript.py中运行python脚本。该脚本需要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脚本,而无需用户干预。

我该怎么做?

Answers:


5

如果要在登录时而不是启动时使用它(因为我不知道如何在不启动X服务器的情况下打开LXTerminal),则必须在/ 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”时,我收到核心python模块(例如datetime)的“导入:未找到”错误。我认为我无法将这些模块复制到/ Jarvis /中,该怎么办?
布兰登2012年

@Brandon您可能必须设置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 2012年

9

可以通过启动以root用户身份启动的自定义脚本rc.local

/etc/rc.local使用根权限编辑:

sudo nano /etc/rc.local

并把线

python /home/d/Jarvis/alarm.py

就在最后一行之前,应该说exit 0。重新启动以查看是否有效。


这解决了我在Raspbian上自动启动程序的问题。
丹尼尔·哈里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.