임베디드 Linux 장치의 입력

임베디드 Linux 디바이스에서 창 시스템이 없는 경우 마우스, 키보드 및 터치 입력은 evdev 또는 libinput 또는 tslib 와 같은 헬퍼 라이브러리를 사용하여 직접 읽습니다. 그러나 이 동작을 수행하려면 사용자가 장치 노드 /dev/input/event* 를 읽을 수 있어야 합니다. eglfslinuxfb 에는 모든 입력 처리 코드가 컴파일되어 있습니다.

libinput 사용

libinput은 입력 장치를 처리하는 라이브러리로, Qt 자체의 evdev 입력 지원에 대한 대안을 제공합니다. libinput 를 사용하려면 Qt를 구성하고 빌드할 때 libudevlibinput 에 대한 개발 파일을 사용할 수 있는지 확인하십시오. 키보드 지원이 필요한 경우 xkbcommon 도 필요합니다. eglfslinuxfb 플러그인의 경우 기본적으로 libinput 을 사용하므로 추가 조치가 필요하지 않습니다. libinput 지원을 사용할 수 없거나 QT_QPA_EGLFS_NO_LIBINPUT 환경 변수가 설정되어 있으면 Qt XML의 자체 evdev 핸들러가 대신 사용됩니다.

라이브러리 입력 없이 eglfs 및 리눅스fb에 입력하기

장치 노드 이름과 같은 매개 변수는 QT_QPA_EVDEV_MOUSE_PARAMETERS, QT_QPA_EVDEV_KEYBOARD_PARAMETERSQT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS 환경 변수에서 설정할 수 있으며, 콜론으로 항목을 구분합니다. 이러한 매개변수는 -plugin 명령줄 인수로 설정을 전달하는 대신 사용할 수 있으며, 일부 백엔드에서는 필수입니다. 하지만 eglfslinuxfb 은 기본 제공 입력 핸들러를 사용하므로 별도의 -plugin 인수가 사용되지 않습니다.

또한 QT_QPA_EGLFS_DISABLE_INPUT ( eglfs)의 경우 QT_QPA_FB_DISABLE_INPUT ( linuxfb)의 경우 1 로 설정하여 기본 제공 입력 핸들러를 비활성화할 수 있습니다.

마우스

마우스 커서는 QT_QPA_EGLFS_HIDECURSOR ( eglfs)나 QT_QPA_FB_HIDECURSOR ( linuxfb)가 설정되어 있지 않고 Qt의 libudev 기반 장치 검색에서 적어도 하나의 마우스가 사용 가능하다고 보고할 때마다 나타납니다. libudev 지원이 없는 경우 환경 변수를 통해 명시적으로 비활성화하지 않는 한 마우스 커서가 항상 표시됩니다.

Qt가 libudev 지원으로 구성된 경우 애플리케이션이 실행되는 동안 입력 장치를 연결하거나 분리(핫 플러깅)하는 것이 지원됩니다. 그러면 libudev 개발 헤더가 구성 시 시스템 루트에 존재합니다.

evdev 마우스 핸들러는 다음과 같은 추가 매개 변수를 지원합니다:

매개변수설명
/dev/input/...입력 장치의 이름을 지정합니다. 지정하지 않으면 Qt는 libudev 또는 사용 가능한 노드를 탐색하여 적합한 장치를 찾습니다.
nocompress기본적으로 마지막 Qt 마우스 이벤트와 비교하여 위치 변경으로 이어지지 않는 입력 이벤트는 압축됩니다. 위치 또는 버튼 상태가 변경된 후에만 새로운 Qt 마우스 이벤트가 전송됩니다. 이 동작을 비활성화하려면 nocompress 파라미터를 설정합니다.
dejitter지터 제한을 지정하며 기본적으로 비활성화되어 있습니다.
grab1 로 설정하면 Qt가 장치를 독점적으로 사용합니다.
abs일부 터치스크린은 절대 좌표를 보고하여 터치 패드와 구분할 수 없습니다. 이 경우 abs 을 전달하여 디바이스가 절대 이벤트를 사용하고 있음을 나타냅니다.

키보드

evdev 키보드 핸들러는 다음과 같은 추가 매개변수를 지원합니다:

