Après l'installation de Regolith sur une Debian 12, il faut faire les différentes configurations nécessaires à son bon fonctionnement. Et ce n'est pas une mince affaire...

La première chose à noter, c'est que je m'amuse à installer une "distribution" assez particulière et qu'en plus je passe d'X11 avec i3 à Wayland avec Sway. Et ça change plus de choses que ce que j'aurais pu penser au départ. Il y a un article indispensable à lire pour comprendre les changements (Foundations for Regolith on Wayland (GSoC'22)). Évidemment j'ai trouvé cet article après m'être déjà bien cassé la tête...

Quelques changements :

  • La plupart de la documentation de Regolith est axée sur i3... Passer à Sway c'est se retrouver avec peu de documentation...
  • Rofi est remplacé par Ilia
  • Certains programmes ne marchent plus à cause du passage à Wayland (greenclip par exemple)

Avant de m'attaquer à tout ce que ces changements impliquent, j'ai tout d'abord commencé par réinstaller et reconfigurer les essentiels pour pouvoir travailler.

  • Installation de Firefox (et réimport du profil que j'avais sauvegardé)
  • Installation de Thunderbird (et réimport du profil également)
  • Réinstallation de plein d'autres petits programmes utiles et configurations (SSH, Nextcloud, Ferdium, Signal, etc.)
  • Configuration de bash, de mes alias, etc...

Je ne m'attarderai pas sur tout ça, c'est du classique. Passons au cœur de cet article et aux configurations liées à Regolith sur une Debian 12 Bookworm avec Wayland et Sway!

Changer le terminal par défaut :

Par défaut, le raccourci lançait le terminal zutty alors que gnome-terminal est tout bien configuré avec le thème lié à Regolith. Voilà comment on vérifie tout ça et comment on change ensuite le terminal appelé par le raccourcis :

$ cat /usr/share/regolith/common/config.d/15_base_launchers 
###############################################################################
# Launcher dialogs
###############################################################################

## Launch // Terminal // < > Enter ##
set_from_resource $wm.binding.terminal wm.binding.terminal Return
bindsym $mod+$wm.binding.terminal exec --no-startup-id /usr/bin/x-terminal-emulator
(...)

On voit que le raccourci lance x-terminal-emulator. On peut regarder sur quoi il pointe :

$ ls -al /usr/bin/x-terminal-emulator 
lrwxrwxrwx 1 root root 37 25 sep  2023 /usr/bin/x-terminal-emulator -> /etc/alternatives/x-terminal-emulator

$ ls -al /etc/alternatives/x-terminal-emulator
lrwxrwxrwx 1 root root 31 27 sep 11:43 /etc/alternatives/x-terminal-emulator -> /usr/bin/zutty

Il pointe sur zutty, on va changer ça :

$ sudo update-alternatives --config x-terminal-emulator
Il existe 4 choix pour l'alternative x-terminal-emulator (qui fournit /usr/bin/x-terminal-emulator).

  Sélection   Chemin                           Priorité  État
------------------------------------------------------------
* 0            /usr/bin/zutty                    40        mode automatique
  1            /usr/bin/foot                     20        mode manuel
  2            /usr/bin/footclient               10        mode manuel
  3            /usr/bin/gnome-terminal.wrapper   40        mode manuel
  4            /usr/bin/zutty                    40        mode manuel

Appuyez sur <enter> pour conserver le choix actuel [*], ou tapez le numéro de sélection : 3

Changer les raccourcis clavier :

Là, on rentre dans un vrai dossier... Ça devrait être super simple. Sauf que... Ça l'est pas du tout. Il y a des configurations un peu partout et chacun a sa propre solution pour changer les raccourcis par défaut. J'ai trouvé par exemple une explications sur ce fil github.

Il y a plusieurs raccourcis que je dois absolument enlever, changer ou ajouter. Les raccourcis de navigations ne sont pas cohérents sur un clavier azerty belge, où les chiffres ne sont pas en accès direct. Il y a aussi des raccourcis qui ouvrent des parties spécifiques de gnome-settings que je veux retirer (pas d'intérêt et je les déclenche régulièrement par erreur...).

Les raccourcis clavier sont définis dans ce dossier : /usr/share/regolith/ :

$ ls -al /usr/share/regolith/
total 28
drwxr-xr-x   5 root root  4096 26 sep 19:12 .
drwxr-xr-x 237 root root 12288 27 sep 13:10 ..
drwxr-xr-x   3 root root  4096 26 sep 19:08 common
drwxr-xr-x   3 root root  4096 26 sep 19:12 i3
drwxr-xr-x   3 root root  4096 26 sep 19:08 sway

$ ls -al /usr/share/regolith/common/config.d/
total 48
drwxr-xr-x 2 root root 4096 26 sep 19:12 .
drwxr-xr-x 3 root root 4096 26 sep 19:08 ..
-rw-r--r-- 1 root root  592 27 aoû  2023 15_base_launchers
-rw-r--r-- 1 root root 3848 27 aoû  2023 30_navigation
-rw-r--r-- 1 root root  263 27 aoû  2023 40_i3-swap-focus
-rw-r--r-- 1 root root  718 27 aoû  2023 40_next-workspace
-rw-r--r-- 1 root root 7568 27 aoû  2023 40_workspace-config
-rw-r--r-- 1 root root 2141 27 aoû  2023 50_resize-mode
-rw-r--r-- 1 root root  488 27 aoû  2023 82_rofication-ilia
-rw-r--r-- 1 root root  155 27 aoû  2023 84_ftue
-rw-r--r-- 1 root root  183 27 aoû  2023 88_network-manager

$ ls -al /usr/share/regolith/sway/config.d/
total 68
drwxr-xr-x 2 root root 4096 26 sep 19:08 .
drwxr-xr-x 3 root root 4096 26 sep 19:08 ..
-rw-r--r-- 1 root root 1946 27 aoû  2023 20_ilia
-rw-r--r-- 1 root root  110 27 aoû  2023 25_xdg_desktop_portal
-rw-r--r-- 1 root root 1403 27 aoû  2023 35_gaps
-rw-r--r-- 1 root root 1385 27 aoû  2023 40_default-style
-rw-r--r-- 1 root root  303 27 aoû  2023 42_gtklock
-rw-r--r-- 1 root root 2742 27 aoû  2023 55_session_keybindings
-rw-r--r-- 1 root root 1554 27 aoû  2023 60_config_keybindings
-rw-r--r-- 1 root root 1022 27 aoû  2023 65_media_keybindings
-rw-r--r-- 1 root root 2091 27 aoû  2023 70_bar_i3status-rs
-rw-r--r-- 1 root root   56 27 aoû  2023 80_swaybg
-rw-r--r-- 1 root root  575 27 aoû  2023 81_gsd_integrations
-rw-r--r-- 1 root root   29 27 aoû  2023 82_audio_idle_inhibit
-rw-r--r-- 1 root root   90 27 aoû  2023 85_polkit
-rw-r--r-- 1 root root  315 27 aoû  2023 86_unclutter
-rw-r--r-- 1 root root  218 27 aoû  2023 95_dbus-activation

Idéalement, il ne faut pas toucher à ces fichiers (sinon on risque des galères lors des prochaines mises à jour...). Selon kgilmer, il faut ajouter nos nouveaux raccourcis dans le fichier suivant :

$ ls -al ~/.config/regolith3/Xresources 
-rw-r--r-- 1 simon simon 222 27 sep 12:07 /home/simon/.config/regolith3/Xresources

Toute l'astuce, c'est de trouver le raccourci qu'on veut changer dans un des fichiers dans /usr/share/regolith/ et bien comprendre la syntaxe à recopier... Déjà rien que ça... Et même quand on pense avoir trouvé, on se rend compte que ce qu'on a ajouté dans le fichier Xresources rentre en conflit quand on tente de redémarrer Sway... Une solution consiste à supprimer les paquets qui créent ces configurations dans /usr/share/regolith/... C'est tout sauf pratique!

Donc, après réflexion, je vais modifier directement les raccourcis dans /usr/share/regolith/ mais pas à la main (parce que ça va se faire écraser par les prochaines mises à jour...) : avec un gros script à base de sed que je pourrai relancer facilement au besoin.

Avant toute chose, on va créer un dossier de backup de toute cette configuration :

$ mkdir /home/simon/backup
$ sudo cp -r /usr/share/regolith* /home/simon/backup/
$ sudo chown -R simon:simon /home/simon/backup/
$ ls -al /home/simon/backup/
total 28
drwxr-xr-x  7 simon simon 4096 28 sep 13:50 .
drwx------ 22 simon simon 4096 28 sep 13:51 ..
drwxr-xr-x  5 simon simon 4096 28 sep 13:50 regolith
drwxr-xr-x  2 simon simon 4096 28 sep 13:50 regolith-compositor
drwxr-xr-x  4 simon simon 4096 28 sep 13:50 regolith-control-center
drwxr-xr-x  2 simon simon 4096 28 sep 13:50 regolith-ftue
drwxr-xr-x  4 simon simon 4096 28 sep 13:50 regolith-look

Supprimer des raccourcis

Maintenant il faut regarder ce qu'on veut modifier. Commençons par supprimer des raccourcis inutiles. Ça c'est facile, il suffit de commenter quelques lignes. Je vais donc commencer par enlever des raccourcis que je n'utilise pas et que je déclenche parfois par erreur... On va modifier le fichier 60_config_keybindings et commenter les parties qui concerne le bluetooth, le wifi et la configuration des écrans.

$ cat /usr/share/regolith/sway/config.d/60_config_keybindings
###############################################################################
# System Management
###############################################################################

## Modify // Settings // <> c ##
set_from_resource $wm.binding.settings wm.binding.settings c
set_from_resource $wm.program.settings wm.program.settings regolith-control-center
bindsym $mod+$wm.binding.settings exec --no-startup-id $wm.program.settings

## Modify // Display Settings // <> d ##
#set_from_resource $wm.binding.display wm.binding.display d
set_from_resource $wm.program.display wm.program.display regolith-control-center display
bindsym $mod+$wm.binding.display exec --no-startup-id $wm.program.display

## Modify // Wifi Settings // <> w ##
set_from_resource $wm.binding.wifi wm.binding.wifi w
set_from_resource $wm.program.wifi wm.program.wifi regolith-control-center wifi
bindsym $mod+$wm.binding.wifi exec --no-startup-id $wm.program.wifi

## Modify // Bluetooth Settings // <> b ##
set_from_resource $wm.binding.bluetooth wm.binding.bluetooth b
set_from_resource $wm.program.bluetooth wm.program.bluetooth regolith-control-center bluetooth
bindsym $mod+$wm.binding.bluetooth exec --no-startup-id $wm.program.bluetooth

## Launch // File Browser // <><Shift> n ##
set_from_resource $wm.binding.files wm.binding.files Shift+n
set_from_resource $wm.program.files wm.program.files /usr/bin/nautilus --new-window
bindsym $mod+$wm.binding.files exec --no-startup-id $wm.program.files

Comme on va modifier potentiellement beaucoup de raccourcis, on passe par l'utilisation d'un fichier pour sed.

$ cat 60_config_keybindings.sed 
#display
s/^[^#]*display/#&/

#bluetooth
s/^[^#]*bluetooth/#&/

#wifi
s/^[^#]*wifi/#&/

(Explications pour sed sur stackoverflow)

On lance la commande sed avec le fichier comme ceci :

#pour tester:
$ sed -f 60_config_keybindings.sed /usr/share/regolith/sway/config.d/60_config_keybindings 
###############################################################################
# System Management
###############################################################################

## Modify // Settings // <> c ##
set_from_resource $wm.binding.settings wm.binding.settings c
set_from_resource $wm.program.settings wm.program.settings regolith-control-center
bindsym $mod+$wm.binding.settings exec --no-startup-id $wm.program.settings

## Modify // Display Settings // <> d ##
#set_from_resource $wm.binding.display wm.binding.display d
#set_from_resource $wm.program.display wm.program.display regolith-control-center display
#bindsym $mod+$wm.binding.display exec --no-startup-id $wm.program.display

## Modify // Wifi Settings // <> w ##
#set_from_resource $wm.binding.wifi wm.binding.wifi w
#set_from_resource $wm.program.wifi wm.program.wifi regolith-control-center wifi
#bindsym $mod+$wm.binding.wifi exec --no-startup-id $wm.program.wifi

## Modify // Bluetooth Settings // <> b ##
#set_from_resource $wm.binding.bluetooth wm.binding.bluetooth b
#set_from_resource $wm.program.bluetooth wm.program.bluetooth regolith-control-center bluetooth
#bindsym $mod+$wm.binding.bluetooth exec --no-startup-id $wm.program.bluetooth

## Launch // File Browser // <><Shift> n ##
set_from_resource $wm.binding.files wm.binding.files Shift+n
set_from_resource $wm.program.files wm.program.files /usr/bin/nautilus --new-window
bindsym $mod+$wm.binding.files exec --no-startup-id $wm.program.files

for_window [app_id="org.regolith.Settings"] floating enable

Et pour appliquer vraiment la modification :

$ sudo sed -i -f 60_config_keybindings.sed /usr/share/regolith/sway/config.d/60_config_keybindings 

Pour relancer Sway :

$ swaymsg reload

Là, normalement, ces trois raccourcis claviers ne déclenchent plus rien. \o/

Continuons sur notre lancée et passons ensuite à la configuration des raccourcis de navigation.

Modification des raccourcis de navigation

Actuellement, pour me déplacer d'un workspace à l'autre, je dois taper <Super><Maj><&> (pour me rendre sur le workspace "1"). Si je veux aller sur le workspace 11, je dois taper <Super><Maj><Ctrl><&>... Je voudrais simplifier ça en en supprimant la touche <Maj> de l'équation.

Les raccourcis de navigation sont dans le fichier 30_navigation :

$ cat /usr/share/regolith/common/config.d/30_navigation 
(...)
## Navigate // Workspaces 1-10 // <> 0..9 ##
bindsym $mod+$ws1_key workspace number $ws1
bindsym $mod+$ws2_key workspace number $ws2
bindsym $mod+$ws3_key workspace number $ws3
(...)

On va également créer un script pour sed :

$ cat 30_navigation.sed 
s/$mod+$ws1_key/$mod+\&/

Pour tester :

$ sed -f 30_navigation.sed /usr/share/regolith/common/config.d/30_navigation 
(...)
## Navigate // Workspaces 1-10 // <> 0..9 ##
bindsym $mod+& workspace number $ws1
(...)

Simple, non ? Sauf que... J'ai une erreur quand je relance sway.

'Error on line 30 (/usr/share/regolith/common/config.d/30_navigation) 'bindsym $mod+& workspace number $ws1' : Unknown key or button '&'

En cherchant, je suis tombé sur cette issue github qui conseille d'utiliser xev ou wev pour récupérer le code de la touche.

$ xev -event keyboard
KeyPress event, serial 28, synthetic NO, window 0x2000001,
    root 0x49c, subw 0x0, time 58386908, (210,824), root:(3414,924),
    state 0x10, keycode 10 (keysym 0x26, ampersand), same_screen YES,
    XLookupString gives 1 bytes: (26) "&"
    XmbLookupString gives 1 bytes: (26) "&"
    XFilterEvent returns: False

$ wev | grep 'sym'
                      sym: ampersand    (38), utf8: '&'

L'information importante, c'est "ampersand". Reste à faire pareil pour les autres touches.

$ wev | grep 'sym'
                      sym: ampersand    (38), utf8: '&'
                      sym: eacute       (233), utf8: 'é'
                      sym: quotedbl     (34), utf8: '"'
                      sym: apostrophe   (39), utf8: '''
                      sym: parenleft    (40), utf8: '('
                      sym: section      (167), utf8: '§'
                      sym: egrave       (232), utf8: 'è'
                      sym: exclam       (33), utf8: '!'
                      sym: ccedilla     (231), utf8: 'ç'
                      sym: agrave       (224), utf8: 'à'

J'arrive à ce script :

$ cat 30_navigation.sed 
s/$mod+$ws1_key/$mod+ampersand/
s/$mod+$ws2_key/$mod+eacute/
s/$mod+$ws3_key/$mod+quotedbl/
s/$mod+$ws4_key/$mod+apostrophe/
s/$mod+$ws5_key/$mod+parenleft/
s/$mod+$ws6_key/$mod+section/
s/$mod+$ws7_key/$mod+egrave/
s/$mod+$ws8_key/$mod+exclam/
s/$mod+$ws9_key/$mod+ccedilla/
s/$mod+$ws10_key/$mod+agrave/
s/$mod+Ctrl+$ws1_key/$mod+Ctrl+ampersand/
s/$mod+Ctrl+$ws2_key/$mod+Ctrl+eacute/
s/$mod+Ctrl+$ws3_key/$mod+Ctrl+quotedbl/
s/$mod+Ctrl+$ws4_key/$mod+Ctrl+apostrophe/
s/$mod+Ctrl+$ws5_key/$mod+Ctrl+parenleft/
s/$mod+Ctrl+$ws6_key/$mod+Ctrl+section/
s/$mod+Ctrl+$ws7_key/$mod+Ctrl+egrave/
s/$mod+Ctrl+$ws8_key/$mod+Ctrl+exclam/
s/$mod+Ctrl+$ws9_key/$mod+Ctrl+ccedilla/

Pour lancer le script :

$ sudo sed -i -f 30_navigation.sed /usr/share/regolith/common/config.d/30_navigation

On relance sway :

$ swaymsg reload

Et, cette fois, pas d'erreur! Tout fonctionne comme prévu. C'est presque surprenant... ;-)

Modification des raccourcis pour déplacer les fenêtres d'un workspace à l'autre

Les raccourcis pour déplacer une fenêtre d'un workspace à l'autre posent réellement un problème. En effet, pour déplacer une fenêtre dans le workspace 1, on est censé utiliser $mod+Shift+$ws1_key (soit <Super><Maj><&> dans mon cas) mais ça ne marche pas. Pour déplacer une fenêtre sur le workspace 1, je dois utiliser <Super><Alt><Shift><&> (Ce qui devrait déplacer vers le workspace 11 ?!). Bref, il faut modifier ça !

Ces raccourcis sont dans 40_workspace-config :

$ cat /usr/share/regolith/common/config.d/40_workspace-config
(...)
## Modify // Move Window to Workspace 1 - 10 // <><Shift> 0..9 ##
bindsym $mod+Shift+$ws1_key move container to workspace number $ws1
bindsym $mod+Shift+$ws2_key move container to workspace number $ws2
(...)
# move focused container to workspace, move to workspace
## Modify // Carry Window to Workspace 1 - 10// <><Alt> 0..9 ##
bindsym $mod+$alt+$ws1_key move container to workspace number $ws1; workspace number $ws1
bindsym $mod+$alt+$ws2_key move container to workspace number $ws2; workspace number $ws2
(...)

Comme pour les autres, on fait un fichier pour sed :

$ cat 40_workspace-config.sed 
s/$ws1_key/ampersand/
s/$ws2_key/eacute/
s/$ws3_key/quotedbl/
s/$ws4_key/apostrophe/
s/$ws5_key/parenleft/
s/$ws6_key/section/
s/$ws7_key/egrave/
s/$ws8_key/exclam/
s/$ws9_key/ccedilla/
s/$ws10_key/agrave/

Et on lance ça :

$ sudo sed -i -f 40_workspace-config.sed /usr/share/regolith/common/config.d/40_workspace-config

On relance Sway :

$ swaymsg reload

Et ça marche!!!

Modifier les raccourcis de gestion de session

Par défaut, les raccourcis permettant de se déconnecter, de mettre en veille l'ordinateur, d'éteindre ou de rédémarrer l'ordinateur sont assez... Moches et peu fonctionnels au clavier.

Ils sont dans le fichiers suivants :

$ cat /usr/share/regolith/sway/config.d/55_session_keybindings
(...)
## Session // Logout // <><Shift> e ##
set_from_resource $wm.binding.logout wm.binding.logout Shift+e
set_from_resource $wm.program.logout wm.program.logout /usr/bin/gnome-session-quit --logout --no-prompt && swaymsg exit
set_from_resource $sway.prompt.logout sway.prompt.logout "swaynag -t warning -m 'Do you really want to logout?' -b 'Logout' '$wm.program.logout'"
bindsym $mod+$wm.binding.logout exec $sway.prompt.logout 

## Session // Reboot // <><Shift> b ##
set_from_resource $wm.binding.reboot wm.binding.reboot Shift+b
set_from_resource $wm.program.reboot wm.program.reboot /usr/bin/gnome-session-quit --reboot --no-prompt
set_from_resource $sway.prompt.reboot sway.prompt.reboot "swaynag -t warning -m 'Do you really want to reboot your system?' -b 'Reboot' '$wm.program.reboot'"
bindsym $mod+$wm.binding.reboot exec $sway.prompt.reboot 

## Session // Power Down // <><Shift> p ##
set_from_resource $wm.binding.shutdown wm.binding.shutdown Shift+p
set_from_resource $wm.program.shutdown wm.program.shutdown /usr/bin/gnome-session-quit --power-off --no-prompt
set_from_resource $sway.prompt.shutdown sway.prompt.shutdown "swaynag -t warning -m 'Do you really want to shutdown' -b 'Shutdown' '$wm.program.shutdown'"
bindsym $mod+$wm.binding.shutdown exec $sway.prompt.shutdown 

## Session // Sleep // <><Shift> s ##
set_from_resource $wm.binding.sleep wm.binding.sleep Shift+s
set_from_resource $wm.program.sleep wm.program.sleep systemctl suspend
bindsym --locked $mod+$wm.binding.sleep exec $wm.program.sleep

Quand on veut, par exemple, redémarrer et qu'on tape Super+Shift+b, ça affiche un bandeau jaune immonde au dessude l'écran. Et ce bandeau n'est pas contrôlable au clavier donc il faut utiliser la souris pour aller cliquer sur "ok"... Sérieusement ? Tout ça pour ça ?

bandeau

facepalm

En plus, il y a un problème dans cette configuration. Les commandes pour éteindre ou redémarrer utiliser l'argument --no-prompt de gnome-session-quit mais cet argument ne fonctionne qu'avec l'option --logout. Utilisé pour éteindre ou redémarrer, il fait bloquer la commande avec cette erreur :

Failed to call Shutdown: Le délai d'attente est dépassé

$ man gnome-session-quit
(...)
  --no-prompt
    End the session without user interaction. This only works with --logout.
(...)

Comme pour les autres modifications de raccourcis, j'utilise sed :

$ cat 55_session_keybindings.sed 
s/gnome-session-quit --reboot --no-prompt/gnome-session-quit --reboot/

s/gnome-session-quit --power-off --no-prompt/gnome-session-quit --power-off/

#pour tester la commande :
$ sed -f 55_session_keybindings.sed /usr/share/regolith/sway/config.d/55_session_keybindings
(...)
set_from_resource $wm.program.reboot wm.program.reboot /usr/bin/gnome-session-quit --reboot
set_from_resource $wm.program.shutdown wm.program.shutdown /usr/bin/gnome-session-quit --power-off
(...)

#pour écrire vraiment la modification dans le fichier :
$ sudo sed -i -f 55_session_keybindings.sed /usr/share/regolith/sway/config.d/55_session_keybindings

Ok, une fois Sway relancé, on a des commandes fonctionnelles. Mais on a encore le bandeau moche et pas pratique. Alors pour faire mieux que ça, on va faire un autre petit script et utiliser ilia.

$ cat gestion-session.sh 
#!/bin/bash                                                           
set -euo pipefail

#Script pour gérer la session en passant par Ilia

#Si aucun argument :
if [ $# -eq 0 ]; then
  echo -e "Verrouiller\nDéconnexion\nVeille\nRedémarrer\nÉteindre"  
  exit                                                                         
fi

#Si il y a un argument, on regarde s'il correspond à ce qu'on attend :
if [ $1 = 'Verrouiller' ]; then
  #verrouiller
  #echo "choix: Verrouiller la session"
  gtklock --background $(trawlcat regolith.lockscreen.wallpaper.file /dev/null)

elif [ $1 = 'Déconnexion' ]; then
  #logout
  #echo "choix: Déconnexion"
  /usr/bin/gnome-session-quit --logout --no-prompt && swaymsg exit

elif [ $1 = 'Redémarrer' ]; then
  #reboot
  #echo "choix: Redémarrer"
  /usr/bin/gnome-session-quit --reboot

elif [ $1 = 'Éteindre' ]; then
  #shutdown
  #echo "choix: Éteindre"
  /usr/bin/gnome-session-quit --power-off

elif [ $1 = 'Veille' ]; then
  #sleep
  #echo "choix: Veille"
  systemctl suspend

else
  echo "Mauvais argument"
fi

Pour tester le script on peut faire cette combinaison :

$ ./gestion-session.sh | ilia -p textlist -l Session | xargs ./gestion-session.sh 

session

Il n'y a plus qu'à faire un lien dans /usr/local/bin/ pour pouvoir utiliser ce script à partir de n'importe où et à ajouter un raccourcis pour l'utiliser facilement.

$ sudo ln gestion-session.sh /usr/local/bin/gestion-session.sh

J'ai ajouté une ligne dans mon fichier 99_custom (voir détails plus bas) :

$ cat 99_custom
(...)
#Session
bindsym $mod+Delete exec 'gestion-session.sh | ilia -p textlist -l Session | xargs gestion-session.sh'

On relance Sway :

$ swaymsg reload

Et ça marche! :-)

Ajouter des raccourcis

Captures d'écran

Maintenant qu'on a retiré des raccourcis inutiles (dans mon cas) et modifié d'autres, nous pouvons aussi en ajouter.

Je souhaite par exemple ajouter des raccourcis pour faire des captures d'écrans. Je souhaitais au départ ces trois fonctionnalités :

  • Capturer une partie de l'écran (sélection)
  • Capturer une fenêtre
  • Capturer tout le bureau

J'ai testé plusieurs outils, fouillé un peu le net (détails : Les programmes à tester pour Regolith) et j'ai trouvé une solution qui me convient. Je vais utiliser grimshot :

#Capturer la fenêtre active
$ grimshot save active
/home/simon/Images/2024-09-29T14:37:49,992903816+02:00.png

#Capturer une sélection
$ grimshot save area
/home/simon/Images/2024-09-29T14:37:54,912595358+02:00.png

#Capturer tout l'écran (seulement l'écran sur lequel on est)
$ grimshot save output
/home/simon/Images/2024-09-29T14:38:06,800475463+02:00.png

#Capturer une fenêtre (avec choix)
$ grimshot save window
/home/simon/Images/2024-09-29T14:38:16,145512180+02:00.png

#Capturer l'ensemble du bureau (si plusieurs écrans)
$ grimshot save screen
/home/simon/Images/2024-09-29T14:43:33,855852387+02:00.png

À noter qu'il est aussi possible d'utiliser slurp et grim avec différentes combinaisons, par exemple :

#Capturer une sélection :
$ slurp | grim -g -
$ ls -al Images/
(...)
-rw-r--r--  1 simon simon  15907 29 sep 14:31 20240929_14h31m36s_grim.png
(...)

J'ai décidé d'ajouter les raccourcis dans un fichier séparé des autres.

$ cat /usr/share/regolith/sway/config.d/99_custom | grep Print
# Printscreens
bindsym Print exec 'grimshot save area'
bindsym $mod+Print exec 'grimshot save active'
bindsym Shift+Print exec 'grimshot save output'
bindsym $mod+Shift+Print exec 'grimshot save window'
bindsym Ctrl+Print exec 'grimshot save screen'

Et comme ce fichier 99_custom n'existe pas dans la config d'origine, je peux simplement le copier dans le bon dossier :

## Ajout de nouveaux raccourcis : 
# Raccourcis pour les captures d'écran
customFile='/usr/share/regolith/sway/config.d/99_custom'
sudo cp 99_custom $customFile

Gestion du clipboard

Il est indispensable pour moi d'avoir une gestion efficace du clipboard et de pouvoir garder plusieurs bouts de textes copiés pour les recoller plus tard.

J'utilisais avant greenclip mais il ne fonctionne pas sur Wayland.

Avec Wayland, l'enregistrement de l'écran (capture photo ou vidéo) doit être géré par l'environnement, alors qu'il était jusqu'à présent indépendant de l'environnement utilisé. Vos anciens logiciels de capture d'écran pour Xorg risquent de ne plus fonctionner !

Il s'agit là d'une question de sécurité : les applications n'ayant pas la possibilité de "connaître" la position et le contenu des fenêtres de leurs voisines avec Wayland, ces informations doivent être "demandées" à l'environnement (et notamment au compositeur en ce qui concerne les fenêtres). (Source: ubuntu-fr.org)

Après plusieurs essais et la découverte des commandes wl-copy et wl-paste (qui appartiennent à wl-clipboard), j'ai finalement décidé d'utilisé cliphist.

On commence par télécharger la dernière version de cliphist :

$ wget https://github.com/sentriz/cliphist/releases/download/v0.5.0/v0.5.0-linux-amd64 -O cliphist-v0.5.0

(Pensez à vérifier si cliphist n'est pas présent dans les dépôts de votre distribution. Ce nn'est pas -encore?- le cas pour Debian 12 à l'heure où j'écris ces lignes.)

On rend cliphist exécutable et on fait un lien (ou on copie) l'exécutable dans /usr/bin/ :

$ chmod +x cliphist-v0.5.0
$ sudo ln cliphist-v0.5.0 /usr/bin/cliphist

Il faut maintenant l'ajouter dans la configuration de Sway pour qu'il démarre en arrière plan au lancement de la session. J'ajoute donc quelques lignes dans mon fichiers 99_custom :

#Clipboard
exec wl-paste --watch cliphist store
bindsym $mod+v exec 'cliphist list | ilia -p textlist | cliphist decode | wl-copy'
bindsym $mod+Shift+v exec 'cliphist list | ilia -p textlist | cliphist delete' 

On relance Sway :

$ swaymsg reload

Maintenant si on appuie sur Super + v, on a une belle fenêtre ilia qui s'ouvre avec le contenu du clipboard :

cliphist

Si on copie du texte et qu'on réouvre cette fenêtre :

cliphist

Si on veut supprimer une des entrée du clipboard, on peut utiliser le raccourci Super+Maj+v ou on peut utiliser cette commande :

$ cliphist list | ilia -p textlist | cliphist delete

Un script pour faire tout ça d'un coup

Pour les différentes étapes de modification/suppression/ajout de raccourcis, j'ai essayé de faire ça de manière à pouvoir automatiser d'un coup l'ensemble des modifications sur la configuration.

Je me retrouve donc avec ce dossier (que je gère avec git) :

$ ls -l regolith-config/
total 36
-rw-r--r-- 1 simon simon 1705 28 sep 15:23 30_navigation.sed
-rw-r--r-- 1 simon simon 3807 28 sep 15:56 40_workspace-config.sed
-rw-r--r-- 1 simon simon  149  2 oct 13:52 55_session_keybindings.sed
-rw-r--r-- 1 simon simon   87 28 sep 14:48 60_config_keybindings.sed
-rw-r--r-- 1 simon simon  461  2 oct 10:31 99_custom
-rwxr-xr-x 1 simon simon 1083  2 oct 11:22 gestion-session.sh
-rwxr-xr-x 1 simon simon  711  2 oct 13:53 modification-regolith-keybindings.sh
-rw-r--r-- 1 simon simon 3759 28 sep 14:18 README.md
-rw-r--r-- 1 simon simon   54  2 oct 10:56 session.txt
$ cat regolith-config/modification-regolith-keybindings.sh 

#!/bin/bash                                                           
set -euo pipefail

#Script pour modifier les raccourcis clavier de Regolith à grand coups de sed

sudo sed -i -f 60_config_keybindings.sed /usr/share/regolith/sway/config.d/60_config_keybindings

sudo sed -i -f 30_navigation.sed /usr/share/regolith/common/config.d/30_navigation

sudo sed -i -f 40_workspace-config.sed /usr/share/regolith/common/config.d/40_workspace-config

sudo sed -i -f 55_session_keybindings.sed /usr/share/regolith/sway/config.d/55_session_keybindings

## Ajout de nouveaux raccourcis : 
# Raccourcis pour les captures d'écran
customFile='/usr/share/regolith/sway/config.d/99_custom'

sudo cp 99_custom $customFile

Changer d'utilisateur sans quitter la session en cours

Grâce à @charles@akk.de-lacom.be et son message sur mastodon, voici la solution choisie pour changer de session sans devoir tout fermer et se déconnecter : Ctrl + Alt + F1

Je pensais arriver sur un invite de commande mais j'arrive sur le gestionnaire de connexion (dans mon cas gdm3, installé avec gnome pour que les autres utilisateurs de l'ordinateur puisse avoir une session normale ;-) ). C'est juste parfait. Et quand on est sur cette autre session et qu'on tape Ctrl + Alt + F2, on revient sur ma session principale.

Ce qu'il reste à faire

  • Je pensais changer le lockscreen (parce qu'il bloque complètement l'ordinateur pour une autre personne qui voudrait l'utiliser et qui ne connait pas le mot de passe de ma session...) mais l'astuce du Ctrl + Alt + F1 permet de revenir au gestionnaire de connexion donc ça va rester comme ça.
  • Investiguer programmes trouvés pendant mes recherches et qui pourraient améliorer encore mon utilisation de Regolith
  • Vérifier les autres raccourcis clavier pour voir si tout marche comme je veux / ai besoin