DWM - Dynamic Window Manager

Tipologia: Window Manager
Licenza: MIT/X Consortium License (Open Source)
Sito:dwm.suckless.org

Descrizione

Dwm è un gestore di finestre per X11 che alloca le finestre in modo dinamico, ossia assegna loro una certa regione dello schermo, in base al loro numero e seguendo delle regole prestabilite.

In sostanza esistono tre diverse modalità (layout): quella mobile (floating mode) quella piastrellata (tiling mode) e quella a tutto schermo (monocle). Nella modalità tiled, lo schermo è suddiviso in una "master area" ed una "stacking area".

Situazione con
1 finestra:

     Client 1    

Master Area
Situazione con
2 finestre:
   Client 1  
 
Client 2  
 
M. A.     S. A.
Situazione con
n finestre:
   Client 1   
Client 2
Client ...
Client n
M. A.     S. A.

Nella modalità mobile, invece, le finestre sono libere di essere riscalate e spostate come in tutti i window manager. Esiste inoltre la possibilità di tenere delle finestre floated ed altre tiled. Infine, nella modalità detta monocle, una singola finestra occupa l'intero schermo (utile con Firefox, Mplayer, o per visualizzare documenti con Acrobat Reader).

DWM, a differenza di molti altri programmi analoghi, non separa le singole finestre (client) in diversi workspace, ma assegna loro delle etichette (tag), lasciando poi all'utente la possibilità di decidere quali etichette visualizzare. In questo modo, si ha la possibilità di assegnare diverse etichette allo stesso client, oppure di visualizzare tutti i client associati a diverse etichette contemporaneamente.

La configurazione/personalizzazione dell'utente deve essere effettuata direttamente sul codice sorgente (questo per mantenere la massima semplicità ed efficienza); per fortuna, essa si riduce per lo più a modifiche piuttosto intuitive su di un singolo file di configurazione (config.h).

Patch

Patch switch_tag (ovviamente da usarsi a vostro rischio e pericolo, senza nessuna garanzia):

