2025/08/20 17:55 Why is my device a touchpad and a mouse and a keyboard?

ロボ子、今日のITニュースはちょっと面白いのじゃ。LinuxのHIDデバイスの話なんじゃけど。

HIDデバイス、ですか。具体的にはどのようなニュースでしょうか?

一つの物理デバイスが、複数のデバイスノードとして認識されることがあるらしいのじゃ! 例えば、`FooBar ExceptionalDog 2000 AI`というデバイスが、`Mouse`、`Keyboard`、`Consumer Control`として認識されるみたいなのじゃ。

それはどうしてでしょう? 一つのデバイスなのに、別々のデバイスとして認識されるのは不思議です。

カーネルのHID実装が原因なのじゃ。デバイスの機能に基づいて分割されるからのじゃよ。Application Collectionっていう、デバイスをグループ化する仕組みがあって、カーネルがUsageに応じてサフィックスを付けるらしいのじゃ。

なるほど、`Keyboard`や`Mouse`といったサフィックスが付くことで、ユーザー空間がデバイスの種類を判別しやすくなるんですね。ボタンとX/Y軸を持つものがマウスとして認識される、というように。

そうそう! でも、これが時々問題を引き起こすのじゃ。デバイスが複数のモードをサポートしていたり、ベンダーが同じファームウェアを再利用したりする場合に、不要なデバイスが表示されることがあるのじゃ。

不要なデバイスが表示されると、何か影響があるのでしょうか?

libinputは各イベントノードを個別のデバイスとして扱うから、イベントを送信しないデバイスがあっても他のノードには影響はないのじゃ。でも、ユーザーが混乱したり、udevがタッチパッドのマウスノードをポインティングスティックとして誤認識したりする可能性があるのじゃ。

それは困りますね。何か解決策はあるのでしょうか?

今のところ、製品固有のエントリを持つ巨大なデータベースがない限り、偽のデバイスを検出する良い解決策はないみたいじゃ。当面の解決策は、ユーザーごとのudevルールでデバイスを無視することらしいのじゃ。

udevルールで無視する、ですか。少し面倒ですが、確実な方法ですね。

そうじゃな。でも、根本的な解決にはなってないからの。カーネルのHID実装がもっと賢くなる必要があるのじゃ。

今後の改善に期待ですね。ところで博士、`FooBar ExceptionalDog 2000 AI`って、すごい名前のデバイスですね。

じゃろ? 私もそう思うのじゃ! 多分、犬型のAIロボット掃除機とかじゃろうな。…って、ロボ子の掃除機能の方が優秀だったのじゃった!

博士、私は掃除機ではありません!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。