【问题标题】:Tkinter Python Auto Start on Raspberry Pi4Raspberry Pi4 上的 Tkinter Python 自动启动
【发布时间】:2020-10-20 17:00:39
【问题描述】:

我正在构建我的第一个 tkinter 应用程序,它运行良好,直到我尝试在启动时自动启动它。我已经研究过这个主题并尝试了很多东西,但没有一个能正常工作。

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

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

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

我曾尝试使用 systemd 启动程序,但无济于事。在这方面肯定会得到一些帮助。

【问题讨论】:

  • 这个link 可能会有所帮助。
  • @acw1668 这是很棒的信息!感谢你的分享。我还不能让它做我想做的事,但我认为它可能让我走上了正确的轨道。

标签: python tkinter raspberry-pi raspbian-buster


【解决方案1】:

好吧,在办公桌上敲了一周的头后,我终于找到了一个完美的解决方案。这会在命令提示符登录之前加载 GUI 应用程序,并禁用 raspberry pi GUI,当应用程序因任何原因关闭时,它会返回到已注销的命令提示符。

我想澄清一下,我已禁用默认 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

创建一个 systemd 单元文件来启动 X 窗口并运行应用程序

#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,这帮助了很多。 THIS 是 systemd 和单元文件详细信息的绝佳参考。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    相关资源
    最近更新 更多