Комментарии 21
Ни в Армении, ни в Грузии вы не сможете купить клавиатуру с клавишами, подписанными буквами национальных алфавитов. Аналогично, в Казахстане и Узбекистане используют русско-английские клавиатуры и вынуждены учить, где располагаются буквы, не входящие в стандартную латиницу или кириллицу.
Что прям никто никто не покупает в Китае Whitelabel клавиатуры и на месте не наносит на них буквы? Этож огромное поле для небольших бизнесов.
evdev:input:b0003v1A2Cp0E24* # my keyboard id
Где можно найти my keyboard id?
evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>
Для USB `bus_id` всегда 0x03 (0003)
`vendor_id` и `product_id` можно узнать через lsusb
`version_id` и `modalias` обычно можно не уточнять (*)
Допустим, для MS NEK 4000 строка будет
evdev:input:b0003v045Ep00DB*
udevadm monitor
должен показать
UDEV [2232528.118014] add /devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3:1.1/0003:5C0A:0003.002F (hid)
UDEV [2232528.118043] add /devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3:1.0/0003:5C0A:0003.002E (hid)
...
evdev:input:b0003v5C0Ap0003e002E*
— так писать?Попробуйте скрипт (пути к файлам написаны для Arch Linux):
#!/bin/sh
for DEVICE in /dev/input/by-id/*; do
echo $(basename $DEVICE)
DEVID=$(basename $(readlink $DEVICE))
printf "evdev:input:b%sv%sp%se%s*\n\n" \
`cat /sys/class/input/$DEVID/device/id/bustype` \
`cat /sys/class/input/$DEVID/device/id/vendor` \
`cat /sys/class/input/$DEVID/device/id/product` \
`cat /sys/class/input/$DEVID/device/id/version`
done
usb-SINO_WEALTH_USB_KEYBOARD-event-if01
evdev:input:b0003v5c0ap0003e0110*
usb-SINO_WEALTH_USB_KEYBOARD-event-kbd
evdev:input:b0003v5c0ap0003e0110*
lsusb -vvv очень долго что-то делает и выдаёт вот такую ерунду
iProduct 2 USB KEYBOARD
iSerial 0
Отлично, ведь идентификаторы идентичные. Теперь создайте файл 90-custom-keyboard.hwdb
в /etc/udev/hwdb.d/
со следующим содержанием (образцы см. в /usr/lib/udev/hwdb.d/60-keyboard.hwdb
):
evdev:input:b0003v5c0ap0003e0110* # ваш идентификатор
KEYBOARD_KEY_70039=f14 # переназначение клавиши
Строка KEYBOARD_KEY
начинается с пробела, это важно. Обновите конфигурацию (при перезагрузке или подключении устройства это происходит автоматически):
sudo udevadm hwdb --update && udevadm trigger
Всё, изменения должны вступить в силу.
Чуть подробнее:
Переназначение клавиш задаётся парами KEYBOARD_KEY_<scancode>=<keycode>
. Получить scancode
можно с помощью программы evtest
. Сперва, нужно определиться с номером eventXX
, для этого запустите команду и найдите свою клавиатуру:
> ls -l /dev/input/by-id/
…
usb-SEM_USB_Keyboard-event-if01 -> ../event11
usb-SEM_USB_Keyboard-event-kbd -> ../event10
…
Выбираем "Keyboard-event-kbd" и узнаем нужный номер — 10. Теперь можно обратиться к evtest
:
sudo evtest /dev/input/event10
При нажатии клавиши "CapsLock", получается код "70039". Это scancode
. Названия keycode
(в нижнем регистре) можно найти в /usr/include/linux/input-event-codes.h
.
Они в /usr/include/linux/input.h лежат. (Ubuntu 14.04)
Попробуйте запускать ibus следующей командой (по совету):
ibus-daemon --xim
Проверено на Anki: без параметра китайский не работает, с параметром — работает.
bbs.archlinux.org/viewtopic.php?id=111087
Спасибо за статью, не заработал ремап CapsLock через udev. Покопался чуть-чуть в инете и нашел файлик, который работает и в старый и в новых udev. А ещё он проще, не нужно вычислять id клавиатуры и т.п. Он сразу переопределяет Caps Lock на всех клавиатурах: /etc/udev/hwdb.d/99-caps-lock-to-f14.hwdb
# Old rules ( systemd / udev < 220 )
keyboard:usb:v*p*
keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
KEYBOARD_KEY_3a=f14
KEYBOARD_KEY_0x70039=f14
# New rules ( systemd / udev >= 220 )
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
evdev:input:b0003v*p*
KEYBOARD_KEY_3a=f14
KEYBOARD_KEY_0x70039=f14
Всё остальное также — перезагрузить hwdb и trigger или переткнуть клавиатуру. Если активны, обновите, пожалуйста, статью :)
Ввод текста в Linux (ibus)