web-dev-qa-db-ja.com

rootとして、suを使用して別のユーザーのdconfを変更できます。実際に適用するにはどうすればよいですか?

以下のシナリオは、コンピューターを起動し、ログインメニューでユーザーbortとしてログインしたことを前提としています。これは14.04.2にあります。

ターミナルを開いた場合、ユーザーボルトとしてdconf設定をリストできます。たとえば、

$ dconf read /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode
0

Dconf writeを使用して値を1に変更すると、画面の左側のメニューが非表示になります

$ dconf write /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode 1
$ dconf read /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode
1

これでメニューが非表示になりました。ここで、dconf writeを使用して0に戻すと仮定します。メニューが再び表示されます。

ここで、ユーザーrootとして1つの端末にいて、su bort -cを使用してbortの値を変更しようとした場合、変更できます。私がこれを知っているのは、私がユーザーbortである別の端末で、dconf readを使用して値が1に変更されたことを確認できるためです。 dconfデータベースで更新するだけでなく、実際に変更を適用するにはどうすればよいですか?最終的には、Puppetのexecタイプで使用するためにこれを知りたいのですが、端末からrootとしてこれを行うことができると、その目標に役立つでしょう。

ターミナルのルートとして:

# su bort -c "/bin/sh -c '/usr/bin/dconf write /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode 1'"

前のコマンドが実行された後、ターミナル内でボルトとして:

$ dconf read /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode
1

しかし、メニューはまだそこにあります。この種の質問には、dbus-launchを使用するなど、このサイトでいくつかの答えがあることは知っていますが、これはうまくいきませんでした。多分それはUbuntuのバージョン固有ですか?

5
Bort

DBUS_SESSION_BUS_ADDRESS環境変数が設定されていないため、変更は適用されません。ユーザーとして、の出力を書き留めます

echo $DBUS_SESSION_BUS_ADDRESS

そして、rootコマンドで使用します

export DBUS_SESSION_BUS_ADDRESS=xxxxx && dconf write ...

動作するはずです。

ソケットを少し隠そうとする不自由な試みと戦った後、アドレスを自動的に取得するための有効なソリューションの1つは、プロセス環境を介してアドレスを借用することです。

# requires a GUI session program that will always run:
p=`pgrep -u \`whoami\` gnome-panel`

r=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/$p/environ | sed 's/^[^=]*=//'`
export DBUS_SESSION_BUS_ADDRESS=$r

もちろん、実行していない場合は、gnome-panel以外のものを選択する必要があります。

SSH_AUTH_SOCKでも機能します。これをここに置いておくだけで、これまでにグーグルで失敗した人を助けることができます(私のように;))。

3
Donjan Rodic