ubuntu开机后ROS程序自启动问题


Posted in Servers onDecember 24, 2022

平时有用到一些机器人或者带有ubuntu系统的移动设备,比如NVIDIA TX2,NVIDIA XAVIA, JetsonNANO,秒算,工控机等等,写好了程序后,如果想要运行,开机之后还得连接键盘鼠标,显示器,等程序运行之后还需要重新拔掉键盘鼠标显示器等等,步骤繁琐是一部分,还有可能因为反应不及时发生危险,尤其对于无人机等,因此需要配置程序开机自启动。

一、ubuntu免密开机

路径:系统设置–用户设置

ubuntu开机后ROS程序自启动问题

二、程序脚本启动

可以创建test.sh文件,将程序所需要运行的指令全部加入sh文件中。

例如:

#! /bin/bash
gnome-terminal -- bash -c "cd /home/xxx/Desktop/CSDN/test_demo/build;mkdir helloworld" & sleep 5
wait
exit 0

说明:

  • gnome-terminal --bash -c:会打开一个新的bash终端并执行c后面的语句。linux bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令;Bash还能从文件中读取命令,这样的文件称为脚本。语句用’;;’,隔开,最后的sleep 5表示延迟5秒退出,这样就可以在新的终端看到运行效果,添加这个延时是为了方便验证是否启动程序或者节点
  • 如果是ubuntu 18.04以前的系统:gnome-terminal -x bash -c;ubuntu18.04以后的系统输入:gnome-terminal – bash -c
  • gnome-terminal --tab:同一终端窗口中打开一个新选项卡。而是打开一个新窗口。

三、文件赋予权限

chmod指令详细说明,请参考:【ubuntu】chmod命令

chmod 777 test.sh

四、开机启动项管理器

gnome-session-properties是ubuntu的开机启动项管理器。如果之前编写的sh文件,不需要sudo权限,即可将sh文件加入gnome-session-properties自启动管理器中即可。

终端输入:gnome-session-properties

ubuntu开机后ROS程序自启动问题

添加执行项目。其中command为你编写的脚本路径,name和comment可以随意配置。

ubuntu开机后ROS程序自启动问题

五、需要SUDO权限的脚本开机自启动

有的时候,我们的设备连接外部设备,需要打开串口,甚至是gpio口,这需要使用到权限,串口可以通过添加rules来设置为普通用户,但是之前在DJIManifold产品上需要程序对GPIO口进行设置,这个时候就需要用到sudo权限了,因为在进入sudo权限需要输入密码,这就不好完成开机自启动。

此时就需要利用shell脚本自动输入密码

指令:echo 'password' | sudo -S "./test.sh"

后续还需要做三步操作:

给文件运行权限

sudo chmod 777 start.sh

设置脚本自启动

gnome-session-properties

保持gnome-terminal窗口执行后不立刻关闭

在测试中会发现,gnome-terminal命令执行完会一闪而过,自行关闭。需要添加read命令,read命令是等待用户按下回车后使窗口关闭。

gnome-terminal -x bash -c "echo \"OK now\"; read"

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Servers 相关文章推荐
Linux安装Nginx步骤详解
Mar 31 Servers
nginx 多个location转发任意请求或访问静态资源文件的实现
Mar 31 Servers
小程序后台PHP版本部署运行 LNMP+WNMP
Apr 01 Servers
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
Apr 04 Servers
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
Jul 07 Servers
使用 Apache 反向代理的设置技巧
Jan 18 Servers
Apache Pulsar集群搭建部署详细过程
Feb 12 Servers
tomcat正常启动但网页却无法访问的几种解决方法
May 06 Servers
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
Jun 01 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
Jul 15 Servers
apache虚拟主机配置的三种方式(小结)
Jul 23 Servers
Nginx如何获取自定义请求header头和URL参数详解
Jul 23 Servers
ubuntu端向日葵键盘输入卡顿问题及解决
Dec 24 #Servers
码云(gitee)通过git自动同步到阿里云服务器
Dec 24 #Servers
Valheim服务器 Mod修改安装教程 【ValheimPlus】
Dec 24 #Servers
keepalived + nginx 实现高可用方案
Dec 24 #Servers
ubuntu20.04虚拟机无法上网的问题及解决
Dec 24 #Servers
ubuntu如何搭建vsftpd服务器
Dec 24 #Servers
CentOS7设置ssh服务以及端口修改方式
Dec 24 #Servers
You might like
模板引擎正则表达式调试小技巧
2011/07/20 PHP
PHP的自定义模板引擎
2017/03/24 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
javascript操作cookie
2017/01/17 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
js实现的订阅发布者模式简单示例
2020/03/14 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
实例讲解python函数式编程
2014/06/09 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
详解python的ORM中Pony用法
2018/02/09 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
python 实现端口扫描工具
2020/12/18 Python
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
上课打牌的检讨书
2014/02/15 职场文书
停车位租赁协议书
2014/09/24 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
开展警示教育活动总结
2015/05/09 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python