Я пытаюсь изменить настройки терминала гнома, с помощью gconftool-2
через. сценарий удара.
Когда я работаю gconftool-2
команды из командной строки, они работают.:
gconftool-2 --set /apps/gnome-terminal/profiles/Default/background_color --type string "#393939"
В этом случае это изменяет цвет фона gnome-terminal
- изменение сразу происходит.
Однако, когда я выполняю команды из сценария, они не работают.
Полный сценарий работает как sudo
, т.е. sudo ./script.sh
затем я использую sudo -u
опция к de-elevate назад обычному пользователю. В этом случае ubuntu
поскольку я использую Ubuntu 14.04 живой 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
появление не изменяется - даже когда новый экземпляр запускается.
Как я могу зафиксировать это?
Проблема, кажется, прибывает из несколько санированной среды 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
кроме того, больше информации может быть получено, если Вы гуглите - gconftool-2 dbus_session_bus_address, поскольку это, кажется, несколько распространенная проблема.