====== Le gestionnaire de fenêtre i3 ======
* Objet : Installer et configurer le gestionnaire de fenêtre i3
* Niveau requis : {{tag> avisé}}
* Commentaires : ne pas avoir peur de contrôler son affichage au clavier
* Suivi :
* Création par [[user>sogalpunx]] 27/11/2013
* Testé par [[user>arpinux]] le 02/05/2023
* Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=73085#p73085]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
* **Retrouvez la traduction complète du [[utilisateurs:arpinux:tutos:i3-userguide-fr|manuel de l'utilisateur 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:\\
{{/file-R3bf3ee93206d2617a301cabed82cde83.png}}
===== Installation =====
i3 est disponible dans les dépôts. Pour l'installer:\\
apt-get install i3
Ce meta-paquet installera plusieurs binaires:\\
* i3-wm: le gestionnaire de fenêtre lui même;\\
* i3lock: un utilitaire pour verrouiller votre écran;\\
* i3bar: une barre permettant d'afficher les noms des espaces de travail et des informations sur le système;\\
* i3status: utilitaire permettant d'afficher les informations dans i3bar;\\
* i3-msg: utilitaire permettant d'envoyer des commandes à i3 sans pour autant modifier le fichier de configuration;\\
* suckless-tools: ce paquet est requis pour l'utilitaire dmenu (que vous pouvez par ailleurs compiler depuis les sources afin d'éviter l'installation de ce paquet).\\
===== 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 Windows). 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-) ):
# 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 {
#
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:
{{/file-Ra23e4e5918f42653de07845a39340085.png}}
\\
\\
Mode par onglet (Mod+z):\\
{{/file-R2466fffc48b0f005462d9c045bf3aff2.png}}
\\
\\
Mode empilé (stack) (C-s):\\
{{/file-Rc8e90e60fb3dc4e18343481d98957182.png}}
=== 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.\\
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: \\
volume master {
format = "♪: %volume"
device = "default"
mixer = "Master"
mixer_idx = 0
}
Et voilà le travail !\\
{{/file-R3476ce188f5a63973175c156735805ee.png}}
--- //[[sogalpunx@volted.net|Sogal 'Seb' Punx]] 28/11/2013 18:26//
===== Astuces =====
* [[:utilisateurs:captnfab:tutos:i3wm-deplacer-workspace-x-vers-ecran-actif|Un script pour i3 permettant de déplacer et afficher un workspace donné vers l'écran actif]]
* [[https://github.com/PotatoesMaster/i3-vim-syntax|Coloration syntaxique pour Vim.]] :e ~/.vim/syntax/i3.vim |read https://raw.githubusercontent.com/PotatoesMaster/i3-vim-syntax/master/syntax/i3.vim | w
==== Définir son gestionnaire de fichier par défaut ====
=== Choisir son explorateur de fichiers ===
* caja (explorateur de [[:doc:environnements:mate|Mate]])
* Thunar (explorateur de fichier)
* [[:doc:systeme:pcmanfm]]
* [[:doc:systeme:ranger]]
=== Régler son choix ===
Ajouter la ligne dans le fichier (et y supprimer les éventuelles lignes ''inode/directory'') :
inode/directory=caja.desktop
ou
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.
[[doc:environnements-polybar|Polybar]]