gconftool-2 não funciona quando executado a partir de um script

0

Estou tentando alterar as configurações do gnome-terminal usando gconftool-2 via. um script bash.
Quando executo os comandos gconftool-2 da linha de comando, eles funcionam.:

gconftool-2 --set /apps/gnome-terminal/profiles/Default/background_color --type string "#393939"

Neste caso, altera a cor de fundo de gnome-terminal - a alteração ocorre imediatamente.
No entanto, quando eu executo os comandos de um script, eles não funcionam. O script geral é executado como sudo , ou seja, sudo ./script.sh , em seguida, uso a opção sudo -u para remover a elevação de volta para o usuário comum. Neste caso, ubuntu como eu estou usando um live CD do Ubuntu 14.04.

#! /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

O script acima é executado sem erros e as configurações de segmentação de gconftool-2 são atualizadas , por exemplo, em execução

gconftool-2 -a /apps/gnome-terminal/profiles/Default

dá:

...
 use_theme_colors = false
 ...
 background_darkness = 0.86051500
 ...
 foreground_color = #fff
 etc

Mas gnome-terminals aparência não muda - mesmo quando uma nova instância é lançada.
Como posso consertar isso?

    
por the_velour_fog 12.01.2016 / 23:53

1 resposta

1

O problema parece vir do ambiente um pouco higienizado no qual o comando sudo é executado.
Embora os comandos estivessem sendo executados como o usuário ubuntu , o ambiente não continha o complemento total de variáveis env normalmente presentes ao usar um terminal / shell interativo.
gconftool-2 parece precisar de acesso ao DBUS_SESSION_BUS_ADDRESS variable. Nesse caso, consegui passar um valor que copiei de outro terminal que estava executando. Mas se o script fosse executado em outra máquina, talvez fosse necessário buscá-lo dinamicamente, caso em que algo como o script abaixo seria necessário.

# Grab the DBUS_SESSION_BUS_ADDRESS variable from nautilus's environment
eval $(tr '
# Grab the DBUS_SESSION_BUS_ADDRESS variable from nautilus's environment
eval $(tr '%pre%' '\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
' '\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

Além disso, mais informações podem ser obtidas se você google - gconftool-2 dbus_session_bus_address , já que isso parece ser um problema comum.

    
por the_velour_fog 13.01.2016 / 00:56