Patch personali con parecchie modifiche e aggiunte al sorgente (idem come sopra, con l'aggiunta del fatto che alcune combinazioni di tasti sono associate a script esterni, alcuni dei quali presentati dopo, e che è richiesto un file .xsession opportunamente preparato per lanciare la sessione; in caso contrario alcuni comandi non funzioneranno):

Come applicare le patch? Ecco un esempio con la versione 5.2. Posizionarsi nella directory del sorgente di dwm e dare il comando:

$ patch -p1 < ../path_to_file/my_dwm_patch-5.2.diff

dove ../path_to_file va sostituito con il corretto percorso della patch.

Codice extra

Esempio di file xsession personalizzato (da rinominare come .xsession, nella propria HOME e da rendere eseguibile mediante il comando chmod).

Scorciatoie utili:

Con Dwm diventa molto semplice aggiungere scorciatoie da tastiera (shortcuts) per le applicazioni più utilizzate, ma non solo: si possono creare script per fare le operazioni più disparate. Va detto che a questo scopo potrebbe risultare più efficace utilizare xbindkeys per non appesantire troppo il sorgente di Dwm (e per non ricompilarlo ad ogni cambiamento!).

Alcuni semplici esempi:

  1. Aprire col browser il link corrispondente al testo selezionato col mouse (da terminale, o qualsiasi altra applicazione che permetta il copia-incolla). Nel file di configurazione config.h, bisognerà aggiungere la riga seguente, nella sezione in cui vengono definite le azioni corrispondenti alle scorciatoie:

    { MODKEY|ShiftMask, XK_f, spawn, SHCMD("my_open_link_sel") },

    Mentre il sorgente di my_open_link_sel (posizionato in una directory contenuta nel PATH) sarà qualcosa del tipo:

    #!/bin/sh
    xsel -o | xargs ${BROWSER:-firefox}

Script esterni:

Questi sono esempi un po' più elaborati che, per motivi di spazio, non è possibile riportare integralmente in questa pagina. Il codice dovrebbe essere abbastanza auto-esplicativo...

Alcune dritte:

Non avendo a disposizione, in Dwm, gli strumenti di monitoraggio propri degli altri DE (anche se spesso possono essere usati strumenti di KDE o Gnome anche in Dwm), spesso si è costretti a preparare script ad hoc con comandi da terminale, per far funzionare le cose più banali. Ecco alcuni esempi.

Mount.

Per montare e smontare le chiavette usb e molti altri tipi di device esterni, torna molto utile il comando pmount

Shutdown, Reboot, Suspend, Hibernate.

Per spegnere o riavviare il computer usare rispettivamente i comandi poweroff e reboot (o in alternativa shutdown, acquisendo gli opportuni privilegi mediante sudo). Per sospendere il computer è possibile utilizzare il comando pm-suspend (e analogamente, per ibernare il sistema, pm-hibernate) del pacchetto pm-utils. Anche questi però hanno, solitamente, bisogno dei privilegi di amministratore. In alternativa, per sospendere il sistema è possibile utilizzare il seguente comando:

$ dbus-send --system --print-reply --dest=org.freedesktop.Hal \
  /org/freedesktop/Hal/devices/computer \
  org.freedesktop.Hal.Device.SystemPowerManagement.Suspend \
  int32:0

Per ottenere l'ibernazione, basta sostituire Hibernate a Suspend.

Nelle distro più recenti, che fanno uso di systemd, questo non funziona più, ma è possibile ottenere lo stesso effetto con il comando:

$ systemctl suspend

E analogamente, con hibernate al posto di suspend, per ottenere l'ibernazione.

Volume della scheda audio.

Da terminale, è possibile utilizzare il comando amixer:

$ amixer -c 0
Batteria.

Per i portatili, al fine di visualizzare la carica residua della batteria, con le precedenti versioni del kernel esistevano due file del tipo /proc/acpi/battery/BAT0/state e /proc/acpi/battery/BAT0/info. Nelle versioni più recenti, invece, le informazioni in questione si trovano nel file /sys/class/power_supply/BAT0/uevent. Esiste inoltre un comando, upower, che fornisce le stesse informazioni:

$ upower -e
/org/freedesktop/UPower/devices/line_power_ACAD
/org/freedesktop/UPower/devices/battery_BAT0
$ upower -i /org/freedesktop/UPower/devices/battery_BAT0
...
Luminosità.

Analogamente, la luminosità dello schermo LCD, precedentemente, era indicata nel file /proc/acpi/video/VGA/LCD/brightness, mentre nei kernel più recenti è stata spostata in qualcosa del tipo: /sys/class/backlight/acpi_video0/brightness.

Per cambiare manualmente la luminosità dello schermo, una possibile soluzione è avviare in background il servizio gnome-power-manager (con Gnome 3 non è più un comando separato) o, in alternativa, xfce4-power-manager. In alternativa è possibile scrivere il nuovo valore della luminosità, direttamente sul file in questione, ma servono i privilegi di amministratore. Infine, mediante:

$ dbus-send --print-reply --system --dest=org.freedesktop.Hal \
  /org/freedesktop/Hal/devices/computer_backlight \
  org.freedesktop.Hal.Device.LaptopPanel.SetBrightness \
  int32:0

Dove, al posto di 0, dovrà essere sostituita la luminosità desiderata.

Purtroppo, anche questo in molte distro recenti non funziona! In attesa di trovare una soluzione definitiva, esiste la possibilità di andare a scrivere direttamente sul file in questione, con i permessi di root:

$ max_brightness=`cat /sys/class/backlight/acpi_video0/max_brightness`
$ cur_brightness=`cat /sys/class/backlight/acpi_video0/brightness`
# per diminuire la luminosità
$ echo $((cur_brightness-1)) > /sys/class/backlight/acpi_video0/brightness
# per aumentare la luminosità
$ echo $((cur_brightness+1)) > /sys/class/backlight/acpi_video0/brightness

Magari creando un apposito script (con bit suid attivato) e aggiungendoci opportune condizioni in modo che la luminosità resti nel range 0 -- $max_brightness.

Temperature.

Utilizzare i comandi sensors, per visualizzare la temperatura dei processori e hddtemp per quella degli hard-disk.

Traffico di rete.

Bisogna monitorare il file /proc/net/dev.

RAM e Swap.

Utilizzare il comando free.

Cpu.

Per monitorare costantemente l'utilizzo della Cpu, è possibile utilizzare il comando htop (evoluzione del classico top). In alternativa è possibile monitorare il file /proc/stat.

Codici tasti speciali

Su alcune tastiere, in particolare dei portatili, esistono tasti o combinazioni di tasti speciali che, se correttamente riconosciuti permettono di effettuare alcune operazioni come sospensione, ibernazione, cambiare il volume, muto, cambiare luminosità dello schermo, bloccare lo schermo, attivare uscita video esterna, attivare scheda wireless, etc etc.

Per poter associare questi tasti a delle operazioni, direttamente da Dwm, occorre conoscerne il codice esatto. Questo può essere individuato mediante xev. Tuttavia, a volte, l'output di xev non è molto chiaro. Questi sono i codici che a me, attualmente, funzionano (Toshiba Satellite A350).

CodiceNomeFunzione
0x1008ff02XF86XK_MonBrightnessUpaumenta luminosità dello schermo
0x1008ff03XF86XK_MonBrightnessDowndiminuisce luminosità dello schermo
0x1008ff11XF86XK_AudioLowerVolumeabbassa il volume
0x1008ff12XF86XK_AudioMutemuto
0x1008ff13XF86XK_AudioRaiseVolumealza il volume
0x1008ff14XF86XK_AudioPlaylettore multimediale: play/pause
0x1008ff15XF86XK_AudioStoplettore multimediale: stop
0x1008ff16XF86XK_AudioPrevlettore multimediale: traccia precedente
0x1008ff17XF86XK_AudioNextlettore multimediale: prossima traccia
0x1008ff2bXF86XK_WakeUpapertura pannello schermo laptop
0x1008ffa7XF86XK_SuspendSospensione (Sleep to RAM)
0x1008ffa8XF86XK_HibernateIbernazione (Sleep to Disk)

Questi codici sono definiti in /usr/include/X11/keysymdef.h e in /usr/include/X11/XF86keysym.h. Va tenuto conto che xev, invece, utilizza le definizioni contenute in /usr/share/X11/XKeysymDB. Le definizioni sono quasi identiche, a parte per la trasformazione: XF86XK_Foo -> XF86Foo.

Se si vuole evitare di riempire dwm di decine di combinazioni di tasti diverse (e di dover ricompilare ad ogni piccola variazione), è possibile utilizzare il comando xbindkeys, che opera in background, come un demone. Per creare la propria configurazione di tasti basta modificare il file .xbindkeysrc, nella propria HOME (viene creato automaticamente la prima volta che viene chiamato il comando).

Un modo alternativo per lanciare i programmi senza dover scrivere il comando dal terminale consiste nell'utilizzare dmenu.

Altri strumenti suckless

dmenu
leggera applicazione che permette, mediante menu grafico, la selezione di un termine da una lista fornita in input;
dvtm
l'analogo di Dwm per il terminale;
slock:
utility che oscura lo schermo e blocca l'accesso alla sessione mediante la richiesta di una password;
st:
terminale dei comandi;
surf:
browser leggero e minimale.

  Contenuti soggetti a licenza d'uso Creative Commons Attribution - Non commercial - Share Alike 3.0 Unported. Questo sito non contiene informazioni aggiornate con cadenza periodica regolare, pertanto non può essere considerato una testata giornalistica, ai sensi dell'Art. 62/2001.