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

관련 정보