Как эмулировать нажатие клавиши Fn (функциональная клавиша) в xte
xte является частью пакета xautomation. После нескольких часов чтения справочной страницы и поиска документации или рабочих примеров я все еще не могу заставить xte эмулировать нажатие клавиши Fn-F7.
xte 'keydown Meta_L' 'key F7' 'keyup Meta_L'
Я пробовал Meta_L, Meta_R, Multi_key, клавишу F7, клавишу F7, затем клавишу F7. Никакая комбинация, кажется, не работает.
Любая идея, как я могу эмулировать нажатие комбинации клавиш с помощью клавиши Fn из команды / сценария?
1 ответ
Это обычно очень сложно или почти невозможно использовать xte
имитировать нажатия клавиш fn + f, так как сама клавиша fn вообще не регистрируется в xev
и очень часто клавиши fn или комбинации fn не видны ядром, как другие обычные клавиши клавиатуры.
Резюме
Мне действительно удалось настроить три комбинации клавиш (fn + f1, fn + f2 и fn + f3), потому что нажатие каждой из этих комбинаций привело к тому, что ядро выдало диалог "неизвестная клавиша нажата... установить коды клавиш". Это означало, что я смог установить коды клавиш, а затем перейти к диалогу сочетаний клавиш и посмотреть, назначена ли клавиатура, например, XF86Paste. Если да, то теперь можно было назначить программу для запуска из них, и теперь также можно было использовать xte
выдать следующую команду, которая для меня была эквивалентна нажатию клавиш fn + f1:
xte 'keydown XF86Paste' 'keyup XF86Paste'
Это может быть особенностью одного из моих ноутбуков, что я могу установить три из этих комбинаций клавиш, как обычные мультимедийные клавиши, как показано здесь, но я все равно объясню процесс для вас и конкретные шаги, которые я выполнил.
Полное объяснение
Вы, возможно, не сможете установить ключи, как обычно, вы не можете, но, как я выяснил, могут быть установлены две или три. Нажмите fn и каждую из функциональных клавиш по очереди (f1-f12), просматривая журнал ядра:
tail -f /var/log/kern.log
Если они будут распознаны, вы увидите код сканирования ядра:
atkbd serio0: Unknown key pressed (translated set 2, code 0xa7 on isa0060/serio0).
kernel: [22751.972058] atkbd serio0: Use 'setkeycodes e027 <keycode>' to make it known.
Теперь, например, вы должны установить эти комбинации клавиш в соответствии с информацией, предоставленной ядром, то есть использовать код сканирования ядра и код по вашему выбору (желательно большое число, чтобы оно не мешало ничему другому). Смотрите ваши текущие коды клавиш с sudo dumpkeys | grep ^keycode
, как отмечено в этой полезной статье вики Ubuntu.)
Понятно, что, поскольку fn не распознается как ключ, а только в сочетании с другим ключом, комбинация клавиш fn + f3, например, рассматривается как одна клавиша и может быть установлена точно так же, как и другие одиночные мультимедиа. кнопки:
sudo setkeycodes e027 135
Вышеуказанная команда должна быть введена отдельно для каждой комбинации клавиш, которую вы хотите установить, и должна быть помещена в /etc/rc.local
(без префикса sudo), если вы хотите, чтобы они загружались при запуске.
Теперь вы должны проверить, была ли комбинация клавиш X связана с вашими новыми кодами клавиш, перейдя к сочетаниям клавиш и посмотрев, можно ли установить комбинацию клавиш, например, fn + F1. Если это возможно, появится клавиатурная клавиатура, такая как XF86Paste, и можно установить ярлык для запуска любой программы, которую вы пожелаете.
Теперь все, что вам нужно сделать, чтобы проверить это с xte
чтобы отметить символ клавиатуры (например, XF86Paste), который вы видели в диалоге сочетаний клавиш для конкретной комбинации (например, fn + f1), и введите соответствующую команду:
xte 'keydown XF86Paste' 'keyup XF86Paste'
Это равносильно тому, что вы нажимаете и нажимаете fn + f1.
Если вы настроили запуск программы с комбинацией клавиш (fn + f...), ассоциированной с keysym, то xte
событие запустит эту программу, и вы узнаете, что настройка сработала.
Заключение
Это способ установки комбинаций клавиш fn + Function, но для вашего ноутбука это будет возможно только в том случае, если ядро распознает хотя бы одну из комбинаций как неизвестный, но настраиваемый ключ. Только fn + f1, fn + f2 и fn + f3 были установлены для меня, но это будет отличаться для вашего компьютера. Если вы хотите поэкспериментировать с изменением действий вашей функциональной клавиши Fn + "сон", см. Эту статью вики- сайта Ubuntu, но она может быть не совсем актуальной.
Похоже, что автор (ы) xte исправили / решили эту проблему просто.
В качестве теста я связал клавишу F7 с функциональностью Audio Mute, затем
echo 'key F7' | xte
и подтвердил, что ключ F7 был успешно сгенерирован xte.