Я пытаюсь найти способ принудительно переназначить клавиши клавиатуры.
Я пытался использовать xmodmap и setxkbmap, но они не работают для одного конкретного приложения. Такие команды работают для других обычных оконных / приложений на X tho.
Я думаю, что приложение может читать исходные данные с клавиатуры и игнорировать ввод X?
Итак, как переназначить ключи без использования xmodmap и setxkbmap? если это когда-либо возможно сделать с помощью какого-либо программного обеспечения.
Я также пробовал xkeycaps, xkbcomp, но не пробовал loadkeys, так как он работает на X.
Я нашел здесь , что я мог бы попробовать setkeycodes
, «потому что после назначения ядра кода ключа кнопка должна работать в Xorg» , но я также обнаружил , что «вы не можете использовать„setkeycodes“на USB - клавиатурами» , это мой случай (я заинтересован в случае кто-то заставляет его работать на PS2, как я думаю, я мог бы использовать адаптер).
Это казалось многообещающим «Сопоставить коды сканирования с кодами клавиш» , но после нескольких тестов ничего не изменилось, вот они:
я нашел код клавиши «36» (клавиша «j») на vt1 и showkey
обнаружил код сканирования «7e» (клавиатура ».) В VT1 сshowkey --scancodes
$cat >/etc/udev/hwdb.d/90-custom-keyboard.hwdb
keyboard:usb:v*p*
keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
KEYBOARD_KEY_7e=36
$udevadm hwdb --update #updates file: /lib/udev/hwdb.bin
$udevadm trigger #should apply the changes but nothing happened
$cat /lib/udev/hwdb.bin |egrep "KEYBOARD_KEY_7e.{10}" -ao
KEYBOARD_KEY_7eleftmeta
$#that cat on hwdb.bin did not change after the commands..
Обс .: не работал ни с: KEYBOARD_KEY_7e=j
Еще несколько альтернативных способов (автор @ vinc17) найти ключи:
evtest /dev/input/by-id/...
или
input-kbd 3
(поместите индекс id, найденный в ls -l /dev/input/by-id/*
ex. Event3)
PS .: * Если вы заинтересованы в тестировании самих себя, соответствующая тема для приложения: http://forums.thedarkmod.com/topic/14266-keyboard-issue-in-new-version-108/ Вопросы, которые я имеют одно и то же: некоторые ключи (KP_Decimal, DownArrow, UpArrow, RightArrow) игнорируются и рассматриваются все с одинаковым значением там "0x00"
источник
/etc/udev/hwdb.bin
, а не/lib/udev/hwdb.bin
. Но хотя этот файл обновлен правильно, это не работает для меня, даже после перезагрузки. Возможно, чего-то не хватает в документации. Об этом: bugs.freedesktop.org/show_bug.cgi?id=82311showkey --scancodes
не дает коды сканирования, которые ожидает udev (значения разные);input-kbd
утилита дает правильные сканкоды.evtest
Утилита должна также дать вам правильные сканкоды: после ввода ключа, вы должны получить 2 строки и первый один должен заканчиваться чем - то формаcode 4 (MSC_SCAN), value xxx
, гдеxxx
есть скан. Но драйвер для моей клавиатуры глючит, и я не получаю этуMSC_SCAN
строку для некоторых клавиш, которые я хотел переназначить. Вот почему я использовалinput-kbd
, в котором перечислены все коды сканирования для выбранного устройства.Ответы:
Сначала найдите скан-код ключа, который необходимо переназначить, например, с помощью
evtest
утилиты.MSC_SCAN
Должна быть выведена строка, подобная следующей (с включенным в нее):сопровождаемый вторым, дающим текущий код ключа. Если
MSC_SCAN
строка не выводится, это связано с ошибкой драйвера ядра, но скан-код все еще можно найти с помощьюinput-kbd
утилиты;evtest
должен был дать код ключа, чтобы было легко найти соответствующую строку вinput-kbd
выводе (например, с помощьюgrep
).После того, как коды сканирования ключей, которые должны быть переназначены, были определены, создайте файл, такой как
/etc/udev/hwdb.d/98-custom-keyboard.hwdb
содержащий переназначения. Начало файла/lib/udev/hwdb.d/60-keyboard.hwdb
дает некоторую информацию. В моем случае (который работает) у меня есть:(До udev 220 мне пришлось использовать
keyboard:usb:v05ACp0221*
для первой строки.)evdev:
Строка должна быть в начале строки. Обратите внимание, что буквы в поставщике и идентификатор продукта должны быть заглавными буквами. КаждыйKEYBOARD_KEY_
параметр должен иметь ровно один пробел (примечание: строка без пробелов выдаст сообщение об ошибке, а строка с двумя пробелами в старых версиях udev молча игнорировалась).KEYBOARD_KEY_
за ним следует скан-код в шестнадцатеричном формате (вроде того, что обаevtest
иinput-kbd
дают). Допустимые значения могут быть получены либо изevtest
выходныхinput-kbd
данных, либо из выходных данных, либо даже из/usr/include/linux/input.h
файла: например,KEY_102ND
дадут102nd
(удаливKEY_
и преобразовав в нижний регистр), который я использовал выше.После сохранения файла введите:
(пере) построить базу данных
/etc/udev/hwdb.bin
(вы можете проверить ее метку времени). Потом,приму новые настройки к сведению. Вы можете проверить с
evtest
.В 2014 году выпущенная версия udev содержала неполную / ошибочную информацию
/lib/udev/hwdb.d/60-keyboard.hwdb
, но вы можете посмотреть последнюю версию файла и / или мой отчет об ошибках и обсуждение проблем с документацией и пробелами.Если это не сработает, проблема может быть обнаружена после временного увеличения уровня журнала
udevd
с помощьюudevadm control
(подробности см. На справочной странице udevadm (8)).Для старых
udev
версий, таких как 204, этот метод все еще должен работать.источник
/lib/udev/hwdb.bin
, просматривается,bless
и я вижуKEYBOARD_KEY_70085
его в конце. Я думаю, что Ubuntu 14.04 настроен (защищен?) Таким образом. Я пыталсяudevadm control --log-priority=debug
. на основеlsusb
(045e: 0750) моя клавиатура выглядит какkeyboard:usb:v045ep0750*
, но яkeyboard:usb:v*p*
тоже пробовал . Я думаю, что это/etc/udev/hwdb.bin
должно быть обновлено, но даже не существует.udevadm hwdb --usr --update
, несмотря на то, что я не был.udevadm hwdb --update
я скопировал/lib/udev/hwdb.bin
в/etc/udev/hwdb.bin
и побежал ,strace udevadm trigger --sysname-match="event*"
и файл ,hwdb.bin
кажется , не были прочитаны им (если это как это работает).udevadm trigger ...
, посмотрите мой тест здесь . Обратите внимание, что перед запускомudevadm trigger ...
необходимо убедиться, что время изменения файла было обновлено, иначе время доступа не будет обновляться при чтении файла.udevadm --version
: 215 (и версия пакета udev: 215-7). Спасибоudevadm trigger ...
, вам не нужно перезагружаться (если вы не хотите удалить настройки, AFAIK). Но вы можете попробовать перезагрузить компьютер, чтобы увидеть, есть ли какой-либо эффект.