一、有界面
开机自启动的软件有界面或者脚本中有些操作涉及到界面
方法:/etc/xdg/autostart 下,.desktop文件实现开机启动
步骤1: 在/etc/xdg/autostart 目录下建立一个 test.desktop文件,并对 test.desktop文件进行以下编辑:
[Desktop Entry]
Name=Test #可执行文件名字
Exec=/root/Test #可执行文件路径
Type=Application #可执行文件类型
其中: Exec= ×××××× -------------某软件的启动命令或者执行的脚本路径
步骤2:test.desktop 需要有root权限
二、无界面
开机自启动的软件无界面或者脚本中不涉及到界面
方法1:/etc/rc.local
1、编辑 /etc/rc.local
vi /etc/rc.local
2、添加要执行的命令 在exit 0 之前
注意:里的执行命令都必须是全路径的。
- rc.local的启动是在用户登录之前,对于整个系统开机而言的启动程序执行,当程序执行完成后才会进入用户界面,所以当开机启动项过多,那么系统开机的时间就会变长。
- rc.local只能运行命令行程序,无法运行带界面的程序,运行带界面的程序会报错无法运行然后直接跳过该程序。
方法2: /etc/profile.d/
将脚本放到/etc/profile.d/目录下 并赋值777权限,开机后,会遍历/etc/profile.d/*.sh
方法3:systemd , 在/etc/systemd/user目录下创建一个systemd服务文件,配置好要执行的服务
步骤1 : 在/etc/systemd/user目录下创建一个systemd服务文件, 命名为user-defined.service(可以命名为以.service结尾的任何名称), 内容如下:
[Unit]
After=network.service
# After表示在哪个服务启动后启动我们的程序,After=network.service 表示网络连接完成后,启动我们的程序
[Service]
ExecStart=/home/hqc/test.sh # 此处只能绝对路径 -------------程序命令或者脚本
# ExecStart表示我们的脚本(步骤1中的test.sh)的执行路径
[Install]
WantedBy=default.target
# WantedBy默认填default.target,表示我们程序所在的服务组。
步骤2 : 将systemd服务文件和我们的脚本更改权限,使其可执行。
sudo chmod 744 ~/test.sh
sudo chmod 664 /etc/systemd/user/user-defined.service
步骤3: 加载系统的systemd服务文件,并启用我们自己写的user-defined.service文件。
sudo systemctl daemon-reload
systemctl --user enable user-defined.service
注: 取消开机自启动
systemctl --user disable user-defined.service
cd /etc/systemd/user
rm user-defined.service