gconftool-2, не работающий, когда выполнено из сценария

Я пытаюсь изменить настройки терминала гнома, с помощью 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 появление не изменяется - даже когда новый экземпляр запускается.
Как я могу зафиксировать это?

0
задан 13 January 2016 в 01:53

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

кроме того, больше информации может быть получено, если Вы гуглите - gconftool-2 dbus_session_bus_address, поскольку это, кажется, несколько распространенная проблема.

1
ответ дан 29 September 2019 в 14:17

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

Похожие вопросы: