Volume Widget per Awesome 3.4 Windows Manager in Ubuntu 14.04 e 14.10

Aw_64   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.

volumecfg.widget

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:

Annunci

Testare awesome window manager con Xephyr

Aggiornamento dicembre 2014

Aw_64 Quando si opera con la configurazione di Awesome, un window manager in lua pulito ed essenziale, che organizza efficacemente lo spazio video ed è altamente configurabile,  risulta decisamente utile poter disporre di un ambiente di test così da evitare di perdere il controllo del sistema con ad esempio il log out automatico dal windows manager in caso di errore.

Per disporre di un ambiente di test si può far ricorso a Xephyr – X windows system server in una finestra. Xephyr è un windows system server che consente di visualizzare altre sessioni X server all’interno di finestre su un pre-esistente X display server.

Awesome in Xephyr

Awesome in Xephyr

In Debian/Ubuntu Xehpyr si installa con:

sudo apt-get install xserver-xephyr

Avviare awesome in Xephyr

Copiamo il file di configurazione di default di awesome rc.lua che in ubuntu/debian è posizionato in  /etc/xdg/awesome/rc.lua

cp  /etc/xdg/awesome/rc.lua   ~/.config/awesome/rc.lua.new

se manca la directory ~/config/awesome crearla con

mkdir ~/config/awesome

Per avviare il window manager awesome in Xephyr in Ubuntu lanciare Xephyr:

Xephyr :11 -ac -br -noreset -screen 1280x1024  &

Impostare la variabile DISPLAY (il DISPLAY=:0 è il display della sessione principale ) :

DISPLAY=:11

quindi avviamo awesome nello slave X utilizzando la configurazione personalizzata presente in ~/.config/awesome/rc.lua.new:

$ awesome -c ~/.config/awesome/rc.lua.new

Per velocizzare la fase di test può utilizzare anche predisporre script .sh partendo dai seguenti comandi :

Xephyr :11 -ac -br -noreset -screen 1024x768 &
Xephyr_pid =$!
sleep 1
DISPLAY=:11
awesome -c ~/.config/awesome/rc.lua.new

per terminare Xephyr si può utilizzare il comando

kill $Xephyr_pid

oppure ricercare il processo awesome  con

ps -fax | grep “awesome/rc.lua.new”

e quindi killare il processo

Per terminare il solo awesome che gira nella finestra con Xephyr basta utilizzare il comando <quit> presente nel menu di awesome stesso.

Cambiando display si possono avviare più finestre Xephyr e conseguentemente più windows manager awesome.

Le opzioni di base del comando Xephyr:

Il numero di display virtuali X server che è possibile avviare con Xephyr è condizionato esclusivamente dall’esaurimento della memoria disponibile. Di seguito un paio di comandi per avviare Xephyr con evidenziate le opzioni base di Xephyr

Xephyr : 3 -ac -screen 1280x1024 -br -reset-terminate 2> /dev/null &

:3 = indica il display usato da Xephyr.
In genere il display di default è :0 il pratica il monitor che si sta usando in condizioni normali . Qualsiasi display addizionale, reale o virtuale necessita di una nuova porta. In questo caso la scelta è caduta su :3 ma poteva anche essere :11.

-ac = disabilita le restrizioni di accesso.  L’accesso alla sessione X  può avvenire da qualsiasi host : agisce come host+, che permette di accettare X session reindirizzate.

-screen 1280×1024 = specifica le dimensioni del nuovo display virtuale: la finestra X server.

-br = imposta il colore di background della root window

-reset-terminate = consente di chiudere automaticamente Xephyr quando l’ultimo client viene terminato.

2> /dev/null = indirizza qualsiasi messaggio a /dev/null, un dispositivo che è una sorta di cestino digitale: riceve qualsiasi cosa gli venga inviato senza ritornare niente.

& = indica che Xepbyr sarà il comando viene eseguito in background questo ritorna il controllo del promt del terminale consentendo di continuare digitare comandi nella finestra.

Xephyr :11 -ac -br -kb -noreset -screen 1024x768  &

In questo caso Xephyr genera una finestra X server più piccola di 1024×768. Viene consentita la visualizzazione dei messaggi di errore. Al nuovo display virtuale viene assegnato il numero ( la porta) 11.
– kb  =  mantiene le impostazioni della tastiera della sessione che avvia xephyr. ( non sempre disponibile )
-noreset =  don’t reset after last client exists Non consente il reset

