背景:
在上一篇打包好QT程序后,项目还要求做成自动开机自启,于是再一次开始摸索如何开机自启。原本我以为是项很小很简单的工作,没想到在银河麒麟下如此艰难,甚至搞崩了两次系统,差点重装。
踩坑的方法:
一、通过修改/etc/rc.local文件来实现通过脚本开机自启,具体可参考类似的文章,
这种方法我尝试过,但是不知道为什么,echo语句生成文件可以成功,但是就是执行不了sh脚本文件。修改后直接运行可以执行sh文件,但是开机时echo语句生成文件可以触发,但是就是出不来sh脚本文件,最终放弃。
二、通过修改/etc/profile文件实现开机自启(该方法一定要谨慎!)
- 我在寻找其他攻略的时候看到一篇修改profile文件的文章,通过
sudo vim /etc/profile
在其末尾加入
cd xx/xx/xx/
./xx.sh
然后重启机子,用户登录后会发现,可以开机自启sh脚本文件了!
但是!关闭qt程序后发现会报一个系统的错,并且桌面打不开,终端也打不开。最终进入TTY模式将profile文件中新增的代码删去才恢复正常(如何通过TTY模式修改可参考下一篇)
- 恢复正常后我又尝试其他方法,反正大不了坏了还可以利用TTY模式补救。随后又看到一篇,在/etc/profile.d/文件夹内放置脚本文件,开机会自动触发。于是我写了一个简单的脚本,通过其触发打包好的脚本,重启后可以自启QT程序!而且关闭后没有报错!
但是关闭后系统会立刻返回到登录界面,循环往复根本进不了桌面。于是我进入TTY模式尝试恢复,输入密码后在半秒内报错,又返回到输入用户的地方,用手机录视频慢放发现会报错导致重置。
最终解决办法是进入单用户模式,在跳过用户登录的情况下,删除了profile.d文件夹内新放进去的脚本。
成功的方法:
该方法使用desktop文件,和网上其他方法不太一样,通过local文件代替sh文件,因为不知道什么原因sh文件平时可以执行,开机无法自动执行。
1.首先找个位置新建一个xxx.local文件,其内容如下
#!/bin/sh
cd /home/qilin/桌面/package/
./xxx.sh
#中间这一段就是脚本的内容,可自行填写
exit 0
该local文件的功能可以理解为sh文件
2.右键local文件,属性——权限——可执行勾选,打开终端输入sudo chmod +x xxx.local
3.然后新建xxx.desktop文件,其内容如下
[Desktop Entry]
Name=xxx //此处写文件名
Exec=/home/qilin/xx.local //此处写上一步创建的local文件的路径
Icon=/home/qilin/桌面/package/icon.png //此处是图标样式,可用default
StartupNotify=false
Terminal=false
Type=Application
Categories=Network;
StartupWMClass=generalstartup
4.右键该desktop文件,属性——权限——可执行勾选
5.终端输入
sudo chmod +x xxx.desktop
sudo mv xxx.desktop /usr/share/applications/