Я должен автоматизировать настольную конфигурацию через Марионетку, виртуальный терминал или 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
Когда я установил $DISPLAY
с export DISPLAY=:0.0
это дает другую ошибку:
(process:29862): dconf-WARNING **: failed to commit changes to dconf: Could not connect: Connection refused
Что я могу сделать?
Ключ - установить переменную среды 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
С помощью этого скрипта мы можем сделать следующее, предполагая, что процесс unity
запущен на рабочем столе, к которому мы хотим применить наши настройки:
. ./discover_session_bus_address.sh unity
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize "4"
И все должно работать нормально.
У меня была такая же проблема, когда я пытался внести изменения в настройки gsettings для бродячего изображения через SSH во время подготовки.
Это решение https://askubuntu.com/a/326773 помог мне без всякой ловли активного соединения и попыток подделать среду. YMMV ...
У меня есть сценарий POST-Install, который устанавливает мои настройки. Поскольку я запускаю сценарий как sudo, EUID равен 0, поэтому мне нужно найти $ RUID (Real User ID).
вот мой подход:
#!/usr/bin/env bash
# Get the Real Username
RUID=$(who | awk 'FNR == 1 {print $1}')
# Translate Real Username to Real User ID
RUSER_UID=$(id -u ${RUID})
# Set gsettings for the Real User
sudo -u ${RUID} DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/${RUSER_UID}/bus" gsettings set org.gnome.desktop.interface clock-show-date false
exit