Configurare xmonad window manager con xmobar e trayer
Per referenza futura scrivo velocemente in questo post la mia configurazione di xmonad, un window manager scritto in haskell. Il principale vantaggio di xmonad è che, decidendo lui il posizionamento delle finestre, riduce al minimo l’utilizzo del mouse e massimizza l’uso della superficie dello schermo (comportamento molto comodo quando si lavora con un portatile).
Software
- xmonad (0.8) – il window manager
- xmobar (0.9) – una status bar per xmonad
- trayer (1.0) – piccola app che fornisce una systray
- feh (1.3.4) – per impostare l’immagine di sfondo
- gdm, kmix, network-manager, …
Installazione
Più o meno tutto il software si trova nei pacchetti delle maggiori distribuzioni (io ho usato ubuntu, credo fosse qualcosa come apt-get install xmonad libghc6-xmonad-contrib-dev libghc6-xmonad-dev dwm-tools), se cosi’ non fosse l’installazione manuale è comunque semplice. Basta leggere il manuale.
Configurazione
Di seguito i file di configurazione dei vari software:
xmonad – ~/.xmonad/xmonad.hs
import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run(spawnPipe)
import XMonad.Util.EZConfig(additionalKeys)
import System.IO
myManageHook = composeAll
[ className =? "Gimp" --> doFloat
, className =? "Vncviewer" --> doFloat
]
main = do
xmproc <- spawnPipe "xmobar"
xmonad $ defaultConfig
{ manageHook = manageDocks <+> myManageHook -- make sure to include myManageHook definition from above
<+> manageHook defaultConfig
, layoutHook = avoidStruts $ layoutHook defaultConfig
, logHook = dynamicLogWithPP $ xmobarPP
{ ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "green" "" . shorten 50
}
, modMask = mod4Mask -- Rebind Mod to the Windows key
} `additionalKeys`
[ ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
, ((0, xK_Print), spawn "scrot")
]
xmobar – ~/.xmobarrc
Config { font = "-misc-fixed-*-*-*-*-13-*-*-*-*-*-*-*"
, bgColor = "black"
, fgColor = "grey"
, position = TopW L 85
, commands = [ Run Network "wlan0" ["-L","0","-H","32","--normal","green","--high","red"] 10
, Run Cpu ["-L","15","-H","50","--normal","green","--high","red"] 10
, Run Memory ["-t","Mem: %"] 10
, Run Swap [] 10
, Run Date "%a %b %_d %Y %H:%M:%S" "date" 10
, Run StdinReader
]
, sepChar = "%"
, alignSep = "}{"
, template = "%StdinReader% }{ %cpu% | %memory% * %swap% | %wlan0% | %date%"
}
gdm – /usr/share/xsessions/xmonad.desktop
[Desktop Entry] Encoding=UTF-8 Name=XMonad Comment=Leightweight tiling window manager Exec=xmonad.start Icon=xmonad.png Type=XSession
notare che xmonad.start è uno script personalizzato.
xmonad.start – /usr/local/bin/xmonad.start
#!/bin/bash xrdb -merge .Xresources trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 15 --height 12 --transparent true --tint 0x000000 & gnome-screensaver gnome-settings-daemon if [ -x /usr/bin/gnome-power-manager ] ; then sleep 1 gnome-power-manager fi if [ -x /usr/bin/nm-applet ] ; then nm-applet --sm-disable & fi kmix --keepvisibility #feh --bg-scale /mnt/archivio/foto/2008-2009-dublino/2009-04-10-stefano/hapenny-desktop.jpg & exec xmonad
Alcune note:
- usando gnome-settings-daemon (per i tasti multimediali ed un sacco di altre cose moderne) non è necessario usare feh per lo sfondo.
Screenshots
Il desktop senza applicazioni (solo xmonad e trayer), l’immagine di sfondo è una fotografia di un ponte di Dublino fatta da Steve:
lo stesso desktop con un paio di applicazioni aperte:


When i run Xmonad from gdm3, it appear a message
debian Xsession:unable to launch xmonad.start
What’s wrong?