18
0
Bifurcation 0
wiki/HowtoI3.md

10 KiB

title category
Howto i3, a tiling window manager window-manager

Documentation officielle : http://i3wm.org/docs/

Installation

Sous Debian

En installant le méta-paquet i3 on obtient i3-wm lui-même et plusieurs outils utiles (i3lock , i3status , dunst…).

# apt install i3

On peut aussi se contenter du paquet i3-wm pour ne pas installer les outils complémentaires.

Pour démarrer automatiquement i3 au lancement de la commande startx, il suffit d'ajouter la ligne suivante dans ~/.xinitrc:

exec /usr/bin/i3

Sous OpenBSD

On peut installer le paquet i3 qui va aussi installer le paquet i3status qui permet d'avoir la barre d'information

# pkg_add i3

À noter qu'i3 utilise pledge(2) afin de minimiser la portée d'une faille de sécurité qui serait présente dans i3.

Barre d'état

Une barre d'état est proposée par i3 via la commande i3status qui affiche une ligne de texte d'information, mise à jour en continu.

i3 affiche par défaut cette barre sur tous les écrans, en dessous des "workspaces".

Via la configuration, il est possible de modifier ce comportement. Par exemple la placer en haut, seulement sur l'écran principal :

bar {
  position top
  tray_output primary
  status_command i3status
}

Utile

Verrouillage de session rapide

i3 propose un verrou de session avec la commande i3lock. On peut créer un raccourci pour le faire facilement :

bindsym $mod+exclam exec i3lock --dpms

Verrouillage automatique de la session

Au lancement de i3, il est possible de lancer également un programme qui va verrouiller la session après une certaine inactivité. Par exemple avec xautolock :

xautolock -time 10 -locker i3lock

Déplacer des "workspaces" sur un autre écran

Pour déplacer le "workspace" courant sur un autre écran (à placer dans la config de i3) :

bindsym $mod+Control+Shift+Right move workspace to output right
bindsym $mod+Control+Shift+Left move workspace to output left

Si on branche/débranche régulièrement des écrans, il peut être utile d'automatiser le retour de certains "workspaces" sur un écran ajouté :

# list all worspaces on the internal display, except "worspace 1" (using "jq" for json parsing)
i3_workspaces=$(i3-msg -t get_workspaces | jq '.[]  | select(.output == "eDP1" and .num != 1) | .num')
for i in $i3_workspaces; do
  i3-msg -q "workspace ${i}; move workspace to output right"
done

Faire une capture d'écran

bindsym Print exec scrot -e 'mv $f ~/tmp/ && sxiv ~/tmp/$f'

La commande exécutée est scrot […] et il est évidemment possible de la personnaliser ou la remplacer par une autre.

Definir des noms pour chaque workspace

On peut définir des noms pour certains workspace à la place des numéros par défaut, pour ce faire on définit d'abord les noms dans des variables comme ceci :

set $workspace1 "1: Term"
set $workspace2 "2: Web"

Ensuite, on définit nos variables dans les raccourcis qui permettent de switcher d'un workspace à l'autre avec les touches mod+numero :

bindsym $mod+1 workspace $workspace1
bindsym $mod+2 workspace $workspace2

Et aussi dans les raccourcis qui permettent de déplacer une fenêtre d'un workspace à un autre :

bindsym $mod+Shift+1 move container to workspace $workspace1
bindsym $mod+Shift+2 move container to workspace $workspace2

Assigner une application à un workspace

Pour assigner une application à un workspace, on utilise la fonction assign en précisant la class de l'application que l'on souhaite utiliser, suivi du numéro du workspace ou du nom de la variable du workspace, si on a définit ces workspaces avec des variables, par exemple :

assign [class="Firefox-esr"] $workspace2

Pour obtenir la class de l'application on peut utiliser la commande xprop et de cliquer sur la fenêtre de l'application, on obtient en console un résultat comme ceci :

$ xprop

WM_CLASS(STRING) = "Navigator", "Firefox-esr"

Définir une application en mode fenêtre flottante

Si vous voulez avoir certaines applications en mode fenêtre flottante et pas en mode tilling dans un conteneur de fenêtre, il faut utiliser le mode "floating", exemple avec pavucontrol :

for_window [class="Pavucontrol"] floating enable

On peut redimensionner une fenêtre en mode floating avec le click droit de la souris.

Customisation de l'apparence de i3

  • Changer la couleur des fenêtres :

Pour changer la couleur des fenêtres il faut d'abord définir chaque couleur de chaque variable :

set $bg-color            #2f343f
set $inactive-bg-color   #2f343f
set $text-color          #f3f4f5
set $inactive-text-color #676E7D
set $urgent-bg-color     #E53935

Pour obtenir les numéros de chaque couleur, on peut utiliser gimp ou inkscape, ou alors sur ce site : color-picker

Définition des variables :

    * $bg-color : couleur d'arrière-plan de la fenêtre
    * $inactive-bg-color : couleur d'arrière-plan d'une fenêtre inactive
    * $text-color: couleur du texte de la fenêtre
    * $inactive-text-color : couleur du texte d'une fenêtre inactive
    * $urgent-bg-color : couleur d'une fenetre qui signale une notification

