Ada*_*ski 29 remote-access gsettings dconf puppet remote-login
我需要通过 Puppet、虚拟终端或 ssh 自动化桌面配置。
不幸的是,gsettings
通过 ssh 或虚拟终端调用会给出:
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
Run Code Online (Sandbox Code Playgroud)
当我$DISPLAY
用export DISPLAY=:0.0
它设置时会出现另一个错误:
(process:29862): dconf-WARNING **: failed to commit changes to dconf: Could not connect: Connection refused
Run Code Online (Sandbox Code Playgroud)
我能做什么?
Ada*_*ski 26
关键是设置DBUS_SESSION_BUS_ADDRESS
环境变量。
在这个线程上,我找到了以下脚本,它有助于获取该变量的正确值。它需要在桌面上运行的进程的名称,我们要在其上更改 dbus 设置。(可以有 1 个以上并行运行的图形会话)。让我们称之为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
Run Code Online (Sandbox Code Playgroud)
使用此脚本,我们可以执行以下操作,假设该unity
进程正在桌面上运行,我们希望在桌面上应用我们的设置:
. ./discover_session_bus_address.sh unity
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize "4"
Run Code Online (Sandbox Code Playgroud)
一切正常。