Gsettings'i uzak kabuktan nasıl değiştirebilirim?


23

Masaüstü yapılandırmasını Puppet, sanal terminal veya ssh ile otomatikleştirmem gerekiyor.

Maalesef, gsettingsssh veya sanal terminal aracılığıyla çağrı yapılması şunları sağlar:

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

Ben ayarlandığında $DISPLAYile export DISPLAY=:0.0kendisine başka bir hata veriyor:

(process:29862): dconf-WARNING **: failed to commit changes to dconf: Could not connect: Connection refused

Ne yapabilirim?


On Ubuntu 18.04 Eğer sadece ayarlamak gerekebilir DBUS_SESSION_BUS_ADDRESS, ama aynı zamanda XDG_RUNTIME_DIR.
mejem

Yanıtlar:


23

Anahtar, DBUS_SESSION_BUS_ADDRESSortam değişkenini ayarlamaktır .

Açık bu konuya O değişkenin doğru değeri almak için yardımcı olur aşağıdaki komut dosyasını buldum. Dbus ayarlarını değiştirmek istediğimiz, masaüstünde çalışan işlemin adını gerektirir. (Paralel olarak çalışan 1'den fazla grafik seans olabilir). Hadi arayalımdiscover_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

Bu komut dosyasıyla, unityişlemlerimizin masaüstünde çalıştığını ve ayarları uygulayacağımızı varsayarak aşağıdakileri yapabiliriz :

. ./discover_session_bus_address.sh unity
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize "4"

Ve işler yolunda gitmeli.


Bu hemen benim için çalıştı!
sancho.s Reinstate Monica

4

Hazırlık sırasında SSH aracılığıyla serseri bir görüntü için ayar değişiklikleri yapmaya çalışırken de aynı sorunu yaşıyordum.

Bu çözüm /ubuntu//a/326773 aktif bağlantı için tüm balık avı için ve çevreyi sarsmaya çalışmak benim için püf noktasını yaptı. YMMV ...


-1

Hedefi ayarlayan bir POST-Install betiğim var. Senaryoyu sudo olarak çalıştırdığım için EUID 0, bu yüzden $ RUID (Gerçek Kullanıcı Kimliği) bulmalıyım.

işte benim yaklaşımım:

#!/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

Kullanıcı kimliğiniz, $USERortam değişkeninde ve UID'niz değişkende zaten kayıtlı $UID. Çalıştırırken sudo, bunlar $SUDO_USERve $SUDO_UIDdeğişkenlerindedir. Bu, neden sudoilk başta bunu yönetsin ki? Kullanmak sudo -u $YOUR_USER, hiç kullanmamak gibidir sudo. Son olarak, senin who | awk . . .almaz komut sizin kimliğinizi, bu yazdırır tüm kimlikleri , tüm kullanıcılar şu anda sisteme giriş yapmış.
terdon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.