Pour résoudre ce problème , je dois définir la variable d'environnement DBUS_SESSION_BUS_ADDRESS
pour tous les shells à l'intérieur de tmux
chaque fois que je redémarre gnome sans redémarrer tmux (c'est souvent le cas). Comment puis-je le résoudre le mieux?
PROMPT_COMMAND
. Cela signifie que je dois appuyer sur Entrée avant de pouvoir exécuter des applications gnome. C'est moche et exagéré. Y a-t-il un autre moyen de remédier à ce problème de manière plus propre?
Dans ce cas particulier, au lieu de laisser Gnome exécuter dbus-launch
pour créer une adresse D-Bus random, lancez dbus-daemon
explicitement au début de votre session X et donnez-lui une adresse fixe comme unix:path=~/.dbus-$HOSTNAME-$DISPLAY
.
Compte tenu de l'information contenue dans le rapport de bogue , vous pouvez même vous débarrasser de unset DBUS_SESSION_BUS_ADDRESS
et laisser les applications searchr l'adresse de bus à partir des propriétés de la window racine.
Dans le cas général, votre évaluation est correcte: tout ce que vous avez est des methods peu fiables comme ptrace
(qui peuvent planter le programme ou ne fonctionnent pas en raison d'un framework de security comme Apparmor ou SELinux) ou en injectant une command shell volets qui sont actuellement à une invite du shell). Exécuter une command à chaque invite du shell (avec le preexec
de zsh ou le PROMPT_COMMAND
de bash) ne risque pas au less de casser des trucs.
Une autre solution serait une bibliothèque LD_PRELOAD
qui intercepte les appels getenv
. Cela semble aussi exagéré.
Votre meilleur pari est de laisser l'application faire le travail en créant un niveau d'indirection: faire en sorte que la valeur de la variable d'environnement rest valide et que l'application l'interprète de manière consciente. Laisser l'application searchr l'adresse du bus D-Bus dans les propriétés de la window racine est un exemple de cette approche.