LINUX.ORG.RU

hwdb добавить нерабочую fn-клавишу ноута

 , , ,


0

1

Ноут Lenovo Yoga 710-11isk. Клавиша fn+F6 используется для переключения состояния тачпада. В быту не самая полезная клавиша, но есть одно НО.

Ноут раскладывается на 360 градусов и может использоваться как планшет с сенсорным экраном. В таком режиме клавиатура и тачпад должны быть отключены, т.к. будут выполнять роль днища и могут быть задеты. Без каких либо драйверов, «из коробки» в линуксе отключается клава, когда я раскрываю крышку ноута на 360*, но продолжает работать тачпад.

Есть arch-wiki старшего брата это модели - Yoga 900. Где для решения этой проблемы предлагают добавить hwdb правило. Правило это у меня не работает. И с написанием этого правила мне и нужна ваша помощь.

1. Не уверен, что правильно составляю селектор.

В вики hwdb-маппинга для разных селекторов необходимо знать: bus_id, vendor_id, product_id, version_id, input device name. Из всего этого у меня есть только bus_id и dev_name:

# xinput list-props 17
Device 'AT Translated Set 2 keyboard':
	Device Enabled (143):	1
	Coordinate Transformation Matrix (145):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Send Events Modes Available (265):	1, 0
	libinput Send Events Mode Enabled (266):	0, 0
	libinput Send Events Mode Enabled Default (267):	0, 0
	Device Node (268):	"/dev/input/event4"
	Device Product ID (269):	1, 1
# udevadm info -r /dev/input/event4
P: /devices/platform/i8042/serio0/input/input4/event4
N: input/event4
E: DEVNAME=/dev/input/event4
E: DEVPATH=/devices/platform/i8042/serio0/input/input4/event4
E: ID_BUS=i8042
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: LIBINPUT_ATTR_KEYBOARD_INTEGRATION=internal
E: LIBINPUT_DEVICE_GROUP=11/1/1/ab83:isa0060/serio0
E: MAJOR=13
E: MINOR=68
E: SUBSYSTEM=input
E: TAGS=:power-switch:
E: USEC_INITIALIZED=4129888
Где взять остальные идентификаторы клавиатуры?

2. Не знаю какой скан-код я должен использовать.

На нажатие этой fn+F6 клавиши не реагируют:

# libinput debug-events
# showkey -s
# evtest /dev/input/event4
# dmesg
Не имея опыта написания hwdb правил я не знаю, должны ли они ваще реагировать до того, как я подключу эту клавишу. И поскольку сканкод этими утилитами я получить не смог - я использовал сканкод из вики Yoga 900.

Из всего, что у меня есть я слепил вот такое правило с 3 селекторами, которые по очереди проверял:

#evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrLenovoYOGA900*
#evdev:input:bi8042
evdev:name:/dev/input/event4
 KEYBOARD_KEY_bf=f21
после сохранения правила выполнял systemd-hwdb update и udevadm trigger от рута, но результата не получал, перезагружался и все равно не было эффекта.

Как все таки составить это правило? Нормально ли, что я не могу получить сканкод этой клавиши? Помимо fn+F6 я так же могу получить сканкод для fn+F7, которая используется для отключения радио-модулей(wifi, bt), но она точно работает, т.к. радио модули включаются/отключаются по ее нажатию, чего не скажешь о тачпаде.


/подсказка мод on/ а не лучше ли было от мыши инициалку распедролить не по-детски, и скормить псевдопланшету, как.. тачилово (с мульти)/ подсказка мод off/ end of translation..

anonymous ()

UPD: вот такой селектор сработал. Не думал, что уточнение необходимо.

evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*
теперь udevadm видит правило, но событие нажатия по прежнему нигде не отражается
# udevadm info -r /dev/input/event4
P: /devices/platform/i8042/serio0/input/input4/event4
N: input/event4
E: DEVNAME=/dev/input/event4
E: DEVPATH=/devices/platform/i8042/serio0/input/input4/event4
E: ID_BUS=i8042
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: KEYBOARD_KEY_bf=f21
E: LIBINPUT_ATTR_KEYBOARD_INTEGRATION=internal
E: LIBINPUT_DEVICE_GROUP=11/1/1/ab83:isa0060/serio0
E: MAJOR=13
E: MINOR=68
E: SUBSYSTEM=input
E: TAGS=:power-switch:
E: USEC_INITIALIZED=4353509
Т.е. по прежнему надо как то найти правильный сканкод.

hxss ()
Ответ на: комментарий от fehhner

та не. У тебя уже на существующие кейкоды вешаются иксовые задачи.

Мне надо сначала отрыть ХРЕН ПОЙМИ ГДЕ сканкод, потом привязать его к кейкоду(это действие уже описано выше) и только потом на эту кнопку буду действие биндить.

UPD: Ранее я пытался привязать недостающую клавишу к ноутбучной клаве /dev/input/event4, но по мере тестов обратил внимание, что некоторые fn-комбинации(переключатели микрофона, камеры, радио) исходят от другого устройства - /dev/input/event6, именуемого «Ideapad extra buttons».

Перенес hwdb правило на это устройство, правило сработало, кнопка по прежнему не отсвечивает ни в одном тесте.

udevadm info -r /dev/input/event5
P: /devices/pci0000:00/0000:00:1f.0/PNP0C09:00/VPC2004:00/input/input5/event5
N: input/event5
S: input/by-path/pci-0000:00:1f.0-platform-VPC2004:00-event
E: DEVLINKS=/dev/input/by-path/pci-0000:00:1f.0-platform-VPC2004:00-event
E: DEVNAME=/dev/input/event5
E: DEVPATH=/devices/pci0000:00/0000:00:1f.0/PNP0C09:00/VPC2004:00/input/input5/event5
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_PATH=pci-0000:00:1f.0-platform-VPC2004:00
E: ID_PATH_TAG=pci-0000_00_1f_0-platform-VPC2004_00
E: KEYBOARD_KEY_08=f20
E: KEYBOARD_KEY_0d=rfkill
E: KEYBOARD_KEY_42=f23
E: KEYBOARD_KEY_43=f22
E: KEYBOARD_KEY_bf=f21
E: LIBINPUT_DEVICE_GROUP=19/0/0/0:ideapad
E: MAJOR=13
E: MINOR=69
E: SUBSYSTEM=input
E: TAGS=:power-switch:
E: USEC_INITIALIZED=4119146
hxss ()
Ответ на: комментарий от hxss

Так я их не знал, кнопки эти на мышке вообще хрен пойми какие были. Смотрел через xev их, просто в моём случае - ещё забиндил на них кнопки клавиатуры через xte и выполнения нужных мне программ затем. Тебя xev интересует.

fehhner ★★★★ ()
Ответ на: комментарий от fehhner

нет. читай второй абзац и уровни. У меня нет сканкода.

xev, как и

# libinput debug-events
# showkey -s
# evtest /dev/input/event4
# dmesg
не видят нажатия этой клавиши.

hxss ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.