Dans le billet sur Xmonad, je parlais un peu d’Urxvt, le terminal que j’avais choisi pour mon nouveau desktop.
Une chose qui me chagrinait un peu avec ce terminal était l’absence de copier-coller. Je parle de copier dans le clipboard et pas juste copier en sélectionnant quelque chose à la souris. La différence ? Si je sélectionne quelque chose et qu’ensuite je resélectionne autre chose par mégarde (oui, ça arrive), je perds le précédent contenu. Avec un classique Ctrl+C (qui envoie dans un autre presse-papier), ce genre de chose n’arrive pas. Et si ça arrive, j’ai toujours le merveilleux Xfce4-clipman qui me garde les 10 derniers copiages.
J’ai un peu cherché sur la toile et j’ai trouvé les raccourcis claviers kivonbien : Ctrl+Insert pour copier et Shift+Insert pour coller.
Une nouvelle catégorie d’articles : les Dotfiles !
Pour ceux qui ne savent pas, les fichiers de configuration propres aux utilisateurs sous GNU/Linux sont planqués dans leur /home sous la forme de fichiers (et répertoires) cachés. Hors, comme il suffit de précéder le nom du fichier par un « . » pour le cacher, on les appelle les dotfiles (dot voulant dire point en anglais).
Donc dans cette catégorie, vous trouverez des fichiers de configuration pour mes applications que je me suis amusé à customiser. On va commencer par un bon gros paquet de fichiers : mon bureau !
Mon nouvel environnement de bureau
Comme je l’ai déjà évoqué précédemment, j’ai changé d’environnement de bureau et me suis tourné vers Xmonad.
Il s’agit, comme Wmii et d’autres, d’un tiling window manager, ce qui veut dire en gros qu’il gère la disposition des fenêtres de manière optimale. Lorsque j’ouvre une nouvelle fenêtre (un terminal, Iceweasel, Icedove, ce que vous voulez), il ne la met pas à la dernière taille et place utilisées mais de façon à ce que, collée aux autres fenêtres, tout l’écran soit pris. Donc plus de fenêtre dont un bout (forcément important) est caché par une autre application ou hors du bureau virtuel (enfin, si, on peut le faire mais il faut faire exprès).
Un petit screenshot :
Il faut aussi dire que, de par sa légéreté, Xmonad est très, très réactif !
Tout ça pour dire que je le kiffe (merci à Clém de me l’avoir fait découvrir).
Bon par contre, ça n’est qu’un window manager, rien d’autre. Il faut donc le meubler un peu, ce que j’ai fait avec dmenu, trayer et dzen2 pour faire tenir le tout dans une barre. Les informations du son, de la batterie, etc. ne sont qu’un simple script shell pipé dans dzen2.
Le terminal est rxvt-unicode, plus connu sous le nom de urxvt et le logiciel permettant d’avoir un fond d’écran s’appelle nitrogen.
L’installation
Bon, tout le monde commence à avoir l’habitude : un bon petit apt-get et roule ma poule !
Je crois qu’il y a là tout ce qu’il faut. Si ça ne marche pas comme il faut, essayer d’installer les paquets libghc6…, c’est peut-être ça qu’il manque.
La configuration du bureau
Là c’est plutôt funky parce que le fichier de configuration est en Haskell ! Je vous avouer, je n’y comprends pas grand chose mais on devine ce qu’il faut faire en allant voir les exemples de configuration sur http://haskell.org/haskellwiki/Xmonad/Config_archive.
Sinon, vous pouvez toujours prendre le mien et le mettre dans ~/.xmonad/xmonad.hs :
—Imports {{{
—A lot of imports. Actually, I don’t know which of them are truely useful
import XMonad
—Layouts
import XMonad.Layout
import XMonad.Layout.NoBorders
import XMonad.Layout.PerWorkspace
import XMonad.Layout.LayoutHints
import XMonad.Layout.ThreeColumns
import XMonad.Layout.ToggleLayouts
—Hooks
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.DynamicLog (PP(..), dynamicLogWithPP, wrap, defaultPP)
import XMonad.Hooks.UrgencyHook
—Actions
import XMonad.Actions.CycleWS
import XMonad.Actions.CycleRecentWS
import XMonad.Actions.CopyWindow
import XMonad.Actions.DwmPromote
import XMonad.Actions.GridSelect
import XMonad.Actions.MouseResize
import XMonad.Actions.OnScreen
import XMonad.Actions.SinkAll
import XMonad.Actions.WindowGo
import XMonad.Util.Run (spawnPipe)
import qualified XMonad.StackSet as W
import qualified Data.Map as M
import Data.Bits ((.|.))
import System.IO (hPutStrLn)
—}}}
—Remap switching workspaces to M-[&é"'(-è_ç]
—I get these codes with xev. With this codes, I’m sure to get the key I want
[((m .|. modm, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces conf) [0×26,0xe9,0×22,0×27,0×28,0×2d,0xe8,0×5f,0xe7]
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
—}}}
Je pense que vous arriverez à comprendre quelle partie de code fait quoi (sauf peut-être la partie des layouts, mais je n’ai pas cherché à comprendre moi non plus). Pour connaître les combinaisons de touches par défaut, je ne peux que vous encourager à consulter la cheat sheet Xmonad.
Bon, maintenant qu’on a un beau fichier de conf, on peut le compiler avec
$ xmonad—recompile
Ok, ça c’est fait, Xmonad est prêt… mais pas le reste
Configuration de la barre d’informations
Pour avoir une belle barre pleine d’informations (et surtout avec les bureaux et le titre de la fenêtre en cours), il va falloir mettre un peu les mains dans le cambouis (encore !).
Sur mon screenshot, vous pouvez voir un ensemble d’information comme l’état de la batterie, le volume, etc. Tout ceci est généré par un script shell dont le résultat est envoyé dans dzen. Et juste à côté, il y a une zone de notification (le tray) qui me permet de toujours avoir mes applications préférées sous la main.
En gros, vous pouvez afficher ce que vous voulez, du moment que vous pouvez l’obtenir par des commandes du terminal.
Pour le mien (oui, il est en zsh, c’est comme ça qu’était le script de base que j’ai récupéré et je me suis pas amusé à essayer de voir si ça marchait toujours en bash), c’est :
#!/bin/zsh
# main interval in seconds
INTERVAL=0.5
# path to the icons
DZEN_ICONPATH='/home/luc/.share/icons/dzen’
C’est bien beau, mais comment je fais pour mettre tout ça dans la barre ?
Patience, jeune Padawan !
Maintenant, il faut piper ce résultat par le programme dzen. Moi je le fais dans le .xinitrc, d’autres dans le script lui-même. C’est une question de goût.
Mon .xinitrc :
#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)
#
# Start URxvt daemon so we can quickly open the other clients
urxvtd -q -o -f
[[ -x « /usr/bin/unclutter » -a -z « `pidof unclutter` » ]] && \
unclutter -idle 5 -root&
# Set Wallpaper with nitrogen
eval `nitrogen—restore` &
# Set mouse cursor and background colour
xsetroot -cursor_name left_ptr -solid '#090909' &
Beaucoup de trucs ésotériques dans ce fichier mais retenez bien les 8 derniers : il permettent d’avancer/reculer d’un mot dans vim et dans le terminal avec Ctrl+flèche. Sans ça, point de salut ! Et pour avoir utilisé mon pc pendant quelques mois sans cette fonctionnalité, je peux vous dire qu’elle est vraiment utile !
Conclusion
Ouf ! Si ce n’est pas le plus long post que j’ai jamais fait, il est au moins dans le top 3 ! Ça doit bien faire un mois que je le prépare et puis, vous savez ce que c’est, on rentre du boulot, on est crevé, on a envie de rien faire…
J’espère que cet article aura donné envie à quelques un de tester Xmonad et de faire mumuse avec. Je suis conscient que ma configuration et mes scripts sont perfectibles mais là, sur mon netbook, ils sont amplement suffisants.
Ah ! J’oubliais ! Il y a un problème relativement génant dans ma configuration (ou alors c’est un bug, je n’en suis pas sûr) : pas moyen d’afficher une vidéo flash en plein écrant à partir d’internet ! (Mplayer le fait très bien.) Sachant que de toute façon, flash çapusaypalibre, ça ne me dérange pas trop, mais je ne voudrais pas que des testeurs de ma conf me reproche ce comportement. D’ailleurs, si quelqu’un a une idée (moi j’ai rien trouvé), qu’il me le fasse savoir.
EDIT : Apparemment, la conf que j’avais mis ne compilait pas. J’ai remanié et j’ai remis la bonne version. Et aussi, pensez à vous baser sur les fichiers plutôt que sur ce qui est écrit : la remise en page est plutôt fastidieuse pour ce genre de chose dans Dotclear dont peut amener un certain nombre d’erreurs.
RE-EDIT : Je viens de passer à Wordpress pour mon moteur de blog et je n’ai pas trouvé comment lui faire accepter des fichiers sans extensions, donc le .xinitrc et le .Xdefaults ont une extension en .sh si vous les téléchargez. Pensez à les renommer.