リモートシェルを介してGset​​tingsを変更するには?


23

Puppet、仮想端末、またはsshを使用してデスクトップ構成を自動化する必要があります。

残念ながら、gsettingssshまたは仮想端末を介した呼び出しは以下を提供します。

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

$DISPLAYwith を設定すると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復元モニカ

4

プロビジョニング中にSSHを介してvagrantイメージのgsettingsを変更しようとしたときに、同じ問題が発生していました。

このソリューション/ubuntu//a/326773は、アクティブな接続のためのすべての釣りと環境のなりすましの試みなしで私のためにトリックをしました。YMMV ...


-1

gsettingを設定するPOSTインストールスクリプトがあります。EUIDが0のsudoとしてスクリプトを実行するため、$ 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を、それが印刷し、すべてのIDが全てのユーザーが現在システムにログインしています。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.