Sway

Le tiling window manager de Wayland

Posté le 2 Mai 2020 · 12 minutes de lecture

Au début de mon aventure Linuxienne, je m’amusais beaucoup à jouer avec les Window Managers: openbox, fluxbox, awesome, subtle et autant de distributions: Fedora, Debian, ArchLinux, BunsenLabs ou encore le regretté CrunchBang.

Aujourd’hui, on fait un petit retour aux sources: une Debian testing minimale avec Sway. 😎 Rien qu’au nom, tu te dis que ça déchire autant que Tmuxinator, non ? D’abord, c’est quoi un window manager ?

Le Window Manager, c’est l’élément de ton système qui te permet d’afficher des fenêtres et de les manipuler. Sur Plasma, son petit nom c’est Kwin et sur GNOME c’est Mutter. Il en existe beaucoup d’autres comme ceux cités plus haut. Un Tiling Window Manager c’est un peu différent. Il va mettre chaque fenêtre en tuile afin de maximiser l’utilisation de l’écran sans que celles-ci ne se chevauchent. Bien entendu, sur les TWM, tu peux activer le mode floating qui te permet d’utiliser la fenêtre comme d’habitude.

Petit exemple de ce que fais un TWM:

Exemple d'utilisation de TWM, ici Sway

Avec ça, tu vas pouvoir poster #unixporn sur Mastodon. Pour ma part, je fais tout ça sur une Debian. Bien entendu, tu peux partir sur ta distribution préférée.

L’objectif de cet article n’est pas de faire un tutoriel entier sur Sway. Ces outils sont indéniablement liés à l’utilisateur·rice: tout est configurable comme on le souhaite. Le but ici est de permettre une prise en main facile et plus rapide que si tu devais lire les manuels (qui sont très bons) avec des bouts de code qui tu peux réutiliser.

Installation

Premièrement, faut l’installer.

1
2
3
$ su -c 'apt install sway slurp grim rofi'
$ mkdir -p ~/.config/sway
$ cp /etc/sway/config ~/.config/

Explications:

  • slurp & grim: scrot ne fonctionne pas sous Wayland. Il faut donc remplacer ces deux paquets.
  • rofi: tout comme scrot, dmenu ne fonctionne pas. Rofi en est une alternative, on en parlera plus en détail dans un prochain article.

Pour lancer Sway, assez simple: il suffit d’exécuter sway dans un tty.

On ne va pas voir comment faire de la configuration. Tu modifies les bindsym, les set et tu testes, tu fais ça comme tu veux pour que tu t’y sentes bien: à quoi ça sert d’utiliser quelque chose qui te fait du mal ? 🙂

Cependant, on va quand même voir quelques trucs qui peuvent potentiellement te sauver les mirettes.

Les inputs

Le clavier

Par défaut, Sway démarre en qwerty. Losqu’il a démarré pour la première fois, de grosses gouttes sont apparues sur mon front. Du coup, voici comment mettre ta disposition préférée (ou pas, là c’est la mienne):

1
2
3
4
input type:keyboard {
    xkb_layout "fr,be"
    xkb_variant "bepo,"
}

Explications:

  • xkb_layout: la localisation de ton clavier. Pour ma part j’en utilise deux: bépo et l’azerty belge pour permettre à autrui d’utiliser mon ordinateur si besoin.
  • xkb_variant: si tu utilises une variante du clavier. La configuration se fait sur base de xkb_layout. Si il y a deux entrées dedans, il doit y avoir deux entrées dans xkb_variant, séparées par des virgules et vides s’il n’y a pas de variante.

Tu recharges Sway et c’est bon: ton $mod + shift + c par défaut.

Le touchpad

C’est aussi simple que pour le clavier. Dans ton fichier de configuration:

1
2
3
4
input type:touchpad {
    natural_scroll enabled
    tap enabled
}

L’option natural_scroll inverse le sens de défilement du touchpad. Tu descends: ça monte. Un peu comme quand Mc Solaar dit:

Mon âme monte, je vous vois en contre plongée

Bref, jamais compris ce passage. Pour tap enabled, c’est juste que tu peux tapotter ton touchpad.

Si tu veux en savoir plus sur les inputs: man sway-input.

Bépoète, la solution

Si tu es un·e Bépoète, tu peux copier ces lignes pour pouvoir switcher de bureau virtuel avec les chiffres au-dessus de ton clavier:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Switch to workspace
bindsym $mod+quotedbl workspace 1
bindsym $mod+guillemotleft workspace 2
bindsym $mod+guillemotright workspace 3
bindsym $mod+parenleft workspace 4
bindsym $mod+parenright workspace 5
bindsym $mod+at workspace 6
bindsym $mod+plus workspace 7
bindsym $mod+minus workspace 8
bindsym $mod+slash workspace 9
bindsym $mod+asterisk workspace 10

