Table des matières

Le gestionnaire de fenêtre i3

Introduction

i3 est un gestionnaire de fenêtre par pavage. Son but est de fournir un code et une configuration clairs, bien documentés, faciles à maintenir et à utiliser.
Il gère bien entendu les moniteurs multiples ainsi que l'encodage UTF-8.
Son but est d'être léger tout en étant moderne et extrêmement personnalisable.

Il fonctionne selon une logique d'arborescence:

Vous travailler au sein d'un espace de travail. Au démarrage, un seul est actif par défaut. Les autres se créeront au fur et à mesure que vous les “peuplerez” en ouvrant des fenêtres en leur sein. Un espace de travail qui n'accueille aucune fenêtre est “détruit”.

Une fenêtre seule représente un container. Vous pouvez ajouter des fenêtres à ce container en le divisant (horizontalement ou verticalement (voir ci-après dans le fichier de configuration en exemple)).

Ainsi nous avons:

**espace de travail**
|
|_container 1
|            |_fenêtre seule (donc fenêtre=container)
|
|_container 2
             |
             |_fenêtre "iceweasel"
             |
             |_fenêtre "terminal"
             

Le but de ce tutoriel est de présenter i3 et ses utilitaires et de permettre à l'utilisateur de le mettre sur pied rapidement.
Pour en savoir plus, je vous recommande vivement la lecture du très bon guide pour i3: http://i3wm.org/docs/userguide.html

Il se présente en gros, comme ceci:

Installation

i3 est disponible dans les dépôts. Pour l'installer:

apt-get install i3

Ce meta-paquet installera plusieurs binaires:

Utilisation

Démarrage

Le démarrage peut-être différent selon le gestionnaire de connexion que vous utilisez (gdm3, kdm, slim,…). Toutefois i3, lors de son installation depuis les dépôts est configuré automatiquement en tant que'un des gestionnaires de fenêtres du système et sera donc disponible au login.
Si cela n'était pas le cas, vous pouvez définir cela grâce à la commande:

update-alternatives --install /usr/bin/x-window-manager x-window-manager /usr/bin/i3 20

Configuration

i3

Globalement la configuration de i3 est très bien documentée et claire. Elle est donc accessible aux utilisateurs souhaitant bidouiller leur configuration facilement.
Lors du premier lancement d'i3, un petit assistant vous demandera la touche de modification que vous souhaitez utiliser (Alt par défaut mais beaucoup préféreront la touche ⊞ Win). Il en découle le paramétrage du fichier de configuration

~/.i3/config

pour votre clavier (azerty).
Et c'est au sein de ce fichier que tout se paramètre! Plutôt que de passer en revue les différentes sections, je vous propose mon fichier de configuration commenté (et en français s'il vous plait 8-) ):

Exemple de fichier .i3/config
# Ce fichier a été auto-généré par i3-config-wiazrd(1). Il ne sera pas écrasé, vous pouvez donc le modifier à votre guise.
#
# Si vous devez changer de configuration de clavier (azerty <=> qwerty), effacez ce fichier et relancez:
# i3-config-wizard(1).
#
 
# i3 config file (v4)
#
# Merci de lire http://i3wm.org/docs/userguide.html pour l'ensemble des paramètres possibles!
#
# Définition de Mod4 (touche Super ou Windows) en tant que modificateur principal:
set $mod Mod4
 
# Définition de Alt en tant que modificateur secondaire (pour mes raccourcis):
set $alt Mod1
 
# police des titres de fenêtres. ISO 10646 = Unicode
font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
 
# Utilisation de la souris+$mod pour déplacer les fenêtres flottantes:
floating_modifier $mod
 
# ouvrir un terminal
bindsym $mod+Return exec i3-sensible-terminal
 
# fermer (tuer) la fenêtre ayant le focus:
bindsym $mod+Shift+Q kill
 
# démarrer le lanceur de menu 'dmenu' (paquet suckless-tools)
bindsym $mod+d exec dmenu_run
 
