문제에 대한 자세한 설명

문제에 대한 자세한 설명

해결됨(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 triggerFn+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

관련 정보