Xmonad

De ArchwikiFR


XMonad est un Gestionnaire de fenêtres dynamique pour le serveur Xorg. Les fenêtres sont arrangées de façon à remplir l'écran sans perte d'espace et sont alors maximisées. Les fonctionnalités du gestionnaire de fenêtres sont accessibles par le clavier, la souris est optionnelle. XMonad est extensible en Haskell, permettant une configuration avancée.

XMonad est similaire à Ion, WMii et surtout à DWM, il supporte en plus le multihead, l'ajout d'extensions ou de modules écrits en haskell et la compilation à la volée. Il gère les fenêtres de vos applications grâce à un système d'étiquettes ("tags"), ressemblant aux "bureaux virtuels". Votre espace de travail est ainsi constitué d’étiquettes auxquelles sont attachées les fenêtres des applications. XMonad permet à l'aide d'un raccourci clavier d’attacher une fenêtre donnée à une étiquette donnée.

L'algorithme de disposition des fenêtres, les touches de raccourcis et d'autres extensions peuvent être écrits dans un fichier de configuration (xmonad.hs) par l'utilisateur. Les systèmes de disposition de fenêtres sont appliqués dynamiquement, et différents agencements peuvent être utilisés pour différents espaces de travail. "Xinerama" est totalement supporté, permettant aux fenêtres d'être utilisées sur plusieurs moniteurs.

Installation

Pour installer XMonad ainsi que ses extensions :

pacman -S xmonad xmonad-contrib

Lancement

Pour démarrer XMonad avec startx, éditez le fichier ~/.xinitrc, et ajoutez les lignes suivantes :

xsetroot -cursor_name left_ptr
exec xmonad

Si XMonad vous envoie un message de ce type :

/home/user/.xmonad/xmonad-i386-linux: executeFile: does not exist ( No such file or directory )

Copiez un fichier de configuration {xmonad.hs dans le répertoire {~/.xmonad puis réessayez. Le fichier de configuration xmonad.hs par défaut doit se trouver dans /usr/share/xmonad-$num_ver/man/xmonad.hs.

Configuration

XMonad utilise les paramètres du fichier de configuration ~/.xmonad/xmonad.hs. Voici un exemple de base indiquant la largeur des bordures par défaut, le terminal par défaut, et certaines couleurs.

import XMonad
main = xmonad $ defaultConfig
{ borderWidth        = 2
, terminal           = "urxvt"
, normalBorderColor  = "#cccccc"
, focusedBorderColor = "#cd8b00" }

Vous pouvez trouver un exemple de fichier de configuration plus complet sur le Site officiel (en) d'Haskell.

Si vous voulez utiliser des extensions, vous aurez besoin d'installer le paquet xmonad-contrib. Pour ajouter une extension, il suffit de copier ces instructions dans le fichier de configuration principal de XMonad puis de taper "Alt + Q" pour recharger la configuration. En cas d'erreur, vous aurez un message détaillé pour la corriger et dans ce cas la configuration retenue sera la précédente configuration valide. Un exemple avec l'extension Grid.hs :

{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
-- |
-- Module      :  XMonad.Layout.Grid
-- Copyright   :  (c) Lukas Mai
-- License     :  BSD-style (see LICENSE)
--
-- Maintainer  :  <l.mai@web.de>
-- Stability   :  unstable
-- Portability :  unportable
--
-- A simple layout that attempts to put all windows in a square grid.

-- Instructions à copier dans xmonad.hs pour ajouter l'extension
-- $usage
-- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:
--
-- > import XMonad.Layout.Grid
--
-- Then edit your @layoutHook@ by adding the Grid layout:
--
-- > myLayouts = Grid ||| Full ||| etc..
-- > main = xmonad defaultConfig { layoutHook = myLayouts }
--
-- For more detailed instructions on editing the layoutHook see:
--
-- "XMonad.Doc.Extending#Editing_the_layout_hook"
--
-- ...

Utilisation

DMenu

DMenu permet de lancer des applications, le raccourci clavier par défaut est "Alt + P". Pour l'installer entrez :

pacman -S dmenu

Pour le lancer, éditez le fichier ~/.xinitrc, et ajoutez la ligne suivante :

((modMask, xK_p ), spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\"") -- %! Launch dmenu

Gaps

Gaps est une barre de lancement rapide écrit en Python. Le paquet se trouve sur le dépôt de paquets communautaires AUR, pour l'installer avec Yaourt par exemple entrez :

yaourt -S pypanel-gaps

Pour avoir une barre de lancement en haut de 15 pixels par exemple, éditez son fichier de configuration de la manière suivante :

defaultGaps :: [(Int,Int,Int,Int)]
defaultGaps = [(15,0,0,0)] -- 15 for default dzen font

Workspaces

On indique ici le nombre d'espaces de travail que l'on désire et éventuellement leurs noms :

workspaces :: [WorkspaceId]
workspaces = map show [1 .. 9 :: Int]
-- A tagging example:
-- > workspaces = ["main", "web", "edit", "media", "im", "other"]

Switcher

Pour changer d'espace de travail, j'ai dû modifier un peu la syntaxe afin de l'adapter à ma configuration. Sur les autres exemple la syntaxe ne fonctionnait pas. Ajoutez dans votre fichier de configuration principal ~/.xmonad/xmonad.hs, juste en dessous de "myKeys" ou "Keys" selon les configurations, les lignes suivantes :

-- mod-[1..9], Switch to workspace N
-- mod-shift-[1..9], Move client to workspace N
--
[((modm .|. m, k), windows $ f i)
| (i, k) <- zip myWorkspaces [xK_F1 .. xK_F6]
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]

Il faut modifier dans la section ""main" la ligne ""workspaces = myWorkspaces" comme ceci :

main = do din <- spawnPipe statusBarCmd
          xmonad $ defaultConfig
                     { borderWidth        = 1
                     , normalBorderColor  = "#444444"
                     , focusedBorderColor = "#444444" 
                     , workspaces         = myWorkspaces
                     , terminal           = "urxvtc"
                     , modMask            = mod1Mask
                     , defaultGaps        = [(14,0,0,0)]
                     , manageHook            = manageHook defaultConfig <+> myManageHook
                     , logHook            = dynamicLogWithPP $ myPP din
                     , layoutHook         =  windowNavigation (tiled ||| Mirror tiled ||| noBorders (Full) ||| Grid ||| tabbed shrinkText defaultTConf)
                     , keys               = \c -> myKeys c `M.union` keys defaultConfig c
                     , mouseBindings      = \c -> myMouse c `M.union` mouseBindings defaultConfig c
                     }

Adaptez en fonction de vos besoins les raccourcis clavier, par défaut :

  • Alt + F1-F6 : Change d'espace de travail
  • Shift + Alt + F1-F6 : Change la fenêtre active dans l'espace de travail 1 à 6

Utilisez "xev" pour attribuer vos raccourcis.

Divers

  • dzen convient parfaitement comme barre d'état, mais aussi pour afficher des menus, contrôler MPD, etc...
  • On peut combiner "conky" et "dzen", le résultat est plutôt sympathique et très léger tout en affichant des icônes.

Liens

Site officiel (en)