Я перепутал свой замок с блокировкой в backspace.
/ etc / default / keyboard
XKBLAYOUT="us"
XKBVARIANT="altgr-intl"
BACKSPACE="guess"
XKBOPTIONS="caps:backspace"
Это работает очень хорошо, за исключением того, что он не работает для некоторых конкретных инструменты. Я использовал xev, чтобы узнать, что происходит.
Backspace нажата
KeyPress event, serial 38, synthetic NO, window 0x2400001,
root 0x159, subw 0x0, time 1028211, (335,635), root:(452,749),
state 0x10, keycode 22 (keysym 0xff08, BackSpace), same_screen YES,
XLookupString gives 1 bytes: (08) "
XmbLookupString gives 1 bytes: (08) "
XFilterEvent returns: False
KeyRelease event, serial 38, synthetic NO, window 0x2400001,
root 0x159, subw 0x0, time 1028272, (335,635), root:(452,749),
state 0x10, keycode 22 (keysym 0xff08, BackSpace), same_screen YES,
XLookupString gives 1 bytes: (08) "
XFilterEvent returns: False
Caps lock нажата
KeyPress event, serial 38, synthetic NO, window 0x2400001,
root 0x159, subw 0x0, time 859789, (391,558), root:(508,672),
state 0x10, keycode 66 (keysym 0xff08, BackSpace), same_screen YES,
XKeysymToKeycode returns keycode: 22
XLookupString gives 1 bytes: (08) "
XmbLookupString gives 1 bytes: (08) "
XFilterEvent returns: False
KeyRelease event, serial 38, synthetic NO, window 0x2400001,
root 0x159, subw 0x0, time 859875, (391,558), root:(508,672),
state 0x10, keycode 66 (keysym 0xff08, BackSpace), same_screen YES,
XKeysymToKeycode returns keycode: 22
XLookupString gives 1 bytes: (08) "
XFilterEvent returns: False
Я также пробовал это в браузера с помощью
addEventListener('keyup', event => {
console.log(event.keyCode, event.key, event.code)
})
При нажатии на кнопку backspace и caps lock
8 "Backspace" "Backspace"
8 "Backspace" "CapsLock"
это регистрируется следующим образом. Поэтому в основном мой замок блокируется переназначением, но он работает только в том случае, если инструменты и сайты используют надлежащие проверки. Я не хочу записывать отчет об ошибках для каждого инструмента или веб-сайта, который я когда-либо использовал, который реализует это неправильно.
Возможно ли сопоставить блокировку шапки таким образом, чтобы она полностью эмулировала обратное пространство вместо того, чтобы действовать как перепутана крышка замка?
во-первых, давайте посмотрим, как клавиши обрабатывается (взято из ответа):
/клавиатуры/ → [ф9] → /водитель/ → [ф10] → /x-сервер ХКВ/ → [ф11]
в [ф12] - это специальный код устройства, который привязан к определенном ключе, и может различаться в зависимости от поставщиков/продуктов. [от f13] и [ф14] распространяются на приложения. В [ф15] служит слоем абстракции, как это устройство агностик и язык агностик. То же [ф16] может произвести различные [f17 В]С, В зависимости от локали и состояние клавиш-модификаторов. Это причина, почему некоторые приложения только искать [ф18], особенно при общении с помощью сочетаний клавиш.
так что наша цель-сопоставить [зг19] ваши клавиши capslock на [ф20] на клавишу backspace. Приложения, то увидите то же [клавиши f21] и [ф22] независимо от того, нажимаешь backspace и клавишу capslock.
это сопоставление производится по ответ, используя файл hardwaredatabase (hwdb.бин), который составлен из .hwdb файлов в обоих [ф23] и [ф24].
сначала вы должны определить bustype, [ф28], [f29 и f30 С] из устройства ввода (клавиатуры), а также [ф31] в клавишу, которую хотите переназначить и [f32 из] вы хотите отобразить его.
Запустите evtest (возможно, вам придется установить его) и определить вашу клавиатуру в списке устройств. На клавиатуры с дополнительными клавишами, как воспроизведение/пауза, www и т. д. эти ключи часто подвергаются как различные устройства ввода. Если Вы не получаете никаких выходных данных при нажатии клавиши, нажмите Control+C и попробовать другое устройство. После того как вы определили вашу клавиатуру, помню первый столбец (/dev/input/eventX) и нажмите клавишу, которую хотите переназначить. Значение после [ф35] это [f36 в]. На моей клавиатуре:
[Ф1]... в [фунции f37] это ч.
теперь выполните следующую команду, где eventX это тот, который вы выбрали раньше:
[Ф2]выход для моей клавиатуры
[Ф3], чтобы получить [f39 расстройства], либо использовать выход [ф40] или посмотри в разделе ключи и кнопки [ф41] для полного списка. Идентификатор часть после KEY_ в Нижнем регистре, например, KEY_BACKSPACE будет возврата.
посмотри [пулемет f44]. Мы создадим текстовый файл в пробел с именем, начинающимся с числа, большего, чем файл, соответствующий нашему типу устройства. Для клавиатуры, это может быть любое число больше 60, а на джойстик она должна быть больше, чем 70. Например 65-keyboard-custom.hwdb. Используйте ваш любимый текстовый редактор, но имейте в виду, что вы должны запустить его как root, например,
[Ф4]Добавить следующее содержание
[ф5]...где
[bustype], [продавец], [продукт] и [версия] у нас ровно 4 знака (колодка с нулями, если это необходимо) и буквы должны быть ПРОПИСНЫМИ [скан] не нужна прокладка, но буквы должны быть строчные evdev:... линия не имеет предшествующих пространства KEYBOARD_KEY... линия имеет только один предыдущий пространствав моем примере, этот файл выглядит так:
[ф6] [и D40]в первой строке будет соответствовать вашим устройством. Вы можете указать дополнительные [ф50] линии, и вы можете использовать более чем один шаблон (*), чтобы соответствовать дополнительных устройств, но имейте в виду, что scancodes не конкретного устройства. Вы также можете добавить более одного сопоставления скан. Посмотрите на /lib/udev/hwdb.d/60-keyboard.hwdb для вдохновения. Более подробную и актуальную версию этого файла можно найти в онлайн-хранилище.[!и D40]если вы хотите применить изменения немедленно, сообщить в udev:
[ф8]обратите внимание, что значения конфигурации могут быть добавлены или изменены во время работы системы. При удалении конфигурации (например, скан карты), вы должны перезагрузить, чтобы изменения вступили в силу.
не забудьте также отменить переназначение вы делали раньше (используя /etc/default/keyboard), потому что все-таки будет применяться для всех клавиатур.
Сначала давайте посмотрим, как обрабатывается нажатие клавиши (взято из этого ответа):
/ keyboard / & rarr; scancode & rarr; / драйвер ввода / & rarr; keycode & rarr; / X сервер XKB / & rarr; keysym
scancode - это код, специфичный для устройства, привязанный к определенному ключу и отличающийся от разных поставщиков / продуктов. keycode и keysym распространяются на приложения. [F15] служит слоем абстракции, поскольку он агностик и агрегирован. Тот же keycode может создавать разные keysym s, в зависимости от языка и состояния клавиш-модификаторов. Вот почему некоторые приложения ищут только keycode, особенно при работе с быстрыми клавишами.
Итак, наша цель - сопоставить scancode вашего ключа CapsLock с keycode BackSpace. Приложения будут видеть те же keycode и keysym, независимо от того, нажимаете ли вы BackSpace или CapsLock.
Это сопоставление выполняется с помощью этого ответа с использованием файла базы данных оборудования (hwdb.bin ), который скомпилирован из файлов .hwdb как в /lib/udev/hwdb.d/, так и в /etc/udev/hwdb.d/.
Сначала вы должны определить bustype, vendor, product и version вашего устройства ввода (клавиатура), а также scancode клавиши вы хотите переназначить и key code identifier, на который вы хотите сопоставить его.
Запустите evtest (возможно, вам придется сначала установить его) и определить свою клавиатуру в списке устройств. На клавиатурах с дополнительными клавишами, такими как Play / Pause, WWW и т. Д., Эти клавиши часто отображаются как другое устройство ввода. Если вы не получаете какой-либо вывод при нажатии клавиши, нажмите Control + C и попробуйте другое устройство. После того, как вы определили свою клавиатуру, запомните первый столбец (/dev/input/eventX) и нажмите клавишу, которую вы хотите переназначить. Значение после (MSC_SCAN) равно scancode. На моей клавиатуре:
$ evtest
Available devices:
/dev/input/event0: Power Button
/dev/input/event1: Power Button
/dev/input/event2: G19 Gaming Keyboard
/dev/input/event3: G19 Gaming Keyboard
...
Select the device event number [0-18]:2
...
Event: time 1522111203.117945, -------------- SYN_REPORT ------------
Event: time 1522111220.778787, type 4 (EV_MSC), code 4 (MSC_SCAN),value 70039
Event: time 1522111220.778787, type 1 (EV_KEY), code 14 (KEY_BACKSPACE), value 1
... scancode - h .
Теперь запустите следующую команду, где eventX тот, который вы выбрали раньше:
$ grep "" /sys/class/input/eventX/device/id/*
Выход для моей клавиатуры:
/sys/class/input/event2/device/id/bustype:0003
/sys/class/input/event2/device/id/product:c228
/sys/class/input/event2/device/id/vendor:046d
/sys/class/input/event2/device/id/version:0110
Чтобы получить key code identifier, либо используйте вывод evtest, либо посмотрите на Раздел «Ключи и кнопки» в /usr/include/linux/input-event-codes.h для полного списка. Идентификатором является часть после KEY_, преобразованная в нижний регистр, например. KEY_BACKSPACE становится обратным пространством.
Взгляните на /lib/udev/hwdb.d/. Мы создадим текстовый файл в backspace с именем файла, начинающимся с числа, большего, чем файл, соответствующий нашему типу устройства. Для клавиатуры это может быть любое число больше 60, тогда как для указательной ручки оно должно быть больше 70. Например 65-keyboard-custom.hwdb. Используйте свой любимый текстовый редактор, но имейте в виду, что вы должны запустить его как root, например
$ sudo gedit /etc/udev/hwdb.d/65-keyboard-custom.hwdb
Добавить следующий контент
evdev:input:b[bustype]v[vendor]p[product]e[version]*
KEYBOARD_KEY_[scancode]=[key code identifier]
... где
[bustype], [vendor], [product] и [version] имеют ровно 4 символа (с нулями при необходимости), а буквы должны быть в верхнем регистре [scancode] не требуется прокладка, но письма должны в строке evdev:... нет предыдущего пробела, строка KEYBOARD_KEY... имеет ровно одно предыдущее пространствоВ моем примере файл выглядит так:
evdev:input:b0003v046DpC228e0110*
KEYBOARD_KEY_70039=backspace # map CapsLock to BackSpace
Первый линия будет соответствовать вашему устройству. Вы можете указать дополнительные evdev: строки, и вы можете использовать более одного шаблона (*) для соответствия дополнительным устройствам, но имейте в виду, что scancodes являются специфичными для устройства. Вы также можете добавить несколько снимков сканкода. Взгляните на /lib/udev/hwdb.d/60-keyboard.hwdb для вдохновения.
Скомпилировать новую конфигурацию в базу данных аппаратного обеспечения:
$ sudo systemd-hwdb update
Если вы хотите немедленно применить изменения, сообщите udev:
$ sudo udevadm trigger
Обратите внимание, что значения конфигурации могут быть добавлены или изменены только во время работы системы.
Не забудьте также отменить переназначение, которое вы делали раньше (используя /etc/default/keyboard), потому что это все равно применяется ко всем клавиатурам.
Сначала давайте посмотрим, как обрабатывается нажатие клавиши (взято из этого ответа):
/ keyboard / & rarr; scancode & rarr; / драйвер ввода / & rarr; keycode & rarr; / X сервер XKB / & rarr; keysym
scancode - это код, специфичный для устройства, привязанный к определенному ключу и отличающийся от разных поставщиков / продуктов. keycode и keysym распространяются на приложения. [F15] служит слоем абстракции, поскольку он агностик и агрегирован. Тот же keycode может создавать разные keysym s, в зависимости от языка и состояния клавиш-модификаторов. Вот почему некоторые приложения ищут только keycode, особенно при работе с быстрыми клавишами.
Итак, наша цель - сопоставить scancode вашего ключа CapsLock с keycode BackSpace. Приложения будут видеть те же keycode и keysym, независимо от того, нажимаете ли вы BackSpace или CapsLock.
Это сопоставление выполняется с помощью этого ответа с использованием файла базы данных оборудования (hwdb.bin ), который скомпилирован из файлов .hwdb как в /lib/udev/hwdb.d/, так и в /etc/udev/hwdb.d/.
Сначала вы должны определить bustype, vendor, product и version вашего устройства ввода (клавиатура), а также scancode клавиши вы хотите переназначить и key code identifier, на который вы хотите сопоставить его.
Запустите evtest (возможно, вам придется сначала установить его) и определить свою клавиатуру в списке устройств. На клавиатурах с дополнительными клавишами, такими как Play / Pause, WWW и т. Д., Эти клавиши часто отображаются как другое устройство ввода. Если вы не получаете какой-либо вывод при нажатии клавиши, нажмите Control + C и попробуйте другое устройство. После того, как вы определили свою клавиатуру, запомните первый столбец (/dev/input/eventX) и нажмите клавишу, которую вы хотите переназначить. Значение после (MSC_SCAN) равно scancode. На моей клавиатуре:
$ evtest
Available devices:
/dev/input/event0: Power Button
/dev/input/event1: Power Button
/dev/input/event2: G19 Gaming Keyboard
/dev/input/event3: G19 Gaming Keyboard
...
Select the device event number [0-18]:2
...
Event: time 1522111203.117945, -------------- SYN_REPORT ------------
Event: time 1522111220.778787, type 4 (EV_MSC), code 4 (MSC_SCAN),value 70039
Event: time 1522111220.778787, type 1 (EV_KEY), code 14 (KEY_BACKSPACE), value 1
... scancode - h .
Теперь запустите следующую команду, где eventX тот, который вы выбрали раньше:
$ grep "" /sys/class/input/eventX/device/id/*
Выход для моей клавиатуры:
/sys/class/input/event2/device/id/bustype:0003
/sys/class/input/event2/device/id/product:c228
/sys/class/input/event2/device/id/vendor:046d
/sys/class/input/event2/device/id/version:0110
Чтобы получить key code identifier, либо используйте вывод evtest, либо посмотрите на Раздел «Ключи и кнопки» в /usr/include/linux/input-event-codes.h для полного списка. Идентификатором является часть после KEY_, преобразованная в нижний регистр, например. KEY_BACKSPACE становится обратным пространством.
Взгляните на /lib/udev/hwdb.d/. Мы создадим текстовый файл в backspace с именем файла, начинающимся с числа, большего, чем файл, соответствующий нашему типу устройства. Для клавиатуры это может быть любое число больше 60, тогда как для указательной ручки оно должно быть больше 70. Например 65-keyboard-custom.hwdb. Используйте свой любимый текстовый редактор, но имейте в виду, что вы должны запустить его как root, например
$ sudo gedit /etc/udev/hwdb.d/65-keyboard-custom.hwdb
Добавить следующий контент
evdev:input:b[bustype]v[vendor]p[product]e[version]*
KEYBOARD_KEY_[scancode]=[key code identifier]
... где
[bustype], [vendor], [product] и [version] имеют ровно 4 символа (с нулями при необходимости), а буквы должны быть в верхнем регистре [scancode] не требуется прокладка, но письма должны в нижней строке evdev:... нет предыдущего пробела, строка KEYBOARD_KEY... имеет ровно одно предыдущее пространствоВ моем примере файл выглядит следующим образом:
evdev:input:b0003v046DpC228e0110*
KEYBOARD_KEY_70039=backspace # map CapsLock to BackSpace
Первый линия будет соответствовать вашему устройству. Вы можете указать дополнительные evdev: строки, и вы можете использовать более одного шаблона (*) для соответствия дополнительным устройствам, но имейте в виду, что scancodes являются специфичными для устройства. Вы также можете добавить несколько снимков сканкода. Взгляните на /lib/udev/hwdb.d/60-keyboard.hwdb для вдохновения.
Скомпилировать новую конфигурацию в базу данных аппаратного обеспечения:
$ sudo systemd-hwdb update
Если вы хотите немедленно применить изменения, сообщите udev:
$ sudo udevadm trigger
Обратите внимание, что значения конфигурации могут быть добавлены или изменены только во время работы системы.
Не забудьте также отменить переназначение, которое вы делали раньше (используя /etc/default/keyboard), потому что это все равно применяется ко всем клавиатурам.