내 임베디드 애플리케이션이 키보드 이벤트를 수신하지 않습니다(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 애플리케이션은 여전히 ​​신경쓰지 않습니다.

읽어주셔서 정말 감사합니다. 귀하의 통찰력에 미리 감사드립니다!

관련 정보