web-dev-qa-db-ja.com

xevからのこの出力はどういう意味ですか?

キーボードのいくつかのキーを再マッピングすることに興味があります。特に、ファンクションキーを押しながら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キーに何か特別なものがあるかどうかを確認したかったのですが、少なくともいくつかは期待どおりに機能しているようです。

4
Andrew

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を送信して画面を空白にするのと同じように不十分でした。

3
penguin359

私はこの目的のために xbindkeys を使用しました。簡単にxbindkeys-kを実行し、目的のボタンを押します。次のような出力が得られるはずです。

"(Scheme function)" 
    m:0x0 + c:244
    XF86Battery

これをホームディレクトリの.xbindkeysrcファイルに貼り付けます。ここで、(Scheme Function)の部分を、実行するコマンド(たとえば、スクリプトを実行するためのPerl /home/my_script.pl)に置き換えます。これにより、キーを再マッピングするタスクがはるかに簡単になります。

0
Momo