Altera as chaves dconf sem fazer login no X no Puppet

2

Existe uma maneira de definir uma chave dconf pela linha de comando, sem efetuar login no X?
Eu gostaria de usar isso do Puppet.

Se eu tentar (do SSH, como usuário normal) um simples

dconf write /desktop/gnome/remote-access/enabled true

Eu obtenho

error: Command line 'dbus-launch --autolaunch=e4d2b270bd8471627460e57c000007f1 --binary-syntax --close-stderr' exited with non-zero exit status 1:
Autolaunch error: X11 initialization failed.\n

Enquanto eu tento

DISPLAY=:0 dconf write /desktop/gnome/remote-access/enabled true

Eu obtenho

error: Command line 'dbus-launch --autolaunch=e4d2b270bd8471627460e57c000007f1 --binary-syntax --close-stderr' exited with non-zero exit status 1:
Invalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 keyAutolaunch error: X11 initialization failed.\n

Se eu remover $ HOME / .Xauthority

error: Command line 'dbus-launch --autolaunch=e4d2b270bd8471627460e57c000007f1 --binary-syntax --close-stderr' exited with non-zero exit status 1:
No protocol specified\nNo protocol specified\nAutolaunch error: X11 initialization failed.\n

Estou testando no Xubuntu 12.04

(Minha pergunta é semelhante a este mas nesse caso o usuário está logado)

    
por Joril 04.10.2012 / 09:58

5 respostas

2

Consegui resolver o problema:

define dconf::key($value) {
    exec { "Setting dconf $title":
        path => "/bin:/usr/bin",
        command => "/bin/sh -c 'eval 'dbus-launch --auto-syntax' && dconf write $title $value'",
        user => "user_name",
        group => "user_name",
        unless => "dconf read $title | grep $value",
        require => Package["dconf-tools"]
    }
}
    
por Joril 05.10.2012 / 07:14
3

Joril, obrigado por fornecer sua solução! Gostaria de adicionar um comentário caso as pessoas tenham o problema que acabei de fazer: quando você usa essa definição de tipo para definir valores de string, é necessário passar algumas aspas extras e caracteres de escape. Por exemplo, eu queria definir meu esquema de cores no gedit, então tentei isso:

dconf::key {'/org/gnome/gedit/preferences/editor/scheme':
    value => 'solarized_dark',
}

mas não funcionou. O que eu precisava fazer era isto:

dconf::key {'/org/gnome/gedit/preferences/editor/scheme':
    value => "\\"solarized_dark\\"",
}

Talvez alguém possa fazer isso de maneira mais simples ou incorporá-lo à função que você forneceu. De qualquer forma, funciona para mim agora, então estou deixando isso em paz.

Observe que passar em booleanos funciona bem sem esse absurdo extra, por exemplo:

dconf::key {'/org/gnome/gedit/preferences/editor/auto-indent': 
    value => 'true',  
}

funciona corretamente, e estou assumindo que valores numéricos provavelmente podem ser definidos sem caracteres de escape extras também.

    
por user153385 30.04.2013 / 20:36
1

Eu criei um módulo de fantoches para isso, com base na resposta de Joril:

link

Como user153385 menciona, ele precisa escapar por causa do uso de sh . Exemplos com bool, string e array são dados em README.md do repositório.

    
por sitaktif 04.08.2013 / 13:00
0

Eu encontrei uma solução temporária:

  1. Faça login no sistema remoto, conecte-se via terminal ssh ao sistema remoto e exporte a exibição via: export DISPLAY=:0 .

  2. Agora você pode usar o "dconf" como de costume via terminal ssh. Mas o gconftool-2 não funciona agora.

Você tem uma solução melhor para o dconf sem exportar a exibição?

    
por speefak 20.02.2014 / 08:30
0

Eu uso o tipo definido semelhante, mas ligeiramente simplificado para resolver esse problema:

define dconf ($key = $title, $value) {
    exec { "dbus-run-session -- dconf write \"${key}\" \"${value}\"":
        onlyif  => "test \"${value}\" != \"'dbus-run-session -- dconf read \"${key}\"'\"",
    }
}

O acima não inclui a capacidade de ser executado por um usuário em particular (embora isso possa ser facilmente adicionado). No entanto, ele usa uma invocação diferente de dbus-run-session que não deixa daemons extras de dbus em execução após o comando ser concluído e elimina a necessidade de uma camada sh -c separada (embora esse benefício também possa ser obtido com dbus-launch <command> ) . Isso elimina as dolorosas camadas múltiplas de escape mencionadas por algumas das outras respostas.

Alguns exemplos que usam o acima:

# swap capslock and escape
dconf { '/org/gnome/desktop/input-sources/xkb-options':
    value   => '[\'caps:swapescape\']',
}

# stop ibus from swallowing ctrl+space
dconf { '/desktop/ibus/general/hotkey/triggers':
    value   => '@as []',
}
    
por Chris Pick 29.04.2015 / 22:29