# Move focused container to workspace
bindsym $mod+Shift+quotedbl move container to workspace 1
bindsym $mod+Shift+guillemotleft move container to workspace 2
bindsym $mod+Shift+guillemotright move container to workspace 3
bindsym $mod+Shift+parenleft move container to workspace 4
bindsym $mod+Shift+parenright move container to workspace 5
bindsym $mod+Shift+at move container to workspace 6
bindsym $mod+Shift+plus move container to workspace 7
bindsym $mod+Shift+minus move container to workspace 8
bindsym $mod+Shift+slash move container to workspace 9
bindsym $mod+Shift+asterisk move container to workspace 10

La gestion des écrans

Ici encore, pas de gestionnaire graphique pour gérer tes différents écrans. Tout se fait dans le fichier de configuration. Pour le manuel, c’est par là: man sway-output.

Cependant, voici la configuration que j’ai:

1
2
output HDMI-A-1 resolution 3440x1440 position 1920,0
output eDP-1 resolution 1920x1080 position 0,0

Lorsque mon écran HDMI est branché, on lui donne la résolution, il se trouve à 1920 pixels à droite, 0 pixel en haut. L’écran de mon ordinateur portable (eDP-1), se trouve toujours aux coordonnées (0,0).

Mais quand je suis sur mon bureau et ma chaise de baronne, je clape mon laptop pour que ça soit plus confortable. Contrairemnet à GNOME et consort, Sway continue de tourner quand il est clapé et tu peux te brosser pour récupérer tes bureaux virtuels sans rien voir.

Pour faire ça, je désactive l’écran de mon ordinateur portable:

1
bindsym $mod+Delete exec swaymsg output eDP-1 toggle

Et paf!, la totalité des mes bureaux se retrouvent sur l’écran externe.

Des captures pour mettre sur Reddit

Comme expliqué plus haut, prendre des captures est un peu différent vu que nous n’avons pas scrot à disposition. Voici ma configuration pour faire ça:

1
2
3
4
5
# Take a screenshot with all output and save it into screenshots
bindsym Print exec grim $HOME/Images/capture-$(date +%Y-%m-%d_%H-%m-%s).png

# # Take a Screenshot with the region select
bindsym $mod+Print exec grim -g "$(slurp)" $HOME/Images/capture-$(date +%Y-%m-%d_%H-%m-%s).png

Quand tu fais une capture d’écran, celle-ci se retrouvera dans le dossier Images de ton dossier personnel daté comme ceci: capture-2020-04-24_00-04-1587682329.png

De jolies bordures

Mais pour mettre sur /r/unixporn, c’est mieux d’avoir des bordures (Avis personnel: ça améliore aussi la lisibilité de l’écran), pour ça, rien de plus simple:

1
2
3
smart_gaps on
gaps inner 20
default_border pixel 2

Explications:

  • smart_gaps: s’il n’y a qu’une seule application sur ton bureau, elle n’aura pas de marge.
  • gaps inner: la marge entre les applications sur ton bureau.
  • default_border: pour ma part, j’ai mis ça à pixel 2 pour distinguer quelle application est sélectionnée. Cela supprime la barre de titre sauf sur les fenêtres “enfants”.

Ordinateurs portables: luminiosité de l’écran

Si tu tournes sur un laptop, c’est aussi simple que dire « Bonjour ». Vas-y, essaie.

Maître du monde

Maintenant on peut reprendre. D’abord, installer brightnessctl:

1
$ su -c 'apt install brightnessctl'

Et dans ta configuration:

1
2
bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 5%- 
bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set 5%+ 

Le contôle sonore

Pour faire vibrer les fenêtres avec tes 500w, tu dois d’abord installer pulseaudio et pavucontrol (du moins, c’est ma configuration):

1
$ su -c 'apt install pulseaudio pavucontrol'

Et dans le fichier de configuration:

1
2
3
4
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle

Rien d’autre à ajouter sur ce sujet. 🤷‍♀️

Démarrer Sway à la connexion

Je l’ai déjà dit, mais ici, on gère. On se connecte en tty comme des true hackers. Pour ouvrir ton twm automatiquement si tu utilises bash:

1
2
3
4
5
cat << EOF >> ~/.bash_profile
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
   exec sway
fi
EOF

Et maintenant, quand tu te connecteras à l’ouverture de ton ordinatueur, Sway s’ouvrira. L’automatisation, c’est bien.

Lancer un programme au démarrage de Sway

Tout comme son cousin i3, on peut lancer des commandes au démarrage de Sway. Il suffit de lui dire exec --no-startup-id tonlogiciel. Pour ma part, je lance waybar en même temps, vu que je n’utilise pas la barre par défaut.

Conclusion

Voilà, c’est terminé ! Je veillerai à mettre à jour cet article autant de fois que nécessaire si je découvre un nouveau truc qui peut t’aider (il suffit de suivre le compte Fediverse du blog pour être au courant des mises à jour). J’espère également que tu t’amuseras avec un twm, c’est vraiment cool à utiliser au quotidien… surtout quand on te prend pour un·e alien avec tes trucs chelou qui ne sont pas comme tout le monde. Disons que c’est une force de dissuasion pour éviter de squatter ton ordinateur.

Voici ce que j’ai actuellement. Comme quoi, même un TWM peut être joli à regarder et agréable à utiliser.

Capture d'écran de ma configuration




Psst! Si tu as aimé l'article, n'hésite pas à me laisser un petit commentaire. 🤗