我需要在/usr/bin
启动时使用 sudo/root 权限启动一个脚本和一个二进制文件。我尝试了论坛上的许多指南,但都不起作用(rc.local
和systemd
风格,Upstart)——也许我做错了什么。我的操作系统是 Ubuntu GNOME 16.10。
脚本大概是这样的
#!/bin/bash
sudo ./usr/bin/myprogram
sudo bash /home/USER/script.bash
脚本和程序都是可执行的。我只是不知道在启动时使用 sudo 启动它们的最佳方法。
请温柔一点。我是新用户。
答案1
对于不需要 GUI 的命令行应用程序,只需将其调用放入 即可/etc/rc.local
,它已以 root 身份运行,因此不需要sudo
。下面是我自己的示例/etc/rc.local
,我使用它来启动两个监视脚本。
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/home/xieerqi/bin/batmon.sh &
/home/xieerqi/bin/sh/temperature.sh &
exit 0
对于 GUI 应用程序,您需要采取不同的方法。您需要打开启动应用程序应用程序,然后添加以下命令:
bash -c "sleep 10;gksu /usr/bin/my_vpn_program"
这样做的目的是给 GUI 足够的时间启动,10 秒,然后会弹出密码对话框,如果您正确输入密码,则会启动您的命令。实际上这是一个迷你 bash 脚本。您可以改用pkexec
,有些人甚至会说pkexec
推荐使用 而不是gksu
。
或者,如果您不想每次都输入密码,您可以允许您的用户以 root 权限运行此特定命令而无需身份验证。为此,您需要编辑/etc/sudoers
文件。警告:建议您使用sudo visudo
从终端编辑文件。下面是我如何使用相同设置和pm-suspend
命令的示例:
# Allow using pm-suspend for my user without password
my_username_here ALL = NOPASSWD: /usr/sbin/pm-suspend
此行应附加到文件末尾/etc/sudoers
并保存。请注意,您仍需要将sudo
或附加gksu
到您设置的每个命令的开头。因此,您需要使用bash
我之前显示的相同命令。
答案2
解决方案非常简单,您错过了它。:) 因为 rc.local 由 root 运行,所以文件中的 sudo 完全没有必要。
换句话说,按照你的建议将其放入 rc.local 中,但从sudo
脚本中省略 。它们完全没有必要,因为 rc.local 已经以 root 身份运行。
希望这可以帮助!
答案3
使用crontab
选项让脚本在重启后运行,
@reboot
您可以通过添加代码来实现计划任务
以root用户打开crontab:
$ sudo crontab -e
在底部添加下一条记录:
@reboot /usr/bin/myprogram
那将会实现你想要的效果。