Ajuster le volume via dbus
J'utilise une application (VMWare Workstation) qui détourne les touches multimédias de mon clavier, je souhaite donc utiliser un autre périphérique d'entrée (Elgato Stream Deck) pour envoyer des commandes multimédias génériques telles que `` augmenter le volume '' ou `` pause ''. Je suis capable d'utiliser le stream deck pour envoyer des commandes shell comme xdotool key XF86AudioLowerVolume, et cela fonctionne tant que je suis dans le shell gnome, mais VMWare détourne toujours ces messages si je suis dans une VM. Les commandes de niveau inférieur utilisant des outils tels que wmctrlou dbus-send, d'un autre côté, fonctionnent correctement. Alors, quel serait l' dbus-sendéquivalent des xdotool key XF86Audio*commandes?
Je peux utiliser dbus-monitorpour afficher les événements en appuyant sur les touches multimédias et voir, par exemple:
signal time=1599582032.226007 sender=:1.66 -> destination=:1.96 serial=18241 path=/org/gnome/Shell; interface=org.gnome.Shell; member=AcceleratorActivated
uint32 140
array [
dict entry(
string "device-id"
variant uint32 12
)
dict entry(
string "timestamp"
variant uint32 504924437
)
dict entry(
string "action-mode"
variant uint32 1
)
dict entry(
string "device-node"
variant string "/dev/input/event7"
)
]
pour augmenter le volume. Comment puis-je traduire cela en dbus-sendmessage?
J'ai trouvé cette question il y a longtemps, mais elle semble obsolète. Au moins, cela ne fonctionne pas sur mon système (Ubuntu 20.04):https://stackoverflow.com/questions/2830858/controlling-gnome-volume-using-dbus
Réponses
pulsemixera fini par faire ce dont j'avais besoin. pactlpeut régler le volume, mais ne rapportera pas un niveau en arrière pour l'affichage OSD. Ce script augmente / diminue le volume ou active le son et affiche l'OSD approprié:
#!/usr/bin/env bash
# must be set correctly for pactl to connect
uid=$(id -u) export XDG_RUNTIME_DIR=/run/user/$uid
case "$1" in up ) pulsemixer --change-volume +5 --max-volume 100 ;; down ) pulsemixer --change-volume -5 ;; mute ) pulsemixer --toggle-mute ;; esac # get active levels sink=$(pulsemixer --list-sinks | grep -e "Default$" | cut -d',' -f2 | cut -c8-) vol=$(pulsemixer --get-volume | cut -d' ' -f1)
mute=$(pulsemixer --get-mute) # set osd icon if [ $mute -eq 1 ]; then
icon="audio-volume-muted"
elif [ $vol -lt 33 ]; then icon="audio-volume-low" elif [ $vol -lt 66 ]; then
icon="audio-volume-medium"
else
icon="audio-volume-high"
fi
# format as decimal
if [ $vol -eq 100 ]; then vol="1.0" else vol="0.$vol"
fi
gdbus call --session --dest 'org.gnome.Shell' --object-path '/org/gnome/Shell' --method 'org.gnome.Shell.ShowOSD' "{'icon': <'$icon'>, 'label': <'$sink'>, 'level': <$vol>}"