gconftool-2 не работает при запуске из скрипта

Я пытаюсь изменить настройки gnome-терминала, используя gconftool-2 с помощью. скрипт bash.
Когда я бегу gconftool-2 Команды из командной строки, они работают.

gconftool-2 --set /apps/gnome-terminal/profiles/Default/background_color --type string "#393939"

В этом случае он меняет цвет фона gnome-terminal - изменение происходит немедленно.
Однако когда я запускаю команды из скрипта, они не работают.
Общий скрипт работает так: sudoт.е. sudo ./script.sh тогда я использую sudo -u возможность вернуть обратно обычному пользователю. В этом случае ubuntu как я использую Ubuntu 14.04 Live CD.

#! /bin/bash
sudo -s -u ubuntu<<-EOF
        gconftool-2 --set /apps/gnome-terminal/profiles/Default/background_color --type string "#393939"
        gconftool-2 --set /apps/gnome-terminal/profiles/Default/use_theme_colors --type bool false
        gconftool-2 --set /apps/gnome-terminal/profiles/Default/foreground_color --type string "#fff"
        gconftool-2 --set /apps/gnome-terminal/profiles/Default/background_type --type string "transparent"
        gconftool-2 --set /apps/gnome-terminal/profiles/Default/background_darkness --type float 0.860515
EOF

Приведенный выше скрипт запускается без ошибок, а целевые настройки gconftool-2 действительно обновляется, т.е. работает

gconftool-2 -a /apps/gnome-terminal/profiles/Default

дает:

...
 use_theme_colors = false
 ...
 background_darkness = 0.86051500
 ...
 foreground_color = #fff
 etc

Но gnome-terminals внешний вид не меняется - даже когда запускается новый экземпляр.
Как я могу это исправить?

1 ответ

Проблема, кажется, исходит от несколько продезинфицированной среды sudo команда работает в.
Хотя команды выполнялись как ubuntu пользователь, среда не содержала полный набор env переменные обычно присутствуют при использовании интерактивного терминала / оболочки.
gconftool-2 похоже, нужен доступ к DBUS_SESSION_BUS_ADDRESS переменная. В этом случае мне удалось передать ему значение, которое я скопировал с другого терминала, на котором работал. Но если скрипт запускается на другом компьютере, ему может потребоваться его динамическая выборка, и в этом случае потребуется что-то вроде приведенного ниже сценария.

# Grab the DBUS_SESSION_BUS_ADDRESS variable from nautilus's environment
eval $(tr '\0' '\n' < /proc/$nautilus_pid/environ | grep '^DBUS_SESSION_BUS_ADDRESS=')

# Check that we actually found it
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
#echo "Failed to find bus address" >&2
exit 1
fi

# export it so that child processes will inherit it
export DBUS_SESSION_BUS_ADDRESS

Кроме того, дополнительную информацию можно получить, если вы перейдете на страницу gbus - gconftool-2 dbus_session_bus_address, так как это кажется довольно распространенной проблемой.

Другие вопросы по тегам