Не могу изменить 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!");
}
Спасибо Йохану Далину и его ответу.