共通入力メソッド

Cim は Common Input Method(共通入力メソッド) の略です。

Linux および BSD 環境では、入力メソッドの仕組みが現在断片化されています。 アプリケーションやツールキットは XIM、Gtk-IM、Qt-IM、Wayland-IM など異なる標準に依存しており、統合が複雑で一貫性がありません。

Cim は これらの異なる入力メソッドインターフェースを統合するために設計されたソフトウェア です。

Cim は入力メソッドを特定の GUI ツールキットに依存させるのではなく、アプリケーションやフレームワークが統一された方法で入力メソッドを利用できる ツールキット非依存の C API を提供します。

Cim は依存関係の少ない小さな C ライブラリとして実装されているため、次のようなさまざまな環境で利用できます。

  • GUI ツールキット
  • ターミナルアプリケーション
  • コンソールプログラム
  • サンドボックス環境のアプリケーション
  • さまざまなプログラミング言語で書かれたソフトウェア

このため Cim は 多様な環境におけるテキスト入力の共通基盤 として利用できます。

アーキテクチャ

Cim は プラグインアーキテクチャ を採用しています。

アプリケーションは次の公開 Cim API ライブラリにリンクします。

libcim.so

実際の入力メソッドの実装は プラグインモジュール によって提供されます。

/usr/lib/input.d/im-sample.so
/usr/lib/input.d/im-nimf.so
/usr/lib/input.d/im-ibus.so
/usr/lib/input.d/im-uim.so
/usr/lib/input.d/im-fcitx.so

各プラグインは cim.h で定義された Cim 入力コンテキスト API を実装します。

プラグインはさまざまな方法で実装できます。

  • ネイティブエンジンプラグイン 完全な IME エンジンを直接実装する方式

  • フレームワークブリッジプラグイン ibus や fcitx など既存の入力フレームワークと Cim を接続する方式

  • サービスベースプラグイン デーモンや外部サービスと通信する方式

実装方法に関係なく、すべてのプラグインは cim_plugin という小さなディスクリプタを公開し、 その中で入力コンテキストの生成と管理方法を示す CimIcVTable を提供します。

アクティブなプラグインの選択

アクティブなプラグインは次のシンボリックリンクによって選択されます。

~/.config/cim/plugin

このリンクは使用するプラグインモジュールを指します。

例:

mkdir -p ~/.config/cim
ln -sf /usr/lib/input.d/im-sample.so ~/.config/cim/plugin

fcitx に切り替えるには、次のようにします。

ln -sf /usr/lib/input.d/im-fcitx.so ~/.config/cim/plugin

この仕組みは、アプリケーションの起動環境によっては常に存在するとは限らない環境変数への依存を避けられます。 また、GUI 設定ツールも作りやすくなります。

Cim の利用

設定が完了すると、アプリケーションや GUI ツールキットは単に Cim API を呼び出すだけでよくなります。

CimIcHandle(入力コンテキスト)が生成されると、libcim.so は選択されたプラグインをロードし、すべての操作をそのプラグインに委譲します。

1 つのプラグインインスタンスから複数の入力コンテキストを生成でき、最後のコンテキストが破棄されるとプラグインモジュールは自動的にアンロードされます。

この設計により、ランタイムを軽量に保ちながら柔軟なプラグイン実装が可能になります。

既存ツールキットとの統合

ディスプレイサーバーや GUI ツールキットが Cim を直接採用していなくても、ブリッジモジュールを使って統合することができます。

一般的な環境変数:

QT_IM_MODULE="cim"
GTK_IM_MODULE="cim"
XMODIFIERS="@im=cim"

ブリッジモジュールの例:

/usr/local/lib/gtk-4.0/4.0.0/immodules/libim-cim-gtk4.so
/usr/local/lib/gtk-2.0/2.10.0/immodules/im-cim-gtk2.so
/usr/local/lib/gtk-3.0/3.0.0/immodules/im-cim-gtk3.so
/usr/local/lib/qt5/plugins/platforminputcontexts/libqt5im-cim.so
/usr/local/lib/qt6/plugins/platforminputcontexts/libqt6im-cim.so

これらのブリッジにより、既存のアプリケーションを修正することなく Cim を利用できます。

デーモンベースの入力システム

XIMWayland 入力メソッド のような一部の入力システムでは、プロセス間通信が必要です。

そのような環境では、Cim はデーモンを利用できます。

/usr/local/bin/cimd

デーモンプラグインの例:

/usr/local/lib/cimd/plugins/cim-xim.so
/usr/local/lib/cimd/plugins/cim-wayland.so

これらのコンポーネントは、XIM または Wayland の入力イベントを Cim API 呼び出しへ変換します。

入力メソッド開発者にとっての利点

Cim は IME 開発者の統合作業の負担を大きく軽減します。

従来、入力メソッドは次の環境ごとに個別のモジュールを実装する必要がありました。

  • Gtk-IM
  • Qt-IM
  • XIM
  • Wayland-IM

Cim を使えば、Cim 入力コンテキスト API を一度実装するだけで、これらすべての環境をサポートできます。

もう一つの重要な利点は、低摩擦な統合(low-friction integration) です。

libhangul、librime、libanthy、libpinyin のような多くの IME ライブラリは、すでに中核となる入力ロジックを提供しています。 このような場合、既存の機能を CimIcVTable を通じて公開する 小さな適応層 だけで Cim プラグインを実装できることがよくあります。

upstream プロジェクトが Cim サポートを直接取り込まない場合でも、比較的少ないコードで 独立したブリッジプラグイン を外部実装することが可能です。

この柔軟性により、Cim は大きなアーキテクチャ変更を行うことなく既存の入力メソッドエコシステムに統合できます。

まとめ

Cim は次を提供します。

  • ツールキット非依存の入力メソッド API
  • シンプルなプラグインアーキテクチャ
  • 既存 IME 実装に対する低い統合コスト
  • ブリッジモジュールを通じた既存入力フレームワークとの互換性

入力メソッド API を GUI ツールキットやディスプレイサーバーから分離することで、Cim は Linux および BSD 環境において、より一貫性があり移植性の高いテキスト入力環境を実現します。

Cim 技術サポート / 1年

24時間365日メールサポート $ 30

ダウンロード

Cim はソースコード形式で配布されます。

cim-2.0.0-2025.12.07.tar.bz2
cim-1.0.0-2024.01.25.tar.bz2
cim-0.0.1-2023.08.02.tar.bz2
cim-0.0-20230610.tar.bz2