Tkinter Python 在 Raspberry Pi4 上自动启动

Tkinter Python Auto Start on Raspberry Pi4

我正在构建我的第一个 tkinter 应用程序,在我尝试在启动时自动启动它之前它运行良好。我研究了这个主题并尝试了很多方法,但没有任何效果。

我正在 运行ning RPi4 与 raspbian buster,python 3.7.3 并希望此应用程序在 RPI 触摸屏上 运行,而不需要用户登录。

我发现 this link 看起来我应该能够通过调用 window 管理器(如 X openbox 或类似的东西)从终端启动我的应用程序而无需加载桌面。我确实发现,如果我创建一个 ~/.xinitrc 文件并添加以下行,我可以通过在命令提示符下键入 startx.

来启动 window
exec sudo /usr/bin/python3 /home/$user_name/robot/robot.py

我曾尝试使用 systemd 启动程序,但无济于事。肯定会感谢一些帮助。

好的,在办公桌上苦苦思索了一周之后,我终于找到了一个完美的解决方案。这会在禁用 raspberry pi GUI 的情况下在命令提示符登录之前加载 GUI 应用程序,并且当应用程序因任何原因关闭时它 returns 会退出命令提示符。

我想澄清一下,我已经禁用了默认的 pi 用户并为此项目创建了另一个用户帐户。我已将我的整个 python/tkinter 项目放在 '/home/$user_name/robot' 文件夹中,并赋予这个新用户与 pi 用户相同的权限。

仅启用命令行启动

sudo raspi-config

Select => Boot Options / Desktop-CLI / Console

设置系统 initrc 以加载应用程序

sudo nano /etc/X11/xinit/xinitrc

注释掉现有行并添加以下内容(更改脚本路径)

/usr/bin/python3 /home/$user_name/robot/robot.py

创建系统单元文件以启动 X window 和 运行 应用程序

#Change the name.service to whatever you want it to be
sudo nano /lib/systemd/system/robot.service

在新文件中添加以下行(:0.0 是 RPi 显示端口,Xauthority 指向您希望 运行 应用程序位于的用户配置文件)

[Unit]
Description=Start Robot
After=graphical.target

[Service]
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=/home/$user_name/.Xauthority
ExecStart=startx
KillMode=process
TimeoutSec=infinity

[Install]
WantedBy=graphical.target

重新加载单元文件并启用新单元

sudo systemctl daemon-reload

sudo systemctl enable robot.service

可以通过以下命令查看新服务的状态

sudo systemctl status robot.service

现在重新启动系统,在显示命令提示符之前,应该会显示带有 tkinter gui 的 python 应用程序。如果应用程序因任何原因退出,应显示命令提示符登录。

感谢@acw1668 的分享 THIS LINK which helped a ton. THIS 是 systemd 和单元文件详细信息的重要参考。