Cher journal,
Au démarrage de mon éditeur de texte vim, je souhaite qu'il choisisse un thème sombre ou claire selon la préférence actuelle de mon bureau.
Je n'en ai besoin que pendant le lancement, parce que je ne change pas très souvent ce paramètre : la journée je préfère le thème clair et le soir le sombre. Si vraiment, j'ai besoin de changer le style de vim sans le redémarrer, je peux utiliser la commande :
:set background=dark
Jusqu'à récemment, je n'utilisais que le bureau GNOME, j'utilisais donc cette commande pour retrouver l'information :
gsettings get org.gnome.desktop.interface color-scheme
Maintenant que j'utilise aussi Cinnamon avec Linux Mint régulièrement, cette commande ne fonctionne plus : elle fait clairement référence au bureau GNOME puisqu'elle utilise l'outil de configuration gsettings (fourni par GLib) et un namespace lié à GNOME.
Pour aller vite, il est possible d'adapter cette commande pour le bureau Cinnamon. Ce n'est pas idéal, parce que j'ai maintenant deux lignes de configurations différentes de vim juste pour le choix du thème. En plus, si je souhaite tester d'autres bureaux Linux, je devrais ajouter à chaque fois des lignes spécifiques dans ma configuration.
Une solution à ce problème est d'utiliser l'interface D-Bus des portails XDG Desktop. Ces portails permettent aux développeurs logiciels d'utiliser des fonctionnalités communes aux différents bureaux Linux sans avoir besoin de connaître le bureau actuellement utilisé.
Je n'avais jamais utilisé D-Bus avant et j'ai galéré un peu à comprendre comment l'utiliser. Pour m'aider, j'ai retrouvé cette discussion qui propose d'ajouter la préférence de style dans XDG Desktop Portal. Elle m'a permis de savoir que je devais rechercher : un namespace org.freedesktop.appearance
et une clé color-scheme
.
J'ai ensuite trouvé que je pouvais utiliser gdbus et dbus-send pour interroger D-Bus.
Seulement, leur interface n'est pas vraiment faite pour chercher ce qui existe, mais plutôt pour consulter. Pour m'aider à chercher, j'ai utilisé le logiciel d-spy et la demande de fusion qui met à jour le code d'elementary OS pour utiliser la nouvelle interface.
Finalement, la commande que je dois exécuter est celle-ci :
gdbus call --session --dest org.freedesktop.portal.Desktop --object-path /org/freedesktop/portal/desktop --method org.freedesktop.portal.Settings.ReadOne org.freedesktop.appearance color-scheme | grep -Po "(?<=uint32 )\d"
En détail :
gdbus call
: Utilise la commande gdbus avec la méthode call pour demander une valeur--session
: Nous voulons avoir des informations sur la session de l'utilisateur et non pas du système (--system
).--dest org.freedesktop.portal.Desktop --object-path /org/freedesktop/portal/desktop
: Je ne connais pas assez D-Bus pour expliquer le détail, mais j'ai clairement vu avec d-spy que c'était ces valeurs que j'avais besoin pour interroger les XDG Desktop portal--method org.freedesktop.portal.Settings.ReadOne
: Depuis le patch pour elementary OS, j'ai trouvé que j'avais besoin du portail Settings et de sa méthode ReadOne. d-spy m'a permis de savoir que cette méthode attend deux paramètres, un namespace et une cléorg.freedesktop.appearance color-scheme
: Les paramètres de la méthode définie juste avant.| grep -Po "(?<=uint32 )\d"
: J'utilise grep pour nettoyer le résultat de la commande afin de n'avoir plus que le chiffre de 0 à 2 qui correspond à la préférence (sinon la sortie ressemble à(<uint32 1>,)
)
Enfin, après avoir cherché toutes ces informations, je me suis rendu compte que le site XDG Desktop Portal donne un lien directement vers une page qui liste toutes les interfaces disponibles en détail et comment les interroger. J'aurais pu simplement faire une recherche du terme color-scheme et je serais arrivé à la bonne section avec toutes ces informations.
Toute cette recherche m'a amené à ce petit correctif de quelques lignes dans mon fichier vimrc.
# Marche pas chez moi :-(
Posté par Cyrille Pontvieux (site web personnel, Mastodon) . Évalué à 2.
Sous Xfce, avec les paquets
xdg-desktop-portal
,xdg-desktop-portal-gtk
installés, je lance la commande que tu as trouvée :J’ai loupé quoi ?
[^] # Re: Marche pas chez moi :-(
Posté par Adrien Dorsaz (site web personnel, Mastodon) . Évalué à 3. Dernière modification le 11 décembre 2023 à 17:09.
Pour Cinnamon, ils ont créé le projet xdg-desktop-portal-xapp et d'après la description du projet, il fournit aussi cette fonctionnalité pour Xfce4. Il faudrait essayer de l'installer.
J'en déduis donc que le portail sans suffixe et celui de gtk ne fournissent pas la fonctionnalité des Settings :)
Edit: le site web de documentation a été mis à jour et le lien "section" de mon journal pointe juste aur un index. Le nouveau lien est: https://flatpak.github.io/xdg-desktop-portal/docs/doc-org.freedesktop.portal.Settings.html
Si jamais la méthode
ReadOne
est assez récente, il faut peut être utiliserRead
si l'implémentation est un peu vieille.[^] # Re: Marche pas chez moi :-(
Posté par alkino . Évalué à 3.
Le
xdg-desktop-portal
n'implémente rien. Ça donne juste l'architecture dbus pour les backends.Les backends se mettent derrière et implémentent des fonctionnalités.
Il peut y avoir plusieurs backends en même temps pour différentes fonctionnalités.
Il peut même y avoir plusieurs backends avec la même fonctionnalité (je sais plus comment est choisi le bon dans ce cas).
Ici y'a une doc qui donne quel backend supporte le partage de fichier ou les captures d'écrans : https://wiki.archlinux.org/title/XDG_Desktop_Portal#List_of_backends_and_interfaces
[^] # Re: Marche pas chez moi :-(
Posté par Cyrille Pontvieux (site web personnel, Mastodon) . Évalué à 2.
J’ai vu ça après avoir posté mon message. Je l’ai installé, avec le même résultat. J’ai essayé également avec
Read
mais pas mieux. À vrai dire on dirait que je n’ai pas deorg.freesketop.portal.Settings
du tout vu le message d’erreur.[^] # Re: Marche pas chez moi :-(
Posté par cg . Évalué à 4.
Chez moi ça ne fonctionne pas non plus, mais je sais pourquoi : je n'ai pas d'environnement de bureau :).
[^] # Re: Marche pas chez moi :-(
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3.
C’est malin :D Bienvenue au club
Je mets en favori cet équivalent Linux d’un truc que j’avais lu pour Mac …ou Tmux
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.