Gérer ses écrans à chaud avec Sway
Depuis quelques temps, j’utilise Sway, gestionnaire de fenêtre du type Tiling-Manager, reprenant le principe du célèbre i3 et utilisant Wayland comme protocole de serveur d’affichage. C’est le gestionnaire de fenêtre par défaut sur mes trois machines (et même celle de “jeu”).
Pour pouvoir configurer les sorties écran à chaud avec Sway, il est possible
d’utiliser la commande swaymsg
, voici quelques exemple.
Trouver le nom des sorties.
Afin de pouvoir paramétrer comme il se doit ses différents écrans, il faut d’abord trouver leurs noms, la commande pour les trouver est :
swaymsg -t get-outputs
Et sa sortie :
Output eDP-1 'Sharp Corporation 0x144A 0x00000000' (focused)
Current mode: 3200x1800 @ 59.981998 Hz
Position: 1920,0
Scale factor: 2.000000
Scale filter: nearest
Subpixel hinting: unknown
Transform: normal
Workspace: 1
Max render time: off
Adaptive sync: disabled
Available modes:
3200x1800 @ 47.985001 Hz
3200x1800 @ 59.981998 Hz
Output DP-1 'Iiyama North America PL2482HS 1175301402148'
Current mode: 1920x1080 @ 74.973000 Hz
Position: 0,0
Scale factor: 1.000000
Scale filter: nearest
Subpixel hinting: unknown
Transform: normal
Workspace: 5
Max render time: off
Adaptive sync: disabled
Available modes:
720x400 @ 70.082001 Hz
[...]
Cette commande (dont j’ai raccourci la sortie) donne tout un tas d’informations utiles sur les écrans reliés à la machine. Si vous avez déjà toutes celles nécessaires mais il vous manque les noms associés, il et possible de lancer la commande suivante :
swaymsg -t get_outputs -p | grep Output | cut -d' ' -f2-
eDP-1 'Sharp Corporation 0x144A 0x00000000' (focused)
DP-1 'Iiyama North America PL2482HS 1175301402148'
On voit ainsi rapidement quel nom porte chaque écran (eDP-1
mon écran interne
et DP-1
l’externe).
Changer la disposition.
Lors du branchement de mon écran externe, il est positionné à gauche de celui du portable, or c’est l’inverse que je veux, il suffit alors de faire dans un terminal :
swaymsg 'output eDP-1 pos 0 0; output DP-1 pos 1600 0'
Je place ainsi l’écran interne en position 0 0
et l’écran HDMI en position
1600 0
. Comme l’écran interne est de type HiDPI (3200x1800
) et qu’un facteur
d’agrandissement de 2 est paramétré dans mon fichier de configuration, j’ai
utilisé la taille “virtuelle” de l’écran (1600 0
) pour positionner le suivant.
Vous notez qu’il est possible de passer plusieurs commandes à swaymsg
en les
séparant par un point-virgule.
Changer le fond d’écran
Il est aussi possible de changer le fond d’écran, par exemple si je veux changer celui de l’écran HDMI :
swaymsg 'output DP-1 background ~/documents/ressources/wallpapers/morty.jpg fill'
Le chemin vers l’image doit être absolu sinon ça ne fonctionne pas. Le dernier paramètre spécifie le mode d’adaptation de l’image.
Bouger un espace de travail déjà ouvert vers l’écran fraichement connecté.
Je viens donc de brancher un écran à chaud, j’aimerai que certains espaces de travail de Sway déjà utilisés “déménagent” sur ce dernier.
Petite précision, dans mon fichier de configuration de Sway, j’ai personnalisé
le nom de mes espaces de travail via des variables, voici un exemple de
personnalisation (~/.config/sway/config
)
# Workspaces:
# -----------
[...]
set $ws1 1: term
set $ws2 2: mail
set $ws3 3: www
set $ws4 4: irc
# switch to workspace
bindsym $mod+1 workspace $ws1
[...]
Je vais donc pouvoir utiliser ces variables avec swaymsg
. Je veux donc que
l’espace de travail 2: mail
déjà utilisé se retrouve sur mon écran
HDMI, depuis un terminal ouvert sur $ws1
je vais donc lancer la commande :
swaymsg 'workspace $ws2; move to DP-1'
Utiliser swaymsg
avec un lanceur maison
Pour lancer les applications depuis Sway, j’utilise un lanceur maison : un
simple terminal s’ouvre et un script se lance avec fzf
et me permet
de taper le nom de l’application à lancer. Celui-ci me permet aussi de lancer
directement les commandes swaymsg
. Par exeample, pour déplacer mon espace de
travail courant sur l’écran HDMI j’appelle mon lanceur avec ctrl+d
puis
lance :
swaymsg 'move workspace to DP-1'
Je peux aussi lancer n’importe quelle commande listée dans cet article de cette façon, le code du script est disponible dans le dépôt suivant
En conclusion
Sway et Wayland facilitent vraiment la gestion des écrans : finis les
problèmes de reconnaissance du matériel qu’on avait avec Xorg. Il est tout de
même nécessaire d’affiner les réglages, et swaymsg
le permet facilement.
Aidé par un lanceur maison, cette configuration se montre facile et rapide à mettre en œuvre.