【 Topics 】

ブログを引っ越しました。こちらのブログは現状のまま凍結します。(2020年10月14日)

引越し先: Operation Normal ? (v2)(同一サイト内です)

PCLOS: 入力メソッド切り替えツール setime

(2009.12.03 初出)

PCLinuxOS 上で入力メソッドを切り替えるための拙作のツールです。

※ Localization Manager (addlocale) を用いて日本語化を行った環境では入力メソッドが scim-bridge で決め打ちされています。さらに "PCLinuxOS コントロールセンター" 経由で他の入力メソッドに変更した場合には不具合が発生する可能性があります。また "PCLinuxOS コントロールセンター" 経由では fcitx が選択できません。

Vine Linux の setime という入力メソッドを切り替えるシェルスクリプトを参考にして、PCLinuxOS 用のシェルスクリプトを書いてパッケージ化してみました。パッケージ名は setime で、野良リポジトリからインストールできます。

このパッケージをインストールすると、setime 及び gsetime という2つのコマンドが使用できるようになります。setime がコマンドライン版、gsetime がその GUI 版的なものです。gsetime については、メニューの [その他のアプリケーション] → [設定] 下に「入力メソッドの選択」として登録してあります。(KDE4 の場合)

現在のところ指定可能な入力メソッドは、scim, scim-bridge, uim, ibus, fcitx の 5 つです。これ以外の入力メソッドには対応していません。

以下、使い方について簡単に説明します。

【 起動と入力メソッドの選択 】

setime コマンドの起動は、
$ setime
と引数なしで起動する方法と、
$ setime ibus
のように入力メソッド名を直接指定して起動する方法があります。

引数なしで起動した場合には、設定できる入力メソッドの一覧を表示して選択を求めて来ます。

setime - ver.1.0
現在の入力メソッドは ibus です。

   1. ibus:         入力メソッドとして IBus を使用します
   2. scim-bridge:  入力メソッドとして scim-bridge を使用します
   3. scim:         入力メソッドとして scim を使用します
   4. uim:          入力メソッドとして uim を使用します
   5. fcitx:        入力メソッドとして fcitx を使用します
   6. none:         入力メソッドは使用しません

使用する入力メソッドを撰択してください (1-6):

gsetime の場合は、メニューの [その他のアプリケーション]→[設定]→「入力メソッドの選択」から起動できます。(KDE4 の場合)
起動すると下図の様なウィンドウを表示します。
setime-1.0 メニュー画面

【 設定 】

入力メソッドが選択されると設定が自動的に行なわれ、完了すると下記のようなメッセージが表示されます。

ibus を使用するための設定が完了しました。
この変更は現在のユーザーのみに適用されます。

新しい設定を有効にするには再ログイン(または再起動)する必要があります。

なお setime と gsetime では、各入力メソッドが必要とするパッケージについて簡単なチェックを行っています。選択された入力メソッドに必須なパッケージや推奨するパッケージがシステムにインストールされていない場合には、終了時のメッセージにその旨を追加表示します。


【 注意 1 】

setime または gsetime をユーザー権限で実行した場合には、そのユーザー用の設定のみを行います。(設定は $HOME/.bash_profile へ書き込まれます)
この場合その設定が反映されるのはそのユーザーだけで、他のユーザーの入力メソッドの設定には影響を与えません。

setime または gsetime を root 権限で実行した場合には、その設定はシステムワイドなものとなります。(設定は /etc/sysconfig/i18n へ書き込まれます)
ただし、$HOME/.bash_profile に入力メソッドに関する設定が記述されている場合には、その設定が優先されます。

【 注意 2 】

setime または gsetime での設定が行なわれる際、各入力メソッドの Qt 用のパッケージ (ibus-qt, fcitx-qt4 など) がインストールされていない環境では、QT_IM_MODULE=xim と設定されます。

setime または gsetime での設定後に Qt 用のパッケージをインストールしたような場合には、再度 setime または gsetime を実行すれば QT_IM_MODULE の値は各入力メソッドに応じたものに設定し直されます。(例: ibus の場合は QT_IM_MODULE=ibus)


【 起動時の警告表示について 】

setime または gsetime の起動時に、(非常にレアなケースだとは思いますが)下のような警告が表示されることがあるかもしれません。

システムに問題が見付かりました。

setime パッケージのインストール後に、入力メソッドの動作に影響を与える変更が
システムに加えられた可能性があります。

setime によって設定される入力メソッドが正常に動作するようにするために、この
問題を修正するスクリプト(setime-delete-old-settings)を root 権限で実行します。

setime では入力メソッドの設定を正常に反映させるため、Localization Manager (addlocale) によって scim-bridge の設定が書き込まれたシステムファイル (/usr/share/X11/xdm/Xsession など) に修正を加えています。この修正は setime パッケージのインストール時の後処理部分で行っていますが、setime パッケージのインストール後に再度 addlocale を実行したような場合には、修正が元に戻されてしまう可能性があります。

