Jetson xavier NX开机自启动python程序
失败案例:
本人使用shell脚本进行开机自启动失败:当时严格按照Jetson nano开机自启动python程序的相关操作进行设置。
新建start.sh文件后,编辑内容:
echo '1122' | sudo chmod 777 /dev/ttyTCU0
conda activate yolov5
cd yolov5_v6.0_1/
python3 detect_and_strereo_video.py --source 0
进行上述链接的相关操作后,重新开机(sudo reboot)后,进入了terminal界面,但是需要重新输入用户密码,同时conda activate yolov5语句报错,无法进入conda环境。
错误如图所示:
方案无效原因:
开机启动脚本是在用户登录之前,所以不能成功。但我们可以对命令行进行相关的操作,即对~/.bashrc 文件进行相关操作。
解决方案:
参考博客:Jetson系列设置Python脚本开机自启
(一)sudo命令时需要输入密码解决方案
参考博客:Linux 中使普通用户使用Sudo不需要输入密码
运行自动脚本,您可能需要配置 sudoers 文件并允许某些用户运行 sudo 命令而不要求输入密码。
我们要将用户添加到 sudoers文件,sudoers 文件包含确定用户和组的 sudo 权限的信息。
向下滚动到文件的末尾并添加以下行,该行允许用户 “liuyang” 使用 sudo 运行任何命令而无需开始询问密码:
sudo vi /etc/sudoers
liuyang ALL=(ALL) NOPASSWD:ALL
如果要允许用户仅运行特定命令而不输入密码,请在 NOPASSWD 关键字后指定命令。
例如,要仅允许使用 mkdir 和 mv 命令:
在/etc/sudoers文件
nvidia ALL=(ALL) NOPASSWD:/bin/mkdir,/bin/mv
(二)编写 ~/.bashrc
首先打开 ~/.bashrc 文件并进行编写:
sudo vi ~/.bashrc
在文件的最后一行添加想要执行的终端命令,可以是任何终端,如果不需要root权限,直接添加就可以。如果需要root权限的话 可使用echo输入密码:
echo “password” | sudo -S chmod 777 ttyUSB0
也可以直接编辑sudoers文件(如步骤1所示),赋予普通用户执行sudo命令时不再需要输入密码。
例如博主本人需要(1)给NX版的串口赋值使能权限,(2)激活某conda环境,(3)同时进入某文件夹,(4)并启动脚本。可在~/.bashrc文件的最后加入:
echo '1122' | sudo chmod 777 /dev/ttyTCU0
conda activate yolov5
cd yolov5_v6.0_1/
python3 detect_and_strereo_video.py --source 0
(三)配置开机自启相关设置
~/.bashrc保存完成时候,发现开机并没有自启,缺少一个启动终端的命令,接下来在终端输入:
gnome-session-properties
会打开ubuntu机选项管理,点击Add选项,command中写上:gnome-terminal 其他两个随意写。这样相当于开机之后开启一个终端,这个终端就可以执行 bashrc 中的程序。
(四)最后需要将~/.bashrc脚本刷新一下:
source ~/.bashrc
注意:设置全部完成后,即可实现python脚本开机自启动。中止程序ctrl+c后,默认进入~/.bashrc设置的路径和conda环境中。再次开启ternimal时,依然自启动python程序。想取消python脚本的开机自启动,进入:.bashrc中注释掉相关命令即可。
感谢:
Jetson nano开机自启动python程序
Jetson系列设置Python脚本开机自启
Linux 中使普通用户使用Sudo不需要输入密码
python开机自启动后,远程中止程序如何是实现。
- NX板通过wifi模块与电脑热点链接;
- 电脑端打开cmd,通过ssh连接NX板,例如;
ssh liuyang@192.168.137.225
- 查看正在运行的python进程,输入命令:
ps -ef | grep python
可以看到:python3 detect_and_strereo_video.py --source 0这条指令的程序的PID号为11567,输入命令中止程序:
kill -9 11567
正在运行的程序便可被中止:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)