Xfceの設定マネージャーで設定可能な(Xfceデスクトップ環境上の)設定項目は “xfconf” と呼ばれる設定システム上で管理されている。
この仕組みを用いて操作をすることで、頻繁に設定値を変更する設定項目がある場合などに設定マネージャーをいちいち起動せずに簡単に設定値の変更が行え、処理を自動化することも簡単にできる。
設定データの構造と型
設定箇所の識別
個別の “設定箇所” は以下の2つの要素を組み合わせたものとして識別される。
- チャンネル[1] (設定対象のアプリケーションなどを示すもの)
- プロパティ (どの部分や機能に関係したものかを示すもので、 “/” から始まり、同文字で区切られた階層構造を持つ)
データ型
設定の値は色々な形をとり、これに合わせて
- 整数
- 符号あり32bit
- 符号なし32bit
- 符号なし64bit
- 倍精度浮動小数点数
- 真偽値
- 文字列
- 構造体
- 配列[2]
といったデータ型を扱える仕組みになっている。
データの読み書きをする際にはこのデータ型を指定する。
GUI設定ツールによる設定値の参照と変更
設定マネージャーに含まれている設定エディター(xfce4-settings-editor
コマンド)では視覚的にこの設定システム上の設定値を参照・変更することができる。
左側でチャンネルを選択すると右側のプロパティの一覧がそのチャンネルのものに切り替わり、プロパティごとの現在の設定値が一覧できる。値の部分では実際に設定値を変更することができ、変更は即座に反映される。
コマンドによる設定値の参照と変更
xfconf-query
というコマンドがあり、現在の設定値を取得したり、新しい設定値を適用したりできる。
以下に幾つかの出力例を載せているが、設定内容などによって出力内容は異なる。
チャンネルとプロパティの一覧確認
-l
オプションのみを付けて実行すると全てのチャンネル名の一覧が得られる。
(チャンネルの一覧を表示) $ xfconf-query -l チャンネル: thunar-volman xfce4-power-manager ... xfce4-notifyd
この中に表示されている内の1つ(有効なチャンネル名)を-c
オプションで指定して-l
オプションを付けるとプロパティの一覧が得られ、更に-v
オプションを付けることで現在の設定値と同時に表示できる。
(チャンネル xfwm4 内のプロパティ一覧を値と同時に表示) $ xfconf-query -c xfwm4 -lv /general/activate_action bring /general/borderless_maximize false ... /general/zoom_desktop true
個別の設定値の参照
-c
オプションに加え、対象のプロパティ名を-p
オプションで指定して実行すると、その値が得られる。
(xfwm4 の /general/use_compositing の値を取得して表示) $ xfconf-query -c xfwm4 -p /general/use_compositing true (xfwm4 の /general/workspace_names の値を取得して表示) $ xfconf-query -c xfwm4 -p /general/workspace_names 値が 4 項目の配列になっています: ワークスペース 1 ワークスペース 2 ワークスペース 3 ワークスペース 4
設定値の変更
- 値が単一のものは “
-s [新しい値]
” オプションで新しい値を指定 - 真偽値型のプロパティでは “
-s [true もしくは false]
” を指定する代わりに-T
オプションを指定することで現在と逆の値にできる - 配列型のプロパティでは “
-t [型名の文字列]
” を要素の分だけ順に並べた後で “-s [新しい値]
” を要素の分だけ順に並べる
(xsettings の /Xft/Antialias の値を 1 にする) $ xfconf-query -c xsettings -p /Xft/Antialias -s 1 (xfwm4 の /general/use_compositing の値を 真 にする) $ xfconf-query -c xfwm4 -p /general/use_compositing -s true (xfwm4 の /general/use_compositing の値を現在と逆にする) $ xfconf-query -c xfwm4 -p /general/use_compositing -T (xfwm4 の /general/workspace_names の配列値を4つの文字列型で指定) $ xfconf-query -c xfwm4 -p /general/workspace_names -t string -t string -t string -t string -s "さくら" -s "ひまわり" -s "こすもす" -s "うめ"
コマンドは自動化に向いているため、例えばGPU資源を消費するコンポジット機能をゲームの動作時にのみ無効化するなど、設定の切り替えを自動的に行うようにすると便利なことがある。
(WineでRPG_RT.exeを実行するときだけアンチエイリアシングとコンポジットを無効化する例) $ xfconf-query -c xfwm4 -p /general/use_compositing -s false; xfconf-query -c xsettings -p /Xft/Antialias -s 0; wine /path/to/RPG_RT.exe; xfconf-query -c xsettings -p /Xft/Antialias -s 1; xfconf-query -c xfwm4 -p /general/use_compositing -T
設定変更を行うランチャ例
真偽値型になっている設定項目を頻繁に手動で切り替える場合など、Xfceのデスクトップに値切り替え用のコマンドを記述したランチャを用意しておくと便利。
初めて実行するときには確認が出るので許可する必要がある。
用途 | コマンド |
---|---|
コンポジット切り替え | xfconf-query -c xfwm4 -p /general/use_compositing -T |
アンチエイリアシング切り替え | sh -c '[ "$(xfconf-query -c xsettings -p /Xft/Antialias)" = 0 ] && xfconf-query -c xsettings -p /Xft/Antialias -s 1 || xfconf-query -c xsettings -p /Xft/Antialias -s 0' |
ライブラリを用いたCプログラムによる設定値の参照と変更
xfconfの設定システム上の操作に関する機能は “libxfconf” と呼ばれるライブラリが提供しており、前述のツール群からも利用されている。
このライブラリをC言語で直接用いることでも設定システム上の操作が行える。ソースをコンパイルするには同ライブラリの開発パッケージが必要。
- はじめに
xfconf_init()
で初期化操作を行う - チャンネルは
xfconf_channel_get()
で得る - チャンネルに対して
xfconf_channel_get_[型の名前]()
で、関数ごとの型として現在の内容を読み込む - チャンネルに対して
xfconf_channel_set_[型の名前]()
で、関数ごとの型として新しい内容を書き込む - プログラムの最後で
xfconf_shutdown()
を呼んで後始末処理を行う
[任意]ファイル名:
xfconf-toggle-compositing.c
ライセンス:パブリックドメイン/*
* xfconf-toggle-compositing - toggle xfwm4 compositing
* Public Domain
*
* gcc -O2 -Wall -Wextra $(pkg-config --cflags libxfconf-0) xfconf-toggle-compositing.c -o xfconf-toggle-compositing $(pkg-config --libs libxfconf-0)
*/
#include <xfconf/xfconf.h>
#include <stdlib.h>
int
main ()
{
const gchar *prop = "/general/use_compositing";
XfconfChannel *ch;
gboolean val;
GError *err = NULL;
if (! xfconf_init (&err))
{
g_printerr ("Failed to initialize xfconf: %s\n", err->message);
return EXIT_FAILURE;
}
ch = xfconf_channel_get ("xfwm4");
val = xfconf_channel_get_bool (ch, prop, FALSE);
xfconf_channel_set_bool (ch, prop, (val ? FALSE : TRUE));
xfconf_shutdown ();
return EXIT_SUCCESS;
}
[任意]ファイル名:
xfconf-toggle-aa.c
ライセンス:パブリックドメイン/*
* xfconf-toggle-aa - toggle Xft AA
* Public Domain
*
* gcc -O2 -Wall -Wextra $(pkg-config --cflags libxfconf-0) xfconf-toggle-aa.c -o xfconf-toggle-aa $(pkg-config --libs libxfconf-0)
*/
#include <xfconf/xfconf.h>
#include <stdlib.h>
int
main ()
{
const gchar *prop = "/Xft/Antialias";
XfconfChannel *ch;
gint val;
GError *err = NULL;
if (! xfconf_init (&err))
{
g_printerr ("Failed to initialize xfconf: %s\n", err->message);
return EXIT_FAILURE;
}
ch = xfconf_channel_get ("xsettings");
val = xfconf_channel_get_int (ch, prop, 0);
xfconf_channel_set_int (ch, prop, (val ? 0 : 1));
xfconf_shutdown ();
return EXIT_SUCCESS;
}
- libxfconf 4.12.0
- xfconf 4.12.0
- xfdesktop 4.12.0