it-swarm.com.de

Wie ändere ich Gsettings über die Remote-Shell?

Ich muss die Desktop-Konfiguration über Puppet, ein virtuelles Terminal oder ssh automatisieren.

Leider führt der Aufruf von gsettings über ssh oder ein virtuelles Terminal zu folgenden Ergebnissen:

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

Wenn ich den $DISPLAY mit export DISPLAY=:0.0 einstellte, gab es einen anderen Fehler:

(process:29862): dconf-WARNING **: failed to commit changes to dconf: Could not connect: Connection refused

Was kann ich machen?

23
Adam Ryczkowski

Der Schlüssel ist das Setzen der Umgebungsvariablen DBUS_SESSION_BUS_ADDRESS.

Am dieser Thread habe ich das folgende Skript gefunden, das hilft, den korrekten Wert dieser Variablen zu ermitteln. Es erfordert den Namen des Prozesses, der auf dem Desktop ausgeführt wird, auf dem die dbus-Einstellungen geändert werden sollen. (Es können mehr als 1 Grafiksitzungen gleichzeitig ausgeführt werden.) Nennen wir es 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

Mit diesem Skript können wir Folgendes tun, vorausgesetzt, der unity -Prozess wird auf dem Desktop ausgeführt, auf den wir unsere Einstellungen anwenden möchten:

. ./discover_session_bus_address.sh unity
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize "4"

Und die Dinge sollten gut funktionieren.

23
Adam Ryczkowski

Ich hatte das gleiche Problem, als ich versuchte, während der Bereitstellung gsettings-Änderungen für ein Vagabund-Image über SSH vorzunehmen.

Diese Lösung https://askubuntu.com/a/32677 hat den Trick für mich getan, ohne nach der aktiven Verbindung zu fischen und die Umgebung zu fälschen. YMMV ...

4
JELaVallee