Risorse:

Xephyr – X window system server in una finestra

In tutte le distruzioni linux è abbastanza agevole avviare sulla stessa macchina sessioni grafiche X server distinte con utenti diversi. Normalmente però si può avere attiva sul display una sola sessione alla volta e il passaggio tra i display delle sessioni avviene con i tasti Ctrl-Alt-Fn(con n>7). Xephyr è un window system server che consente di superare questo limite permettendo di visualizzare altre sessioni X server all’interno di finestre su un pre-esistente X display server.

I potenziali utilizzi di Xephyr sono ad esempio:

  • visualizzare desktop environment remoti in locale su ssh senza ricorrere a vnc.
  • aprire X session con lo stesso user o altro user per test vari ( ad esempio di altri desktop environment, visualizzione di applicazioni con risoluzioni diverse, ssh in chroot/server …) .

Di seguito alcuni screenshot di Xephyr in locale. Nella prima immagine il window manager awesome avviato in locale in una finestra 1024×768. Nella seconda il dettaglio della finestra xephyr ospitante awesome si nota in alto a sinistra la dvb-tv visualizzata con vlc.

Xephir con awesome in Ubuntu 12.10 con lxde

debian awesome in Xephyr in Ubuntu 12.10 con lxde

awesome in Xephyr

dettaglio della finestra Xephyr con awesome in debian 6.0

.
.

Xephyr X window system server annidato

Xephyr, il server X annidato leggero, consente, come gia detto, di creare finestre che agiscono come schermi aggiuntivi, fornendo un servizio di visualizzazione grafica ai programmi client, che possono essere applicazioni o interi desktop manager, anche di computer remoti. Xephyr ha il vantaggio di supportare le ultime estensioni di X e poichè è un X server reale non limitato dalle caratteristiche del X server host che viene usato come “framebuffer”.  Xephyr si basa su kdrive una versione ridotta di X.org.

Xephyr in ubuntu si installa con

sudo apt-get install xserver-xephyr

Avviare un desktop environment remoto in ubuntu con xephyr

a) Xephyr gira sulla macchina locale.

In questo esempio Xephyr funzionerà sulla macchina locale e visulizzerà il window manager fluxbox di una macchina debian 6.0 remota. Per fare questo creiamo un nuovo display (screen) in Ubuntu 12.10 con Xephyr utilizzando il comando base:

Xephyr :12 -screen 1024x768 -ac &

:12 è il display generato ovviamente sarà diverso dal display di default ( :0 normalemnte )
-screen 1024×768 le dimensioni dello screen
-ac disabilita le restrizioni di accesso ( consente in pratica la trasmissione di X)

connettiamoci ad un server remoto Debian 6.0 con ad esempio

ssh -XC user-name@192.168.1.14

-X = abilita il reindirizzamento X. Enables X11 forwarding.
-C = utilizza la compressione

adesso reindirizziamo il display della macchina Debian 6.0 verso il display virtuale :12 della macchina Ubuntu (192.168.1.3)   e avviamo il window manager fluxbox

DISPLAY=192.168.1.3:12  fluxbox

Nello screenshot seguente  il risultato

Xephyr in locale fluxbox in  debian 6.0 remoto

Xephyr in locale fluxbox in debian 6.0 remoto

Possiamo controllare i servizi Xephyr attivi nella macchina locale con

maurizio@Lub12120:~$ ps fax | grep "Xephyr"
24879 pts/11   S+     0:00  |   \_ grep --color=auto Xephyr
12111 pts/1    S      2:08      \_ Xephyr :12 -screen 1024x768 -ac

Nello screenshot la finestra xterm evidenzia il comando sopra riportato che però da esisto diverso evidenziando come nella macchina remota non sia attivo nessun X server Xephyr.

In generale per esportare il display il comando base è il seguente

DISPLAY=ip-target-machine:num-display desktop-environment

si possono ricercare i desktop environment avviabili con

