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, так как это кажется довольно распространенной проблемой.