How to change Gsettings via remote shell?
The key is to set the DBUS_SESSION_BUS_ADDRESS
environment variable.
On this thread I found the following script, that helps to get the correct value of that variable. It requires name of the process, that is running on the desktop, on which we want to change the dbus settings. (There can be more than 1 running graphical sessions in parallel). Lets call it 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
With this script we can do the following, assuming that unity
process is running on the desktop, on which we want to apply our settings:
. ./discover_session_bus_address.sh unity
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize "4"
And things should work OK.
Related videos on Youtube
Adam Ryczkowski
Updated on September 18, 2022Comments
-
Adam Ryczkowski over 1 year
I need to automate desktop configuration via Puppet, virtual terminal or ssh.
Unfortunately, invocation of
gsettings
via ssh or virtual terminal gives: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
When I set the
$DISPLAY
withexport DISPLAY=:0.0
it gives another error:(process:29862): dconf-WARNING **: failed to commit changes to dconf: Could not connect: Connection refused
What can I do?
-
JELaVallee about 9 yearsI was having this same issue while trying to make gsettings changes for a vagrant image via SSH during provisioning. This solution askubuntu.com/a/326773 did the trick for me w/o all the fishing for the active connection and trying to spoof the environment. YMMV...
-
mejem over 4 yearsOn Ubuntu 18.04 you may need to set not only
DBUS_SESSION_BUS_ADDRESS
, but alsoXDG_RUNTIME_DIR
.
-
-
sancho.s ReinstateMonicaCellio over 7 yearsThis worked right away for me!
-
terdon over 6 yearsYour user ID is already stored in the
$USER
environment variable, and your UID in the$UID
variable. When runningsudo
, they are in the$SUDO_USER
and$SUDO_UID
variables. That said, why would you even run this withsudo
in the first place? Usingsudo -u $YOUR_USER
is just like not usingsudo
at all. Finally, yourwho | awk . . .
command doesn't get your ID, it prints all IDs of all users currently logged into the system.