キーボードのいくつかのキーを再マッピングすることに興味があります。特に、ファンクションキーを押しながらF1キーを押して、スクリプトをトリガーさせたいと思います。 xev
は、キー押下に関連付けられているキーコードを把握するのに役立つことを知っています。たとえば、x
キーを押すと、次のようになります。
KeyPress event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1597243, (-190,43), root:(910,336),
state 0x0, keycode 53 (keysym 0x78, x), same_screen YES,
XLookupString gives 1 bytes: (78) "x"
XmbLookupString gives 1 bytes: (78) "x"
XFilterEvent returns: False
KeyRelease event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1597363, (-190,43), root:(910,336),
state 0x0, keycode 53 (keysym 0x78, x), same_screen YES,
XLookupString gives 1 bytes: (78) "x"
XFilterEvent returns: False
これは私には理にかなっています。
しかし、Function-F1を押すと、何が起こるのかわかりません。 Function-F1を押すと、Windowsボタンを押したまま、文字l
を入力したように見えるのはなぜですか?
Function-F1を押すとxev
出力
KeyPress event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735349, (-157,221), root:(943,514),
state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735350, (-157,221), root:(943,514),
state 0x40, keycode 46 (keysym 0x6c, l), same_screen YES,
XLookupString gives 1 bytes: (6c) "l"
XmbLookupString gives 1 bytes: (6c) "l"
XFilterEvent returns: False
MappingNotify event, serial 41, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 248
KeyPress event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735356, (-157,221), root:(943,514),
state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 41, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735357, (-157,221), root:(943,514),
state 0x40, keycode 160 (keysym 0x1008ff2d, XF86ScreenSaver), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
MappingNotify event, serial 42, synthetic NO, window 0x0,
request MappingKeyboard, first_keycode 8, count 248
KeyRelease event, serial 42, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735463, (-157,221), root:(943,514),
state 0x40, keycode 46 (keysym 0x6c, l), same_screen YES,
XLookupString gives 1 bytes: (6c) "l"
XFilterEvent returns: False
KeyRelease event, serial 43, synthetic NO, window 0x2600001,
root 0xae, subw 0x0, time 1735470, (-157,221), root:(943,514),
state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
テキストウィンドウをフォーカスした状態でFunction-F1を押すと、文字l
が入力されます。
背景情報:Toshibar835でLubuntu11.10を実行しています。役立つ可能性のある詳細をお知らせください。
編集:
比較のために、Function-F12と入力すると、次のようになります。
KeyPress event, serial 41, synthetic NO, window 0x2200001,
root 0xae, subw 0x0, time 8369184, (-620,473), root:(480,766),
state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 41, synthetic NO, window 0x2200001,
root 0xae, subw 0x0, time 8369344, (-620,473), root:(480,766),
state 0x0, keycode 78 (keysym 0xff14, Scroll_Lock), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
F1-F12キーに何か特別なものがあるかどうかを確認したかったのですが、少なくともいくつかは期待どおりに機能しているようです。
Function-F1と言うときは、ラップトップの隅にある面白い小さなFnキーを押してから、キーボードの左上にあるF1キーを押すことを意味すると思います。そして、一部のラップトップキーボードにあるSleepのような追加のキーの1つをマップしようとしていること。そのキーは文字通り複数のキーを押しているようです。まず、Win + Lを1つのコンボと見なします。 Windowsでは、このショートカットは画面をロックしますが、スクリーンセーバーは起動しません。次に、XF86ScreenSaverのマッピングが表示されます。これは、Xが何らかのスリープキーコードを認識していることを意味している可能性があります。ラップトップキーボードのそのキーは、Windowsユーザーが画面をすばやくロックしてスクリーンセーバーをアクティブにするのに便利なように、Win + L + Sleepの3つのキーコードを物理的に送信していると思います。それらを除外する良い方法がわかりません。キーボードのFnキーは通常、Linuxカーネルには表示されません。代わりに、キーボードがカーネルに伝えるコードを変更します。 LinuxでUSB RF PowerPoint remote with OOoを使用しようとしたときに、プレゼンテーションを開始/停止するボタンが不完全なコントロールであることがわかりましたF5とESCのキーコードを交互に送信します。他のボタンは、bを送信して画面を空白にするのと同じように不十分でした。
私はこの目的のために xbindkeys を使用しました。簡単にxbindkeys-kを実行し、目的のボタンを押します。次のような出力が得られるはずです。
"(Scheme function)"
m:0x0 + c:244
XF86Battery
これをホームディレクトリの.xbindkeysrcファイルに貼り付けます。ここで、(Scheme Function)
の部分を、実行するコマンド(たとえば、スクリプトを実行するためのPerl /home/my_script.pl
)に置き換えます。これにより、キーを再マッピングするタスクがはるかに簡単になります。