Roultabie volume widget for PulseAudio

Présentation
Voici un widget simple affichant le volume en cours du serveur PulseAudio local et donnant la possibilité de couper / rétablir le son en cliquant dessus ainsi que d'augmenter et diminuer celui-ci avec la molette de la souris.

Vous n'avez besoin de rien d'autre que du serveur de son PulseAudio pour que cela fonctionne.

Détails
Le widget est paramétré pour fonctionner avec un son stéréo classique (de portable ici)

Pour voir les détails de votre configuration vous devez lancer la commande suivante dans un terminal pacmd dump

Pour changer les paliers afin d'augmenter / diminuer le son plus ou moins rapidement, changez la variable "step" présente dans les deux fonctions volumeUp et volumeDown

Le code
volumewidget = widget({type = "textbox", name = "volumewidget", align = "right"}) volumewidget:buttons(awful.util.table.join( awful.button({ }, 1, function volumeMute end), awful.button({ }, 4, function volumeUp end), awful.button({ }, 5, function volumeDown end) )) function volumeUp local step = 655 local f = io.popen("pacmd dump |grep set-sink-volume") local v = f:read local volume = tonumber(string.sub(v, string.find(v, 'x') - 1)) local newVolume = volume + step if newVolume > 65536 then newVolume = 65536 end io.popen("pacmd set-sink-volume 0 "..newVolume) volumeInfo f:close end function volumeDown local step = 655 local f = io.popen("pacmd dump |grep set-sink-volume") local v = f:read local volume = tonumber(string.sub(v, string.find(v, 'x') - 1)) local newVolume = volume - step if newVolume < 0 then newVolume = 0 end io.popen("pacmd set-sink-volume 0 "..newVolume) volumeInfo f:close end function volumeMute local g = io.popen("pacmd dump |grep set-sink-mute") local mute = g:read if string.find(mute, "no") then io.popen("pacmd set-sink-mute 0 yes") else io.popen("pacmd set-sink-mute 0 no") end volumeInfo g:close end function volumeInfo volmin = 0 volmax = 65536 local f = io.popen("pacmd dump |grep set-sink-volume") local g = io.popen("pacmd dump |grep set-sink-mute") local v = f:read local mute = g:read if string.find(mute, "no") then volume = math.floor(tonumber(string.sub(v, string.find(v, 'x')-1)) * 100 / volmax).." %" else volume = "✕" end volumewidget.text = "𝅘𝅥𝅮 "..volume f:close g:close end

Ensuite il suffit de lancer la fonction et le hook afin de vérifier le volume régulièrement

volumeInfo awful.hooks.timer.register(5, function   volumeInfo  end)

Enfin il faut déclarer le widget dans la barre principale batterywidget, wifiwidget, volumewidget,

Library
Lua module based on this example: github