以下のシナリオは、コンピューターを起動し、ログインメニューでユーザー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のバージョン固有ですか?
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でも機能します。これをここに置いておくだけで、これまでにグーグルで失敗した人を助けることができます(私のように;))。