私の組み込みアプリケーションはキーボードイベントを受け取りません(Linuxフレームバッファ/ Qt + QMLアプリケーション/ systemdサービス/ VNCサーバー)

私の組み込みアプリケーションはキーボードイベントを受け取りません(Linuxフレームバッファ/ Qt + QMLアプリケーション/ systemdサービス/ VNCサーバー)

組み込み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)の間でWi-Fi接続を確立し、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アプリケーションはまだ気にしません。

読んでくれてありがとう。あなたの洞察に感謝します!

関連情報