Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

Is there a way to set a dconf key by command line, without logging into X?
I'd like to use this from Puppet.

If I try (from SSH, as the normal user) a simple

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

I get

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

While if I try

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

I get

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

If I remove $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

I'm testing on Xubuntu 12.04

(My question is similar to this one but in that case the user is logged in)

share|improve this question
    
keep in mind that puppet runs as root –  jrg Oct 4 '12 at 10:12
    
Well I can tell Puppet to force the user but I have to get it working from SSH first, I think –  Joril Oct 4 '12 at 10:13
add comment

4 Answers

up vote 1 down vote accepted

I managed to solve the problem:

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"]
    }
}
share|improve this answer
add comment

Joril, thanks for providing your solution! I would like to add one comment in case people have the problem that I just did: when you use this type definition to set string values, you need to pass in some extra quotes and escape characters. For instance, I wanted to set my color scheme in gedit, so I tried this:

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

but it didn't work. What I needed to do was this:

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

Maybe someone could do that in a simpler way, or build it into the function you provided? Anyway, it works for me now so I'm leaving it alone.

Note that passing in booleans works fine without that extra nonsense, e.g.:

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

works correctly, and I'm assuming that numerical values can probably be set without extra escape characters as well.

share|improve this answer
add comment

I have created a puppet module for that, based on Joril's answer:

https://github.com/sitaktif/puppet-dconf

As user153385 mentions, it needs escaping because of the use of sh. Examples with bool, string and array are given in the README.md of the repository.

share|improve this answer
add comment

I found a temporary solution:

  1. Login into the remote system, then connect via ssh terminal to the remote system and export display via: export DISPLAY=:0.

  2. Now you can use "dconf" as usual via ssh terminal. But the gconftool-2 doesn't work now.

Do you have a better solution working for dconf without exporting display ?

share|improve this answer
1  
Is something wrong with the accepted answer? –  Joril Feb 20 at 15:03
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.