매개변수설명
/dev/input/...입력 장치의 이름을 지정합니다. 지정하지 않으면 Qt는 libudev 또는 사용 가능한 노드를 탐색하여 적합한 장치를 찾습니다.
grab입력 장치 잡기를 활성화합니다.
keymap사용자 지정 키보드 맵 파일의 이름을 지정합니다.
enable-compose합성을 활성화합니다.
repeat-delay사용자 지정 키 반복 지연을 설정합니다.
repeat-rate사용자 지정 키 반복 속도를 설정합니다.

터미널 세션을 비활성화하지 않은 임베디드 Linux 시스템에서는 입력 이벤트가 Qt 애플리케이션과 tty에 의해 처리되므로 키 누를 때 동작이 혼동될 수 있습니다. 이 문제를 해결하기 위해 다음과 같은 옵션을 사용할 수 있습니다:

  • 애플리케이션 시작 시 EGLFSLinuxFB 에서 tty의 키보드 모드를 K_OFF 로 설정하여 터미널 키보드를 비활성화합니다. 이렇게 하면 키 입력이 터미널로 전송되는 것을 방지할 수 있습니다. 표준 동작이 필요한 경우 QT_QPA_ENABLE_TERMINAL_KEYBOARD 환경 변수를 1 으로 설정하세요. 이 방법은 예를 들어 ssh 을 통해 원격 콘솔에서 애플리케이션을 시작하고 터미널 키보드 입력이 활성화된 상태로 유지되는 경우에만 작동한다는 점에 유의하세요.
  • 다른 방법은 QT_QPA_EVDEV_KEYBOARD_PARAMETERSgrab=1 를 전달하여 evdev 키보드 핸들러의 grab 매개 변수를 사용하는 것입니다. 이렇게 하면 입력 장치를 잡으려고 시도합니다. grab 이 성공하면 Qt 애플리케이션이 실행되는 한 시스템의 다른 컴포넌트는 이로부터 이벤트를 수신하지 않습니다. 이 접근 방식은 tty 장치에 액세스할 필요가 없으므로 원격으로 시작하는 애플리케이션에 더 적합합니다.
  • 마지막으로, 많은 특수 임베디드 Linux 이미지의 경우 애초에 표준 터미널 세션을 활성화하는 것이 의미가 없습니다. 이러한 터미널 세션을 비활성화하는 방법에 대한 자세한 내용은 해당 빌드 환경의 설명서를 참조하세요. 예를 들어 Yocto 프로젝트를 사용하여 이미지를 생성할 때 SYSVINIT_ENABLED_GETTYS 설정을 해제하면 getty 프로세스가 실행되지 않습니다. 즉, 가상 터미널에 입력이 없습니다.

기본 내장 키맵이 충분하지 않은 경우 keymap 매개변수를 통해 다른 키맵을 지정할 수 있습니다.

참고: 콘솔 전환(Ctrl+Alt+Fx) 또는 zap(Ctrl+Alt+Backspace)과 같은 특수 시스템 키 조합은 현재 지원되지 않으며 무시됩니다.

사용자 지정 키맵을 생성하려면 qttools 모듈에서 찾을 수 있는 kmap2qmap 유틸리티를 사용하세요. 소스 파일은 커널의 loadkeys 명령으로 이해할 수 있는 표준 Linux kmap 형식이어야 합니다. qmap 파일은 다음 중 한 가지 방법으로 생성할 수 있습니다:

  • Linux 콘솔 도구(LCT) 프로젝트.
  • X.org X11 키맵은 ckbcomp 유틸리티를 사용하여 kmap 형식으로 변환할 수 있습니다.
  • kmap 파일은 일반 텍스트 파일이므로 직접 만들 수도 있습니다.

kmap2qmap 는 명령줄 프로그램으로, 최소 2개의 파일이 매개변수로 필요합니다. 마지막 매개변수는 생성된 .qmap 파일이며, 다른 모든 매개변수는 입력 .kmap 파일로 파싱됩니다. 예를 들어

kmap2qmap i386/qwertz/de-latin1-nodeadkeys.kmap include/compose.latin1.inc de-latin1-nodeadkeys.qmap

