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因为这似乎是一个相当常见的问题。