이 페이지에서

임베디드 리눅스 장치의 입력

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

libinput 사용

libinput은 입력 장치를 처리하는 라이브러리로, Qt 자체의 evdev 입력 지원에 대한 대안을 제공합니다. libinput 사용을 활성화하려면, Qt를 구성하고 빌드할 때 libudev 및 libinput 에 대한 개발 파일이 사용 가능하도록 해야 합니다. 키보드 지원이 필요한 경우, xkbcommon 도 필요합니다. eglfs 및 linuxfb 의 경우, 해당 플러그인이 기본적으로 libinput 를 사용하므로 별도의 조치가 필요하지 않습니다. libinput 지원이 불가능하거나 QT_QPA_EGLFS_NO_LIBINPUT 환경 변수가 설정된 경우, 대신 Qt 자체의 evdev 핸들러가 사용됩니다.

libinput 를 통해 입력 이벤트가 수신될 때 다음과 같은 환경 변수를 사용할 수 있습니다:

변수설명
QT_QPA_LIBINPUT_TOUCH_MATRIX적용할 3x3 변환 행렬의 첫 두 행을 지정합니다. 값은 공백으로 구분되어야 합니다. 자세한 내용은 libinput 문서를 참조하십시오.

libinput을 사용하지 않는 eglfs 및 linuxfb에서의 입력

장치 노드 이름과 같은 매개변수는 QT_QPA_EVDEV_MOUSE_PARAMETERS, QT_QPA_EVDEV_KEYBOARD_PARAMETERS 및 QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS 환경 변수에서 설정할 수 있으며, 항목은 콜론(:)으로 구분해야 합니다. 이러한 매개변수는 -plugin 명령줄 인수로 설정을 전달하는 대신 사용할 수 있는 대안이며, 일부 백엔드에서는 필수적입니다. 하지만 eglfs 와 linuxfb 는 내장 입력 핸들러를 사용하므로 별도의 -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 지원을 포함하도록 구성된 경우, 애플리케이션 실행 중에 입력 장치를 연결하거나 분리하는 기능(핫 플러깅)이 지원됩니다. 이 경우 configure 단계에서 sysroot에 libudev 개발 헤더가 존재합니다.

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

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

키보드

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

매개변수설명
/dev/input/...입력 장치의 이름을 지정합니다. 지정하지 않은 경우, Qt는 ` libudev `를 통해 또는 사용 가능한 노드를 순회하여 적합한 장치를 찾습니다.
grab입력 장치를 잠금 상태로 설정합니다.
disable-zapzap 키 조합을 비활성화합니다. 아래의 Ctrl+Alt+Backspace 에 대한 참고 사항을 참조하십시오.
keymap사용자 정의 키보드 매핑 파일의 이름을 지정합니다.
enable-compose합성 기능을 활성화합니다.
repeat-delay사용자 정의 키 반복 지연 시간을 설정합니다.
repeat-rate사용자 정의 키 반복 속도를 설정합니다.

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

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

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

참고: eglfs 에 대한 다른 구성 파일과마찬가지로 , 이러한 레거시 키맵 파일은 기기 또는 플랫폼 제작자가 완전히 제어하고 관리하는 신뢰할 수 있는 콘텐츠로 간주됩니다. 이러한 파일은 기기의 최종 사용자에게 노출되지 않도록 되어 있으며, 사용자가 제공한 키맵 파일을 로드할 수 있도록 의도된 것이 아닙니다.

경고: 내장 키맵을사용할 경우 , zap 코드(Ctrl+Alt+Backspace)는 애플리케이션을 종료합니다. 이 코드는 키보드 핸들러에 의해 처리되므로, 애플리케이션에는 이에 대한 알림이 전달되지 않으며 이를 차단할 수도 없습니다. 따라서 키보드와 유사한 입력 장치가 사용자 인터페이스를 종료시킬 수 있는 기기에서는, QT_QPA_EVDEV_KEYBOARD_PARAMETERS 에 disable-zap 를 전달하십시오.

참고: 콘솔 전환(Ctrl+Alt+Fx) 및 재부팅 코드(reboot chord)는 키보드 핸들러에 의해 인식되지만 실행되지 않으므로, 사실상 무시됩니다.

