Переопределение ключей, которые генерируют несколько кодов сканирования

33

У меня есть ThinkPad W540. На его клавиатуре над цифровой клавиатурой расположены четыре мультимедийные клавиши. Два из этих ключей генерируют коды клавиш (и, видимо, коды сканирования), которые соответствуют комбинации клавиш Win_L+ Lи Win_L+ E. Другими словами, для ключа, который генерирует Win_L+ L,
showkey --scancodesвозвращает это:

0xe0 0x5b 0x26 0xa6 0xe0 0xdb

setkeycodesКоманда требует ни один байт Unescaped или убежали два байта последовательностей обозначают коды сканирования, и showkeyдает мне намного больше , чем это, так что я могу не совсем повторно карту , что ключ к одной из свободных кодов клавиш в моей системе с проста setkeycodes <scancode> <keycode>.

Я был бы очень признателен за любые подсказки о том, как переназначить эту клавишу на что-то еще, что не просто дублирует одну из существующих комбинаций клавиш на моей клавиатуре.

Луноход
источник
1
Возможно, вы захотите взглянуть на это: сочетания клавиш, которые не зависят от раскладки клавиатуры
terdon
1
Я думаю, что это может быть сложно: по крайней мере, на старых Thinkpad, такое отображение выполняется с помощью встроенного контроллера, а не ОС.
Мирабилось
1
У меня есть мультимедийная клавиатура Microsoft All-in-One, которая имеет ту же проблему, вы смогли найти решение?
osolmaz
5
Я сделал нечто похожее на Thinkpad T61 некоторое время назад, сопоставив клавиши, /etc/acpi/events которые есть в acpidпакете, и просто определив действие при нажатии этих функциональных клавиш.
Цезарь
2
У вас есть установка Win_L в качестве модификатора в X-windows? Это по умолчанию для меня.
MCR

Ответы:

1

Вы можете сделать это в два этапа:

  1. ловить комбинации клавиш
  2. для имитации набора разных клавиш.

Вы можете использовать xchainkeysдля 1. и [xdotool][2]для 2 .:

Для того, чтобы создать имитацию новый ключ xdotool, вариант --clearmodifiersиз keyможет быть важно , чтобы нейтрализовать оригинальную имитацию модификатора нажмите:

xdotool key --clearmodifiers Shift+a

Это должно ввести капитал Aв качестве теста.

В конфигурации xchainkeysin ~/.config/xchainkeys/xchainkeys.confмы можем привязать команду к комбинации клавиш:

W-l :exec xdotool key --clearmodifiers Shift+a

Теперь комбинация клавиш Winи l( Winвлево или вправо делают то же самое), а также клавиша, генерирующая Win_L + L, должны создать заглавную букву A.

(Есть много других программ, доступных для обеих частей. Во-первых, можно использовать конфигурацию горячих клавиш в среде рабочего стола, но я предпочитаю сохранять ее независимой от DE.)

Volker Siegel
источник
2
Проблема с этим решением, если я не ошибаюсь, будет такой же, как простое использование указанной комбинации клавиш для запуска действия - это действие не будет вызвано только этой клавишей, нажатие фактической комбинации клавиш, которая генерирует то же самое коды также дали бы тот же результат. Другими словами, он не удовлетворяет условию «переназначить этот ключ на что-то другое, что не просто дублирует одну из существующих комбинаций клавиш». Но я ценю усилия.
Moonwalker
3
Да, это правда - я не был уверен, что вы имели в виду под этим предложением, теперь я понимаю. Но похоже, что ваш ключ генерирует два аппаратных кода ключа (то есть в прошивке клавиатуры) - так что я не вижу никакой войны, за исключением того, что вы обнаруживаете время, когда искусственная клавиша нажимает «модификатор вниз», «другой ключ», "модификатор вверх". Хм ... может быть, решение, связанное с пайкой, более простое;)
Volker Siegel
1
@moonwalker Можете ли вы попытаться переназначить Win_L вместо другого ключа и проверить, не переопределяет ли он и другой модификатор?
Фолькер Сигел
1
не потерял бы я такие комбинации, как Win_L + R, Win + Break, Win + L, Win + и т. д. в таком случае?
Moonwalker
1
Нет, я так не думаю. Win-L есть Win-Shift-lНо вы также можете сопоставить цепочки сочетаний клавиш с командой. Вроде Win-aи после этого b. С вне Win-a, bведет себя нормально. Это, безусловно, самая полезная особенность xchainkeys, и, я думаю, довольно уникальная.
Volker Siegel
-2

Это то, что я сделал на своем Thinkpad Yoga, чтобы привязать ключ обратной косой черты / трубы к правильному ключу. Потому что по какой-то причине в каждой виртуальной машине Linux она интерпретирует ключ обратной косой черты \ pipe (\ |) как ключ меньше (<).

Сначала выполните команду: xev

Нажмите нужную клавишу, чтобы получить код для клавиши, которую вы хотите повторно привязать:

Вывод события xev KeyPress

В этом примере ключевой код равен 94, а действие «меньше», но мы хотим, чтобы оно имело действие обратной косой черты и бара, называемого «труба»

Переназначить код 94 на обратную косую черту и барный ключ, также известный как «pipe»:

xmodmap -e 'keycode 94 = backslash bar'

Теперь давайте сделаем это постоянным:

xmodmap -pke | egrep "backslash|bar" | grep 94 > ~/.Xmodmap`

Возвращает следующее в файл ~/.Xmodmap:

keycode  94 = backslash bar backslash bar

Затем вы должны создать следующий файл, чтобы сделать его постоянным:

echo "xmodmap .Xmodmap" > ~/.xinitrc
Kentgrav
источник
1
Ключ обратного слеша / канала генерирует один код сканирования, тема о переназначении ключей, которые генерируют несколько кодов сканирования.
луноход