Ubuntu 13.10이 설치된 Lenovo IdeaPad Yoga 13이 있습니다. 장치 F5의 키보드에는 터치패드 전환 버튼( )이 있습니다. 키보드의 F*버튼은 반대입니다(따라서 을 얻으려면 실제로 토글 키인 + 를 눌러야 F5합니다 ).FnF5F5
나는 버튼이 실제로 에 있는 키보드(일부 장치와 같은 터치패드가 아닌)로 읽힌다는 것을 발견했습니다 /dev/input/event3
. 따라서 sudo input-events 3
버튼이 스캔코드 190을 보내는 것을 발견할 수 있습니다.
출력 sudo lsinput
:
/dev/input/event3
bustype : BUS_I8042
vendor : 0x1
product : 0x1
version : 43907
name : "AT Translated Set 2 keyboard"
phys : "isa0060/serio0/input0"
bits ev : EV_SYN EV_KEY EV_MSC EV_LED EV_REP
출력 sudo input-events 3
:
23:13:03.849392: EV_MSC MSC_SCAN 190
23:13:03.849392: EV_SYN code=0 value=0
23:13:03.855413: EV_MSC MSC_SCAN 190
23:13:03.855413: EV_SYN code=0 value=0
를 제외한 다른 프로그램(예 xev
: )은 이를 읽을 수 없는 것 같습니다 input-events
. 내 노트북의 터치패드를 전환하도록 이 버튼을 매핑할 수 있는 방법이 있나요? 그렇다면 어떻게 해야 합니까?
답변1
커널이 이를 수신하지만 인식되지 않는다고 계속 불평하는 것으로 나타났습니다.
이 문제가 발생하거나 운영 체제에서 읽히지 않는 키를 매핑하려는 사람은 계속 읽어보세요.
터미널을 열고 실행하면 dmesg | grep -A 1 -i setkeycodes
다음과 같은 여러 항목이 표시됩니다.
[ 9.307463] atkbd serio0: Unknown key pressed (translated set 2, code 0xbe on isa0060/serio0).
[ 9.307476] atkbd serio0: Use 'setkeycodes e03e <keycode>' to make it known.
우리가 관심을 갖는 것은 "setkeycodes" 뒤의 16진수 값입니다. 이 경우에는 입니다 e03e
. 둘 이상이면 를 실행할 수 있습니다 tail -f /var/log/kern.log
. 이 작업을 수행한 후 찾고 있는 버튼을 클릭하면 위와 동일한 행이 표시되며 16진수 값만 있으면 됩니다. 이것을 기록해 두십시오.
이제 실행하여 xmodmap -pke | less
적절한 매핑을 찾으세요. 제 경우에는 터치패드를 전환하기 위해 매핑해야 합니다. 즉, 다음 줄에 관심이 있습니다.
keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle
관심 있는 내용을 찾지 못했다면 @Gilles 답변도 읽어보세요. 사용자 정의 매핑을 정의한 다음 계속 읽을 수도 있습니다(커널이 읽는 경우 xorg.conf에 추가할 필요가 없습니다). 디)
이제 다음 명령을 실행했습니다: . sudo setkeycodes [hexadecimal] [keycode]
제 경우에는 다음과 같습니다: setkeycodes e03e 199
.
이제 다음 줄을 사용하여 작동하는지 및/또는 올바른 매핑이 있는지 테스트할 수 있습니다.
xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
이 명령을 실행할 때 새로 열린 창( )을 주시하고 xev
콘솔 출력을 확인해야 합니다. 내 경우에는 다음과 같이 읽었습니다.
207 NoSymbol
199
에 매핑되도록 키코드를 요청했기 때문에 이것은 분명히 잘못된 것입니다 XF86TouchpadToggle
. 다시 확인하여 실제로 매핑된 xmodmap -pke
것을 발견 하고 오프셋 차이가 8이라는 것을 확인하여 명령을 다시 시도했지만 키가 도착하도록 매핑되었습니다 .keycode 207
NoSymbol
setkeycodes
keycode 191
sudo setkeycodes e03e 191
이것은 매우 잘 작동합니다.
편집 - 제가 제공한 솔루션은 시작 시 작동해야 했지만 작동하지 않았습니다. 내일 알아내고 이 답변을 업데이트하겠습니다. 이제 시작 시 수동으로 실행할 수 있을 것 같습니다.
답변2
표면적으로 장치는 키보드(소프트웨어에서 "코어" 키보드와 별도로 식별됨)이지만 X 서버는 이를 수신하지 않습니다.
노력하다아래에 입력 섹션을 추가하세요./etc/X11/xorg.conf.d
. 즉, /etc/X11/xorg.conf.d
디렉터리가 아직 없으면 디렉터리를 만들고 extra-keyboard-buttons
해당 디렉터리에 다음 콘텐츠로 파일을 만듭니다.
Section "InputClass"
Identifier "extra-keyboard-buttons"
Driver "kbd"
MatchProduct "AT Translated Set 2 keyboard"
EndSection
해당 라인에 대해 잘 모르겠습니다 MatchProduct
. 작동하지 않으면 조작해 보십시오.MatchXXX
지침.
이 파일이 올바르게 설정되면 X 서버를 시작할 때 해당 키보드의 이벤트를 처리해야 하며 xev
그 안과 다른 곳에서 이벤트를 볼 수 있어야 합니다. 키코드를 기록해 두고(이 경우 X11 키코드가 하드웨어 키코드와 동일한지는 잘 모르겠습니다) 키 기호를 키코드와 연결합니다. .Xmodmap
다음을 포함하는 홈 디렉터리에 있는 파일을 통해 이 작업을 수행 할 수 있습니다.
keycode 190 = XF86_Launch5
이제 할 수 있어키보드 단축키 정의이 키를 사용하세요.
터치패드를 전환하려면 다음 명령을 사용하십시오.xinput
. 실행하여 xinput list
사용 가능한 입력 장치를 확인하고 터치패드의 이름을 기록해 둡니다( Touchpad
아래에서 부르겠습니다). 해당 속성을 나열하려면 실행하세요 xinput list-props Touchpad
. 그 중 하나는 옆에 숫자(예: 135)가 있는 "Device Enabled"라고 해야 합니다. 다음 스크립트는 터치패드를 전환합니다.
#!/bin/sh
device_name='Touchpad'
property=135
flipped_state=$(xinput list-props "$device_name" |
awk "/\\($property\\)/ {print 1 - \$NF}")
xinput set-prop "$device_name" "$property" "$flipped_state"
파일로 저장 ~/bin/toggle-touchpad
하고 실행 가능하게 만듭니다( chmod +x ~/bin/toggle-touchpad
). 키에 바인딩하려면 설치하세요.xbindkeys다음 줄을 입력하여 스크립트를 실행하도록 구성하십시오 ~/.xbindkeysrc
.
"toggle-touchpad"
XF86_Launch5