web-dev-qa-db-ja.com

XTEでFn(ファンクションキー)キー押下をエミュレートする方法

xteはxautomationパッケージの一部です。数時間のマニュアルページを読んでドキュメントや作業例を探しても、まだxteをエミュレートできません Fn-F7 キーを押します。

xte 'keydown Meta_L' 'key F7' 'keyup Meta_L'

Meta_L、Meta_R、Multi_key、キーF7、キーダウンF7、キーアップF7を試しました。どの組み合わせも機能していないようです。

組み合わせキーを押す方法をエミュレートする方法はありますか? Fn コマンド/スクリプトからのキー?

3
komputes

Fnキー自体はxteにまったく登録されておらず、fnキーまたはfnの組み合わせはほとんどの場合xevを使用してfn + fキーの押下をシミュレートすることは通常非常に難しいかほとんど不可能です。他の通常のキーボードキーのようにカーネルからは見えません。

概要

実際に、3つのキーの組み合わせ(fn + f1、fn + f2およびfn + f3)をセットアップできました。これらの各組み合わせを押すと、カーネルが「不明なキーを押して...キーコードを設定」ダイアログを発行するからです。これは、キーコードを設定し、キーボードショートカットダイアログに移動して、keysymが割り当てられているかどうかを確認できることを意味しました。 XF86ペースト。その場合、それらから起動するプログラムを割り当てることが可能になり、xteを使用して次のコマンドを発行することも可能になりました。これはfn + f1を押すのと同じです。

xte 'keydown XF86Paste' 'keyup XF86Paste'

通常のマルチメディアキーのようなこれらのfnの組み合わせの3つを ここに示す として設定できるのは、私のラップトップの特徴かもしれませんが、とにかくプロセスを説明します。続きました。


完全な説明

通常はできないように、キーを設定できないかもしれませんが、私が知ったように、2つまたは3つは設定できるかもしれません。カーネルログを見ながら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 wiki記事で

Fnはキーとして認識されず、別のキーとの組み合わせでのみ認識されるため、たとえば、キーの組み合わせfn + f3は事実上単一のキーとして扱われ、他の単一のマルチメディアと同様に設定できることは明らかです。ボタン:

Sudo setkeycodes e027 135 

上記のコマンドは、設定するキーの組み合わせごとに個別に入力する必要があり、起動時にロードする場合は、/etc/rc.local(Sudoプレフィックスなし)に配置する必要があります。

ここで、キーボードショートカットに移動し、fn + F1などのキーの組み合わせを設定できるかどうかを確認して、新しいキーコードに関連付けられたXキーシムがあるかどうかを確認する必要があります。可能な場合は、XF86Pasteなどのキーシムが表示され、ショートカットを設定して任意のプログラムを起動できます。

xteでこれをテストするために必要なことは、特定の組み合わせ(例:fn + f1)のキーボードショートカットダイアログで見たキーシム(例:XF86Paste)をメモし、適切なコマンドを入力することです。

xte 'keydown XF86Paste' 'keyup XF86Paste'

これは、fn + f1を押したり、押したりするのと同じです。

Keysymに関連付けられたキーの組み合わせ(fn + f ...)で起動するようにプログラムを設定している場合、xteイベントがそのプログラムを起動し、設定が機能していることがわかります。


結論

これは、fn +ファンクションキーの組み合わせを設定する方法ですが、カーネルが組み合わせの少なくとも1つを不明だが設定可能なキーとして認識している場合のみ、ラップトップで使用できます。 fn + f1、fn + f2、およびfn + f3のみが設定可能でしたが、コンピューターによって異なります。 「スリープ」fn +ファンクションキーボタンのアクションを変更する場合は、 このUbuntu wiki記事 を参照してください。ただし、完全に最新ではない場合があります。

2
user76204

Xteの作者がこの問題を簡単に修正/解決したようです。

テストとして、F7キーをオーディオミュート機能にバインドしてから、

echo 'key F7' | xte 

xteによってF7キーが正常に生成されたことを確認しました。

0
Gino