[RESOLU] Dconfiture au registre

Venez nous en parler, c'est ici que l'on vous conseillera !
Avatar de l’utilisateur
le Manchot Masqué
Administrateur du site
Messages : 409
Inscription : lun. 26 mai 2008, 21:05
Distribution : Debian, Ubuntu
Niveau : Moitié plein !
Localisation : Guebwiller

[RESOLU] Dconfiture au registre

Message par le Manchot Masqué » lun. 16 sept. 2019, 02:00

Bon, faisons le bilan après un premier post incendiaire envers les développeurs de dconf - à tort pour une fois... ;)

En mode graphique, on peut modifier la base de registre utilisateur via dconf-editor, sympathique utilitaire graphique, qui permet de modifier des clés/valeurs en un tour de main, tant qu'on reste dans sa session graphique.

En console : on peut utiliser dconf ou gsettings dans un terminal pour lire/écrire les clés/valeurs dans la base de registre. On peut également utiliser systemd pour appeler un script SHELL au démarrage des sessions graphiques, lequel va fixer des réglages communs pour tous les usagers (ce que nous utilisons déjà via notre script maison en réunion informatisée pour info...).

En SSH, si root veut modifier les clés/valeurs pour un utilisateur, il faut faire appel à dbus, sinon ça ne marche pas.

Prenons un simple exemple pour bien illustrer le problème :

Code : Tout sélectionner

su - toto -c "gsettings list-recursively"
Cette commande se termine normalement, et renvoie bien les clés/valeurs de l'usager toto.
Jusque là, tout va bien.

Si maintenant vous voulez changer une clé existante (on ne parle même pas ici d'en créer une nouvelle), vous vous dites qu'il suffit d'un :

Code : Tout sélectionner

su - toto -c "gsettings set org.gnome.Vinagre always-show-tabs true"
Et bien non ! Gsettings va utiliser dconf, qui lui-même appellera dbus-launch, lequel plantera sur des erreurs de type "No protocol specified", puisqu'aucune session graphique n'est ouverte pour l'usager.

On se dit alors que la modification de la base n'est finalement possible qu'en session graphique.
Heureusement, ce n'est pas le cas, et après plusieurs heures passées sur le problème, la solution est :

Code : Tout sélectionner

sudo -H -u toto dbus-run-session gsettings set org.gnome.Vinagre always-show-tabs true
ou :

Code : Tout sélectionner

su - toto -c "dbus-run-session gsettings set org.gnome.Vinagre always-show-tabs true"
ce qui explique aussi pourquoi, dans les exemples trouvés sur le web, qui utilisaient tous dbus-launch, ça ne marchait pas (du moins sous Ubuntu) !

À noter que les changements ne sont pris en compte que lorsque l'usager rouvrira sa session.
La base dconf n'est lue qu'au démarrage de la session, ce qui est plutôt logique dans la pratique.

Avatar de l’utilisateur
le Manchot Masqué
Administrateur du site
Messages : 409
Inscription : lun. 26 mai 2008, 21:05
Distribution : Debian, Ubuntu
Niveau : Moitié plein !
Localisation : Guebwiller

Re: Dconfiture au registre

Message par le Manchot Masqué » lun. 16 sept. 2019, 10:14

Autre solution trouvée sur https://askubuntu.com/questions/72070/h ... all-script en SSH :
(attention à ne pas oublier le .conf, sinon vous écraser la base réelle !)

Code : Tout sélectionner

dconf dump / > ~/.config/dconf/user.conf

Puis on modifie les clés dans user.conf et on réintroduit le tout via :

Code : Tout sélectionner

dconf load / < ~/.config/dconf/user.conf
Cependant cette solution est loin d'être parfaite, puisqu'il manque de nombreuses clés de gsettings côté applications...
Elle est donc déconseillée dans la pratique.
Il faudra donc se poser la question du pourquoi cette différence, alors que les deux outils sont censés utiliser les mêmes clés.

Répondre