DietPI: _tkinter.TclError: no display name and no $DISPLAY environment variable

DietPI: _tkinter.TclError: no display name and no $DISPLAY environment variable

我想在 dietPI 上 运行 一个 python 脚本。我选择dietPI是因为我想快速开机

当我 运行 一个简单的 tkinter 程序时,我得到错误 _tkinter.TclError: no display name and no $DISPLAY environment variable 我已经尝试过像这样设置显示变量:export DISPLAY=:0 (我也试过其他号码)

但后来我得到 _tkinter.TclError: couldn't connect to display ":0.0"

有什么帮助吗?

这花了我一整天的时间才开始工作。 (我还在另一个 SE 网站上发布了同样的答案:https://raspberrypi.stackexchange.com/a/118928/60683

注意:这是针对 raspbian,主用户帐户使用默认用户名 ("pi")

步骤如下:


将您的 python 文件命名为 main.py 并将您的 python 文件拖到桌面。


接下来,创建一个新的纯文本文件并添加以下内容:

#!/bin/bash

python3 /home/pi/Desktop/main.py

在桌面上将此文本文件另存为 launch.command。这是启动 python 文件的 shell 脚本。默认情况下它不会工作,我们必须对其进行 chmod(下一步)


运行 终端和 运行 以下命令:

chmod u+x /home/pi/Desktop/launch.command

现在双击 launch.command(并选择 execute)将启动您的 python 文件。


至此,我们已准备好让它在开机时启动。 如果您在此之前做过任何其他启动尝试,请撤消您所做的所有文件更改


打开终端并运行以下内容:

sudo nano /etc/systemd/system/myproject.service

我们暂时将其称为 myproject,在您开始使用之前不要更改任何内容,然后随时尝试重命名


在弹出的 window 中,复制粘贴以下内容:

[Unit]
Description=Start Myproject
After=graphical.target
Wants=graphical.target

[Service]
User=pi
Group=pi
ExecStart=/bin/bash -c "export DISPLAY=:0; export XAUTHORITY=/home/pi/.Xauthority; /home/pi/Desktop/launch.command"

[Install]
WantedBy=graphical.target

现在按ctrl+x退出并保存,它会提示你保存更改,输入“y”,文件名应该已经输入为.../myproject.service,如果是然后按回车键,它会保存并退出,如果文件名是空白,它就搞砸了(这有时会发生),退出终端并重试所有这些,抱歉。


现在在终端输入:

sudo systemctl daemon-reload

然后

sudo systemctl enable myproject.service

最后

sudo reboot


启动时,在显示任何其他内容之前(当然是在启动启动画面显示之后,但在桌面显示之前)您的 GUI 现在将启动,恭喜!

我建议您全屏启动它,为此编辑您的 python 文件以使用此文件:

root.attributes('-fullscreen', True)

注意,'root' 可能不是您所说的 TK() 初始化....在您的代码末尾,您有类似 XXXX.mainloop() 的内容,更改 'root' 无论 XXXX 是什么,在 TK()

初始化后立即粘贴

重新启动后,您可能会卡在应用程序中(尤其是全屏启动时),alt+f4 或 alt+f11 之类的操作不会终止您的程序。要退出,请按键盘上的 windows/menu 按钮,将出现访问面板,您可以转到附件>终端启动新终端 window,然后 运行 以下内容:

sudo systemctl stop myproject.service

程序将被终止,您将回到标准桌面...

现在,要防止它在启动时再次启动,只需将 launch.command 文件重命名为 DISABLED_launch.command,当您准备好在启动时再次启动时,将名称重新设置。


去喝一杯,你应得的。

此外,您显然可以将这些位置放在桌面以外的地方,但请确保您始终在这些命令中使用完整路径,不要使用“~/..”快捷方式。