Como root, posso usar su para fazer alterações no dconf para outro usuário. Como eu realmente os faço aplicar?

5

O cenário abaixo assume que inicializamos o computador e entramos como usuário no menu de login. Isso é no dia 14.04.2.

Se eu abrir um terminal, como o usuário pode bort eu posso listar uma configuração do dconf, por exemplo

$ dconf read /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode
0

Se eu fosse usar o dconf write para alterar o valor para 1, o menu no lado esquerdo da tela estaria oculto

$ dconf write /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode 1
$ dconf read /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode
1

Agora o menu está oculto. Agora vamos assumir que eu uso o dconf write para configurá-lo de volta para 0. O menu aparecerá novamente.

Agora, se eu estava em um terminal como o usuário root e tentei usar o su bort -c para alterar o valor do bort I CAN, ele pode ser alterado. Eu sei disso porque em outro terminal onde eu sou o usuário bort, eu posso usar o dconf ler e ver que o valor foi alterado para 1. Assim, o valor foi alterado, mas o menu no lado esquerdo da tela ainda é visível. Como posso fazer a alteração realmente se aplicar em vez de apenas ser atualizada no banco de dados do dconf? Por fim, quero saber isso para uso com o tipo exec do Puppet, mas ser capaz de fazer isso como root no terminal seria útil para esse objetivo.

Como root em um terminal:

# su bort -c "/bin/sh -c '/usr/bin/dconf write /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode 1'"

Como bort em um terminal depois que o comando anterior foi executado:

$ dconf read /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode
1

No entanto, o menu ainda está lá. Eu sei que esse tipo de pergunta tem algumas respostas neste site, como usar o dbus-launch, mas isso não funcionou para mim. Talvez seja a versão do Ubuntu específica?

    
por Bort 01.08.2015 / 04:25

1 resposta

2

Você não tem o conjunto de variáveis de ambiente DBUS_SESSION_BUS_ADDRESS, portanto as alterações não são compatíveis. Como seu usuário, anote a saída de

echo $DBUS_SESSION_BUS_ADDRESS

e depois no comando root use

export DBUS_SESSION_BUS_ADDRESS=xxxxx && dconf write ...

que deve funcionar.

Depois de lutar contra a tentativa de esconder o socket por algum tempo, uma solução de trabalho para obter automaticamente o endereço é pegá-lo por meio de um ambiente de processo:

# requires a GUI session program that will always run:
p='pgrep -u \'whoami\' gnome-panel'

r='grep -z DBUS_SESSION_BUS_ADDRESS /proc/$p/environ | sed 's/^[^=]*=//''
export DBUS_SESSION_BUS_ADDRESS=$r

É claro que você teria que escolher algo diferente de gnome-panel se você não estiver executando isso.

Funciona também para SSH_AUTH_SOCK. Basta deixar isso aqui para ajudar as pessoas que até agora pesquisaram sem sucesso (como eu;)).

    
por Donjan Rodic 04.07.2016 / 20:08