Componentes necessários: 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.
O motivo de tal chamada complicada de xdotool
é:
-
keyup Hyper_R keyup Pause
- as chaves precisam ser apagadas, caso contrário o XF86AudioMute é enviado enquanto elas são pressionadas e não é reconhecido como pressionamento de tecla solitário -
keydown Hyper_R
- para que a chave de combinação (Pausa neste caso) possa ser pressionada várias vezes, útil paraXF86AudioRaiseVolume
por exemplo -
key Control
- para que o xcape não detectekeydown Hyper_R
e subsequente lançamento de chave real, para evitar o acionamento da função Menu
xdotools
chamadas podem ser externas a algum script bash, como:
#!/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