Xmonad, le bureau productif orienté terminal

Vous utilisez certainement Gnome, KDE, ou XFCE (entre autre) pour afficher vos programmes. Le gestionnaire de fenêtre vous permet de déplacer le programme sur votre écran via la souris, vous avez des menus, des racourcis qui vous permettent de gérer tout ça. Je ne critique pas ce principe, il est pratique, assez standard et bien adapté à la plupart des utilisateurs. Mais nous ne sommes pas tous identiques. Certains, comme moi, utilisent surtout des terminaux, et n'aiment pas devoir passer la main du clavier à la souris pour gérer son espace de travail. Pire encore, nous n'avons en général pas besoin de la barre de titre, et devoir placer les fenêtres sur le bureau est une chose qui peut vraiment être un frein à la productivité.

Outre le coté production, il y a l'ergonomie. L'ergnonomie ne signifie pas forcément "pouvoir tout déplacer à la souris et avoir plein d'infos sur les fenêtres". En fait, tout est relatif. Si un bureau me propose de placer mes fenêtres et que j'ai juste les informations nécessaires, je trouve cela ergonomique. Car je n'ai finalement que ce dont j'ai besoin. Mais sans pour autant me limiter, car dans tous les cas, je peux retrouver les informations supplémentaires si je connais mon outil.

Je trouve le terminal ergonomique. Ça peut vous étonner, mais la plupart des utilisateurs du terminal qui ont passé un peu de temps à apprendre à s'en servir vous le dira. Le terminal est finalement bien plus simple et plus adapté à un travail quotidien. Je n'enlève pas l'utilisation du navigateur internet, ni des outils de création (image, films, 3D, musique...) mais pour le reste, tout est gérable via des lignes de commande. Je sais ce que vous vous dites... "il est fou, tout faire en ligne de commande...", mais pourtant si vous passiez un peu de temps à apprendre le principe, vous vous rendrez compte de la puissance et de la simplicité de son utilisation.

Revenons au gestionnaire de fenêtre. J'ai toujours au moins 4 ou 5 terminaux ouverts, et passer de l'un à l'autre n'est pas si ergonomique que cela sous Gnome ou KDE pour ne citer qu'eux. ALT+TAB ou souris, dans tous les cas je ne vois pas clairement quelle fenêtre je vais avoir tant qu'elle n'est pas affiché. Le fait est que dans 80% des cas, les fenêtres se recouvrent les unes sur les autres. Encore une fois, je concois que cela peut être utile et agréable pour certain, mais pas pour moi.

Et là, une fois de plus, avoir un système d'exploitation libre vous donne un choix, adapté, et vraiment viable. Il existe une autre famille de gestionnaire de fenêtre nommé "tiling desktop" ou "bureau en mosaïque". Ce genre de gestionnaire de fenêtre permet de placer les fenêtre selon des "layout" (mise en page) automatisés et modifiables. Pour en citer quelques uns: awsome, wmii, ion3, Xmonad...

Alors pourquoi mon choix se porte sur XMonad ? Parce que ce dernier est très poussé en terme de configuration et n'a pas de décoration de fenêtre. C'est selon moi la meilleure gestion de bureau que je connaisse dans le domaine des tiling desktop.

Pour vous expliquer le fonctionnement, et surtout pour configurer votre bureau, je vais vous donner quelques clefs.

Tout d'abord, sous fedora, on va installer les outils nécessaires pour:

  • utiliser xmonad
  • avoir quelques outils pratiques
  • avoir des terminaux bien plus sympas
  • se passer de la plupart des outils "graphiques" forcés sous d'autres gestionnaires (navigation de fichier par exemple)

On commence:

su -c "yum install xmonad xmobar dmenu mc xscreensaver feh rxvt-unicode"

Bien, si vous quitter votre session, vous aurez donc le choix d'utiliser xmonad dans le gdm ou kdm (la fenêtre de connexion). Si vous choisissez Xmonad vous allez avoir un terminal qui va s'ouvrir avec le manuel de Xmonad... et rien d'autre.

C'est bien Xmonad... épuré au maximum. Vous avez compris... il va falloir configurer un peu le bureau pour avoir un truc plus sympa. En premier lieu, ne paniquez pas et pressez ALT+Shift+c pour fermet le manuel puis ouvrez un autre terminal avec ALT+shift+Enter.

