SwayWM
Posted on sam. 22 mai 2021 in divers
Sway, c'est quoi?
SwayWM est un gestionnaire de fenêtre (sous Wayland) qui a pour but de remplacer i3 (x11).
La configuration est même compatible de i3 vers sway.
Sway organise les fenêtres par division de l'espace en éléments de plus petites tailles. La première fenêtre ouverte A occupera tout l'espace. Lorsqu'une nouvelle fenêtre B est créée, elle prendra la moitié de l'espace (horizontalement ou verticalement) réduisant donc la taille de A de moitié.
Si une nouvelle fenêtre C est créée, elle divisera encore l'espace d'une des deux autres fenêtres (selon le focus).
Sway permet également d'utiliser des workspaces, l'équivalent des Bureaux sous d'autres environnements (Gnome,KDE, etc), à la différence qu'ici un workspace utilise un écran et ne peut être étendu à d'autres écrans.
Wayland, le nouveau X11
Comme je le disait précédement, Sway utilise Wayland.
Il permet, entre autre, une meilleure sécurité que X11, un code plus moderne, mais moins mature.
Mais tout n'est pas rose, il y a quelques applications qui ne sont pas compatible (ou du moins en partie).
Mais les choses semblent aller de l'avant, exemple : OBS-studio a rendu, depuis peu, son logiciel compatbile Wayland.
Configuration
Tous se fait via le fichier de configuration ~/.config/sway/config. Il est extensible et peut donc être découpé au besoin.
La syntaxe est assez simple pour la plupart des usages et reste lisible.
J'ai personnellement choisi de versionner ce fichier dans mon Gitlab, ce qui me permet d'avoir la même configuration sur tous mes postes.
set $mod Mod4
xwayland enabled
default_border normal
default_floating_border normal
set $opacity 0.9
Ici, je crée une variable $mod avec Mod4 comme valeur.
Mod4 correspont à la touche Windows.
Ensuite, j'active Xwayland qui permet d'ouvrir des applications X11 sous wayland (en réalité, il ouvre un serveur X dans wayland)
Et je termine par la configuration des bordures et de l'opacité des fenêtres.
Ce fichier cherche à ouvrir config.local qui lui est spécifique au poste (Configuration éran, clavier, etc ...)
include ~/.config/sway/config.local
Gestion des écrans
Le double écran se configure aussi explicitement que le reste.
output HDMI1 pos 0 0 res 1920x1080
output eDP1 pos 1920 0 res 1600x900
L'écran HDMI1 est à gauche, avec une résolution de 1920x1080 et le seconde écran (eDP1) est à droit avec une résolution de 1600x900.
Pour déterminer le nom des écran, il suffit d'utiliser la commande suivante.
$ swaymsg -t get_outputs
Workspaces
Les workspaces sont donc l'équivalent des Bureaux sous Gnome/KDE/... on peut en configurer autant que l'on veut en leurs assignant simplement un raccourci clavier (voir plus bas).
Moi, je bascule d'un workspace à l'autre en utilisant la touche windows + le numéro du workspace (pour le workspace 4 : <Windows>+4)
Il y a également la possibilité de placer les workspaces sur un écran plutôt qu'un autre, et d'autres fonctions mais j'y reviendrais plus tard (via un MAJ de l'article).
Shortcuts : simplicité, efficacité
Les raccourcis clavier se configurent avec bindsym.
Ci-dessous, je configure mes raccourcis clavier pour les workspaces.
# switch to workspace
bindsym $mod+KP_1 workspace 1
bindsym $mod+KP_2 workspace 2
bindsym $mod+KP_3 workspace 3
bindsym $mod+KP_4 workspace 4
bindsym $mod+KP_5 workspace 5
bindsym $mod+KP_6 workspace 6
bindsym $mod+KP_7 workspace 7
bindsym $mod+KP_8 workspace 8
bindsym $mod+KP_9 workspace 9
bindsym $mod+KP_0 workspace 10
KP_1 correspond à la touche 1 du pavé numérique.
Mais bindsym peut également lancer des applications.
# start a terminal
bindsym $mod+t exec alacritty
Un autre de mes raccourcis que je trouve bien utile
# Reload the configuration file
bindsym $mod+Shift+c reload
Sway peut utiliser des "modes". Lorsque l'un de ces modes est activé, les raccourci claviers sont uniques à ce mode.
Par exemple, moi j'utilise principalement trois modes:
default : raccourcis claviers par défault
open : il me permet d'ouvrir les applications que j'utilise souvent
mode "open" { bindsym e exec emoji-picker; mode "default" bindsym f exec firefox; mode "default" bindsym m exec thunderbird; mode "default" bindsym t exec alacritty; mode "default" # return to default mode bindsym Return mode "default" bindsym Escape mode "default" } bindsym $mod+o mode "open"
resize : il me permet de redimensionner les fenêtres
mode "resize" { bindsym Left resize shrink width 10 px or 10 ppt bindsym Up resize grow height 10 px or 10 ppt bindsym Down resize shrink height 10 px or 10 ppt bindsym Right resize grow width 10 px or 10 ppt # return to default mode bindsym Return mode "default" bindsym Escape mode "default" } bindsym $mod+r mode "resize"
Autostart : rien de plus facile
Les applications lancées à l'ouverture de la session se font tout simplement dans le même fichier que le reste de la configuration.
exec mako
exec /path/to/some/executable
Mes Dotfiles à moi
Vous pouvez retrouver la totalité de mes Dotfiles Ici.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 | include ~/.config/sway/config.local set $mod Mod4 xwayland enabled default_border normal default_floating_border normal set $opacity 0.9 ################# # # # windows rules # # # ################# for_window [class=".*"] border pixel 4 for_window [title="."] border pixel 4 for_window [class=".*"] opacity $opacity for_window [app_id=".*"] opacity $opacity for_window [floating=".*"] opacity 1 for_window [app_id="firefox" title="^Incrustation vidéo$"] \ floating enable, move position 477 450, sticky enable, opacity 1 for_window [app_id="emoji-picker"] \ floating enable, move position 477 450, sticky enable, opacity 1 for_window [class="Steam" title="^Friends List$"] \ floating enable, move position 1456, 43, sticky enable for_window [class="Steam" title="^Steam - News.*"] \ floating enable, move position 1456, 43, sticky enable ################# # # # Gaps # # # ################# gaps inner 10 gaps outer 4 ################## # # # windows colors # # # ################## client.focused #3a8b23 #3a8b23 #000000 #3a8b23 #3a8b23 client.focused_inactive #94b78a #94b78a #000000 #94b78a #94b78a client.unfocused #505050 #505050 #000000 #ffffff #505050 client.urgent #ffffff #ffffff #000000 #ffffff #ffffff client.placeholder #505050 #505050 #000000 #505050 #505050 ############### # # # Wallpaper # # # ############### set $wallpapers_path $HOME/.config/wallpapers output * bg `find $wallpapers_path -type f | shuf -n 1` fill ############## # # # autostart # # # ############## exec mako exec autotiling exec --no-startup-id xsettingsd & exec /opt/sway-alttab/target/release/sway-alttab exec alacritty ######################### # # # Let's play musique # # # ######################### exec mount.sshfs 0w.tf:/data/Downloads/Musique ~/Musique exec swayidle -w timeout 360 "~/.config/custom_scripts/swayloack.sh" exec mpd && mpc add / && mpc random on ##################### # # # Keyboard config # # # ##################### input "type:keyboard" { xkb_layout fr xkb_variant ,nodeadkeys xkb_numlock enabled } input * xkb_model "logitech_g15" ################ # # # Workspaces # # # ################ # Define names for default workspaces for which we configure key bindings later on. # We use variables to avoid repeating the names in multiple places. set $ws1 "1" set $ws2 "2" set $ws3 "3" set $ws4 "4" set $ws5 "5" set $ws6 "6" set $ws7 "7" set $ws8 "8" set $ws9 "9" set $ws10 "10" ####################### # # # keyboard shortcut # # # ####################### # Open generic soft with a key: mode "open" { bindsym e exec emoji-picker; mode "default" bindsym f exec firefox; mode "default" bindsym m exec thunderbird; mode "default" bindsym n exec alacritty --config-file ~/.config/alacritty/sd-network.yml; mode "default" bindsym t exec alacritty; mode "default" # return to default mode bindsym Return mode "default" bindsym Escape mode "default" } bindsym $mod+o mode "open" # Resizing containers: mode "resize" { bindsym Left resize shrink width 10 px or 10 ppt bindsym Up resize grow height 10 px or 10 ppt bindsym Down resize shrink height 10 px or 10 ppt bindsym Right resize grow width 10 px or 10 ppt # return to default mode bindsym Return mode "default" bindsym Escape mode "default" } bindsym $mod+r mode "resize" bindsym $mod+KP_Subtract resize shrink width 10 px or 10 ppt;resize shrink height 10 px or 10 ppt bindsym $mod+KP_Add resize grow width 10 px or 10 ppt; resize grow height 10 px or 10 ppt # Exec cmd like gnome/mate bindsym Alt+F2 exec sgtk-dmenu -c -t 1 -w 700 # Use Mouse+$mod to drag floating windows to their wanted position floating_modifier $mod # start a terminal bindsym $mod+t exec alacritty # kill focused window bindsym $mod+q kill # screenshot bindsym Print exec slurp | grim -g - $(xdg-user-dir PICTURES)/$(date +'screenshot_%Y-%m-%d-%H%M%S.png') # change focus bindsym $mod+Left focus left bindsym $mod+Down focus down bindsym $mod+Up focus up bindsym $mod+Right focus right # Move windows bindsym $mod+Shift+Left move left bindsym $mod+Shift+Down move down bindsym $mod+Shift+Up move up bindsym $mod+Shift+Right move right # Enter fullscreen mode for the focused container bindsym $mod+f fullscreen toggle # change container layout (stacked, tabbed, toggle split) #bindsym $mod+s layout stacking #bindsym $mod+w layout tabbed #bindsym $mod+e layout toggle split # toggle tiling / floating bindsym $mod+space floating toggle # focus the parent container bindsym $mod+a focus parent # focus the child container #bindsym $mod+d focus child # switch to workspace bindsym $mod+KP_1 workspace 1 bindsym $mod+KP_2 workspace 2 bindsym $mod+KP_3 workspace 3 bindsym $mod+KP_4 workspace 4 bindsym $mod+KP_5 workspace 5 bindsym $mod+KP_6 workspace 6 bindsym $mod+KP_7 workspace 7 bindsym $mod+KP_8 workspace 8 bindsym $mod+KP_9 workspace 9 bindsym $mod+KP_0 workspace 10 # switch to workspace 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 # move focused container to workspace bindsym $mod+Shift+ampersand move container to workspace 1; workspace 1 bindsym $mod+Shift+eacute move container to workspace 2; workspace 2 bindsym $mod+Shift+quotedbl move container to workspace 3; workspace 3 bindsym $mod+Shift+apostrophe move container to workspace 4; workspace 4 bindsym $mod+Shift+parenleft move container to workspace 5; workspace 5 bindsym $mod+Shift+minus move container to workspace 6; workspace 6 bindsym $mod+Shift+egrave move container to workspace 7; workspace 7 bindsym $mod+Shift+underscore move container to workspace 8; workspace 8 bindsym $mod+Shift+ccedilla move container to workspace 9; workspace 9 bindsym $mod+Shift+agrave move container to workspace 10; workspace 10 bindsym $mod+Shift+KP_1 move container to workspace 1 ;workspace 1 bindsym $mod+Shift+KP_2 move container to workspace 2 ;workspace 2 bindsym $mod+Shift+KP_3 move container to workspace 3 ;workspace 3 bindsym $mod+Shift+KP_4 move container to workspace 4 ;workspace 4 bindsym $mod+Shift+KP_5 move container to workspace 5 ;workspace 5 bindsym $mod+Shift+KP_6 move container to workspace 6 ;workspace 6 bindsym $mod+Shift+KP_7 move container to workspace 7 ;workspace 7 bindsym $mod+Shift+KP_8 move container to workspace 8 ;workspace 8 bindsym $mod+Shift+KP_9 move container to workspace 9 ;workspace 9 bindsym $mod+Shift+KP_0 move container to workspace 10;workspace 10 # volume control bindsym XF86AudioRaiseVolume exec "amixer set Master 5%+ unmute" bindsym XF86AudioLowerVolume exec "amixer set Master 5%- unmute" bindsym XF86AudioMute exec "amixer -q sset Master,0 toggle" # Brightness control bindsym XF86MonBrightnessDown exec brightnessctl set 15%- bindsym XF86MonBrightnessUp exec brightnessctl set +15% # Media player controls bindsym --locked XF86AudioPlay exec mpc toggle bindsym --locked XF86AudioPause exec mpc toggle bindsym --locked XF86AudioNext exec mpc next bindsym --locked XF86AudioPrev exec mpc prev bindsym --locked XF86AudioStop exec mpc stop # Reload the configuration file bindsym $mod+Shift+c reload ################ # # # Font style # # # ################ # Font for window titles. Will also be used by the bar unless a different font # is used in the bar {} block below. # This font is widely installed, provides lots of unicode glyphs, right-to-left # text rendering and scalability on retina/hidpi displays (thanks to pango). font pango:Hurmit NF 11 set $gnome-schema org.gnome.desktop.interface exec_always { gsettings set $gnome-schema gtk-theme 'Material-Black-Lime-3.36' gsettings set $gnome-schema icon-theme 'Material-Black-Lime-Numix' gsettings set $gnome-schema font-name 'Hurmit NF 11' } ############ # # # Waybar # # # ############ bar { swaybar_command waybar } include ~/.config/sway/config.local |
Tools
J'utilise plein de petit "sous-programme" pour mon bureau, voici les plus utiles au quotidien.
Waybar : la barre à tout faire
Pour mon bureau, j'utilise Waybar. Il est comme Sway, il se configure très simplement par deux fichiers.
- ~/.config/waybar/config
- ~/.config/waybar/style.css
L'un permet de configurer les différents éléments de la barre et l'autre uniquement le style.
J'écrirai un autre article à ce sujet, il y a pas mal de choses sympa à dire.
L'écran de verrouillage : Swaylock
swaylock permet de verrouiller mon bureau afin que mes collègues ne s'en prennent pas à ma boite mail par exemple (merci les viennoiseries le lendemain ...).
Je vous conseille même l'excellent swaylock-effect qui permet de faire un screenshot, de le flouter et de l'avoir en fond d'écran.
Capture écran
Pour la capture d'écran, j'utilise le combo slurp + grim.
Slurp permet de sélectionner une partie du bureau, et grim l'enregistre.
# screenshot
bindsym Print exec slurp | grim -g - $(xdg-user-dir PICTURES)/$(date +'screenshot_%Y-%m-%d-%H%M%S.png')
Mes capture d'écran se retrouvent automatiquement dans mon dossier Images avec date + heure dans le nom du fichier.
MPD/MPC
MPD (Music Player Daemon) est, comme son nom l'indique un lecteur de musique qui tourne en fond.
Il permet du coup d'être pilotable par de nombreux éléments externes comme MPC (Music Player Client).
Je l'utilise d'ailleurs directement dans ma waybar.
khal/vdirsyncer
Autre outil dans ma barre, le duo vdirsyncer + khal.
- vdirsyncer permet d'interroger un serveur DavCal et d'enregistrer une copie en .ics
- khal permet lui de lire ces fichier ics directement en ligne de commande. C'est lui qui est directement interrogé depuis waybar.