我需要远程控制嵌入式 ARM 仪器上的 Qt / QML 应用程序。我打算使用 VNC 来做到这一点。这是行不通的。插入仪器的 USB 键盘也不起作用。
注意:通常该应用程序由连接到 GPIO 的仪器上的硬键控制,并通过自定义应用程序代码进行转换以发送 Qt 事件:
QCoreApplication::postEvent(..., new QKeyEvent(QEvent::KeyPress, ...));
现在,我尝试使用 VNC 远程发送密钥。为了测试远程会话,我在仪器控制台上键入以下命令:
x11vnc -rawfb map:/dev/fb0@800x480x32 -forever -rotate -90 -dk
在我的 Linux PC 和仪器(其 IP 地址为 192.168.1.1)之间建立 Wifi 连接后,我在 Linux PC 上键入以下命令:
gvncviewer 192.168.1.1:0
我确实看到仪器屏幕在我的 PC 上的窗口中正确显示,具有正确的几何形状、颜色和方向...
但...
我的 Qt 应用程序不关心击键。它似乎没有收到任何键盘事件。
更多上下文:Qt 应用程序使用 systemd 服务在仪器上启动。我尝试将 systemd 服务附加到 TTY,这样它就会有一个标准输入。该服务如下所示:
[Unit]
Description=Instrument IHM
After=network.target
[Service]
StandardInput=tty-force
StandardOutput=tty
StandardError=tty
TTYPath=/dev/tty0
Restart=always
ExecStartPost=/path/to/my_application --platform linuxfb:fb=/dev/fb0:rotation=90 -plugin evdevkeyboard:/dev/input/event0
Restart=on-failure
RestartSec=2s
[Install]
WantedBy=multi-user.target
当我在 VNC 客户端上键入与仪器硬键对应的按键时,仪器上的 VNC 服务器正确接收键盘事件,如 VNC 服务器日志的摘录所示:
05/03/2024 09:17:23 Using tight encoding for client 192.168.1.10
05/03/2024 09:17:24 Sending rfbEncodingExtDesktopSize for size (480x800)
05/03/2024 09:17:24 client 1 network rate 119.5 KB/sec (6395.0 eff KB/sec)
05/03/2024 09:17:24 client 1 latency: 0.9 ms
05/03/2024 09:17:24 dt1: 0.0575, dt2: 0.1834 dt3: 0.0009 bytes: 28741
05/03/2024 09:17:24 link_rate: LR_BROADBAND - 1 ms, 119 KB/s
05/03/2024 09:17:24 client_set_net: 192.168.1.10 0.0066
05/03/2024 09:17:30 # keyboard(down, 0xff54 "Down") uip=0 14.6279
05/03/2024 09:17:31 # keyboard(up, 0xff54 "Down") uip=0 14.7875
05/03/2024 09:17:32 # keyboard(down, 0xff52 "Up") uip=0 15.7994
05/03/2024 09:17:32 # keyboard(up, 0xff52 "Up") uip=0 15.8880
05/03/2024 09:17:32 # keyboard(down, 0x20 "space") uip=0 16.6078
05/03/2024 09:17:33 # keyboard(up, 0x20 "space") uip=0 16.6684
05/03/2024 09:17:33 # keyboard(down, 0xff1b "Escape") uip=0 17.5182
05/03/2024 09:17:33 # keyboard(up, 0xff1b "Escape") uip=0 17.5997
05/03/2024 09:17:34 # keyboard(down, 0xff0d "Return") uip=0 18.3625
05/03/2024 09:17:34 # keyboard(up, 0xff0d "Return") uip=0 18.4278
但我的 Qt 应用程序仍然不关心。
非常感谢您的阅读。预先感谢您的见解!