LINUX.ORG.RU

Клавиатура и Fedora 29

 , , , ,


1

1

Всем привет. Купил клавиатуру HP Wireless Keyboard 600. На копмьютер поставил Fedora 29 (до этого пробовал на OpenSUSE 15 Leap, проблема аналогичная была). Данная клавиатура работает, частично. Не работают полностью все основные клавиши, но работают мультемидийные клавиши. Притом только те, которые есть на другой клавиатуре подключенной к компьютеру (Defender Oscar 600). При переключении в другой терминал, клавиатура также не работает, после чего я сделал вывод, что проблема в драйвере во время загрузки ядра. Посмотрел dmesg | grep usb

[    0.918954] usbcore: registered new interface driver usbserial_generic
[    0.918958] usbserial: USB Serial support registered for generic
[    0.920218] usbcore: registered new interface driver usbhid
[    0.920219] usbhid: USB HID core driver
[    1.241319] usb 1-1: new full-speed USB device number 2 using xhci_hcd
[    1.370662] usb 1-1: New USB device found, idVendor=0461, idProduct=4e90, bcdDevice= 1.05
[    1.370664] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    1.370666] usb 1-1: Product: HP Wireless Keyboard Mouse Kit
[    1.370667] usb 1-1: Manufacturer: Primax Electronics, Ltd
[    1.372716] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:0461:4E90.0001/input/input3
[    1.425537] hid-generic 0003:0461:4E90.0001: input,hidraw0: USB HID v1.11 Keyboard [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input0
[    1.426630] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit Consumer Control as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.1/0003:0461:4E90.0002/input/input4
[    1.478445] hid-generic 0003:0461:4E90.0002: input,hiddev96,hidraw1: USB HID v1.11 Device [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input1
[    1.479675] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.2/0003:0461:4E90.0003/input/input5
[    1.479758] hid-generic 0003:0461:4E90.0003: input,hidraw2: USB HID v1.11 Mouse [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input2
Я подумал, что необходим именно драйвер HID_Primax, который нашел в системе. Сразу попробовал загрузить модуль:
sudo modprobe hid_primax
sudo lsmod | grep hid
hid_primax             16384  0
Насторожило, что более HID модулей нет. Сделал предположение, что драйвера грузятся как то подругому, но информации не нашел. Подскажите, что сделать чтоб клава заработала или хотя бы направьте к решению. Еще проверил usbmon и при нажатии на клавишу q на Defender oscar 600 получил следующиее:
673f8f00 0.745015 C Ii:1:003:1 0:8 8 =
    00001400 00000000
673f8f00 0.745129 S Ii:1:003:1 -:8 8 <
q673f8f00 0.809073 C Ii:1:003:1 0:8 8 =
    00000000 00000000
673f8f00 0.809143 S Ii:1:003:1 -:8 8 <
После чего попробовал нажать данную клавишу на HP Wireless Keyboard 600, получил аналогичный результат:
67689cc0 0.785108 C Ii:1:002:1 0:8 8 =
    00001400 00000000
67689cc0 0.785133 S Ii:1:002:1 -:8 8 <
67689cc0 0.880974 C Ii:1:002:1 0:8 8 =
    00000000 00000000
67689cc0 0.880999 S Ii:1:002:1 -:8 8 <

Также нашел опцию GONFIG_HID_PRIMAX=m и опцию CONFIG_HID_GENERIC=y в /boot/config-4.20.5-200.fc29.x86_64 Пробовал CONFIG_HID_PRIMAX=y, вслепую так как информацию не нашел.

Дополнительные сведения:

uname -a
Linux localhost.localdomain 4.20.5-200.fc29.x86_64 #1 SMP Mon Jan 28 19:29:17 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux


Купил клавиатуру HP Wireless Keyboard 600.

А какое полное название этой клавиатуры? Гуглится только «HP Pavilion Wireless Keyboard 600», это она?

[ 1.370666] usb 1-1: Product: HP Wireless Keyboard Mouse Kit

Это чисто клавиатура или мышка там тоже в комплекте?

Насторожило, что более HID модулей нет. Сделал предположение, что драйвера грузятся как то подругому, но информации не нашел.

Основные модули hid в федоре вкопилированы в ядро и всегда загружены. lsmod показывает только модули ядра, которые загружаются отдельно от самого ядра. Все модули (и отдельные и вкомпиленные) можно посмотреть в /sys/module/.

Еще проверил usbmon и при нажатии на клавишу q на Defender oscar 600 получил следующиее:

А какой USB ID у Defender oscar 600? А то может для неё в ядре тоже какие-то специальные костыли приделаны.

Я подумал, что необходим именно драйвер HID_Primax, который нашел в системе. Сразу попробовал загрузить модуль:

...

Также нашел опцию GONFIG_HID_PRIMAX=m и опцию CONFIG_HID_GENERIC=y в /boot/config-4.20.5-200.fc29.x86_64 Пробовал CONFIG_HID_PRIMAX=y, вслепую так как информацию не нашел.

/boot/config-* - это конфиг *сборки* ядра. Изменения в нём не имеют силы, пока не положишь его в исходники ядра и не запустишь сборку =).

Теперь по поводу модуля hid-primax: этот модуль предназначен для другого устройства, с USB ID 0461:4E05 (у твоей клавиатуры - 0461:4e90):

$ modinfo hid-primax | grep alias
alias:          hid:b0003g*v00000461p00004E05
Просто добавление его внутрь ядра (=y вместо =m в конфиге ядра) ничего не даст. Он будет всегда загружен, но использоваться конкретно для твоего устройства всё равно не будет. Если есть желание потестить как будет работать твоя клавиатура с этим модулем, то нужно пересобрать ядро вот с таким патчем:
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 24f846d67478..61d1f6cade3f 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -1221,7 +1221,8 @@
 
 #define USB_VENDOR_ID_PRIMAX	0x0461
 #define USB_DEVICE_ID_PRIMAX_MOUSE_4D22	0x4d22
-#define USB_DEVICE_ID_PRIMAX_KEYBOARD	0x4e05
+#define USB_DEVICE_ID_PRIMAX_KEYBOARD_4E05	0x4e05
+#define USB_DEVICE_ID_PRIMAX_KEYBOARD_4E90	0x4e90
 #define USB_DEVICE_ID_PRIMAX_REZEL	0x4e72
 #define USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4D0F	0x4d0f
 #define USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4E22	0x4e22
diff --git a/drivers/hid/hid-primax.c b/drivers/hid/hid-primax.c
index 3a1c3c4c50dc..b3abee04eb5c 100644
--- a/drivers/hid/hid-primax.c
+++ b/drivers/hid/hid-primax.c
@@ -65,7 +65,8 @@ static int px_raw_event(struct hid_device *hid, struct hid_report *report,
 }
 
 static const struct hid_device_id px_devices[] = {
-	{ HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD_4E05) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD_4E90) },
 	{ }
 };
 MODULE_DEVICE_TABLE(hid, px_devices);
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
index 94088c0ed68a..ecc90d09aeb1 100644
--- a/drivers/hid/hid-quirks.c
+++ b/drivers/hid/hid-quirks.c
@@ -562,7 +562,8 @@ static const struct hid_device_id hid_have_special_driver[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS, HID_ANY_ID) },
 #endif
 #if IS_ENABLED(CONFIG_HID_PRIMAX)
