web-dev-qa-db-ja.com

キー入力をLubuntuのショートカットにマッピングしたいのですが、xevの出力が混乱します

LubuntuでToshiba r835を使用しています。クリーンインストール後、マシンの電源がオンの状態で電源ボタンを押しても何も起こりません。 このアドバイス に従って電源ボタンを修正しました。

これらの行を〜/ .config/openbox/lubuntu-rc.xmlに追加しました

<keybind key="XF86PowerOff">
<action name="Execute">
<command>lubuntu-logout</command>
</action>
</keybind>

これは私にとって理にかなっています。

他のいくつかのキーを同様のショートカットにマップしたいと思います。たとえば、Fn-F1を押すと、画面がロックされます。私は次のようなものを追加すると思います

<keybind key="XF86ScreenSaver">
<action name="Execute">
<command>xscreensaver-command -lock</command>
</action>
</keybind>

ただし、Fn-F1を押すと、Super_Lキーを押したかのようにLubuntuメニューが開きます。端末を開いている場合は、lという文字も入力します。希望するショートカットxscreensaver-command -lockは無視されるようです。 何が起こっているのですか?ショートカットが機能しないのはなぜですか?

私はxevでこれを理解できると思ったが、xevの出力は私を混乱させる:

FocusOut event, serial 41, synthetic NO, window 0x2000001,
mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 41, synthetic NO, window 0x2000001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 41, synthetic NO, window 0x0,
    keys:  0   0   0   0   0   64  0   0   0   0   0   0   0   0   0   0   
           32  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

MappingNotify event, serial 41, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyPress event, serial 41, synthetic NO, window 0x2000001,
    root 0xae, subw 0x0, time 16525549, (289,-138), root:(341,155),
    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 0x2000001,
    root 0xae, subw 0x0, time 16525550, (289,-138), root:(341,155),
    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 0x2000001,
    root 0xae, subw 0x0, time 16525639, (289,-138), root:(341,155),
    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 0x2000001,
    root 0xae, subw 0x0, time 16525646, (289,-138), root:(341,155),
    state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

XF86ScreenSaverと思われるキーコード160を取得しているように見えますが、Super_Lキーとlキーを押したようにも見えます。この出力はすべて、Fn-F1キーを1回押すことで得られると思います。これは私を混乱させます。 Lubuntuメニューを開いて文字「l」を入力する代わりに、Fn-F1で画面をロックするにはどうすればよいですか?

3
Andrew

xbindkeysアプリでこれを実現できます。ターミナルウィンドウを開き、次のように入力します。

Sudo apt-get install xbindkeys

インストールしたら、ホームディレクトリに次の2つのファイルを作成します。

.xbindkeysrc

このファイルには、キーバインドの構成が保持されます

.xbindkeys.noauto

これは単に空のファイルになりますが、存在する場合、Xserverが起動時にxbindkeysを開始しないようにします。ブート時に起動するようにしたいのですが、スタートアップアプリケーションから自分で起動したいのです。これは、Xserverが起動プロセスの早い段階で起動するため、.xbindkeysrcファイルに設定した設定が機能しない場合があるためです。


次の行を.xbindkeysrcファイルに追加します

"xscreensaver-command -lock"
c:160

ファイルを保存する

スタートアップアプリケーションに配置するxbindkeysを起動する小さなスクリプトを作成します。

お気に入りのテキストエディターを開き、コピーして貼り付けるか、次の行を入力します。

#!/bin/bash

sleep 10
/usr/bin/xbindkeys &

ホームディレクトリにxbstart.shまたは任意の名前で保存します

実行可能にする

chmod 755 xbstart.sh

次に、そのスクリプトをスタートアップアプリケーションに追加して再起動します。


ログインすると、xbindkeysが呼び出され、.xbindkeysrcファイルを読み取り、バックグラウンドで実行されます。キーストロークを常に監視し、keycode 160が押されると、Xserverがメニューを開く代わりにxscreensaver-command -lockを実行する前に、それをトラップします。

2
Scott Stookey

これを追加しました

<keybind key="C-A-L">
  <action name="Execute">
    <command>xscreensaver-command -lock</command>
  </action>
</keybind>

そうすると Crt+Alt+L 私のscreebscaverの開始... @ fossfreedomのように表示

似たようなことをする必要があると思います

<keybind key="C-F1">
  <action name="Execute">
    <command>xscreensaver-command -lock</command>
  </action>
</keybind>

ただし、最初にそのキーバインドがまだ使用されていないかどうかを確認してください。

...必要なfnオプションについて: wikipedia を引用します。

Ctrl、Shift、AltGrなどの他の修飾キーとは異なり、キーボード内のマイクロコントローラーは通常、Fnキーが押されているかどうかに応じて異なるキーコードを送信します。これにより、キーボードがフルサイズのキーボードをエミュレートできるため、特殊なキーマップを作成する必要がありません。オペレーティングシステムは、フルサイズのキーボード用に設計された標準キーマップを使用できます。オペレーティングシステムにはFnキーの概念がないため、他のすべての標準キーボードキーとは異なり、ソフトウェアでキーを再マップすることはできません。

2
maniat1k