dconfを使ってみる

EPSON DS-50000とかいうのを買ってみたのだけど(大変高価でした、ノリで購入するべきものではない)、Arch Linuxで使うにはimagescanを入れれば解決するとか。SANE/スキャナー別の問題 - ArchWiki で、こいつはutsushiとかいうフロントエンドを使えと要求するのだけど、微妙に使い勝手が悪い。ひとまず、保存先くらいは毎度初期値じゃなくて前回のものを使ってほしいなぁと思う。 utsushiはGPLv3っぽいので好きに改造して良いはずなので、いじってみた。いじったのはottyajp/utsushi – githubに置いたので、設定をいじる話だけこちらに書く。 schema定義をつくってコンパイルする。この後、dconf-editorでいじれるようになる。

$ cat /usr/share/glib-2.0/schemas/apps.utsushi.gschema.xml
<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="utsushi">

  <schema path="/apps/utsushi/" id="apps.utsushi">

    <key type="s" name="previous-path">
      <default>"~/"</default>
      <summary>previous path</summary>
      <description>previous path.
      </description>
    </key>

    <key type="i" name="resolution">
      <default>100</default>
      <summary>scan resolution</summary>
      <description>scan resolution.
      </description>
    </key>

  </schema>
</schemalist>
$ sudo glib-compile-schemas /usr/share/glib-2.0/schemas

C++から設定を読み込んだり書き込んだりする。

#include <gio/gio.h>

// load settings
GSettings *settings = g_settings_new("apps.utsushi");
GVariant *gvar = g_settings_get_value(settings, "previous-path");
gchar *path;
g_variant_get(gvar, "s", &amp;path);

// save settings
GSettings *settings = g_settings_new("apps.utsushi");
string str = "hoge";
GVariant *gvar = g_variant_new_string(str.c_str());
g_settings_set_value(settings, "previous-path", gvar);

本当はこれまで使っていたCanoScan LiDE 210みたいに、simple-scanでほいほい使えるとよかったんだけどなぁ。まぁ、DS-50000のスキャンはマジで早いしきれいだし、ハードウェアに文句は無いけどね。