我有一台带 DSI 触摸屏的 RPI4。我安装了 lxde,但我不想使用它。相反,我想以全屏模式启动单个应用程序。
我目前通过 SSH 与我的设备交互。
我尝试停止 lxde 并简单地启动一个应用程序:
# service stop lxde
# xeyes
Error: Can't open display: localhost:10.0
再次启动 lxde 我注意到它在 xorg 上运行
# ps -axu | grep xorg
# root 1397 0.4 0.5 127712 46884 tty7 Ssl+ 16:38
0:01 /usr/lib/xorg/Xorg :0 vt07 -nolisten tcp -novtswitch -auth
/var/run/lxdm/lxdm-:0.auth
我想我需要通过一些包装器来运行我的应用程序,但我真的不明白如何去做。
如何xeyes
从我的 ssh 远程以全屏模式运行?
最后,我想运行启动后作为服务启动的 Qt 应用程序:
import sys
import PyQt5
from PyQt5.QtWidgets import *
import mainwindow_auto
class MainWindow(QMainWindow, mainwindow_auto.Ui_MainWindow):
def pressedOnButton(self):
print ("Pressed On!")
def pressedOffButton(self):
print ("Pressed Off!")
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self) # gets defined in the UI file
self.btnOn.clicked.connect(lambda: self.pressedOnButton())
self.btnOff.clicked.connect(lambda: self.pressedOffButton())
def main():
app = QApplication(sys.argv)
form = MainWindow()
form.show()
sys.exit(app.exec_())
这件事的起点是什么?
答案1
我认为您看到的错误实际上与您想要实现的目标无关。localhost:10.0
表示它正在尝试利用 X11 转发使其自身显示在您的 SSH 上客户,可能是因为您已在服务器上启用了它,并且正在使用-X
或等效的客户端配置。因此,首先要使其使用本地 X 服务器,要么不使用 ssh -X
(或者,使用明确禁用它),要么在运行程序时-x
使用适当的环境变量(例如)。DISPLAY
DISPLAY=:0 xeyes
至于您的“真正”问题,如果您想让程序在 DSI 显示器上显示,则无论如何都需要在 Pi 上运行 Xorg 服务器。为此,您可以使用xinit
/将程序设置为服务器的主要/唯一客户端startx
。但是,据我所知,由于 tty 等原因,远程执行有点棘手(如果可能的话)。
话虽如此,你可以看看这些是否适合你的用例:
- https://wiki.archlinux.org/title/Getty#Automatic_login_to_virtual_console
- https://wiki.archlinux.org/title/Xinit#Autostart_X_at_login
PS 我不确定无 DE/WM 的方法是否能保证程序全屏运行。(我对 X 的内部结构不够熟悉,不知道是否需要在程序中做一些事情来实现这一点。)无论如何,您可以考虑使用轻量级 WM,这样您就可以在程序启动时全屏启动程序。
答案2
查看 CloudTk
https://wiki.tcl-lang.org/page/CloudTk
这允许您远程运行单个 X11 应用程序而无需桌面。它需要 Tigervnc 和 Matchbox 窗口管理器,并且浏览器中没有 VNC。
答案3
在 Raspberry Pi OS(buster)上,我安装了 x11-apps 应用程序来解决这个问题。
$ sudo apt install x11-apps