麒麟系统开机自启动需按程序类型选机制:一、图形界面添加.desktop;二、复制.desktop至~/.config/autostart/;三、配置systemd用户服务;四、配置systemd系统服务;五、通过rc.local脚本。

你想让某个软件在麒麟系统启动时自动运行,但不确定该用图形界面、配置文件还是服务机制——不同软件类型对应不同生效路径,选错会导致程序不启动或权限失败。
用图形界面添加自启动项
适合普通桌面应用(如Firefox、WPS、自定义GUI程序),无需命令行,设置后立即可见、可开关。
点击左下角“开始菜单” → 打开“设置” → 进入“系统”模块 → 切换到“开机启动”选项卡。
点击“添加自启动程序”,在弹出窗口中填写程序名称,并在“命令”栏输入【绝对路径】:可以是可执行文件(如/usr/bin/vlc),也可以是.desktop文件(如/usr/share/applications/gedit.desktop)。
点“添加”后,新条目出现在列表中,右侧开关默认启用;重启前可手动关闭测试效果。
复制.desktop文件到用户级autostart目录
适合脚本、终端程序或需绕过图形设置的批量部署场景,仅对当前用户生效,且能确保X11环境就绪后再执行。
方法一:直接复用系统已有.desktop文件
先确认目标程序存在.desktop文件,常见位置是/usr/share/applications/;例如vlc.desktop存在,则执行:
mkdir -p ~/.config/autostart && cp /usr/share/applications/vlc.desktop ~/.config/autostart/
方法二:手写一个专用于脚本的.desktop文件
新建文件myscript.desktop,内容如下:
[Desktop Entry]
Name=我的备份脚本
Type=Application
Exec=/bin/bash -c "/home/kylin/bin/backup.sh"
Terminal=false
Hidden=false
【Exec字段必须用绝对路径,且显式调用/bin/bash,否则shell特性(如变量、重定向)会失效】
保存后执行:chmod 644 ~/.config/autostart/myscript.desktop。
配置systemd用户级服务(登录前启动)
适合需要守护、自动重启、依赖网络就绪的后台程序,比如Ollama、自建API服务、日志监控脚本——它在你登录前就已运行,不依赖桌面会话。
第一步:创建服务文件目录并新建服务单元
mkdir -p ~/.config/systemd/user && nano ~/.config/systemd/user/myapp.service
第二步:填入标准配置,注意替换实际路径
[Unit]
Description=My App Service
After=network.target
[Service]
Type=simple
ExecStart=/home/kylin/app/run.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target
第三步:启用服务
systemctl --user daemon-reload
systemctl --user enable --now myapp.service
这一步执行后,服务立即启动,并在下次登录时自动拉起。若未生效,检查systemctl --user status myapp.service输出中的错误提示。
配置systemd系统级服务(真正开机即启)
适合必须以root身份、在系统启动早期(甚至网络未通时)就运行的关键服务,如防火墙规则加载、硬件初始化脚本、数据库服务。
用sudo创建服务文件:sudo nano /etc/systemd/system/mycritical.service
填入以下内容(务必使用绝对路径,User/Group明确指定):
[Unit]
Description=Critical System Service
Wants=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/opt/mytool/init.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
设置权限:sudo chmod 644 /etc/systemd/system/mycritical.service
重载并启用:sudo systemctl daemon-reload && sudo systemctl enable --now mycritical.service