-	{ HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD_4E05) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD_4E90) },
 #endif
 #if IS_ENABLED(CONFIG_HID_PRODIKEYS)
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) },
Я сейчас запущу сборку RPMок под федору с патченным ядром, но сборка займёт какое-то время. Напиши, если есть желание этот пачт потестить.

P.S. По выводу usbmon и исходникам hid-primax, я не понимаю как hid-primax может помочь. Но мало ли...

mironov_ivan ★★★★★ ()
Последнее исправление: mironov_ivan (всего исправлений: 1)
Ответ на: комментарий от mironov_ivan

А какое полное название этой клавиатуры? Гуглится только «HP Pavilion Wireless Keyboard 600», это она?

Извиняюсь за не точность, да это она

А какой USB ID у Defender oscar 600? А то может для неё в ядре тоже какие-то специальные костыли приделаны.

Bus 001 Device 008: ID 04d9:1702 Holtek Semiconductor, Inc. Keyboard LKS02

По поводу патча. Я не понимаю как его использовать) Я готов к любым тестам если это будет приближать к решению. А нельзя правилами udev загрузить нужный драйвер?

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

Bus 001 Device 008: ID 04d9:1702 Holtek Semiconductor, Inc. Keyboard LKS02

Вроде ничего специального для неё нет.

По поводу патча. Я не понимаю как его использовать)

Пакеты для федоры ещё собираются.

Я готов к любым тестам если это будет приближать к решению. А нельзя правилами udev загрузить нужный драйвер?

Можно попробовать вручную, но я не уверен, что это сработает так, как ожидается. Для этого надо из dmesg взять идентификаторы устройства для hid-generic (в первом посте это 0003:0461:4E90.0001, 0003:0461:4E90.0002 и 0003:0461:4E90.0003, но последние цифры могут меняться при перезагрузке), затем от рута проделать что-то вроде этого:

