Xでメニューキーを修飾子として使用する

Xでメニューキーを修飾子として使用する

Menuマイキー(キーコード135)を単独で押すと、通常のコンテキストメニューキーとして機能し、修飾子として使用するときは、XF86Audio *マルチメディアキーをエミュレートしたいと思います。たとえば、Menu+はPgUpをエミュレートしますXF86AudioRaiseVolume

すべてのXにキーの組み合わせを適用する代わりに、KDEのグローバルショートカットにキーの組み合わせを設定できますが、方法はわかりません。

答え1

必須コンポーネント:xmodmap、xcape、xbindkeys。

xmodmap -e "keycode 135 = Hyper_R"
xmodmap -e "add mod3 = Hyper_R"
xmodmap -e "keycode any = Menu" # this is needed for xcape
xcape -e "Hyper_R=Menu" # for single key press on menu key

~/.xbindkeysrc:

# map Menu+Pause as Mute
"xdotool keyup Hyper_R keyup Pause key --clearmodifiers XF86AudioMute keydown Hyper_R key Control"
    Mod3 + Pause

# map Menu+PgUp as Volume+

"xdotool keyup Hyper_R keyup Prior key --clearmodifiers XF86AudioMute keydown Hyper_R key Control"
    Mod3 + Prior

# etc. 

このように複雑な呼び出しをする理由は次のとおりxdotoolです。

  1. keyup Hyper_R keyup Pause- 鍵を消去する必要があります。それ以外の場合は、押すとXF86AudioMuteが送信され、別のキーとして認識されません。
  2. keydown Hyper_R- これにより、キーの組み合わせ(この場合は「一時停止」)を数回押すことができますXF86AudioRaiseVolume
  3. key Control- このように、xcapeは機能keydown Hyper_Rトリガーを避けるために偽とそれ以降の実際のキーリリースを検出しません。Menu

xdotools呼び出しはいくつかの bash スクリプトの外部で行うことができます。たとえば、次のようになります。

#!/bin/bash

case "$1" in
"up")
    KEY="XF86AudioRaiseVolume"
    SHORT="Prior"
    ;;
"down")
    KEY="XF86AudioLowerVolume"
    SHORT="Next"
    ;;
"mute")
    KEY="XF86AudioMute"
    SHORT="Pause"
    ;;    
"next")
    KEY="XF86AudioNext"
    SHORT="End"
    ;;
"prev")
    KEY="XF86AudioPrev"
    SHORT="Delete"
    ;; 
"playpause")
    KEY="XF86AudioPlay"
    SHORT="Insert"
    ;;        
"stop")
    KEY="XF86AudioStop"
    SHORT="Home"
    ;;            
esac

xdotool keyup Hyper_R keyup $SHORT key $KEY keydown Hyper_R key Control

関連情報