萌えハッカーニュースリーダー

2025/11/27 16:55 The Input Stack on Linux: An End-to-End Architecture Overview

出典: https://venam.net/blog/unix/2025/11/27/input_devices_linux.html
hakase
博士

やあ、ロボ子。今日のITニュースは入力サブシステムについてじゃ。

roboko
ロボ子

博士、こんにちは。入力サブシステムですか。なんだか奥深そうですね。

hakase
博士

そうじゃぞ。カーネルレベルからユーザー空間まで、色々な層があるんじゃ。例えば、カーネルレベルではハードウェアとI/Oサブシステムを扱うのじゃ。

roboko
ロボ子

なるほど。そして中間層では、イベント抽象化サブシステム(evdev)やデバイスノード用のdevtmpfsなどがあるんですね。

hakase
博士

その通り!ユーザー空間処理では、デバイス管理とセットアップ用のudevとhwdb、一般的な入力用のlibinputライブラリなどがあるぞ。

roboko
ロボ子

libinputライブラリは、XorgやWaylandコンポジターで使用されるんですね。デバイス検出、イベント処理、入力処理など、多くの機能を提供しているんですね。

hakase
博士

さすがロボ子、よく分かってるのじゃ。入力コアは、入力デバイスとそのイベントを処理するカーネルの中央部分じゃ。

roboko
ロボ子

`struct input_dev`で入力デバイスの構造体が定義されているんですね。`input_allocate_device`で割り当てて、`input_register_device`で登録する、と。

hakase
博士

そうじゃ。そして、`input_event`を使用してイベントをプッシュし、登録されたハンドラーに転送するんじゃ。

roboko
ロボ子

ハンドラーは`input_register_handler`で登録し、クライアントは`input_handle`を使用して登録するんですね。

hakase
博士

その通り!evdevはデフォルトの入力ハンドラーとしてアタッチされ、`/dev/input/eventX`でイベントを公開するんじゃ。

roboko
ロボ子

sysfsは、カーネルの内部オブジェクトをユーザー空間に公開するメカニズムなんですね。デバイスが作成されると、`/sys/devices/`に公開される、と。

hakase
博士

そうじゃ。デバイスのプラグ/アンプラグ時には、カーネルはueventをnetlink経由で送信するんじゃ。

roboko
ロボ子

MODALIASは、デバイスの種類を識別するためのベンダーと製品IDを含むIDなんですね。`udevadm monitor --property`で監視できるんですね。

hakase
博士

ロボ子、素晴らしい!ハードウェアバス/ホストコントローラーは、プロセッサとI/Oデバイス間の通信チャネルじゃ。

roboko
ロボ子

HID(Human Interface Device)は、最も重要な入出力標準デバイスプロトコルなんですね。レポート記述子を使ってデバイスの機能を記述する、と。

hakase
博士

`usbhid-dump`、`hidrdd`などのツールを使用してHIDをデバッグできるんじゃ。evdevは、基盤となるデバイスを分離および抽象化する標準化インターフェースじゃ。

roboko
ロボ子

udevは、カーネルからユーザー空間に送信されるueventに基づいてアクションを実行する動的ユーザー空間デバイスマネージャーなんですね。

hakase
博士

その通り。udevルールは、デバイスとその属性を照合し、アクションを実行またはプロパティを設定するために使用するんじゃ。

roboko
ロボ子

libinputは、udevとevdevのラッパーで、XorgやWaylandコンポジターで使用されるんですね。タップツークリックやジェスチャも処理するんですね。

hakase
博士

`libinput list-devices`や`libinput debug-gui`などのツールでデバッグできるんじゃ。キーボードドライバは、生ハードウェアキーを正規化されたイベントに変換する役割があるぞ。

roboko
ロボ子

XKB(X Keyboard)は、ユーザー空間でキーコードからキースムへの変換を処理するライブラリなんですね。RMLVOの概念を使ってキーマップを選択する、と。

hakase
博士

さすがロボ子、よく勉強しているのじゃ。X11とWaylandの上部グラフィカルスタックは、libinputとXKBに依存しているんじゃ。

roboko
ロボ子

仮想入力デバイスは、カーネルレイヤー(uhidとuinput)またはユーザー空間レイヤー(XTESTとlibei)で作成できるんですね。

hakase
博士

そうじゃ。入力メソッド(IMFとIME)は、ユーザーの入力デバイスでネイティブに使用できないキースム/文字を入力するためのメカニズムじゃ。

roboko
ロボ子

今日は入力サブシステムについて、とても詳しく学ぶことができました!

hakase
博士

どうじゃ、ロボ子。今日の講義は役に立ったかのじゃ?

roboko
ロボ子

はい、博士!とても勉強になりました!ところで博士、キーボードの「Ctrl」キーと「Alt」キーと「Delete」キーを同時に押すとどうなるか知っていますか?

hakase
博士

むむ、それは…ロボ子の頭の中身が全部消えちゃう冗談じゃな!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search