Raccourcis clavier pour rofi pour pass sous wayland

Posté par Fabrice le dimanche 09 juillet 2023 Traduction : en

Depuis peu, je suis passé à wayland, via sway.

Un des éléments bloquants à la migration est le fait que certains outils spécifiques, comme barrier, un système de clavier-souris-presse papier partagé entre plusieurs machines, ne proposent pas encore un support pour wayland.

Mais l'autre élément bloquant vient du fait que les outils alternatifs changent beaucoup trop mes habitudes, et frustrent à l'utilisation. Un de ceux-ci étant rofi-pass, qui est une interface entre rofi et pass.

En particulier, il intègre des raccourcis claviers dont j'ai pris l'habitude comme Alt+c pour copier le mot de passe (pendant une durée limitée) dans le presse-papier ou Alt-Entrée pour exécuter le champ autotype d'un fichier de mot de passe.

Comme rofi-pass n'est rien d'autre qu'un script bash qui récupère les infos depuis pass/gopass et le presse-papier de X11 ainsi que xdotools pour effectuer ces actions, il est possible de modifier directement le fichier de configuration pour cela, même si ce n'est pas très élégant.

En regardant du côté des outils conçus directement pour wayland, je suis tombé sur tessen qui supporte de nombreux outils de menus interactifs à la dmenu, dont rofi, mais aussi fuzzel qui est un programme natif wayland. Tessen interprète ensuite la réponse de ces outils pour les intégrer avec wl-copy/wl-paste pour le presse-papier et wtype pour la saisie.

Après avoir essayé fuzzel, je me suis rendu compte que leur algorithme de recherche approximative ne me convenait pas, n'étant pas fzf qui est intégré dans pas mal de mes programmes et dont j'ai pris mes habitudes quant à la recherche (par exemple pour la complétion dans mon shell), ainsi que certains raccourcis assez universels comme Ctrl-u pour effacer la ligne en cours.

J'ai donc décidé d'utiliser rofi qui avait l'air de bien fonctionner bien qu'il ne se lance via xwayland qui n'est pas considéré comme assez pur par certaines personnes. Sauf que les raccourcis claviers spécifiques à rofi-pass ne fonctionnent pas par défaut. Cependant un aperçu de la page de manuel indique que cela est possible:

If the dmenu program of your choice supports custom keybindings with exit codes greater than or equal to 10, tessen can execute custom operations on a selected file in the first menu. At the very least, fuzzel(1), bemenu(1), and rofi(1) support this feature.

Avec en particulier le support de l'otp nativement gérer, chose que j'ai rajouté à la main dans rofi-pass pour avoir “Alt+o” pour taper mes codes OTP pour l'authentification à deux facteurs.

Pour cela, il suffit d'envoyer un code d'erreur supérieur à 10 au programme, ça tombe bien, dans la configuration de rofi, il y a les options kb-custom-<n> qui permettent d’associer la touche ou combinaison de touches à un code d’erreur valant “9+n”, kb-custom-1 correspondant donc à 10 et kb-custom-9 correspondant à 20. Je précise parce qu'au début j'avais associé un raccourcis à kb-custom-10 en me disant que ça serait associé au code de sortie 10, et donc interprété par tessen comme auto type username and password d'après le manuel… or il n'en était rien. Heureusement que je suis tombé sur un message sur reddit expliquant l'utilisation de ces options.

Ce qui a donc donné la création du fichier de configuration $HOME/.config/rofi/tessen.rasi suivant:

configuration {
    /* Tessen */
    kb-custom-1: "Alt+Return"; /* autotype */
    kb-custom-2: "Alt+u";      /* autotype user */
    kb-custom-3: "Alt+p";      /* autotype password */
    kb-custom-5: "Alt+t";      /* copy user */
    kb-custom-6: "Alt+c";      /* copy password */
    kb-custom-8: "Alt+o";      /* autotype otp */
}
@import "config"               /* import default config */

J'ai d'abord essayé de le rajouter dans la configuration par défaut $HOME/.config/rofi/config.rasi, mais cela créait des conflits de raccourcis avec rofimoji qui ne s'est pas gêné pour me le dire.

Maintenant il ne reste plus qu'à l'intégrer à tessen, ce qui est possible à l'aide du fichier de configuration $HOME/.config/tessen/config à l'aide des lignes :

dmenu_backend="rofi"
rofi_config_file="$HOME/.config/rofi/tessen.rasi"

Pour une raison inconnue que je n'ai pas encore creusé, $XDG_CONFIG_HOME comme suggéré dans les commentaires du fichier de configuration de tessen ne fonctionne pas chez moi, mais un jour j'aurais des fichiers de configuration propres… un jour.

tags: pass, rofi, tessen