从脚本运行时 gconftool-2 不起作用

从脚本运行时 gconftool-2 不起作用

gconftool-2我正在尝试使用 bash 脚本更改 gnome-terminal 的设置。
当我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使用交互式终端/shell 时通常存在的全部变量。
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因为这似乎是一个相当常见的问题。

相关内容