Как эмулировать нажатие клавиши 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.

Другие вопросы по тегам