Eu tenho um RPI4 com um display de toque DSI. Instalei o lxde, mas não quero usá-lo. Em vez disso, gostaria de iniciar um único aplicativo no modo de tela cheia.
Atualmente, interajo com meu dispositivo por meio de SSH.
O que eu tentei é parar o lxde e ingenuamente iniciar um aplicativo:
# service stop lxde
# xeyes
Error: Can't open display: localhost:10.0
Reiniciando o lxde, noto que ele é executado no 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
Suponho que preciso executar meu aplicativo por meio de algum wrapper, mas realmente não entendo como fazê-lo.
Como posso executar xeyes
no modo de tela cheia do meu controle remoto ssh?
No final, gostaria de executar um aplicativo Qt iniciado como um serviço após a inicialização:
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_())
Qual seria o ponto de partida para isso?
Eu não acho que o erro que você viu seja realmente relevante para o que você deseja alcançar.
localhost:10.0
indica que ele está tentando usar o X11 Forwarding para se mostrar no seu cliente SSH , provavelmente porque você o ativou no servidor e está usando uma configuração de-X
cliente equivalente. Então, antes de tudo, faça com que ele use um servidor X local, seja ssh sem-X
(ou use-x
para desativá-lo explicitamente) ou use umaDISPLAY
variável de ambiente apropriada quando você executar o programa (por exemplo,DISPLAY=:0 xeyes
).Quanto à sua pergunta "real", você precisará de um servidor Xorg rodando no próprio Pi de qualquer maneira, se quiser que o programa seja exibido na tela DSI. Para fazer isso, você pode tornar o programa o cliente principal/único do servidor com
xinit
/startx
. No entanto, AFAIK é um pouco complicado de fazer remotamente (se possível) por causa das coisas tty e assim por diante.Com isso dito, você pode ver se eles se encaixam no seu caso de uso:
PS Não tenho certeza se a abordagem sem DE/WM garantirá que o programa seja executado em tela cheia. (Não estou familiarizado o suficiente com as partes internas do X para dizer se você precisa ou não fazer algo em seu programa para que isso aconteça.) De qualquer forma, você pode considerar usar um WM leve que permita iniciar um programa em tela cheia após sua inicialização.
Confira CloudTk em
https://wiki.tcl-lang.org/page/CloudTk
Isso permite que você execute um aplicativo Single X11 remotamente sem a área de trabalho. Requer Tigervnc e um gerenciador de janelas matchbox.and noVNC no navegador.
No Raspberry Pi OS (buster), instalei aplicativos x11-apps para corrigir esse problema.