web-dev-qa-db-ja.com

dconf(または同等のもの)を使用して、別のユーザーの構成を設定します

Ubuntuデスクトップ13.10には、rootとして実行されるセットアップスクリプトがあります。基本的には必要に応じてコンピューターを構成しますが、dconfでいくつか設定する必要があります。スクリプトは、Sudoの通常のユーザーの下のターミナルウィンドウで実行されます。コマンドdconf write /com/canonical/unity/launcher/favorites "['unity://expo-icon', <...>']"を実行する必要があります。 (さまざまな設定で実行されます。)

ログインユーザーとしてコマンドをテストしましたが、問題なく動作します。ただし、rootとしてログインしていると、Sudo -u bitc dconf write <...>を実行できません。 error: Could not connect: Connection refusedunable to create directory '/root/.cache/conf'のようなエラーが発生します。

スクリプトは、実行する他のタスクのためにrootとして実行する必要がありますが、スクリプトを構成するには、ユーザーだけでなく特定のログインセッションでdconfを実行する必要があるようです。 dconf用の個別のスクリプトは必要ありませんが、それは可能です。ログインセッションに接続する方法(またはそのユーザーのdconfキーを設定する他の方法)はありますか?

(スクリプトはnode.jsを使用してjavascriptで記述されています。)

5
Josh The Geek

これを行うだけで十分ですか?

Sudo -u bitc HOME=/home/bitc dconf write <...>
             ^^^^^^^^^^^^^^^

私は似たようなことをしようとしていました。 SSH経由で接続し、rootとして実行するスクリプトがあります。ユーザーの設定を変更してほしい。これは私にとってはうまくいくようです:

Sudo -u vagrant HOME=/home/vagrant dbus-launch --exit-with-session gsettings set org.freedesktop.ibus.general use-system-keyboard-layout true

このセッションの間、新しいdbusデーモンが生成されるため、これは潜在的に悪いと思いますが、dbus-launchがないと、dbusエラーが発生しました。おそらくこれらはgsettingsに固有のものですが、役立つ場合に備えて言及したいと思います。

3
Weeble

Gsettingを設定するPOST-Installスクリプトがあります。 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
0
caracal