modprobe hid-primax

# Убираем стандартный драйвер:
echo "0003:0461:4E90.0001" >/sys/bus/hid/drivers/hid-generic/unbind
echo "0003:0461:4E90.0002" >/sys/bus/hid/drivers/hid-generic/unbind
echo "0003:0461:4E90.0003" >/sys/bus/hid/drivers/hid-generic/unbind

# Добавляем в hid-primax новый идентификатор устройства (003 означает, что устройство на шине USB, а не на какой-то другой)
echo 003 0461 4E90 >/sys/bus/hid/drivers/primax/new_id
Далее смотри в dmesg новые сообщения. Проделывать на свой страх и риск 8).

mironov_ivan ★★★★★ ()
Последнее исправление: mironov_ivan (всего исправлений: 1)
Ответ на: комментарий от mironov_ivan

Все проделал успеха нет.

[247729.008353] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:0461:4E90.0012/input/input33
[247729.061543] hid-generic 0003:0461:4E90.0012: input,hidraw0: USB HID v1.11 Keyboard [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input0
[247729.063249] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit Consumer Control as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.1/0003:0461:4E90.0013/input/input34
[247729.115952] hid-generic 0003:0461:4E90.0013: input,hiddev96,hidraw1: USB HID v1.11 Device [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input1
[247729.117820] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.2/0003:0461:4E90.0014/input/input35
[247729.118890] hid-generic 0003:0461:4E90.0014: input,hidraw2: USB HID v1.11 Mouse [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input2
[root@localhost rules.d]# modprobe hid_primax
[root@localhost rules.d]# echo "0003:0461:4E90.0012" > /sys/bus/hid/drivers/hid-generic/unbind
[root@localhost rules.d]# echo "0003:0461:4E90.0013" > /sys/bus/hid/drivers/hid-generic/unbind
[root@localhost rules.d]# echo "0003:0461:4E90.0014" > /sys/bus/hid/drivers/hid-generic/unbind
[root@localhost rules.d]# echo 003 0461 4E90 >/sys/bus/hid/drivers/primax/new_id
[root@localhost rules.d]# dmesg 
....
247729.008353] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:0461:4E90.0012/input/input33
[247729.061543] hid-generic 0003:0461:4E90.0012: input,hidraw0: USB HID v1.11 Keyboard [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input0
[247729.063249] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit Consumer Control as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.1/0003:0461:4E90.0013/input/input34
[247729.115952] hid-generic 0003:0461:4E90.0013: input,hiddev96,hidraw1: USB HID v1.11 Device [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input1
[247729.117820] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.2/0003:0461:4E90.0014/input/input35
[247729.118890] hid-generic 0003:0461:4E90.0014: input,hidraw2: USB HID v1.11 Mouse [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input2
[247837.618737] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:0461:4E90.0012/input/input36
[247837.673548] primax 0003:0461:4E90.0012: input,hidraw0: USB HID v1.11 Keyboard [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input0
[247837.674350] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.1/0003:0461:4E90.0013/input/input37
[247837.726414] primax 0003:0461:4E90.0013: input,hiddev96,hidraw1: USB HID v1.11 Device [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input1
[247837.726605] input: Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.2/0003:0461:4E90.0014/input/input38
[247837.726852] primax 0003:0461:4E90.0014: input,hidraw2: USB HID v1.11 Mouse [Primax Electronics, Ltd HP Wireless Keyboard Mouse Kit] on usb-0000:00:14.0-1/input2
Заметил еще одну вещь: при нажатии клавиш на HP в dmesg появляется запись input input36: event field not found

gaz0n ()
Ответ на: комментарий от mironov_ivan

gaz0n, ну как, удалось потестить с unbind и new_id?

У меня, тем веременем, дособиралось ядро с тестовым патчем (ссылки живут две недели):

sha512:

18f909ab7e02bfd2569a6d63ac2739d7fdde75debc1e041e1d976a124f24b93666c42a902cd41e41ee28ac25ba166b9eec6d8aa50e149bdf7992126171b63463  kernel-4.20.6-200.hpwkbd0.fc29.x86_64.rpm
8e21436db80fd39a6337e9e140935d89d7e27320f8002afa047e5bf26388bc028a8dd10d1723cc10caf0cc9e04ea3213d3efdd99cceb6f5ebd52b6dbba4158fe  kernel-core-4.20.6-200.hpwkbd0.fc29.x86_64.rpm
f6f180c4894622fcbe73a8428ddaeef9cb061c9993b44dc8bc7e6fbee9e4c47c3d9b121c67b262af8c247876a5317f76b144d15830ab084a01b61d356a988934  kernel-modules-4.20.6-200.hpwkbd0.fc29.x86_64.rpm
fa280fccb955fda2aed4bfc3cd61a383bbc41c85eeb8b7e432230c132776a133c31cb5c2a5952c788fd8692453eec98358ae0bd7a37aa4dc8e2d8360d1d2957d  kernel-modules-extra-4.20.6-200.hpwkbd0.fc29.x86_64.rpm
Ставить так:
sud dnf install ./kernel-4.20.6-200.hpwkbd0.fc29.x86_64.rpm ./kernel-core-4.20.6-200.hpwkbd0.fc29.x86_64.rpm ./kernel-modules-4.20.6-200.hpwkbd0.fc29.x86_64.rpm ./kernel-modules-extra-4.20.6-200.hpwkbd0.fc29.x86_64.rpm
Затем перезагрузиться и выбрать это ядро в загрузчике.

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

И еще оффтоп: как редактировать тут пост свой?

Под постом есть ссылка «[Править]». Редактировать можно только посты без ответов, плюс могут быть какие-то ограничения для новых пользователей.

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

Попробовал. Драйвер primax встал, но результат остался такой же. Спецклавиши типо win, управление громкостью работают, а симмволы и цифры нет. А сообщение event field not found о чем может говорить?

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

Попробовал. Драйвер primax встал, но результат остался такой же.

Значит primax - 100% не то, что надо.

А сообщение event field not found о чем может говорить?

О том, что что-то где-то идёт не так. Чтобы понять что именно - надо разбирать код ядра и читать стандарты на USB HID.

А можешь записать пакеты с USB при помощи tcpdump прямо с момента инициализации устройства? Сначала сделать hid-generic/unbind, запустить tcpdump на отдельном терминале, затем сделать hid-generic/bind на тот же самый идентификатор, а затем нажать две кнопки на клавиатуре: одну, которая точно работает, и одну, которая точно не работает. tcpdump запускать примерно так:

tcpdump -i usbmonN -s 0 -w kbdlog.pcap
N в usbmonN тот же, что и в /sys/kernel/debug/usb/usbmon/. Полученный файл выложи куда-нибудь и скажи в каком порядке какие кнопки жал.

mironov_ivan ★★★★★ ()
Последнее исправление: mironov_ivan (всего исправлений: 1)
Ответ на: комментарий от mironov_ivan

Я на форуме redhat нашел информацию о том, что это проблема в ядре и в будущих версиях они ее пофиксят. Наверное просто буду пока ждать и набираться опыта в работе с linux. Спасибо большое за помощь. Тут есть возможности какимто образом like посатвить?)

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

Я на форуме redhat нашел информацию о том, что это проблема в ядре и в будущих версиях они ее пофиксят.

А можно ссылку? А то я не уверен, что они будут чинить проблему, про существование которой никто не знает 8).

Спасибо большое за помощь. Тут есть возможности какимто образом like посатвить?)

Нет, лайков тут нет. Да и вроде я пока не особо и помог.

mironov_ivan ★★★★★ ()
Ответ на: комментарий от mironov_ivan
cat /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=/dev/mapper/fedora-swap rd.lvm.lv=fedora/root rd.lvm.lv=fedora/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
gaz0n ()
Ответ на: комментарий от gaz0n

Странно, вроде всё нормально. У меня в федоре из коробки меню grub показывается.

Можешь попробовать увеличить значение GRUB_TIMEOUT, а затем от рута:

# если у тебя uefi
grub2-mkconfig >/etc/grub2-efi.cfg
# если обычный bios
grub2-mkconfig >/etc/grub2.cfg

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

https://bugzilla.redhat.com/show_bug.cgi?id=1625415

Я надеюсь. Человек правда год уже ждет)

Хм, там другая клавиатура с похожими симптомами. Можешь, кстати, потестировать полурабочий воркэраунд, который там упоминается со ссылкой на гитхаб. Вдруг заработает.

Вообще, я хотел попробовать поковырять дамп, попробовать починить и (если что-нибудь получится) отправить патч в LKML. Так что если у тебя есть время - было бы неплохо сделать дамп с помощью tcpdump.

mironov_ivan ★★★★★ ()
Последнее исправление: mironov_ivan (всего исправлений: 1)
Ответ на: комментарий от mironov_ivan

Я решил попробовать mint. Текущая ситуация спустила меня на землю) Я понял, что сейчас на работе я могу уделять минимум этому времени, а уйти от ms очень охото из-за впихивания win10. Поэтому для себя выбрал стратегию самый легкий и стабильный дистрибутив по отзывам.

gaz0n ()