/usr/bin/*ctl なプログラムが何をするのかを試してみました(localectl)
この記事は openSUSE Advent Calendar 2022 の6日目です。
systemd が使われるようになると、daemon の制御とかのやり方は大きく変わりました。/etc/init.d にあるスクリプトから、systemd パッケージに含まれるコマンドを使うようになってきました。それらのコマンドは、xxxxxctl という、末尾に ctl が含まれるものが多いように感じました。そこで、/usr/bin/ の中にある、末尾が ctl なプログラムがどんなものかを簡単に調べて見ることにしました。
今回は、localectl を紹介します。
コマンド名: localectl
パッケージ: systemd-249.12-150400.8.13.1.x86_64
動作: ○
詳細:
localectl は、システムのロケールを表示したり、変更を行うコマンドです。そのほかに、キーボードマッピングの変更も行えます。locale コマンドと loadkeys や kbdconfig の後継とも考えることができます。ただし、機能は強化されています。
ロケールの表示については、 locale コマンドと localectl コマンドでは内容が違い、locale コマンドの方が環境変数に設定されている値を表示するのに対し、localectl コマンドでは、最低限の物のみを表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
%locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL= %localectl System Locale: LANG=ja_JP.UTF-8 VC Keymap: jp X11 Layout: jp X11 Model: microsoftpro X11 Options: terminate:ctrl_alt_bksp |
また、localectl list-locales でロケールの一覧を表示することができますが、その結果は locale コマンドの結果とは異なっていました。locale コマンドで表示できる、UTF-8系以外のロケールが、localectl では表示されません。
1 2 3 4 5 6 7 8 |
% locale -a | grep ja ja_JP.eucjp ja_JP.shiftjisx0213 ja_JP.sjis ja_JP.utf8 %localectl list-locales | grep ja ja_JP.UTF-8 |
但し、localectl でロケールの一覧に表示されていない、たとえば ja_JP.sjis を指定しても、変更することはできました。ちなみに、ロケールの変更は、localectl のサブコマンド set-locale で指定します。
キーボードマップの変更はサブコマンド set-keymap で指定します。これも、loadkeys で指定できるキーマップと異なります。loadkeys の場合ですと、IA アーキテクチャを使用する場合には /usr/share/kbd/keymaps/i386/ 配下にあるキーマップを使いますが、そこにあるマップ一覧と同じものになっています。ただ、標準 jp106 以外の使い道は少ないと思いますが….
1 2 3 4 5 6 7 8 9 10 11 12 13 |
%localectl list-keymaps | grep jp jp jp-OADG109A jp-dvorak jp-kana86 jp106 mac-jp106 %find /usr/share/kbd/keymaps -name "jp*" -print /usr/share/kbd/keymaps/i386/qwerty/jp106.map.gz /usr/share/kbd/keymaps/xkb/jp-dvorak.map.gz /usr/share/kbd/keymaps/xkb/jp-OADG109A.map.gz /usr/share/kbd/keymaps/xkb/jp-kana86.map.gz /usr/share/kbd/keymaps/xkb/jp.map.gz |
localectl でのロケール変更は、システム全体の変更となるので、一時的な変更には使えません。一時的な変更は、環境変数を設定し直すことになります。キーボードの変更についても、loadkeys と同等のことはできますが、locale と言う名前でキーボードの操作、と言うことになるので、ちょっと分かりにくいかもしれません。使い道は限定されそうです。