J'ai besoin d'automatiser la configuration du bureau via Puppet, un terminal virtuel ou ssh.
Malheureusement, l'invocation de gsettings
via ssh ou un terminal virtuel donne:
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize "4"
(process:29520): dconf-WARNING **: failed to commit changes to dconf: Cannot autolaunch D-Bus without X11 $DISPLAY
Lorsque je règle le $DISPLAY
avec export DISPLAY=:0.0
, une autre erreur se produit:
(process:29862): dconf-WARNING **: failed to commit changes to dconf: Could not connect: Connection refused
Que puis-je faire?
La clé consiste à définir la variable d'environnement DBUS_SESSION_BUS_ADDRESS
.
Sur ce fil j'ai trouvé le script suivant, qui aide à obtenir la valeur correcte de cette variable. Cela nécessite le nom du processus, exécuté sur le bureau, sur lequel nous souhaitons modifier les paramètres dbus. (Il peut y avoir plus d’une session graphique en parallèle). Permet de l'appeler discover_session_bus_address.sh
#!/bin/bash
# Remember to run this script using the command "source ./filename.sh"
# Search these processes for the session variable
# (they are run as the current user and have the DBUS session variable set)
compatiblePrograms=( nautilus kdeinit kded4 pulseaudio trackerd )
# Attempt to get a program pid
for index in ${compatiblePrograms[@]}; do
PID=$(pidof -s ${index})
if [[ "${PID}" != "" ]]; then
break
fi
done
if [[ "${PID}" == "" ]]; then
echo "Could not detect active login session"
return 1
fi
QUERY_ENVIRON="$(tr '\0' '\n' < /proc/${PID}/environ | grep "DBUS_SESSION_BUS_ADDRESS" | cut -d "=" -f 2-)"
if [[ "${QUERY_ENVIRON}" != "" ]]; then
export DBUS_SESSION_BUS_ADDRESS="${QUERY_ENVIRON}"
echo "Connected to session:"
echo "DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS}"
else
echo "Could not find dbus session ID in user environment."
return 1
fi
return 0
Avec ce script, nous pouvons procéder comme suit, en supposant que le processus unity
s'exécute sur le bureau, sur lequel nous souhaitons appliquer nos paramètres:
. ./discover_session_bus_address.sh unity
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize "4"
Et les choses devraient fonctionner correctement.
J'avais le même problème lorsque j'essayais d'apporter des modifications de gsettings à une image vagabonde via SSH lors du provisionnement.
Cette solution https://askubuntu.com/a/32677 a fait le bon travail pour moi sans toute la pêche pour la connexion active et en essayant de corrompre l'environnement. YMMV ...