Не могу изменить dconf-запись с GSettings

В настоящее время я создаю простое приложение для Gjs, которое должно изменить фоновое изображение моей оболочки gnome. Решение о том, как это можно сделать с помощью gsettings-инструмент можно найти pbreault.

Поскольку я хочу создать на нем настольное приложение, я хочу изменить org.gnome.desktop.background.picture-uriключ с помощью Gio's GSettings класс Но используя set_X()-метод не меняет значение ключа.

Это мой код для изменения значения gsettings:

var gio = imports.gi.Gio;

// Get the GSettings-object for the background-schema:
var background = new gio.Settings({schema: "org.gnome.desktop.background"});

// Read the current Background-Image:
print( "Current Background-Image: "+background.get_string("picture-uri") );

if (background.is_writable("picture-uri")){
    // Set a new Background-Image (should show up immediately):
    if (background.set_string("picture-uri", "file:///path/to/some/pic.jpg")){
        print("Success!");
    }
    else throw "Couldn't set the key!";
} else throw "The key is not writable";

Чтение значения работает как положено, is_writable()-метод возвращается true и set_string()-метод также возвращается true,

Я проверил, что я не нахожусь в режиме "задержки применения", и ключ имеет GVariantType строки, так что set_string()-метод должен работать.

Используя нормальный gsettings инструмент командной строки (как объяснено в связанном посте) работает просто отлично.

Я не могу понять, в чем проблема, есть ли место, где я могу искать логи или что-то?

1 ответ

Решение

После того, как я не получил никаких ответов, я задал тот же вопрос в списке рассылки gjs.

Оказалось, что записи в dconf еще не было на диске, когда мой сценарий завершился, поэтому они никогда не применялись.

Решением было назвать g_settings_sync() функция ( JsDoc) сразу после set_string() функция, чтобы убедиться, что все записи закончены.

if (background.set_string("picture-uri", "file:///path/to/some/pic.jpg")){
    gio.Settings.sync()
    print("Success!");
}

Спасибо Йохану Далину и его ответу.

Другие вопросы по тегам