จะเปลี่ยน Gsettings ผ่าน remote shell ได้อย่างไร?


23

ฉันต้องการกำหนดค่าเดสก์ท็อปโดยอัตโนมัติผ่าน Puppet, terminal เสมือนหรือ 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

ฉันควรทำอย่างไร


บนUbuntu 18.04คุณอาจจะต้องตั้งไม่เพียงแต่ยังDBUS_SESSION_BUS_ADDRESS XDG_RUNTIME_DIR
mejem

คำตอบ:


23

กุญแจสำคัญคือการตั้งค่า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"

และสิ่งต่าง ๆ ควรใช้ได้


สิ่งนี้ใช้ได้ทันทีสำหรับฉัน!
sancho.s Reinstate Monica

4

ฉันมีปัญหาเดียวกันนี้ในขณะที่พยายามทำการเปลี่ยนแปลง gsettings สำหรับภาพคนจรจัดผ่าน SSH ระหว่างการจัดเตรียม

วิธีการแก้ปัญหานี้/ubuntu//a/326773ทำเคล็ดลับสำหรับฉันโดยไม่ต้องตกปลาทั้งหมดสำหรับการเชื่อมต่อที่ใช้งานอยู่และพยายามที่จะหลอกลวงสภาพแวดล้อม YMMV ...


-1

ฉันมีสคริปต์ POST-Install ที่ตั้งค่าการกำหนดของฉัน เนื่องจากฉันรันสคริปต์เนื่องจาก sudo EUID คือ 0 ฉันต้องหา $ RUID (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

ID ผู้ใช้ของคุณถูกเก็บไว้ใน$USERตัวแปรสภาพแวดล้อมแล้วและ UID ของคุณใน$UIDตัวแปร เมื่อเรียกใช้sudoพวกเขาอยู่ใน$SUDO_USERและ$SUDO_UIDตัวแปร ที่กล่าวว่าทำไมคุณถึงเรียกใช้สิ่งนี้ด้วยsudoในตอนแรก? การใช้sudo -u $YOUR_USERนั้นไม่เหมือนกับการใช้sudoงานเลย สุดท้ายของwho | awk . . .คำสั่งไม่ได้รับของคุณ ID จะพิมพ์ทุกรหัสของทุกผู้ใช้เข้าสู่ระบบเข้าสู่ระบบ
terdon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.