如何在 Raspberry PI 上运行单个 X11 应用程序?

如何在 Raspberry PI 上运行单个 X11 应用程序?

我有一台带 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使用适当的环境变量(例如)。DISPLAYDISPLAY=:0 xeyes

至于您的“真正”问题,如果您想让程序在 DSI 显示器上显示,则无论如何都需要在 Pi 上运行 Xorg 服务器。为此,您可以使用xinit/将程序设置为服务器的主要/唯一客户端startx。但是,据我所知,由于 tty 等原因,远程执行有点棘手(如果可能的话)。

话虽如此,你可以看看这些是否适合你的用例:

  1. https://wiki.archlinux.org/title/Getty#Automatic_login_to_virtual_console
  2. 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

相关内容