Решено: Microsoft® Digital Media Keyboard 3000 (Как всегда, не работают клавиши)

Разбираемся с подключением и настройкой устройств ввода информации.

Модератор: Модераторы разделов

Ответить
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Решено: Microsoft® Digital Media Keyboard 3000

Сообщение watashiwa_daredeska »

Итак, приобрел по случаю сабж и напоролся на проблему с неработоспособностью некоторых клавиш.

Контекст:
Debian Sid,
xserver-xorg: 1:7.5+8 (клавиатура через evdev)
linux-image-2.6.32-5-amd64: 2.6.32-27
или
linux-image-2.6.36-trunk-amd64: 2.6.36-1~experimental.1

Проблема:
Клавиши «Приближение», «Кнопка Windows® Flip 3D», «Клавиши просмотра избранного» (на картинке по ссылке выше) не детектируются.

Раскопки показали, что клавиатура видна как 2 input-устройства. event0 — основная часть клавиатуры, работает отлично. event1 — все дополнительные клавиши, работает частично.

Что делалось:
Для проблемных клавиш
1. xev. Не реагирует.
2. showkey -s. Не реагирует.
3. cat /dev/input/event1. Не реагирует.
4. Поставил debug=1 модулю hid, в debugfs hid реагирует на все клавиши, но по разному (выдержки см. ниже).
5. Сообщений о «неподдерживаемых ядром клавишах» нет ни в логах, ни на консоли.

Основная клавиатура, клавиша «A»:

Код: Выделить всё

report (size 8) (unnumbered) =  00 00 04 00 00 00 00 00
Keyboard.00e0 = 0
Keyboard.00e1 = 0
Keyboard.00e2 = 0
Keyboard.00e3 = 0
Keyboard.00e4 = 0
Keyboard.00e5 = 0
Keyboard.00e6 = 0
Keyboard.00e7 = 0
Keyboard.0004 = 1
a
report (size 8) (unnumbered) =  00 00 00 00 00 00 00 00
Keyboard.00e0 = 0
Keyboard.00e1 = 0
Keyboard.00e2 = 0
Keyboard.00e3 = 0
Keyboard.00e4 = 0
Keyboard.00e5 = 0
Keyboard.00e6 = 0
Keyboard.00e7 = 0
Keyboard.0004 = 0


Расширенная клавиатура, клавиша «Mail» (работает):

Код: Выделить всё

report (size 8) (numbered) =  01 8a 01 00 00 01 00 00
Consumer.0000 = 0
Consumer.018a = 1
ff00.fe03 = 1
ff00.fe04 = 0
ff00.ff05 = 0
ff00.ff02 = 0

report (size 8) (numbered) =  01 00 00 00 00 01 00 00
Consumer.018a = 0
Consumer.0000 = 1
ff00.fe03 = 1
ff00.fe04 = 0
ff00.ff05 = 0
ff00.ff02 = 0


Клавиша «Windows® Flip 3D» (не работает):

Код: Выделить всё

report (size 8) (numbered) =  01 a2 01 00 00 01 00 00
Consumer.0000 = 0
Consumer.01a2 = 1
ff00.fe03 = 1
ff00.fe04 = 0
ff00.ff05 = 0
ff00.ff02 = 0

report (size 8) (numbered) =  01 00 00 00 00 01 00 00
Consumer.01a2 = 0
Consumer.0000 = 1
ff00.fe03 = 1
ff00.fe04 = 0
ff00.ff05 = 0
ff00.ff02 = 0


Клавиша «Избранное 1» (не работает):

Код: Выделить всё

report (size 8) (numbered) =  01 00 00 00 00 05 00 00
ff00.fe03 = 1
ff00.fe04 = 0
ff00.ff05 = 1
ff00.ff02 = 0

report (size 8) (numbered) =  01 00 00 00 00 01 00 00
ff00.fe03 = 1
ff00.fe04 = 0
ff00.ff05 = 0
ff00.ff02 = 0


Как это лечить?
Приоритет: клавиша «Windows® Flip 3D», ибо Super_R как-то не хватает. Остальные — больше в плане общего развития и морального удовлетворения.

Варианты «УМВР» принимаются, при указании точной версии дистрибутива и ядра, чтобы можно было воспроизвести (если клавиатура та же, разумеется). Гугл находит только отзывы, в которых говорится «всё тип-топ, вся 21 доп. кнопка работает» (хотя их 23 :)), причем без указания, в каком дистрибутиве, какой версии и т.п.

Если единственный вариант — хачить ядро, то было бы желательно ткнуть носом максимально близко к месту возможного фикса, ибо я не kernel-hacker.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: Microsoft® Digital Media Keyboard 3000

Сообщение watashiwa_daredeska »

Итак, частично проблему решил.

1. Zoom in/Zoom out ядром, оказывается, обрабатывались и раньше, просто я, видимо, не заметил.
2. Для остальных 6 клавиш я накорябал патч. Т.к. клавишу, которая на месте Super_R, я прописывал в общий hid-input.c, то назначил ей код, подходящий к её описанию в мануале (KEY_CYCLEWINDOWS), а не KEY_RIGHTMETA, которая уже есть. В принципе, думаю, если перенести назначение этой клавиши в hid-microsoft.c в специфичную для данной клавиатуры секцию, можно и KEY_RIGHTMETA назначить.
3. В настройках XKB прописал:

Код: Выделить всё

    Xkb_Symbols     {
        ... бла-бла-бла...
        include "inet(evdev)"
        key <I162> { [ Super_R        ]       };
        key <I224> { [ XF86Messenger  ]       };
        key <FK14> { [ F14            ]       };
        key <FK15> { [ F15            ]       };
        key <FK16> { [ F16            ]       };
        key <FK17> { [ F17            ]       };
        key <FK18> { [ F18            ]       };
    };

В консоли KEY_RIGHTMETA не фиксил, ибо мне не особо надо.

Осталась проблемка с Zoom in/Zoom out. По сообщениям input-events, эти клавиши генерят event'ы с кодами клавиш 0x1a2, 0x1a3. Модуль evdev из Xorg, похоже, вообще не умеет работать с кодами клавиш >255. Печально, но фиксить в ближайшее время лениво.

Патч для 2.6.36 (2.6.36-1~experimental.1) из Debian:
ms_digital_media_3000.patch.gz
(702 байт) 13 скачиваний
Спасибо сказали:
Ответить