背景: 

在上一篇打包好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模式尝试恢复,输入密码后在半秒内报错,又返回到输入用户的地方,用手机录视频慢放发现会报错导致重置。

linux 银河麒麟设置java环境变量 银河麒麟修改环境变量_qt

最终解决办法是进入单用户模式,在跳过用户登录的情况下,删除了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/

6.这时打开左下角的系统菜单,可以找到该desktop文件出现在软件列表内。点击系统设置——系统——开机启动——添加自启动程序,将该desktop文件选中即可实现开机自启