i3, un WM qui sent bon sous les bras
J'ai découvert récemment i3, un gestionnaire de fenêtre en « tiling » inspiré de Wmii. Cette référence est de bonne augure car j'ai toujours apprécié Wmii, qui fût ma première expérience du mode carrelé.
Wmii avait cependant quelques lacunes, notamment à cause de l'arrêt de son développement. Pas de utf-8, pas de systray et un pavage totalement manuel, contrairement à beaucoup que j'ai adopté par la suite (Awesome, Wmfs, Dwm). Ces lacunes étaient (et sont toujours) comblées par un système de tags dynamiques jamais égalé à mon sens.
Alors, i3 comble t'il les manques de sa muse ? conserve t'il ses points forts ? Vous le saurez dans la suite de cet article ! Grâce à Pacmiam, nouveau développeurFrugalware (c'est un scoop que je vous annonce là), j'ai pu servir de testeur avant que i3 ne soit disponible sur Current. Chanceux que je suis !
Prise en main
L'installation ne pose pas de souci bien évidemment lorsque l'on passe par le gestionnaire de paquets. À noter qu'il y a un paquet optionnel à installer pour bénéficier d'une barre de status. Ce paquet n'est pas encore prêt pour Frugalware, mais ce ne serait tarder. Pour utiliser pleinement i3, il faut également installer dmenu qui est le lanceur d'applications utilisé par i3.
pacman -S i3 i3status dmenu
Lors de l'installation, i3 va créer son fichier .desktop dans /usr/share/sessions
, ce qui vous permettra de vous connecter avec Gdm ou Lightdm. Si vous utilisez Slim, il faudra éditer votre ~/.xinitrc
et ajouter la commande :
exec i3
Lors de la première connexion, vous n'avez pas de fichier de configuration. Un petit assistant va alors apparaître pour vous permettre de configurer à minima. Vous aurez le choix pour la touche modificatrice « mod », bien connue des utilisateurs de tiling. Bon c'est léger tout de même, pour aller plus loin, il va falloir ouvrir et décortiquer le fichier ~/.i3/config
. Il est à noter que vous pouvez également placer ce fichier de config dans ~/.config/i3/
. C'est un choix plus cohérent car c'est dans ce dossier .config que se regroupent la plupart des configurations (awesome et wmfs fonctionnent comme cela).
Alors, je ne vais pas vous prendre par la main pour éditer ce fichier. Il est plutôt simple à comprendre, bien commenté et, chose peu courante dans le domaine du tiling, la documentation du site est particulièrement didactique (quoiqu'en anglais).
Il faut peu de temps pour avoir un fichier de configuration à sa main, ce qui pour moi signifie : modification de tous les raccourcis clavier car je suis en bépo, personnalisation des tags (j'aime avoir des tags nommés et non des chiffres), assignation de raccourcis pour les applications usuelles et assignation automatique de tags à un client.
Pour vous donner une idée de la syntaxe du fichier de configuration, voici quelques extraits :
# change focus bindsym $mod+t focus left bindsym $mod+s focus down bindsym $mod+r focus up bindsym $mod+n focus right
# switch to workspace bindsym $mod+0x22 workspace 1:web bindsym $mod+0xab workspace 2:mail bindsym $mod+0xbb workspace 3:im bindsym $mod+0x28 workspace 4:files bindsym $mod+0x29 workspace 5:office bindsym $mod+0x40 workspace 6:media bindsym $mod+0x2b workspace 7:diary bindsym $mod+0x2d workspace 8:root bindsym $mod+0x2f workspace 9:ssh bindsym $mod+0x2a workspace 10:vrac
# lancer les applications bindsym Control+Alt+n exec claws-mail bindsym Control+Alt+e exec midori bindsym Control+Alt+l exec libreoffice bindsym Pause exec wicd-client bindsym Print exec scrot '%F-%H-%M-%S_$wx$h.png' -e 'mv $f /media/usb/images/web/screenshots/' # Assigne les applications aux workspaces assign [class="libreoffice-startcenter"] 5:office assign [class="libreoffice-impress"] 5:office assign [class="libreoffice-writer"] 5:office assign [class="Midori"] 1:web assign [class="Claws-mail"] 2:mail assign [class="Xchat"] 3:im assign [class="Rednotebook"] 7:diary # programmes au démarrage exec parcellite exec nitrogen --restore exec urxvtd exec setxkbmap fr bepo
Un point plus précis sur le principe de la barre : un peu dans le principe de Wmfs, la barre où se trouve les tags peut être customisée, soit par l'ajout de scripts maisons, soitavec un conky ou par l’adjonction du paquet que je vous ai conseillé d'installer au début, i3status. Je ne l'ai pas encore donc ne peut vous en donner un retour, mais j'ai activé le systray (optionnel), placé la barre en haut et pré-activé le i3status. À noter que vous pouvez changer les couleurs, interdire l'affichage de la barre sur un moniteur si vous en avez plusieurs. Enfin, il y'a de quoi s'amuser avec.
# Start i3bar to display a workspace bar (plus the system information i3status # finds out, if available) bar { status_command i3status tray_output primary position top }
Vous noterez que la syntaxe est très simple, le fichier est donc facilement appropriable en peu de temps.
Les bonnes idées
Par rapport à Wmii, l'aspect est presque identique et c'est plutôt rassurant pour quelqu'un qui y a passé plusieurs mois. i3 reprend à son compte le principe des tags dynamiques, sans en apporter toute la puissance. En effet, vous ne pouvez pas créer un tag à la volée comme c'est le cas dans wmii. Vous définissez la liste des tags dans votre fichier de configuration (10 en accès rapide mais potentiellement en nombre illimité) et vous y accéder avec les raccourcis qui vont bien. Par rapport à Awesome ou Wmfs, les tags ne s'affichent que si un client l'occupe. Ça c'est une très bonne chose !
Une autre bonne idée est le principe des « modes ». De base, il n'y en a qu'un, qui permet de rentrer dans un mode de redimensionnement. Vous entrez dans le mode avec un raccourci clavier, et une fois dans celui ci, vous avez d'autres raccourcis pour des actions spécifiques. Vous ressortez du mode ensuite en pressant une touche convenue. L'exemple ci dessous avec le mode resize est plus parlant que ma tentative floue de l'expliquer ^^ :
# resize window (you can also use the mouse for that) mode "resize" { # These bindings trigger as soon as you enter the resize mode # Pressing left will shrink the window’s width. # Pressing right will grow the window’s width. # Pressing up will shrink the window’s height. # Pressing down will grow the window’s height. bindsym t resize shrink width 10 px or 10 ppt bindsym s resize grow height 10 px or 10 ppt bindsym r resize shrink height 10 px or 10 ppt bindsym n resize grow width 10 px or 10 ppt # same bindings, but for the arrow keys bindsym 113 resize shrink width 10 px or 10 ppt bindsym 116 resize grow height 10 px or 10 ppt bindsym 111 resize shrink height 10 px or 10 ppt bindsym 114 resize grow width 10 px or 10 ppt # back to normal: Enter or Escape bindsym Return mode "default" bindsym Escape mode "default" } bindsym $mod+o mode "resize"
Ce principe de mode peut être très intéressant à étudier et peu répandu à ma connaissance.
La mise en onglet (ou stackage) des clients, reprend le concept de Wmii et apporte une bonne solution pour travailler sans être embêter par les autres fenêtres.
La compatibilité utf-8 de l'ensemble, un système de barre avec un bon potentiel et une systray sortie d'usine font ressentir un truc sympa : Wmii (meme si ce n'est pas lui) a repris une deuxième jeunesse et ça fait bien plaisir !
On ne tombe pas non plus dans la fioriture. pas de polices en Xft, on croirait bien voir un produit de Suckless.
Les manques
Je n'ai pas testé en profondeur ce wm encore donc il faut modérer un peu ces propos. Cela fait un bout de temps que j'utilisais le tiling dynamique à la Awesome ou Dwm. Je m'étais configuré des accès aux petits oignons pour passer un client en master, regrouper plusieurs tags. Et le tiling manuel rend ce concept un peu caduque : on est en manuel tout de même, c'est un peu moins fluide dans la manipulation des clients. Alors, pas de regroupement de tags, pas de zone master/slave et donc pas d'interactions entre eux. Pas de schéma de tiling différents. C'est d'ailleurs ce qu'est devenu Wmfs2 et qui me faisait rechigner à l'utiliser. Cependant, j'utilise i3 sur un netbook de 8" : dans ces conditions, je n'ai de toute façon pas d'intérêt à cumuler les clients sur les tags. En général, 1 client par tag, voir 2 ou 3 pour le terminal ou l'IM, c'est le plus efficace.
L'autre truc qui m’embête, c'est la non possibilité de retirer les barres de titre des clients. C'est de la place de perdu et de ce coté là, je préfère nettement la technique d'Awesome : pas de barre de titre par client, le titre du client actif s'affiche dans la barre (celle qui affiche les tags et le systray).
Conclusion
Alors déjà, je ne vais pas m'embêter à vous montrer des screens, vous m'excuserez je pense. Un tiling manager n'a rien de très visuel et une visite sur la page adéquate du site officiel vous fournira tout ce dont vous aurez besoin de reluquer. Je voulais juste vous parler un peu de ce gestionnaire de fenêtres qui me plait vraiment bien. Je ne l'utilise que depuis récemment, mais j'ai un bon feeling à la manipulation et j'estime qu'il vaut le coup de le tester. C'est à vous de voir maintenant !