xbindkeys를 사용하여 보유 키 감지

xbindkeys를 사용하여 보유 키 감지

위에서 언급한 대로 가상 터미널을 순환하기 xbindkeys위해 Alt+왼쪽 및 Alt+오른쪽 바인딩을 사용합니다.chvt여기. 사용 가능한 가상 터미널 수(6개)와 관련하여 알고리즘을 모듈식으로 수정했습니다. 나는 xbindkeys창 관리자의 각 인스턴스에 대해 데몬을 시작합니다(예: tty1에서 dwm을 시작하기 전, tty2의 openbox에서도 동일). 즉, 각 tty에는 자체 xbindkeys인스턴스가 있습니다.

분명히 xbindkeys새로운 키 이벤트만 감지할 수 있으며 잔여 키 이벤트는 감지할 수 없습니다. 따라서 Alt+오른쪽을 눌러 tty1에서 으로 전환 tty2한 다음 으로 계속하려면 tty3두 키를 모두 놓고 앞으로 이동하려면 두 키를 다시 눌러야 합니다. tty가 아닌 경우 두 키를 모두 누른 상태에서 화살표 키를 클릭 X할 수 있습니다 . Alt이 기능(예: 키 메모리)을 복사할 수 있나요 xbindkeys? 분명히 여러 인스턴스(위에서 언급한 것처럼 WM당 하나)가 필요하고 프로그램( xbindkeys)이 보유된 키가 아닌 초기 키 이벤트를 감지하는 것처럼 보이므로 이는 불가능할 수 있습니다. 어떤 해결책이라도 대단히 감사하겠습니다.

답변1

현재 개발 중인 작업을 계속하려면 다음을 사용할 수 있습니다.에빔유틸리티 프로그램 evtest과 툴킷을 사용하십시오 evemu-event. 입력 이벤트 장치를 나열 sudo evtest하고 키보드에 해당하는 행을 찾으십시오. 특별한 키보드가 있어서 다음을 얻습니다.

/dev/input/event2:      HID 05f3:0007

이제 해당 번호(제 경우에는 2)를 선택하고 식별하려는 키(Alt)를 누르세요. 나는 왼쪽 시프트를 사용하고

Event: time 15094562, -------------- SYN_REPORT ------------
Event: time 15094562, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e1
Event: time 15094562, type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1

여기서 볼 수 있는 것은 Shift 키를 누르면 값이 1인 KEY_LEFTSHIFT 코드가 포함된 EV_KEY 유형 이벤트가 발생하고, 이를 놓으면 값이 0인 유사한 이벤트가 발생한다는 것입니다.

이제 언제든지(예: chvt 이후) 해당 키의 상태를 간단히 쿼리할 수 있습니다. 내 경우에는

sudo evtest --query  /dev/input/event2 EV_KEY KEY_LEFTSHIFT

값이 0이면 이 명령의 반환 코드는 0이고, 값이 1이면 반환 코드는 10입니다. 를 사용하여 이 값을 표시 할 수 있습니다 echo $?.

이제 키 누르기 상태를 알았으므로 X11 서버가 "현재" 상태를 볼 수 있도록 키 누르기 이벤트를 시뮬레이션할 수 있습니다. 내 입장에서는 그렇게 할 것이다

sudo evemu-event /dev/input/event2 --type EV_KEY --code KEY_LEFTSHIFT --value 1

상상할 수 있듯이 원래 문제에 대한 더 간단한 해결책이 있을 수 있습니다. libevent를 사용하면 여기에 사용된 것과 다른 솔루션을 확인 xbindkeys하고 이 문제를 해결할 수 있습니다. C에는 예제가 있습니다.Linux USB 입력 하위 시스템그리고2 부리눅스 매거진에서. 시스템에 Python 라이브러리가 있을 수 있습니다.evdev이것을 더 쉽게 만드십시오.

관련 정보