Ubuntu 20.04 基于终端的自启动程序

众所周知,RoboMaster 的比赛流程非常紧凑。

在某些极端情况下,留给战队整备的时间甚至只有几分钟。

这个时候,如果我们的视觉程序拥有自启动功能,就能节省出更多的调试时间。

经过几十分钟的学习,作者学会了一个基于终端的自启动方法,现在分享给大家。


本文测试环境:Ubuntu 20.04。

本方法的自启动流程是开机打开终端——终端内启动 shell 文件——通过 shell 文件启动视觉程序

点我跳转到第四章:参考文章

一、编辑 shell 文件

这里参考一下战队的自启动脚本。

主线程脚本(检查程序存活并重启程序)

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
#开机自启动视觉自瞄代码并检测,可调整sleep后的数字来调整监测周期(单位:秒)
#(请根据实际路径自行替换)
gnome-terminal -- /bin/bash -c "/home/sx/桌面/kill.sh; exec bash"
source /home/sx/openvino/l_openvino_toolkit_dev_ubuntu20_p_2021.4.689/bin/setupvars.sh
cd /home/sx/桌面/rm2022_cidp_vision-master/build
while true
do
ps -ef | grep -v grep | ./run --test-show-armor-predict
cd /home/sx/桌面/rm2022_cidp_vision-master/build
./run --test-show-armor-predict
sleep 2
done

分线程脚本(杀死首次启动的假死程序)[8]

1
2
3
4
5
#!/bin/bash
sleep 3
cd /home/sx/桌面
echo "123" | sudo -S pkill run
exit

二、设置自启动程序[1][2][3]

① 打开终端输入gnome-session-properties,出现弹窗启动应用程序首选项

② 点击添加,在命令一栏填写gnome-terminal -- bash -c "sh /home/sx/桌面/autostart.sh; exec bash"

③ 填写名称,以及可选的注释,最后保存即可。

三、一些 FAQ

注意:自启动脚本应以是否在开机后显示终端,且终端自动执行 shell 文件为准。

为便于测试,可直接在终端执行./autostart.sh,检查脚本内命令是否正确。

  • 开机后成功执行脚本,但程序显示找不到 OpenCV 共享库文件。

    根据文章所述[7],需要在脚本中手动添加永久环境变量命令source /opt/intel/openvino/bin/setupvars.sh

  • 开机前,NUC 已插入串口,但自启动脚本显示串口离线。

    推测是串口权限未开启[4][5]。在脚本中添加命令echo "123" | sudo -S chmod 777 /dev/ttyUSB0

  • 启动应用程序首选项中添加的自启动程序无法保存。

    推测是权限问题[6]。请检查~/.config/autostart的所有者是否为root(根用户)。

    后执行sudo chown $UserName ~/.config/autostart即可解决。

四、参考文章


Ubuntu 20.04 基于终端的自启动程序
https://kekkj123.github.io/posts/Terminal_Auto_Start/
作者
防灾科技学院 思玄战队 KEKKJ
发布于
2025年3月10日
许可协议