참고: kmap2qmap 은 Linux 커널이 지원하는 모든 (의사) 기호를 지원하지 않습니다. 따라서 표준 키맵을 변환할 때 Show_Registers, Hex_A 등과 관련된 여러 가지 경고가 표시되지만 이러한 메시지는 무시해도 됩니다.

터치

최신 터치스크린에는 필요하지 않지만, 싱글 터치만 지원하는 일부 구형 저항식 터치스크린에서는 Linux 멀티터치 프로토콜과 이벤트 디바이스 대신 tslib 을 사용해야 할 수도 있습니다.

tslib 지원을 사용하려면 QT_QPA_EGLFS_TSLIB ( eglfs)의 경우 또는 QT_QPA_FB_TSLIB ( linuxfb)의 경우 환경 변수를 1로 설정하고, 장치를 변경하려면 TSLIB_TSDEVICE 환경 변수를 설정하거나 명령줄에 장치 이름을 전달합니다. tslib 입력 핸들러는 마우스 이벤트를 생성하고 단일 터치만 지원하지만, 진정한 멀티터치 QTouchEvent 이벤트도 생성하는 evdevtouch 입력 핸들러와는 달리 단일 터치만 지원한다는 점에 유의하세요.

evdev 터치 핸들러는 다음과 같은 추가 매개변수를 지원합니다:

매개변수설명
/dev/input/...입력 장치의 이름을 지정합니다. 지정하지 않으면 Qt는 libudev 또는 사용 가능한 노드를 탐색하여 적합한 장치를 찾습니다.
rotate일부 터치 스크린에서는 rotate 을 90, 180 또는 270으로 설정하여 좌표를 회전시켜야 합니다.
invertxinverty입력 이벤트에서 X 또는 Y 좌표를 반전시킬 매개변수를 지정합니다.

예를 들어 애플리케이션을 실행하기 전에 QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS 에 다음 값을 전달하면 좌표가 반전된 터치 디바이스를 명시적으로 지정할 수 있습니다. 이 기능은 실제 화면과 터치 스크린의 방향이 일치하지 않을 때 유용합니다.

export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event5:rotate=180

펜 기반 태블릿

evdevtablet 플러그인은 Wacom 및 유사한 펜 기반 태블릿에 대한 기본 지원을 제공합니다. QTabletEvent 이벤트만 생성합니다. 활성화하려면 환경에 QT_QPA_GENERIC_PLUGINS=evdevtablet 을 전달하거나 명령줄에 -plugin evdevtablet 인수를 전달하세요.

플러그인은 Qt의 자동 장치 검색( libudev 또는 /dev/input/event* 를 기반으로 함)이 작동하지 않거나 오작동하는 경우 QT_QPA_GENERIC_PLUGINS=evdevtablet:/dev/event1 와 같은 장치 노드 매개 변수를 사용할 수 있습니다.

입력 장치 디버그

QT_LOGGING_RULES 환경 변수를 qt.qpa.input=true 로 설정하는 등 qt.qpa.input 로깅 규칙을 활성화하여 일부 정보를 디버그 출력에 인쇄할 수 있습니다. 이는 사용 중인 장치를 감지하거나 장치 검색 문제를 해결하는 데 유용합니다.

사용자 지정 마우스 커서 이미지 사용

eglfs 에는 32x32 크기의 자체 마우스 커서 이미지 세트가 제공됩니다. 이 이미지가 충분하지 않은 경우 QT_QPA_EGLFS_CURSOR 환경 변수를 JSON 파일 이름으로 설정하여 사용자 지정 커서 아틀라스를 제공할 수 있습니다. 이 파일은 Qt 리소스 시스템을 통해 애플리케이션에 임베드할 수도 있습니다.

예를 들어 행당 8개의 커서 이미지가 포함된 임베디드 커서 아틀라스는 다음과 같이 지정할 수 있습니다:

{
  "image": ":/cursor-atlas.png",
  "cursorsPerRow": 8,
  "hotSpots": [
      [7, 2],
      [12, 3],
      [12, 12],
      ...
  ]
}

이미지가 아틀라스에 꽉 채워져야 하며 커서의 너비와 높이는 전체 이미지 크기와 cursorsPerRow 설정에 따라 결정됩니다. 아틀라스는 지원되는 모든 커서에 대한 이미지도 제공해야 합니다.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.