grep "^Exec" /usr/share/xsessions/*
b) Xephyr gira sulla macchina remota.

In questo caso Xephyr viene fatto girare sulla macchina debian remota e trasmesso sulla macchina locale. Le performance sono inferiori.
Connettiamoci con ssh alla macchina remota consentendo il forward delle

ssh -XC user-name@192.168.1.14

quindi avviamo Xephyr

Xephyr :9 -ac -screen 800x600 &
DISPLAY=:9  fluxbox

Questa volta la finestra xterm dello screenshot evidenzia come nella macchina remota debian stia girando Xephyr nel display :9. Nella macchina locale il risultato non cambia è attivo solo il precedente Xephyr

maurizio@Lub12120:~$ ps fax | grep [X]ephyr
12111 pts/1    S      2:08      \_ Xephyr :12 -screen 1024x768 -ac
Xephyr remoto con fluxbox in debian remoto

Xephyr remoto con fluxbox in debian remoto

Le performance in questo seconda situazione sono inevitabilmente inferiori.

Disporre di una tale opportunità può risultare utile in caso si vogliano testare windows managere o desktop environemtne diversi senza chiudere e aprire sessioni.

Avviare awesome in Xephyr

Awesome è un window manager in lua pulito ed essenziale. Organizza efficacemente lo spazio video ed è altamente configurabile. Su doppio monitor mette a disposizone di default 9+9 “schermi virtuali” indipendenti. Avviare awesome in Xephyr rappresenta un buon metodo per testare le modifiche apportate al file di configuazione rc.lua evitando di perdere il controllo del sistema in caso di errore.

Di seguito come avviare il window manager awesome in Xephyr in Ubuntu 12.04 e 12.10 in modo da testare le modifiche del file di configurazione.

Avviamo Xephyr

Xephyr :1 -ac -br -noreset -screen 1280x1024  &

Impostare la variabile DISPLAY:

DISPLAY=:1

avviamo awesome nello slave X utilizzando la configuazione personalizzata presente in ~/.config/awesome/rc.lua.new:

 $ awesome -c ~/.config/awesome/rc.lua.new

Per velocizzare la fase di test può utilizzare anche predisporre script .sh con :

 Xephyr :1 -ac -br -noreset -screen 1024x768 &
sleep 1
DISPLAY=:1 awesome -c ~/.config/awesome/rc.lua.new

Using Xephyr – awesome

Le opzioni di base del comando Xephyr:

Il numero di display virtuali X server che è possibile avviare con Xephyr è condizionato esclusivamente dall’esaurimento della memoria disponibile. Di seguito un paio di comandi per avviare Xephyr con evidenziate le opzioni base di Xephyr

Xephyr : 3 -ac -screen 1280x1024 -br -reset-terminate 2> /dev/null &

:3 = indica il display usato da Xephyr.
In genere il display di default è :0 il pratica il monitor che si sta usando in condizioni normali . Qualsiasi display addizionale, reale o virtuale necessita di una nuova porta. In questo caso la scelta è caduta su :3 ma poteva anche essere :11.

-ac = disabilita le restrizioni di accesso.  L’accesso alla sessione X  può avvenire da qualsiasi host : agisce come host+, che permette di accettare X session reindirizzate.

-screen 1280×1024 = specifica le dimensioni del nuovo display virtuale: la finestra X server.

-br = imposta il colore di background della root window

-reset-terminate = consente di chiudere automaticamente Xephyr quando l’ultimo client viene terminato.

2> /dev/null = indirizza qualsiasi messaggio a /dev/null, un dispositivo che è una sorta di cestino digitale: riceve qualsiasi cosa gli venga inviato senza ritornare niente.

& = indica che Xepbyr sarà il comando viene eseguito in background questo ritorna il controllo del promt del terminale consentendo di continuare digitare comandi nella finestra.

Xephyr :11 -ac -br -kb -noreset -screen 1024x768  &

In questo caso Xephyr genera una finestra X server più piccola di 1024×768. Viene consentita la visualizzazione dei messaggi di errore. Al nuovo display virtuale viene assegnato il numero ( la porta) 11.
– kb  =  mantiene le impostazioni della tastiera della sessione che avvia xephyr. ( non sempre disponibile )
-noreset =  don’t reset after last client exists Non consente il reset

Risorse:

freedesktop.org – Software/Xephyr

Multiseat Configuration/Xephyr – Wikibooks, open books for an open world

X.Org Wiki – Home

Window Manager per linux ubuntu debian

Linux – Desktop Manager e Windows Managers