해결됨(2016-11-15): 질문 아래에서 자세한 내용을 확인하세요.
문제에 대한 자세한 설명
Lenovo Yoga 900-13ISK2에서 Fn+F6 키를 누를 때 터치패드를 비활성화하려고 합니다(실제로 BIOS 설정으로 인해 Fn 키를 누를 필요가 없습니다).
아무것도 시도하기 전에 Fn+F6 키를 누를 때마다 다음 메시지가 표시됩니다 dmesg
.
atkbd serio0: Unknown key pressed (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
atkbd serio0: Unknown key released (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
또한 랩톱을 "태블릿 모드"로 전환할 때마다 dmesg에서 다음을 볼 수 있습니다.
atkbd serio0: Unknown key pressed (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
ideapad_laptop: Unknown event: 1
atkbd serio0: Unknown key released (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
따라서 태블릿 모드로 들어갈 때 Fn+F6 키와 다른 이벤트를 누르거나 떼는 것과 같습니다. 마지막 이벤트는 키보드의 백라이트와 관련된 것으로 보입니다(백라이트를 제어하기 위해 Fn+Space를 누르면 동일한 로그인이 발생하므로 dmesg
). 태블릿 모드에서 노트북 모드로 전환할 때만
ideapad_laptop: Unknown event: 1
기록됩니다 .
이 모든 일은 Linux 4.8에서 발생합니다. 나는
config-4.4.0-43-generic
파일을 생성하기 위한 기반으로 Ubuntu를 사용하고 있습니다 .config
(예:https://gist.github.com/mvaled/36b2aa23b194d33ecd5e43efe8905cba).
그 후 나는 다음을 만들었습니다 /etc/udev/hwdb.d/10-yoga.hwdb
.
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO:pn*80UE*:pvr*YOGA*900-13ISK2*
KEYBOARD_KEY_bf=touchpad_toggle
udevadm hwdb -u
및(또는 재부팅) 후에 udevadm trigger
Fn+F6을 누르면 알 수 없는 키 이벤트 기록이 중지되고 다음 evtest
키가 표시됩니다.
Event: type 4 (EV_MSC), code 4 (MSC_SCAN), value bf
Event: type 1 (EV_KEY), code 530 (KEY_TOUCHPAD_TOGGLE), value 0
그러나 터치패드는 활성화된 상태로 유지됩니다.
다음 명령을 실행하여 터치패드를 비활성화/활성화할 수 있었습니다.
$ xinput set-prop "SYNA2B29:00 06CB:77C6" 'Device Enabled' 0
$ xinput set-prop "SYNA2B29:00 06CB:77C6" 'Device Enabled' 1
이 시점에서 나는 막혔습니다. 어떤 구성요소가 KEY_TOUCHPAD_TOGGLE 이벤트를 포착하고 이에 대한 작업을 수행해야 합니까?
터치패드가 "i2c_designware_platform" 드라이버에 의해 구동된다는 것을 알고 있습니다. 키보드는 "ideapad_laptop"에 의해 구동되는 것 같습니다. 이것이 합리적인가?
해결책
해결 방법은 파일을 다음 /etc/udev/hwdb.d/10-yoga.hwdb
과 같이 변경하는 것입니다.
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO:pn*80UE*:pvr*YOGA*900-13ISK2*
KEYBOARD_KEY_bf=f21
@dirkt는 파일에 대한 정보를 제공했습니다 /usr/share/X11/xkb/symbols/inet
. 이 문서를 읽으면 X11이 F21 키를 XF86TouchpadToggle에 매핑한다는 것이 분명합니다.
key <FK21> { [ XF86TouchpadToggle ] };
그래서 스캔코드를 매핑하는 대신 touchpad_toggle
기능키 F21에 매핑했습니다.
스크립트가 필요하지 않습니다.
남은 문제
이 이벤트는 노트북을 태블릿 모드로 전환할 때 노트북에서 전송됩니다. 그런데 노트북 모드로 복귀하면 다시 보내지 않아서 터치패드는 비활성화된 상태로 유지됩니다.
또한 노트북 모드에서 터치패드를 비활성화한 경우 태블릿 모드로 전환하면 활성화됩니다.
답변1
퍼즐의 어려운 부분을 모두 해결하셨습니다 :-)
토글 명령에 반응하는 전용 프로그램을 실행하거나 실행 중이고 키 누름에 반응할 수 있는 기존 프로그램을 사용해야 합니다. 일부 창 관리자는 fvwm
노트북에서 사용하는 밝기 및 볼륨 키 와 같은 키 누르기에 반응하도록 매우 유연하게 구성할 수 있습니다 . 따라서 사용 중인 창 관리자와 이를 구성하는 방법을 알아보세요.
xev
실행하고 초점을 맞춘 후 Fn+F6을 누르면 커널 키코드 대신 X 키코드를 찾을 수 있습니다.
두 번째 문제는 스위치 작업을 수행하려면 현재 상태를 알아야 한다는 것입니다. 가장 쉬운 방법은 아마도 작은 쉘 스크립트를 작성하여 Device Enabled
속성 xinput
을 읽은 다음 xinput set-prop
. X 짝수 코드를 발견할 때마다 창 관리자에서 이 쉘 스크립트를 실행하십시오(가능한 경우).
해결책
해결 방법은 파일을 다음 /etc/udev/hwdb.d/10-yoga.hwdb
과 같이 변경하는 것입니다.
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO:pn*80UE*:pvr*YOGA*900-13ISK2*
KEYBOARD_KEY_bf=f21
@dirkt는 파일에 대한 정보를 제공했습니다 /usr/share/X11/xkb/symbols/inet
. 이 문서를 읽으면 X11이 F21 키를 XF86TouchpadToggle에 매핑한다는 것이 분명합니다.
key <FK21> { [ XF86TouchpadToggle ] };
그래서 스캔코드를 매핑하는 대신 touchpad_toggle
기능키 F21에 매핑했습니다.
스크립트가 필요하지 않습니다.
남은 문제
이 이벤트는 노트북을 태블릿 모드로 전환할 때 노트북에서 전송됩니다. 그런데 노트북 모드로 복귀하면 다시 보내지 않아서 터치패드는 비활성화된 상태로 유지됩니다.
또한 노트북 모드에서 터치패드를 비활성화한 경우 태블릿 모드로 전환하면 활성화됩니다.
답변2
xorg에서 시냅틱을 사용할 때 나는 종종 다음을 사용합니다.
synclient touchpadoff=1 # for disable and =0 for enable