# déplacer le focus entre les fenêtres avec jklm:
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+m focus right
 
# ou avec les touches fléchées:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
 
# déplacer la fenêtre active avec jklm:
bindsym $mod+Shift+J move left
bindsym $mod+Shift+K move down
bindsym $mod+Shift+L move up
bindsym $mod+Shift+M move right
 
# ou avec les touches fléchées:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
 
# diviser horizontalement (ex: mod+h suivi de mod+Entrée crée un nouveau terminal à côté du premier)
bindsym $mod+h split h
 
# diviser verticalement (ex: mod+v suivi de mod+Entrée crée un nouveau terminal sous le premier)
bindsym $mod+v split v
 
# mise en plein écran de la fenêtre active:
bindsym $mod+f fullscreen
 
# changer le mode d'affichage des containers:
# stacked: fenêtres maximisées, barres de titre des fenetres ouvertes empilées,
# tabbed: fenêtres maximisées, barres de titre des fenetres ouvertes les unes à côtés des autres, comme des onglets,
# default: tiling (pavage).
bindsym $mod+s layout stacking
bindsym $mod+z layout tabbed
bindsym $mod+e layout default
 
# alterner l'affichage de la fenêtre active entre flottant et tiling:
bindsym $mod+Shift+space floating toggle
 
# alterner le focus entre les fenêtres en tiling et celle(s) flottante(s) :
bindsym $mod+space focus mode_toggle
 
# donner le focus au container père:
bindsym $mod+q focus parent
 
# donner le focus au container fils:
# bindsym $mod+d focus child
 
# se déplacer entre espaces de travail:
bindsym $mod+ampersand workspace 1
bindsym $mod+eacute workspace 2
bindsym $mod+quotedbl workspace 3
bindsym $mod+apostrophe workspace 4
bindsym $mod+parenleft workspace 5
bindsym $mod+minus workspace 6
bindsym $mod+egrave workspace 7
bindsym $mod+underscore workspace 8
bindsym $mod+ccedilla workspace 9
bindsym $mod+agrave workspace 10
 
# déplacer la fenêtre active vers un espace de travail:
bindsym $mod+Shift+ampersand move container to workspace 1
bindsym $mod+Shift+eacute move container to workspace 2
bindsym $mod+Shift+quotedbl move container to workspace 3
bindsym $mod+Shift+apostrophe move container to workspace 4
bindsym $mod+Shift+5 move container to workspace 5
bindsym $mod+Shift+6 move container to workspace 6
bindsym $mod+Shift+7 move container to workspace 7
bindsym $mod+Shift+8 move container to workspace 8
bindsym $mod+Shift+9 move container to workspace 9
bindsym $mod+Shift+0 move container to workspace 10
 
# recharger la configuration d'i3 (relecture du présent fichier, ne nécessite pas de redémarrage d'i3):
bindsym $mod+Shift+C reload
 
# redémarrer i3 sur place (conserve la session et l'organisation actuelle, peut être utiliser pour une mise à jour d'i3)
bindsym $mod+Shift+R restart
 
# quitter i3 (met fin à votre session X):
bindsym $mod+Shift+E exit
 
# redimensionner la fenêtre (la souris peut aussi être utilisée):
mode "resize" {
        # Ces raccourcis fonctionnent dès l'entrée en mode "resize"
 
        # j pour réduire la largeur de 10
        # m pour agrandir la largeur de 10
        # k pour agrandir la hauteur de 10
        # l pour réduire la hauteur de 10
        bindsym j resize shrink width 10 px or 10 ppt
        bindsym k resize grow height 10 px or 10 ppt
        bindsym l resize shrink height 10 px or 10 ppt
        bindsym m resize grow width 10 px or 10 ppt
 
        # idem mais avec les touches fléchées
        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
 
        # Entrée ou Echap pour revenir en mode normal
        bindsym Return mode "default"
        bindsym Escape mode "default"
}
 
