กุญแจสำคัญคือการตั้งค่าDBUS_SESSION_BUS_ADDRESS
ตัวแปรสภาพแวดล้อม
ในหัวข้อนี้ฉันพบสคริปต์ต่อไปนี้ซึ่งช่วยในการรับค่าที่ถูกต้องของตัวแปรนั้น มันต้องมีชื่อของกระบวนการที่ทำงานบนเดสก์ท็อปที่เราต้องการเปลี่ยนการตั้งค่า dbus (อาจมีเซสชันกราฟิกมากกว่าหนึ่งเซสชันวิ่งพร้อมกัน) ให้เรียกมันว่า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"
และสิ่งต่าง ๆ ควรใช้ได้
DBUS_SESSION_BUS_ADDRESS
XDG_RUNTIME_DIR