这次外场试验过程中,因为工控机不知道何时开机,何时关机、或者因为异常会重启,所以,为了能够在工控机启动的时候就自动拉起来我们的脚本或者程序,我们要将这些脚本或者程序设置为开机自启动的问题。弄到凌晨1:30才搞定。这里记录一下。难者不会,会者不难。
1. 需求描述
(1)有需要在terminal运行./xxx.sh脚本形式的自启动需求
(2)有需要在terminal运行./yyy agr1 arg2 agr3这种可执行程序的自启动需求
(3)yyy程序运行过程中会弹出新的窗口(这里是弹出一个视频窗口实时显示解析出来的视频或者图像数据)
(4)这些脚本或者可执行程序的输入要重定向到文件中保存下来。
2. 初步尝试
(1) 原来也曾经搞过rc.local这种方式的自启动,这次放进去发现根本不行。后面仔细查看了rc.local这种面向的应用。发现:rc.local是面向操作系统加载完毕,但是在用户登录之前进行操作的,也就是系统还没有登录。那么这个时候,因为还没有登录系统,当然就没有用户的概念了(不知道是哪个用户,也可能就是root用户),这个时候自然也就没办法启动命令行,然后启动想要的脚本或者配置程序啦。(ubuntu 18.04里面没有rc.local了,需要自己建)
在/etc/rc.local中添加启动脚本,放到exit 0 前面才行。(ubuntu18 开机启动脚本(程序) - 知乎)
#!/bin/bash -e
cd /home/ok/
./test > /root/test/test.txt
exit 0
(2) 将脚本(或者将程序包装到脚本里)放到/etc/init.d目录下,然后给文件增加权限
chmod +750 test.sh
然后执行命令,设置开机自动启动
sudo update-rc.d test.sh defaults
(3)创建startup application项
先设置系统自动登录(因为不登录,后面的程序都没法执行,因为这种方式下,需要从用户的配置文件里找启动项,不启动的话,不知道从哪里找)
在ubuntu应用程序中搜索startup Applications 找到开机自启动选项点击打开. 点击add
-> 在Name
中写入你要启动的程序或脚本的名字(你自己定义) Command
中写入gnome-ternimal -x bash -i -c"/home/xx/Documents/xx.sh",
点击add 就成功添加了xx.sh开机自启.
startupRun.sh示例
#!/bin/bash
date; sleep 5; date;
gnome-terminal&
/mnt/hgfs/E/river/hikvision/CH_HCNetSDK_Linux64/consoleDemo/linux64/lib/sdkTest
date; sleep 1h; date;
修改/etc/profile,添加程序执行环境,同样保存之后使用source执行该文件对所有用户生效。这个是解决自启动的程序需要调用其他的库文件的情况,如果库文件已经在系统lib目录下,就不需要设定了。
示例:
//user add
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/hgfs/E/river/hikvision/CH_HCNetSDK_Linux64/lib:/mnt/hgfs/E/river/hikvision/CH_HCNetSDK_Linux64/lib/HCNetSDKCom
其实这种方式最简单,我们一直出错的原因是我们没有写-i这个参数,我们写的是gnome-ternimal -x bash -c "/home/xx/Documents/xx.sh",少了-i,把这个加上去,就米有问题了。
(4)在/home/xx/.config/autostart/ 下添加.desktop
在.config下的autostart下创建aa.desktop 文件(若autostart文件夹不存在则手动创建)
设置程序的.desktop文件
通过将应用程序的.desktop文件放在自启动目录下,那么当用户登陆桌面环境时,就会自动启动这些应用程序。
把设置好的.desktop放在这个目录下,那么指定的程序就会在桌面环境启动时启动。
.desktop
Desktop Entry
文件是 Linux 桌面系统中用于描述程序启动配置信息的文件,它以.desktop
为后缀名,相当于Windows系统下的桌面快捷方式。通常一个二进制可执行程序是一个没有后缀没有图标的文件,不可以随意移动。
desktop 文件的基本模板
以 Kgt.desktop
为例
[Desktop Entry]
Name=<应用程序名>
Type=Application
Exec=<应用程序完整路径>
Icon=<应用程序图标的完整路径>
Terminal=<指定是否在终端内运行>
StartupNotify=<>
Categories=<程序类别>
Encoding=<编码>
- Name: desktop 文件最终显示的名称(一定要注意和 desktop 文件名的区别)
- Type: 用于指定 desktop 文件的类型(包括 3 种类型:Application、Link、Directory)
- Exec: 用于指定二进制可执行程序的完整路径
- Icon: 指定应用程序图标的完整路径(可以省略后缀名)。图标支持 png 格式、svg 格式等,图标的推荐尺寸为 128x128。
- StartupNotify:
- Categories:主要用于菜单展示归类
开机启动
先提供权限,是启动器可以被打开chmod 755 Kgt.desktop
将 Kgt.desktop
文件移动到 ~/.config/autostart/
开机启动登录到用户后,应用会自动启动。
如需取消删除该文件就可以了。
其他的参考:
Ubuntu添加和设置开机自动启动程序的方法_酱汁_51CTO博客
https://blog.csdn.net/liurunjiang/article/details/78595073