組み込み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アプリケーションはまだ気にしません。
読んでくれてありがとう。あなたの洞察に感謝します!