bindsym $mod+r mode "resize"
 
# i3bar permet  l'affichage des espaces de travail (si i3status est disponible, des infos systèmes sont affichées)
bar {
        # démarrer i3status dans i3bar
        status_command i3status
        # position de la barre (top | bottom)
	position top
        # le system-tray reste sur l'écran principal
	tray_output primary
 
# définition des couleurs des noms d'espaces de travail dans i3bar:
	colors {
#				  <bordure> <arrière plan> <texte>
		focused_workspace #FF00FF   #111111         #00FF00
# définition de la couleur de police de i3status:
		statusline	  #EEEEEE
 
		}
}
 
##############################################
## Début de ma configuration personnalisée: ##
##############################################
 
# Le focus ne suit pas la souris (évite le coup de paume sur le touchpad)
focus_follows_mouse no
 
# Lors du passage à un workspace, retaper le raccourci de ce workspace ramène à celui dont je viens
workspace_auto_back_and_forth yes
 
# Comportement des nouveaux containers (tabbed | stack | default ie tiled)
workspace_layout default
 
# Bordure des nouvelles fenêtres (normal | none | 1pixel | pixel n)
# fenêtres normales:
new_window 1pixel
# fenêtres flottantes:
new_float normal
 
# Assignation des logiciels à un espace:
assign [class="Iceweasel"] 1
assign [class="Geany"] 3
 
# Applicationx à démarrer avec i3 (ce sont des exemples persos, vous mettez bien ce que vous voulez ;):
exec /usr/bin/nm-applet
exec /usr/bin/volumeicon
exec sh /home/user/.screenlayout/i3.sh
exec /usr/bin/feh --bg-scale Images/Wallpapers/i3-blanc.png
 
# Modification des couleurs de la fenêtre ayant le focus:
# class	       	   bordure	fond	texte	indicateur
client.focused	   #FF00FF	#111111	#00FF00	#FF00FF
 
# Il est possible de définir des raccourcis d'applications de 2 façons:
# bindsym renvoie au symbole de la touche (ça peut être aléatoire selon la disposition du clavier);
# bindcode renvoie au code de la touche obtenu via l'utilitaire de test d'évenements xev", 
# c'est donc une méthode préférable pour les touches particulières:
 
# Définition des raccourcis d'applications (avec bindsym)
#bindsym $mod+$alt+g exec gimp
bindsym $mod+$alt+m exec icedove
bindsym $mod+$alt+i exec iceweasel
bindsym $mod+$alt+z exec sakura -x mocp
bindsym $mod+$alt+r exec sakura -x ranger
bindsym $mod+$alt+e exec sakura -x emacs
bindsym $mod+$alt+a exec xfe
bindsym $mod+p	    exec sh /home/sogal/.script/dmenu.sh
bindsym $alt+p	    exec sh /home/sogal/.script/dossier.sh
 
# Définition des raccourcis d'applications (avec bindcode)
bindcode 122 exec amixer -q set Master 5dB- unmute
bindcode 123 exec amixer -q set Master 5dB+ unmute
bindcode 78  exec i3lock 
#bindcode 220 exec sakura -x finch
#bindcode 173 exec mocp --previous
#bindcode 172 exec mocp --next
bindcode 172 exec mocp --toggle-pause
bindcode 107 exec scrot
bindcode Control+$alt+119 exec sh /home/sogal/.script/arret.sh
 
# Raccourcis des mouvements entre espaces grâce aux touches fléchées
bindsym $mod+$alt+Left workspace prev
bindsym $mod+$alt+Right workspace next
 
# Raccourci pour alterner entre les modes de bordures (normale, 1 pixel ou aucune)
bindsym $mod+b border toggle

Voilà, nous avons fait le tour du fichier de configuration, des paramètres présents par défaut et ceux que vous pouvez rajouter.
Voici quelques captures des différents modes d'affichage (je n'ai capturé que les barres de titre):

Mode par defaut avec 3 fenêtres:

Mode par onglet (Mod+Z):


