树莓派+Opencv图形化界面自启动实现方法

树莓派程序的自启动方法有很多,我所尝试的能够显示OpenCV图形界面的,有以下两种。

一种是桌面方式启动,一种是使用systend配置服务。

1.桌面启动方式

优点:操作简单。

缺点:只能够实现自启动功能,没有程序异常退出时进程自动重启这种高级功能。

在/home/pi/.config/目录下新建一个名为 autostart 的文件夹:

cd /home/pi/.config/
mkdir autostart

在该文件夹下编写一个Desktop Entry文件指向你的应用程序。Desktop Entry文件是Linux桌面系统中用于描述程序启动配置信息的文件,它以.desktop为后缀名,相当于Windows系统下的桌面快捷方式。

新建一个Desktop Entry文件,只要以.desktop为后缀名即可。

cd /home/pi/.config/autostart
touch example.desktop

打开文件,写入以下内容。(Linux下nano编辑器的使用)

[Desktop Entry] 
Name=example
Type=Application
Exec=/usr/bin/python /home/pi/example.py
Terminal=false

Exec部分写入你的程序执行指令就好了,最好写绝对路径,例如这里调用python程序用的是/usr/bin/python。

2.使用systemd将程序配置成服务

优点:功能非常强大,除了配置服务自启动外,还可以让他退出自动重启,配置依赖关系等等。

缺点:指令比较多吧,学习起来慢一点。

首先,新建service文件

touch example.service

修改文件内容如下: (Linux下nano编辑器的使用)

[Unit]
Description=example service

[Service]
ExecStart=/usr/bin/python   /home/pi/example.py
Environment=XAUTHORITY=/home/pi/.Xauthority
Environment=DISPLAY=:0.0
Restart=always
User=pi
type=idle

[Install]
WantedBy=multi-user.target

稍微解释一下。 

ExecStart,写启动你程序的指令,同样,最好绝对路径。

Environment,我这里写的是使用OpenCV必须要配置的环境,是获得当前窗口的作用。

Restart,配置什么状态下重启,我这里配置的是always,即退出总是重启。

type,我配置的idle,意思是等其他服务都启动完毕后再启动我的这个服务。

开机时,systemd只执行/etc/systemd/system目录里面的配置文件,把我们的service文件拷贝过去。

sudo cp example.service  /etc/systemd/system/example.service 

一旦修改配置文件,就要让 systemd重新加载配置文件,否则修改不会生效。

sudo systemctl daemon-reload

 至此,已经将我们的程序配置为服务,可以使用以下指令验证一下。

#开启服务
sudo systemctl start example.service  
#关闭服务
sudo systemctl stop example.service  

 如果你和我一样,将Restart配置为always。那么除非你使用上面的指令关掉服务,否则是无法杀死程序的。可以试验一下:

#找到程序的进程号
ps -aux | grep example.py
#杀死该进程
kill -9  进程号
#程序会被杀死,等待个几秒钟,在查看一下
ps -aux | grep example.py
#可以看到程序已经重启

接下来配置程序开机自启:

sudo systemctl enable example.service  
sudo systemctl daemon-reload

 至此,整个配置过程结束。

参考:阮一峰老师的Systemd 入门教程

你可能感兴趣的:(树莓派)