我想在我的 lightdm 身份验证成功后立即运行一个脚本,然后我的 Unity 开始加载。并且我想以 root 用户身份运行我的脚本。
启动脚本在 Unity 中的什么位置?
答案1
首先将您的脚本放入/usr/bin
并赋予执行权限。
现在创建 .desktop 文件,在/home/[user-name]/.config/autostart/
其中运行在启动时运行的脚本。
例如:让脚本的文件名为“example”或“example.sh”
使用 gedit 创建 .desktop 文件,包含以下几行,并将其另存为 filename.desktop/home/[user-name]/.config/autostart/
[Desktop Entry]
Type=Application
Exec=sudo example
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=myscript
Comment=Startup Script
在这里Exec=sudo example
或Exec=sudo example.sh
运行你的脚本作为根授予/usr/bin
.desktop 文件执行权限。
现在,脚本在启动时运行。
答案2
另一种可能性:
在中创建文件$HOME/.config/upstart/my-upstart-script.conf
start on desktop-start
stop on desktop-end
script
sudo fdisk -l > /home/[user-name]/upstart-test.txt
end script
更多详情暴发户:
http://ifdeflinux.blogspot.de/2013/04/upstart-user-sessions-in-ubuntu-raring.html
http://upstart.ubuntu.com/cookbook/
无需密码运行的信息sudo
:
答案3
运行命令以 root 身份,后登录,还有另一个简单的技巧:
它需要两个步骤:
- 创建一个扳机登录时的文件
- 创建一个 cronjob,由 root 运行(在 中设置
/etc/crontab
),以运行一个小脚本(运行你的命令)如果并且仅如果触发器文件存在。由于触发器文件被同一脚本删除,因此您的命令仅运行一次。
那么顺序就是:
USER LOGIN > trigger file is created > cronjob runs script (with your command) and removes trigger file, > next time the script passes, since the trigger file does not exist anymore
设置
两个小脚本:
一个用于在登录时创建触发文件:
#!/bin/sh
touch $HOME/.trigger
然后运行以下命令:
#!/bin/bash
FILE="/path/to/your/homedirectory/.trigger"
# don't use $HOME here, since you run it by root
if [ -f $FILE ]; then
<your command here, run by root>
rm -f $FILE
fi
- 将两个脚本复制到两个空文件中,并将它们保存为
create_trigger.sh
和run_command.sh
。 - 为了方便起见,使它们都可执行。
将以下命令添加到启动应用程序(Dash > 启动应用程序 > 添加)
/path/to/create_trigger.sh
将以下行添加到文件
/etc/crontab
(sudo nano /etc/crontab
):* * * * * root /path/to/run_command.sh
现在,定义的命令从登录后一分钟内运行一次。