web-dev-qa-db-fra.com

Comment changer les Gsettings via un shell distant?

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?

23
Adam Ryczkowski

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.

23
Adam Ryczkowski

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 ...

4
JELaVallee