Pull to refresh

Comments 21

Ни в Армении, ни в Грузии вы не сможете купить клавиатуру с клавишами, подписанными буквами национальных алфавитов. Аналогично, в Казахстане и Узбекистане используют русско-английские клавиатуры и вынуждены учить, где располагаются буквы, не входящие в стандартную латиницу или кириллицу.

Что прям никто никто не покупает в Китае Whitelabel клавиатуры и на месте не наносит на них буквы? Этож огромное поле для небольших бизнесов.
UFO just landed and posted this here
У меня наклейки поотлетали через 3 месяца, да и не солидно это. Силиконовые накладки смотрятся очень аккуратно, но подходят только для клавиатур Apple и небольшого количества популярных ноутбуков.
Автору стоит посмотреть на современный узбекский алфавит, а затем на узбекскую раскладку, которая ничем не отличается от английской. Если же речь идёт про кириллицу, то её упразднили больше 20 лет назад.
Посмотрите узбекские сайты и газеты — кириллица и латиница в равной доли, 50/50. Большинство книг печатаются на кириллице, только учебники на латинице. И это за 20 лет. Ещё есть Каракалпакстан и большое количество таджиков и казахов со своими письменностями.
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


должен показать

У меня 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
Здорово. но у меня клавиатура выдаёт 2 таких id
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-event-codes.h
Они в /usr/include/linux/input.h лежат. (Ubuntu 14.04)
В openSUSE не то чтобы скрипт не работает, а весь этот метод почему-то не работает. Больше получаса тыкаюсь, сверил все цифры, клавиатура точно так, которая нужна, но нет, f14 не приходит
Попробовал тут настроить японскую раскладку с ibus-anthy, в итоге все неплохо работает в огнелисе, а вот когда попробовал воспользоваться в anki (на qt), — не взлетело. При том что ibus-qt стоит. Мне вот интересно, японцы вообще линуксом пользуются или на виндах да на маках сидят?

Попробуйте запускать ibus следующей командой (по совету):


ibus-daemon --xim

Проверено на Anki: без параметра китайский не работает, с параметром — работает.

Только сейчас руки дошли к сожалению, увы, все по прежнему, очень странно. Ладно, буду гуглить дальше.
Возможно поможет кому: у меня не работало потому что пробовал прописывать в bashrc или xinitrc, а нужно было именно в xprofile
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 или переткнуть клавиатуру. Если активны, обновите, пожалуйста, статью :)

Sign up to leave a comment.

Articles