Ensuite, on définit nos variables pour chaque "état" des fenêtres :

#                       border              background         text                 indicator
client.focused          $bg-color           $bg-color          $text-color          #00ff00
client.unfocused        $inactive-bg-color $inactive-bg-color $inactive-text-color #00ff00
client.focused_inactive $inactive-bg-color $inactive-bg-color $inactive-text-color #00ff00
client.urgent $urgent-bg-color $urgent-bg-color $text-color #00ff00

Pour chaque "état" on définit une couleur pour la bordure, le fond, le texte et l'indicateur horizontal / vertical. L'indicateur Horizontal / Vertical est une barre très fine qui permet de savoir dans quel sens la prochaine fenêtre va être dispose.

Voici la définition de chaque "état" de fenêtre :

    * client.focused : fenêtre sur laquelle on a le focus
    * client.unfocused : fenêtre sur laquelle on n'a pas le focus
    * client.focused_inactive: fenêtre qui est dans un conteneur, mais qui n'a pas de focus pour le moment.
    * client.urgent : fenêtre avec une notification
  • Changer la couleur de la barre d'état

Pour changer la couleur de la barre, que l'on utilise i3status ou i3blocks, on peut utiliser les mêmes variables que pour les fenêtres, mais avec des fonctions différentes, il faut en premier lieu créer une section colors dans la section bar du fichier de configuration de i3 :

bar {
        colors {
                background $bg-color
                separator #757575
                #                  border             background         text
                focused_workspace  $bg-color          $bg-color          $text-color
                inactive_workspace $inactive-bg-color $inactive-bg-color $inactive-text-color
                urgent_workspace   $urgent-bg-color   $urgent-bg-color   $text-color
        }
}

On utilise toujours les mêmes options pour les bordures, le fond et le texte, mais avec des options différentes :

    * focused_workspace : workspace actif
    * inactive_workspace : workspace inactif
    * urgent_workspace : workspace avec une notification

Utiliser des icônes pour les noms des workspaces ou pour des notifications de la barre d'état

On peut afficher des icônes dans les noms des workspaces ou pour les notifications de la barre d'état.

Il faut utiliser la police de caractères Awesome disponible ici : Font-Awesome et la placer dans le dossier /usr/local/share/fonts/

Pour connaître toutes les icônes disponibles dans cette police et pouvoir les copier facilement sans connaître leurs codes, on peut s'aider de ce site fontawesome-cheatsheet

Il suffit, ensuite, juste de copier / coller l'icône qui nous intéresse.

Utiliser i3blocks à la place de i3status

On peut changer la barre d'état par défaut, par la barre alternative i3blocks.

Elle permet d'afficher, par défaut, plus d'information, comme l'occupation mémoire ou le trafic réseau.

Pour l'installer dans Debian :

apt install i3blocks

La configuration par défaut se fait dans /etc/i3blocks.conf, mais on peut indiquer un autre fichier de configuration, en espace utilisateur par exemple, en modifiant le fichier ~/i3/config :

bar {
        status_command i3blocks -c ~/.config/i3/i3blocks.conf

}

Démarrer une application au démarrage, dans un workspace prédéfini

Pour démarrer une application au démarrage, dans un workspace prédéfini, on utilisera cette commande dans le fichier de configuration de i3 :

exec --no-startup-id i3-msg 'workspace $workspace2; exec /usr/bin/firefox-esr'

On utilise la commande i3-msg, avec le nom de la variable du workspace ou son numéro, suivi de l'exécution de l'application.

Assigner automatiquement un workspace a un écran :

Pour assigner automatiquement un workspace a un écran il faut dans son .i3/config :

workspace 1 output HDMI1

Ou avec le nom de la variable du workspace ou le nom du workspace :

workspace $workspace1 output HDMI1

workspace "1: Term" output HDMI1

Sauvegarder la disposition d'un workspace

  • Positionner votre workspace avec la disposition des fenêtres que vous souhaitez.

  • Exécuter cette commande, qui va enregistrer la disposition dans un fichier .json :

i3-save-tree --workspace N > ~/.i3/workspace_N.json

N est le numéro, ou le nom du workspace souhaité.

Restaurer la disposition d'un workspace

Pour restaurer la disposition d'un workspace qui a été sauvegardé avec la méthode précédente, il faut, en premier, créé un script load_layout.sh comme ceci :

#!/bin/bash
i3-msg "workspace M; append_layout ~/.i3/workspace_N.json"

Où M est le workspace dans lequel vous souhaitez chargé la disposition précédemment enregistrée et N est le nombre d'espace de travail enregistré dans la section précédente.

Il y a plus qu'as exécuté le script pour que le workspace soit chargé au bon endroit.

On peut créer un raccourci qui exécute le script, à mettre dans le fichier ~/.i3/config :

bindsym $mod+g exec ~/load_layout.sh