Dans ce terminal, vous allez ouvrir avec vim le fichier ~/.xmonad/xmonad.hs

Placez y ce contenu:

import XMonad
import XMonad.Config.Azerty
import XMonad.Hooks.DynamicLog


-- The main function.
main = xmonad =<< statusBar myBar myPP toggleStrutsKey myConfig

-- Command to launch the bar.
myBar = "xmobar"

-- Custom PP, configure it as you like. It determines what's being written to the bar.
myPP = xmobarPP { ppCurrent = xmobarColor "#429942" "" . wrap "<" ">" }

-- Keybinding to toggle the gap for the bar.
toggleStrutsKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b)

-- Main configuration, override the defaults to your liking.
myConfig = azertyConfig { 
    terminal           = "urxvt -depth 32 -tr -tint rgb:2222/2222/2222 +sb -fg white -bg rgba:0000/0000/0000/7777 -fade 15 -fadecolor black -pr black -pr2 white"
    , logHook = dynamicLog
 }

Fermez, et tenter de compiler la configuration:

xmonad --recompile

Si une erreur apparait, vérifiez bien le contenu du fichier.

Avant de relancer xmonad, on va aussi configurer xmobar... et ce dans le fichier ~/.xmobarrc

Config { font = "-*-Fixed-Bold-R-Normal-*-13-*-*-*-*-*-*-*"
       , bgColor = "black"
       , fgColor = "grey"
       , position = TopW L 100
       , commands = [ Run Weather "LFLY" ["-t"," <tempC>°","-L","64","-H","77","--normal","green","--high","red","--low","lightblue"] 36000
                    , Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
                    , Run Memory ["-t","Mem: <usedratio>%"] 10
                    , Run Swap [] 10
                    , Run Date "%a %b %_d %H:%M" "date" 10
                    , Run StdinReader
                    ]
       , sepChar = "%"
       , alignSep = "}{"
       , template = "%StdinReader% }{ %cpu% | %memory% * %swap%    <fc=#ee9a00>%date%</fc> | %LFLY%"
       }

Dans ce fichier, remplacer le code "LFLY" par celui de votre ville (ici Lyon Bron), dans le fichier il est à deux endroits, donc remplacez bien tout. Pour trouvez votre code, allez à la page http://weather.noaa.gov et prenez le code qui apparait dans l'url...

Bon, cette fois ci, on peu relancer xmonad... Pressez ALT+q

Hop, xmonad se recharge. Pressez ALT+1 ou 2, 3... changement de bureau. Le clavier azerty est donc bien géré et vous avez théoriquement une barre en haut qui indique quelques infos.

Bon, fermez le terminal en cours ALT+shift+c et relancez en un: ALT+shift+Enter... ha voulà urxvt en mode semi transparent :) ouvrez en un autre, hop l'écran se coupe en deux

Puis un autre... et un autre....

Pour vous déplacer, utilisez la souri (haaan) ou simplement alt+k ou alt+j. Et pour redimensionner les colonnes: alt+h ou alt+l

Pour augmenter le nombre de fenêtre possible sur la colonne principale (à gauche) alt+, et pour en retirer alt+.

Bon assez jouer... on va maintenant faire en sorte de lancer pulseaudio, xscreensaver et changer ce foutu fond d'écran.

Créé un fichier, par exemple j'utilise ~/bin/xmonad-startup et posez ceci dedans:

#!/bin/bash

#prevent running commands on xmonad restart
#I choose xscreensaver because it is stopped at xmonad shutdown
[ "$(ps --noheader -C xscreensaver -o pid)" ] && exit 0

#commands to lauch
xscreensaver &
feh --bg-fill ~/Images/backgrounds/OTHER-Tuxsta_1600x1200.png
synclient VertTwoFingerScroll=0 VertEdgeScroll=1
pulseaudio --start

Reste à demander à xmonad de les lancer au chargement:

import XMonad
import XMonad.Config.Azerty
import XMonad.Hooks.DynamicLog


-- The main function.
main = xmonad =<< statusBar myBar myPP toggleStrutsKey myConfig

-- Command to launch the bar.
myBar = "xmobar"

