Os dispositivos modernos de mouse têm mais de um id quando você executa a consulta xinput list
. Este script irá cobrir esses dispositivos também, mas o primeiro id deve ser determinado. A seleção é baseada na diferença entre as saídas do comando xinput query-state <id>
e a suposição de que um id terá alguma chave 245 na saída, daí a linha:
moid0=$(xinput query-state $moid1 | grep 245)
Para o seu dispositivo, a diferença entre as saídas pode variar, mas você pode usar outra palavra-chave que não seja 245
e alterar a linha.
Então o script é assim:
#!/bin/bash
vctrl1 () {
xinput test $mo | while read line
do
eval $(xdotool getmouselocation --shell)
if [ $Y -gt 24 ]; then break
elif [ "$wnn" != "Desktop" ] && [ $sd3 == $wg2 ]; then break
elif [[ $line == "button release 5" ]] ; then
xdotool key XF86AudioLowerVolume
elif [[ $line == "button release 4" ]] ; then
xdotool key XF86AudioRaiseVolume
fi
done
}
sd1=$(xdpyinfo | grep dimensions)
sd2="${sd1#*dimensions: }"
sd3="${sd2%% pixels*}"
while :
do
moid=$(xinput list | grep -iPo 'mouse.*id=\K\d+')
eval $(xdotool getmouselocation --shell)
if [[ $Y -le 24 && ! -z $moid ]]; then
wg1=$(xdotool getactivewindow getwindowgeometry)
wg2="${wg1#*Geometry: }"
wnn=$(xdotool getactivewindow getwindowname)
read moid1 moid2 < <(echo $moid)
moid0=$(xinput query-state $moid1 | grep 245)
if [[ ! -z $moid0 ]]; then mo=$moid2 && vctrl1
else mo=$moid1 && vctrl1
fi
elif [[ -z $moid ]]; then sleep 3
fi
sleep 0.2
done
Ele permitirá o controle de volume com a roda do mouse enquanto passa o mouse sobre o painel.