ubuntu上设定用户编译的程序或者.sh脚本开机自启动的方法

这次外场试验过程中,因为工控机不知道何时开机,何时关机、或者因为异常会重启,所以,为了能够在工控机启动的时候就自动拉起来我们的脚本或者程序,我们要将这些脚本或者程序设置为开机自启动的问题。弄到凌晨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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值