-- Custom PP, configure it as you like. It determines what's being written to the bar.
myPP = xmobarPP { ppCurrent = xmobarColor "#429942" "" . wrap "<" ">" }

-- Keybinding to toggle the gap for the bar.
toggleStrutsKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b)


-- my startup
myStartup :: X ()
myStartup = do
    spawn "~/bin/xmonad-startup"

-- Main configuration, override the defaults to your liking.
myConfig = azertyConfig { 
    terminal           = "urxvt -depth 32 -tr -tint rgb:2222/2222/2222 +sb -fg white -bg rgba:0000/0000/0000/7777 -fade 15 -fadecolor black -pr black -pr2 white"
    , logHook = dynamicLog
    , startupHook = myStartup
 }

On recompile: xmonad --recompile et on relance ALT+q

Bon, reste à connaitre quelques outils pour utiliser xmonad sans avoir besoin d'utiliser trop d'outils graphique:

  • dans un terminal: alsamixer => gestion du volume
  • dans un terminal: mc => gestionnaire de fichier
  • pour lancer un programme sans passer par un terminal: ALT+p et commencez à taper le nom du programme, l'auto completion est gérée

Vous pourrez trovuer des fichier "ini" de "+mc" pour le rendre plus joli. Utilisez aussi weechat pour aller sur IRC, vous allez voir que finalement c'est plus clair et efficace.

Un dernier racourcis ? ALT+Shift+Q et vous quittez Xmonad :)

Bon, sinon, utilisez des petits scripts pratique pour votre utilisation, par exemple j'ai un script "~/bin/dodo" qui met en veille "mémoire" mon pc:

#!/bin/bash
su -c "echo -n mem > /sys/power/state"

ou encore un script pour lancer weechat en me connectant avec mon login/pass + ouverture des canaux que j'aime bien:

#!/bin/bash
weechat-curses irc://VOTREUSERICI:VOTREMOTDEPASSEICI@irc.freenode.net/#fedora-fr,#blender-fr,#node.js,#blendercoders,#xmonad

VOTREUSER et VOTREMOTDEPASSE sont les user et mot de passe que vous utilisez sur IRC...

Bon voilà... à vous d'apprendre les trucs et astuces, vim ou emacs, uzbl-brower au lieu de google-chrome (étonnant ce truc, merci WilQu) et j'en passe... vous allez vous rendre compte aussi que "mc" permet de connecter un serveru distant sur la vue de gauche (cherchez un peu dans les menu avec F10) et permet même l'édition. Essayez aussi le racourcis CTRL+O dans mc... sympa non ?

Bon allez une capture, parce que vous êtes gentils (faites avec scrot):

Xmonad

Xmonad - 2

Voilà, bon ba à vous hein.

Commentaires

1. Le dimanche, août 21 2011, 21:14 par Tiny

J'ai trouvé ce billet intéressant.
D'ailleurs hier soir j'ai effectué quelques recherches sur les WM (et les deux « philosophies citées »).
Tu as WMFS (Windows Manager From Scratch) qui mérite un coup d'oeil à mon avis.

Ici : http://wmfs.info/projects/wmfs

2. Le mardi, août 23 2011, 17:15 par Kenshin

Excellent billet !
En bon utilisateur d'awesome, j'apprécie le fait que tu parles d'un tiling wm.

Xmonad, je ne m'y suis pas penché, mais je n'en ai entendu que du bien. ;-)

Bonne continuation !

3. Le samedi, septembre 3 2011, 02:53 par vincent

Salut,
je viens d'essayer, et je viens de faire une manip' non voulue et vachement coole : en fait je cherchais à sortir de la session (pas lu alt-shift-q ...) et j'ai lancé gnome-session ^^
Résultat : xmonad fonctionne de la même manière et j'ai mon fond d'écran, les icones sur le bureau, et des raccourcis claviers !!! (par exple mes raccourcis pour monter/descendre le son)
Franchement la méthode est moche mais c'est cool comme ça !

4. Le dimanche, septembre 4 2011, 12:42 par Metal3d

Oui vincent, en fait il existe même des configurations spécifiques à Gnome, pour gérer la barre des taches et d'autres concepts. Il faut aller voir la doc Xmonad qui te donnera beaucoup plus d'infos