そこで setime または gsetime の起動時にこれらのファイルの内容をチェックし、setime が行った修正が元に戻されている可能性がある場合には上記の警告を出し、再度、修正のためのスクリプト (setime-delete-old-settings) を実行するようにしています。

特に「昨日までは正常に入力メソッドが使えていたのに、今日起動したら使えなくなっていた」とか、「設定していないはずの scim が勝手に起動している」とかの問題が発生した場合にはシステムファイルへの修正が元に戻されている可能性がありますので、念の為に setime または gsetime を起動してみてこの警告が出ないか確認することをお勧めします。




以上、自分が必要なので作ったツールなのですが、他の誰かのお役に立てれば幸いです。
最後になりましたが、Vine Linux の setime 関係の開発者である Jun Nishii 氏に謝意を表します。


===== 主な更新履歴 =====

[2011-03-28] 0.32-1nora11

setime で ibus を選択した場合に、PCLinuxOS コントロールセンター の [システム] → [システムの言語を設定] では、インプットメソッドが「なし」と表示されてしまう問題を修正しました。(これは表示の問題だけで、ibus の設定自体は旧版でも正常に行われていました)

[2011-03-07] 0.30-1nora11

前版の 0.20 での仕様変更を元に戻し、以前の様に /etc/sysconfig/i18n または $HOME/.i18n へ設定を記述する方法を用いることにしました(汗

また、addlocale-3.7-6 以降を用いて日本語化された環境、または、setime-0.20 を用いてインプットメソッドの設定が行われた環境に対しては、setime-0.30 パッケージのインストール時の %post 処理に於いてそれらの設定を削除して、改めて /etc/sysconfig/i18n への設定記述を行っています。

[2011-01-01] 0.20-1nora103

addlocale-3.7-6 以降で実施されるようになったインプットメソッドの設定に合わせる形で、setime での設定方法に下記の様な大幅な変更を行いました。

  1. 従来の /etc/sysconfig/i18n または $HOME/.i18n へ設定を記述する方法を中止
  2. 新たに /usr/share/X11/xdm/Xsession に環境変数の設定を記述
  3. 新たに /etc/xdg/autostart/ 下にインプットメソッド起動用の desktop ファイルを配置

この変更により、更新履歴の『[2010-04-23] 0.8-1nora10』で述べた様な scim-bridge で root 権限とユーザ権限で動作するものが混在して日本語入力が不可能に陥る問題の発生は回避される様になりました。

但し今回の変更により、setime 及び gsetime は常に root 権限で実行することを要求する仕様となり、設定もシステムワイドなものだけとなりました。その結果、ユーザー毎に異なったインプットメソッドを使用する設定を setime を用いて行うことは不可能となりました。

その他、scim と scim-bridge を個別に設定できるようにしました。

[2010-12-04] 0.18-1nora103

scim-bridge での QT_IM_MODULE の設定値を、scim-bridge-qt4 パッケージのインストールの有無にかかわらす強制的に "xim" とする様に変更しました。
前版までの様に scim-bridge-qt4 パッケージがインストールされている環境で /etc/sysconfig/i18n で QT_IM_MODULE=scim-bridge に設定していると、下図の様に root 権限で動作するものとユーザ権限で動作するものが2つ同時に実行されてしまい、日本語変換が一切出来なくなるという問題が発生するケースが有り、これを避ける為に設定変更を行いました。

scim-bridge 二重起動

[2010-11-27] 0.17-1nora103

環境変数に下記の値も出力するようにしました。

  GP_LANGUAGE=C
  GDM_LANG=ja_JP.UTF-8
  LC_ALL=
[2010-11-15] 0.16-1nora103

setime の実行時に、scim-bridge-qt4, ibus-qt4, uim-qt4 がインストールされているかどうかをチェックし、もしインストールされていない場合には、QT_IM_MODULE=xim と設定する様に変更しました。従って、setime の実行後にこれらのパッケージをインストールまたは削除した場合には、setime を再度実行してください。

[2010-11-05] 0.15-1nora103
  • 自作アイコンを追加
[2010-08-04] 0.14-1nora102
  • ibus-1.3.7 の ibus-daemon コマンドに新設された --cache プションに対応して、ibus での XIM_PROGRAM の設定値に "--cache=auto" を追加
[2010-07-02] 0.13-1nora101
  • scim-bridge での QT_IM_MODULE の設定値を "xim" から "scim-bridge" へ再度変更
[2010-05-16] 0.12-1nora101
  • ver.0.8 でコメントアウトにした scim-bridge での QT_IM_MODULE を再度有効にし、設定値を "scim-bridge" から "xim" へ変更
  • scim-bridge での XIM_PROGRAM の設定を "scim -d" から "scim-bridge" へ変更
  • status オプション実行時に、ibus-mozc パッケージについてもチェックする様にした
  • uim のサブパッケージの構成の変更に伴い、パッケージチェックから uim-qt4immodule を外した
  • status オプション実行時及び usage 表示の際、setime のバージョンも表示する様にした
[2010-05-06] 0.10-1nora10

KDE 4.4.1 および 4.4.2 での「Kate/KWrite で日本語入力が出来ないバグ」を回避するために、uim の設定においては一時的に QT_IM_MODULE=xim としていましたが、KDE 4.4.3 でこのバグが修正されましたので、本来の QT_IM_MODULE=uim へと戻しました。

[2010-04-26] 0.9-1nora10

前版の 0.8 で scim-bridge の XIM_PROGRAM の設定をそれまでの "scim -d" から "scim-bridge" へと変更したのですが、その後、私の環境で Firefox や Konsole 等々のアプリが「起動時に固まる」という問題が出る様になりました。

そこで XIM_PROGRAM の設定を "scim -d" に戻してみたところ、この問題は起きなくなりました。他の方の環境でも起きるのかどうかは判りませんが、安全策を取って XIM_PROGRAM の設定を "scim -d" へと戻しました。

もしも 0.8 の setime を用いて scim-bridge の設定をされた方がおられましたら、お手数ですが、今回の 0.9 を使って再度の設定をお願い致します。m(_ _)m

[2010-04-23] 0.8-1nora10

scim-bridge の設定において、QT_IM_MODULE=scim-bridge の行をコメントアウトする様に変更しました。

scim-bridge に関しては、以前から時々日本語入力が出来なくなるトラブルが発生していました。その際には下図の様に、ユーザと root の scim 関係のプロセスが混在しているという状態となっていました。

異常時

この状態を解消し日本語入力が出来る様にする為に、こちらのエントリの (1)〜(4) で書いた様な対策を色々と試行してきたのですが、もう一つ決め手に欠くという状況でした。

今回、ライブCDの部屋さんの 2010 kde 日本語版の /etc/sysconfig/i18n の設定を覗いてみると、QT_IM_MODULE の行がコメントアウトされていました。最初は「?」だったのですが、この行がコメントアウトされていても KDE4/Qt4 アプリで日本語入力が可能ですし、それに何より、上図の様な状態になることが全く無くなりました。(この行をコメントアウトすることで何故に上図の様な状態にならずに済むのか、という理由については全く理解していませんが...(汗))

ということで、冒頭に書いた様に setime-0.8 での scim-bridge の設定では、QT_IM_MODULE の行をコメントアウトすることにしました。

[2010-03-07] 0.4-1nora10

KDE 4.4.x の Kate/KWrite で日本語入力が出来ないバグに応急的に対処する為、uim の設定において、QT_IM_MODULE=uim を QT_IM_MODULE=xim へと変更しました。

PCLinuxOS | comments (2) | -

コメント

| 2011/01/02 03:31 PM
addlocale-3.7-5で日本語化を行った後、ユーザーを削除、ユーザーディレクトリを
削除した後、ユーザーアカウントを再作成したところ、$HOME/.i18nによる
インプットメソッドの切り替えができました。
日本語化作業を行うのは一度きりですので、そのときだけaddlocale-3.7-5に
しておけば、今回のsetimeの変更は必要ないと思われます。
tomcat | 2011/01/02 05:54 PM
> addlocale-3.7-5で日本語化を行った後、ユーザーを削除、ユーザーディレクトリを
> 削除した後、ユーザーアカウントを再作成したところ、$HOME/.i18nによる
> インプットメソッドの切り替えができました。

そもそもaddlocale-3.7-5ではその実行過程に於いてインプットメソッドの設定を一切行っていないのですから、$HOME/.i18nによるインプットメソッドの切り替えが出来るのは当然です。(ユーザやユーザディレクトリの削除は必要ないはず)

また、3.7-6以降を用いて日本語化が行われた環境でも、http://tomcat.nyanta.jp/sb2/sb.cgi?eid=360 でも書いた様に、3.7-6で設定された内容をすべて削除してしまえば、従来の様に /etc/sysconfig/i18n 及び $HOME/.i8n による設定が可能となります。

> 日本語化作業を行うのは一度きりですので、そのときだけaddlocale-3.7-5に
> しておけば、今回のsetimeの変更は必要ないと思われます。

現在配布されているPCLOSのライブCDに収録されているaddlocaleのバージョンは3.7-5ですが、日本語化を実行する以前にパッケージのアップグレードを行った場合には、3.7-5を用いて日本語化を行うことは不可能となります。
実際に3.7-6以降を用いて日本語化が行われる可能性が存在する以上、その環境にも対応しておく必要があると判断しました。

実は今回のsetime-0.20を作成するに当たっては、3.7-6以降で日本語化された環境の場合には強制的に従来の設定方法を取るようにする手法も考えました。
しかし、
(1) scim-bridgeでのroot権限とユーザ権限で動作するプロセスの混在問題を従来の設定方法では完全には解決出来ないこと
(2) 3.7-6であの様な仕様変更が入った以上、PCLOSでは3.7-6での設定方法が今後はデフォルトになる可能性が高いと思われること
の2点から、setime-0.20では3.7-6での新しい設定方法に合わせる様に変更することを決断しました。

コメント フォーム