Mode empilé (stack) (Ctrl+S):

Les modes

Les modes permettent de redéfinir ponctuellement la configuration de son espace de travail comme par exemple le mappage du clavier. Ici, on définit un mode Commande qui permet de lancer ses logiciels favoris.

mode "Commande" {

  	bindsym f exec "/usr/bin/firefox"; mode "default"
        # [...] Et ainsi d suite

	bindsym Return mode "default"
	bindsym Escape mode "default"
}
bindsym $mod+c mode "Commande"

De cette façon combinaison des touches meta + C+F va lancer firefox puis retourne au mode normal.

Autre Exemple

Nous allons utiliser les modes afin de switcher entres les workspaces. J'utilise les lettres alphabetiques pour definir mes workspaces. Pour ne pas interférer avec les raccourcis de base d'I3, nous créons un mode “$mode_workspace”. Une fois activé, le nombre de workspace est sans limite !!

# declaration des workspaces
set $WSa   a: Mais
set $WSb   b: VoitQui
set $WSc   c: Voila
set $WSd   d: InspecteurGadget!
# definition du message affiché lors de l'activation du mode
set $mode_workspace Special A-Z Workspaces | switch workspace (a - b - c - d) | move to Shift+(a - b - c - d) |
# configuration du mode
mode "$mode_workspace" {
    bindsym a workspace $WSa, mode "default"
    bindsym Shift+a move container to workspace a, mode "default" 
    bindsym b workspace $WSb, mode "default"
    bindsym Shift+b move container to workspace b, mode "default"
    bindsym c workspace $WSc, mode "default"
    bindsym Shift+c move container to workspace c, mode "default"
    bindsym d workspace $WSd, mode "default"
    bindsym Shift+d move container to workspace d, mode "default"
# back to normal: Enter or Escape
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
on defini un raccourcis pour le mode
bindsym $mod+Shift+ mode "$mode_workspace"

Voila; Enjoy ! ps: Attention, Veuillez bien vérifier les lettres des raccourcis pour ne pas casser votre configuration actuelle, 2 raccourcis ou information dupliquer entrainera une erreur lors du lancement d'i3.

i3status

Voyons maintenant comment personnaliser l'affichage de i3status. Tout ce fait via le fichier de configuration:

~/.i3status.conf

Pour avoir une base vous pouvez le copier depuis

/etc/i3status.conf

Il est composé de 3 parties:

Configuration générale

C'est ici que vous pouvez définir la mise en couleur ou l'intervalle d'actualisation des informations.

Extrait de .i3status.conf
general {
        colors = true
        interval = 5
}
Ordre d'affichage

Il s'agit de la liste des modules qui vont s'afficher et qui seront définis par la suite.
En déplaçant les lignes, vous modifiez l'ordre d'affichage des informations dans la i3bar.

Définition des modules

Par défaut, tous les modules disponibles ne sont pas affichés. Vous en trouverez d'autres dans le man de i3status.
Exemple de module d'affichage du son: 

.i3status.conf
volume master {
          format = "♪: %volume"
          device = "default"
          mixer = "Master"
          mixer_idx = 0
}

Et voilà le travail !

Sogal 'Seb' Punx 28/11/2013 18:26

Astuces

Définir son gestionnaire de fichier par défaut

Choisir son explorateur de fichiers

Régler son choix

Ajouter la ligne dans le fichier (et y supprimer les éventuelles lignes inode/directory) :

~/.config/mimeapps.list
inode/directory=caja.desktop

ou

~/.config/mimeapps.list
inode/directory=Thunar.desktop

Tester

xdg-open .

lien vers un Tuto

https://medium.com/hacker-toolbelt/i3wm-on-debian-10-buster-c302420853b1

polybar

polybar est une application qui permet de formater des données afin de les afficher dans une barre de statut.
polybar est utilisée dans la session i3wm sur nakeDeb mais vous pouvez l'activer sur un autre environnement. Polybar

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !