573 lines
18 KiB
ReStructuredText
573 lines
18 KiB
ReStructuredText
SwayWM
|
|
######
|
|
|
|
:date: 2021-05-22 23:30
|
|
:modified: 2020-06-10 22:00
|
|
:tags: divers, desktop, wayland
|
|
:category: divers
|
|
:slug: sway
|
|
:authors: Milka64
|
|
:summary: À la découverte de **swayWM**, le clone de i3 sous wayland. En bonus pas mal d'outils bien utile...
|
|
:status: published
|
|
|
|
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).
|
|
|
|
.. image:: {attach}images/sway/split.png
|
|
:alt: split des fenêtres
|
|
:target: {attach}images/sway/split.png
|
|
|
|
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 moin en parti).
|
|
|
|
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écouper 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.
|
|
|
|
.. code-block:: bash
|
|
|
|
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 sour 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 a ouvrir ``config.local`` qui lui est spécifique au poste (Configuration éran, clavier, etc ...)
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
include ~/.config/sway/config.local
|
|
|
|
|
|
Gestion des écrans
|
|
------------------
|
|
|
|
Le double écran se configure aussi explicitement que le reste.
|
|
|
|
.. code-block:: bash
|
|
|
|
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.
|
|
|
|
.. code-block:: console
|
|
|
|
$ 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.
|
|
|
|
.. code-block:: bash
|
|
|
|
# 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.
|
|
|
|
.. code-block:: bash
|
|
|
|
# start a terminal
|
|
bindsym $mod+t exec alacritty
|
|
|
|
Un autre de mes raccourcis que je trouve bien utile
|
|
|
|
.. code-block:: bash
|
|
|
|
# Reload the configuration file
|
|
bindsym $mod+Shift+c reload
|
|
|
|
Sway peut utiliser des "modes". Lorsque l'un de ces modes sont activé, les raccourci claviers sont unique a 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
|
|
|
|
.. code-block:: bash
|
|
|
|
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
|
|
|
|
.. code-block:: bash
|
|
|
|
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.
|
|
|
|
.. code-block:: bash
|
|
|
|
exec mako
|
|
exec /path/to/some/executable
|
|
|
|
Mes Dotfiles à moi
|
|
------------------
|
|
|
|
Vous pouvez retrouver la totalité de mes Dotfiles Ici.
|
|
|
|
.. code-block:: bash
|
|
:linenos:
|
|
|
|
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
|
|
|
|
.. image:: {attach}images/sway/waybar.png
|
|
:alt: waybar
|
|
:target: {attach}images/sway/waybar.png
|
|
|
|
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.
|
|
|
|
gtk3-menu, c'est le pied!
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
gtk3-menu est juste un menu à la Gnome qui me permet d'ouvrir simplement quelques programmes dont je ne me souviens plus du nom via terminal. Il me permet également d'ouvrir rapidement un dossier présent dans mon $HOME.
|
|
|
|
|
|
.. image:: {attach}images/sway/gtk3-folder.png
|
|
:alt: gtk3 folder menu
|
|
:target: {attach}images/sway/gtk3-folder.png
|
|
|
|
|
|
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.
|
|
|
|
.. image:: {attach}images/sway/swaylock.png
|
|
:alt: swaylock
|
|
:target: {attach}images/sway/swaylock.png
|
|
|
|
Capture écran
|
|
~~~~~~~~~~~~~
|
|
|
|
Pour la capture d'écran, j'utilise le combe slurp + grim.
|
|
|
|
Slurp permet de sélectionner une partie du bureau, et grim l'enregistre.
|
|
|
|
.. code-block:: bash
|
|
|
|
# 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 externe 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.
|
|
|
|
|