Dynamic window manager

Da Wikipedia, l'enciclopedia libera.
DWM
Logo
Screenshot di DWM 3.0 su Gentoo GNU/Linux
Screenshot di DWM 3.0 su Gentoo GNU/Linux
Sviluppatore Anselm R. Garbe
Ultima versione 5.8.2 (4 giugno 2010)
Sistema operativo Unix-like
Linguaggio
Genere Windowing system
Licenza Licenza MIT
(Licenza libera)
Sito web http://dwm.suckless.org/

DWM (Dynamic Window Manager) è un tiling window manager per X11 che mostra i principi del minimalismo. È un WM dinamico, leggero ed efficiente scritto in C e viene generalmente considerato il fratello più piccolo di wmii sebbene non implementi gran parte delle sue funzionalità. Esteticamente è simile a wmii, sebbene internamente funzioni in modo molto più semplice, infatti, una delle linee guida del progetto consiste nel non eccedere mai le 2000 SLOC e le opzioni considerate configurabili dall'utente sono contenute in un singolo file header. La distribuzione Linux Debian fornisce un pacchetto binario barebone che mostra le funzionalità di dwm senza consentire alcuna personalizzazione.[1]

Dwm utilizza un modell focus-follows-mouse e manca di qualsiasi decorazione delle finestre con l'eccezione dei bordi utilizzati per mostrare il focus e a differenza di wmii, non è basato su nulla che abbia a che fare con Plan 9. Una volta compilato, dwm è composto da un singolo file binario di dimensione generalmente inferiore ai 30K.

A partire da marzo 2009 è stato avviato un progetto parallelo che si pone l'obiettivo di portare dwm su piattaforma win32.

Caratteristiche[modifica | modifica sorgente]

Le caratteristiche principali sono le seguenti:

  • Supporto per i tag; meccanismo efficiente e molto più flessibile dei comuni desktop
  • Disposizione automatica dei client di X (finestre), in layout diversi da floating
  • Estrema velocità e affidabilita grazie al meccanismo config.h, che lo rende anche molto sicuro
  • Barra di stato dinamica e aggiornabile a runtime
  • Basato aggressivamente su combinazioni da tastiera (ma anche in buona parte sul mouse)
  • Estensibile attraverso una significativa quantità di patch messe a punto dalla comunità e disponibili sul sito ufficiale del progetto
  • Il codice scritto secondo la filosofia Suckless lo rende un WM estremamente portabile

Queste e molti altri fattori più e meno tecnici lo rendono un WM di qualità.

Tag[modifica | modifica sorgente]

Dwm utilizza, al posto dei classici desktop, un concetto molto più flessibile ed efficiente chiamato tag. Nelle prime implementazioni questi erano mantenuti attraverso una lista di stringhe ognuna avente il nome di ogni tag (ad esempio www, work, dev). Successivamente è stato scelto di utilizzare un'apposita tagmask, un intero di 32 bit, in cui ogni bit rappresenta appunto un tag semplificando e rendendo molto più efficiente il sistema. A tutt'oggi resta questo il meccanismo di gestione dei tag in uso.

Barra di stato[modifica | modifica sorgente]

Qualora questa non sia stata disabilitata in fase di configurazione, dwm fornisce una barra (posta in alto di default) in cui vengono mostrate alcune informazioni tra cui:

  • Nome del tag corrente
  • Numero di client aperti nel tag corrente
  • Layout in uso
  • Nome e layout del client attivo
  • Area di notifica

L'area di notifica rappresenta l'unica parte modificabile in fase di esecuzione in quanto queste le informazioni vengono lette a runtime. Nelle prime versioni queste erano lette direttamente dallo standard input; oggi sono ottenute attraverso il nome della finestra root di X il quale può essere modificato da un processo esterno. Cambiando tali dati la barra viene immediatamente aggiornata con le nuove informazioni, le quali possono essere generate come si preferisce (generalmente attraverso uno script o direttamente in uno dei file di inizializzazione di X11, come ~/.xinitrc). Spesso si utilizzano dati come l'ora, la data, il livello di carico medio e altre informazioni utili. La barra ha l'abilità di essere nascosta in fase di esecuzione attraverso una combinazione di tasti (di default meta-b, dove meta spesso corrisponde al tasto Alt) e allo stesso modo può essere ripristinata.

In genere la barra di stato è completata con dmenu, un'applicazione per l'esecuzione di comandi testuali sviluppata dallo stesso ideatore di dwm.

Configurazione[modifica | modifica sorgente]

La configurazione si effettua esclusivamente attraverso la modifica diretta del codice sorgente, cosa che lo rende molto più efficiente e sicuro. Un apposito file "di configurazione" chiamato config.h consente di personalizzare alcune caratteristiche come le combinazioni di tasti, font, colori, tag, e così via. Una qualsiasi modifica alla configurazione richiede necessariamente la ricompilazione di dwm. Questo ed altri fattori fanno in modo che il WM, non avendo codice di supporto per file di configurazione a runtime e altre caratteristiche tipiche di alcuni wm, non ecceda i 30K di codice.

Fork e patch[modifica | modifica sorgente]

I concetti e le caratteristiche di dwm lo hanno reso un progetto molto influente, molti altri window manager sono basati sul codice di dwm o sono comunque da esso ispirati. Una lista estesa di fork e patch è reperibile sul sito ufficiale del progetto. Di seguito sono riportati alcuni esempi noti:

  • xmonad: un clone di dwm riscritto in Haskell con alcune funzionalità aggiuntive[2]
  • awesome: estende il supporto FreeType, riconfigurabilità, e aggiunge più tipi di layout
  • echinus: estende il supporto FreeType, EWMH, click-to-focus, riconfigurabilità e più tipi di layout
  • dwm-gtx: un ramo di dwm che aggiunge il layout 'deck' ed un migliore supporto Xinerama
  • scrotwm: prende un po' di codice da dwm con l'aggiunta del supporto Xinerama dinamico, riconfigurabilità ed è riavviabile senza perdere i dati
  • bug.n e HashTWM sono applicazioni ispirate da dwm che portano il concetto di tiling window manager su sistemi Microsoft Windows

Curiosità[modifica | modifica sorgente]

  • È il window manager personale di Anselm R. Garbe (sviluppatore di wmii e autore di dwm).

Note[modifica | modifica sorgente]

  1. ^ Debian packages information.
  2. ^ Post in blog.

Altri progetti[modifica | modifica sorgente]

Collegamenti esterni[modifica | modifica sorgente]