사용자 정의 키맵을 생성하려면 qttools 모듈에 포함된 kmap2qmap 유틸리티를 사용하십시오. 소스 파일은 커널의 loadkeys 명령어가 인식하는 표준 리눅스 kmap 형식이어야 합니다. qmap 파일은 다음 방법 중 하나로 생성할 수 있습니다:

  • Linux Console Tools(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 는 리눅스 커널이 지원하는 모든 (의사) 기호를 지원하지는 않습니다. 따라서 표준 키맵을 변환할 때 Show_Registers, Hex_A 등과 관련된 여러 경고 메시지가 표시될 수 있으나, 이러한 메시지는 무시해도 됩니다.

터치

최신 터치스크린의 경우 필요하지는 않지만, 싱글 터치만 지원하는 일부 구형 저항식 터치스크린의 경우, 리눅스 멀티터치 프로토콜과 이벤트 장치를 사용하는 대신 tslib 를 사용해야 할 수도 있습니다.

tslib 지원을 활성화하려면, QT_QPA_EGLFS_TSLIB ( eglfs 용) 또는 QT_QPA_FB_TSLIB ( linuxfb 용) 환경 변수를 1로 설정하십시오. 장치를 변경하려면 TSLIB_TSDEVICE 환경 변수를 설정하거나 명령줄에서 장치 이름을 전달하십시오. tslib 입력 핸들러는 마우스 이벤트를 생성하고 싱글 터치만 지원하는 반면, evdevtouch 는 진정한 멀티터치 QTouchEvent 이벤트도 생성한다는 점에 유의하십시오.

참고: 장치 선택 및 필터링은 전적으로 tslib 에 위임됩니다. 즉, tslib의 자체 구성 파일이 애플리케이션 프로세스에 어떤 필터 모듈을 로드할지 결정하며, Qt는 이를 선택하거나 열거하지 않습니다. 새로운 장치의 경우 libinput 를 우선적으로 사용하십시오.

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

매개변수설명
/dev/input/...입력 장치의 이름을 지정합니다. 지정되지 않은 경우, Qt는 ` libudev `를 통해 또는 사용 가능한 노드를 순회하여 적합한 장치를 찾습니다.
rotate일부 터치 스크린에서는 rotate 을 90, 180 또는 270으로 설정하여 좌표의 회전을 조정해야 합니다.
invertx 그리고 inverty입력 이벤트에서 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 XML의 자동 장치 검색 기능( libudev 또는 /dev/input/event* 탐색 기반)이 작동하지 않거나 오작동하는 경우, 이 플러그인은 QT_QPA_GENERIC_PLUGINS=evdevtablet:/dev/event1 와 같은 장치 노드 매개변수를 받을 수 있습니다.

입력 장치 디버깅

예를 들어, QT_LOGGING_RULES 환경 변수를 qt.qpa.input=true 로 설정하는 등 qt.qpa.input 로깅 규칙을 활성화하면 디버그 출력에 일부 정보를 출력할 수 있습니다. 이는 어떤 장치가 사용되고 있는지 파악하거나, 장치 탐색 문제를 해결하는 데 유용합니다.

입력 서브시스템(마우스, 키보드, 터치)에 대한 더 자세한 로깅을 보려면 다음 명령을 사용하여 모든 입력 관련 로깅 범주를 활성화하십시오.

export QT_LOGGING_RULES="qt.qpa.input.*=true;qt.qpa.events=true"

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

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

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

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

이미지는 아틀라스 내에 촘촘하게 배열되어야 하며, 커서의 너비와 높이는 전체 이미지 크기와 cursorsPerRow 설정에 따라 결정됩니다. 또한 아틀라스는 지원되는 모든 커서에 대한 이미지를 제공해야 합니다.

참고: eglfs 의 다른 구성 파일과마찬가지로 , 커서 아틀라스는 기기 또는 플랫폼 제작자가 완전히 제어하고 관리하는 신뢰할 수 있는 콘텐츠로 간주됩니다. 이 아틀라스가 기기의 최종 사용자에게 노출되어서는 안 됩니다.

image 및 hotSpots 키와 0이 아닌 cursorsPerRow 는 모두 필수 항목이며, hotSpots 에는 지원되는 각 커서 모양에 대해 하나의 항목이 반드시 포함되어야 합니다. 이 중 하나라도 누락된 파일은 경고와 함께 거부되며, 해당 커서는 비활성화됩니다.

© 2026 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.