Awesome è un window manager in lua pulito ed essenziale che organizza efficacemente lo spazio video ed è altamente configurabile.
Per aumentarne la flessibilità si fa normalmente ricorso ai widgets oggetti che consentono di ottenere informazioni e interagire con sistema, window manager e X clients. Particolarmente comodo può risultare disporre di un widget per visualizzare e controllare il volume. Di seguito viene riportato il codice presente in Farhavens volume widget modificato per funzionare in Ubuntu 14.04 e Ubuntu 14.10 con awesome 3.4 e pulseaudio.
Quando si opera con i widgets e in generale si modifica la configurazione di awesome è bene utilizzare un ambiente di test evitanto fastidiosi logout . L’ambiente di test può essere agevolmente predisposto grazie a Xephyr. Xephyr è window system server che permette di avere sessioni X server all’interno di finestre: Xephyr – X window system server in una finestra . In questo ulteriore post Testare awesome window manager con Xephyr le indicazioni per la predisposizione dell’ambiente di test.
Per disporre di un widget che consenta di visualizzare e controllare il volume in awesome 3.4 installato in Ubuntu 14.xx si può seguire la seguente procedura:
Il codice del widget che segue andrà salvato nella propria home e precisamente nella cartella
.config/awesome
se la cartella .config/awesome non esiste è necessario crearla.
da terminale si può utilizzare il comando:
> mkdir .config/awesome
Il codice del widget (volumecfg.widget) verrà salvato nel file volumecfg.lua. il percorsa completo risulterà:
.config/awesome/volumecfg.lua
Per quanto attiene al codice, la modifica sostanziale, in colore, consiste nell’utilizzo di un comando specifico per controllare il mute quando si opera in Ubuntu 14.xx e si ha installato il server audio pulseaudio.
Attenzione! Se si dispone di più schede audio, perchè il codice operi correttamente potrebbe essere necessario modificare la volume.cardid. In questo caso la cardid = 0 è tipica di un sistema con una sola interfaccia audio e da riferimento ovviamente a quella di default.
-- start widget -- https://awesome.naquadah.org/wiki/Farhavens_volume_widget -- Pavel's mod widget -- Volumecfg.widget volumecfg = {} volumecfg.cardid = 0 volumecfg.channel = "Master" volumecfg.widget = widget({ type = "textbox", name = "volumecfg.widget", align = "right" }) -- command must start with a space! volumecfg.mixercommand = function (command) local fd fd = io.popen("amixer -c " .. volumecfg.cardid .. command) local status = fd:read("*all") fd:close() local volume = string.match(status, "(%d?%d?%d)%%") volume = string.format("% 3d", volume) status = string.match(status, "%[(o[^%]]*)%]") if string.find(status, "on", 1, true) then volume = volume .. "%" else volume = volume .. "M" end volumecfg.widget.text = volume end volumecfg.update = function () volumecfg.mixercommand(" sget " .. volumecfg.channel) end volumecfg.up = function () volumecfg.mixercommand(" sset " .. volumecfg.channel .. " 2%+") end volumecfg.down = function () volumecfg.mixercommand(" sset " .. volumecfg.channel .. " 2%-") end volumecfg.toggle = function () -- alsa -- volumecfg.mixercommand(" sset " .. volumecfg.channel .. " 1+ toggle") -- ubuntu 14.xx pulseaudio local fd = io.popen( "amixer -D pulse set Master 1+ toggle" ) local status = fd:read("*all") fd:close() volumecfg.mixercommand(" sget " .. volumecfg.channel) end volumecfg.widget:buttons(awful.util.table.join( awful.button({ }, 4, function () volumecfg.up() end), awful.button({ }, 5, function () volumecfg.down() end), awful.button({ }, 1, function () volumecfg.toggle() end) )) volumecfg.update() -- end widget
Una volta salvato il file è necessario attivare il widget.
Il widget viene attivato modificando opportunamente il file dell’ambiente di test
.config/awesome/rc.lua.new
come descritto in Testare awesome window manager con Xephyr
/etc/xdg/awesome/rc.lua
da terminale si può utilizzare nano un editor semplice ed efficace oppure editor GUI come scite …
sudo nano .config/awesome/rc.lua.new
Nella parte iniziale del file dove sono presenti i require aggiungere un require(“volumecfg”) per richiamare il widget.
-- Standard awesome library require("awful") ... -- Load Debian menu entries require("debian.menu") -- Load volumecfg.widget require("volumecfg")
quindi attivare il widget inserendo nella sezione mywibox[s]. widgets l’item volume.widget
mywibox[s] = awful.wibox({ position = "top", screen = s })
-- Add widgets to the wibox - order matters
mywibox[s].widgets = {
{
mylauncher,
mytaglist[s],
mypromptbox[s],
layout = awful.widget.layout.horizontal.leftright
},
mylayoutbox[s],
mytextclock, separator,
volumecfg.widget,
…
Se si dispone di una tastiera estesa si possono usare anche i tasti speciali per controllare il volume:
La sezione da utilizzare sarà quella per il binding dei tasti che inizia con
-- {{{ Key bindings globalkeys = awful.util.table.join( awful.key({ modkey, }, "Left", awful.tag.viewprev ), ... ... ...
-- Finally add the keyboard keys for controlling/muting your volume: awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set Master 9%+") end), awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set Master 9%-") end), awful.key({ }, "XF86AudioMute", function () awful.util.spawn("amixer -D pulse set Master 1+ toggle", false) end),
Completati i tests e possibile salvare il nuovo file rc.lua.new nella posizione finale che in ubuntu è /etc/xdg/awesome/rc.lua da terminale
sudo cp .config/awesome.rc.lua.new /etc/xdg/awesome/rc.lua
e operare il restart di awesome anche grazie al comando presente nel menu awesome
Risorse: