diff --git a/content/articles/2020/sway-gerer-sortie-ecran/images/positionnement_ecrans.svg b/content/articles/2020/sway-gerer-sortie-ecran/images/positionnement_ecrans.svg new file mode 100644 index 0000000..3a3b603 --- /dev/null +++ b/content/articles/2020/sway-gerer-sortie-ecran/images/positionnement_ecrans.svg @@ -0,0 +1,186 @@ + + + Scema de positionnement des écrans pour la configuration de Sway + + + + + + image/svg+xml + + Scema de positionnement des écrans pour la configuration de Sway + + + Yoric Barbanneau ^ ephase + + + fr + + + Sway + Wayland + positionnement + écran + + + + + + + + + + + + + + + + + + + pos 0 0 + pos 1600 0 + + + + + eDP-1 + DP-1 + + + + + diff --git a/content/articles/2020/sway-gerer-sortie-ecran/images/screen_sway_lanceur.png b/content/articles/2020/sway-gerer-sortie-ecran/images/screen_sway_lanceur.png new file mode 100644 index 0000000..1f95c41 Binary files /dev/null and b/content/articles/2020/sway-gerer-sortie-ecran/images/screen_sway_lanceur.png differ diff --git a/content/articles/2020/sway-gerer-sortie-ecran/index.md b/content/articles/2020/sway-gerer-sortie-ecran/index.md new file mode 100644 index 0000000..6590eda --- /dev/null +++ b/content/articles/2020/sway-gerer-sortie-ecran/index.md @@ -0,0 +1,165 @@ +Title: Gérer ses écrans à chaud avec Sway +Category: linux +Tags: bureau, Sway, pl-fr +Date: 2020-08-01 1:34 +cover: assets/backgrounds/article_gerer-ses-ecrans-a-chaud-avec-sway.jpg + +Depuis quelques temps, j'utilise [Sway][l_sway], gestionnaire de fenêtre du type +*Tiling-Manager*, reprenant le principe du célèbre *[i3][l_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 : + +```shell +swaymsg -t get-outputs +``` +Et sa sortie : + +```shell +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 : + +```shell +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 : + +```shell +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. + +![Schéma de positionnement des +écrans]({attach}./images/positionnement_ecrans.svg) + +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 : + +```shell +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`) + +```shell +# 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 : + +```shell +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`][l_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 : + +```shell +swaymsg 'move workspace to DP-1' +``` + +![Capture d'écran montrant le lanceur avec des commandes swaymsg]({attach}./images/screen_sway_lanceur.png) + +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][l_sway_dotfile] + +## 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**. + +[l_sway]:https://swaywm.org/ +[l_i3]:https://i3wm.org/ +[l_fzf]:https://github.com/junegunn/f +[l_sway_dotfile]:https://git.epha.se/ephase/sway_config/ diff --git a/content/assets/backgrounds/article_gerer-ses-ecrans-a-chaud-avec-sway.jpg b/content/assets/backgrounds/article_gerer-ses-ecrans-a-chaud-avec-sway.jpg new file mode 100644 index 0000000..2f60350 Binary files /dev/null and b/content/assets/backgrounds/article_gerer-ses-ecrans-a-chaud-avec-sway.jpg differ diff --git a/content/pages/cv.md b/content/pages/cv.md index a751b06..429b656 100644 --- a/content/pages/cv.md +++ b/content/pages/cv.md @@ -29,7 +29,7 @@ commande / TUI écrit en Python. ### Projets personnels divers Vous pouvez trouver sur mon [instance git][l_gitea] en ligne un ensemble de -scripts écrits par mes soins. Ils sont tous disponible sous licences libres. +scripts écrits par mes soins. Ils sont tous disponibles sous licences libres. [l_cv]:{static}/files/resume_fr.pdf [l_cv_code]:https://git.epha.se/ephase/resume