Linuxではマウスイベントはどのように機能しますか?


25

これは主に好奇心からのものであり、イベント処理が低レベルでどのように機能するかを理解しようとしているので、私のためにそれを行うソフトウェアを参照しないでください。

たとえば、マウスクリックに反応するプログラムをC / C ++で記述したい場合、システムコールを使用して一部の機能をカーネルにフックする必要があるか、マウスのステータスを常にチェックする必要があると思います。知りません。

C / C ++ではほとんどすべてが可能であり、非常に低レベルなので、おそらく自分で実装する必要はないかもしれませんが、私はそれがどのように機能するかに主に興味があるので、それが可能だと思います。

問題は、Linuxでどのように機能するか、特定のシステムコール、Cライブラリなどがあるかどうかです。

回答:


28

Linuxでマウスを使用する実際のプログラムを作成している場合、Xアプリケーションを作成している可能性が高く、その場合はXサーバーにマウスイベントを要求する必要があります。 QtGTK、およびlibsdlは、マウス、キーボード、グラフィックス、タイマー、およびGUIプログラムの作成に必要なその他の機能にアクセスするための機能を提供する一般的なCライブラリです。 Ncursesは、ターミナルアプリケーション用の同様のライブラリです。

しかし、システムを調査している場合、または何らかの理由でXを使用できない場合は、カーネルインターフェイスでの動作を以下に示します。

UNIX哲学の中心的な考え方は、「すべてがファイルである」ということです。より具体的には、ファイルを操作するために使用するものと同じシステムコールを介して、できるだけ多くのものにアクセスできる必要があります。そのため、マウスへのカーネルインターフェイスはデバイスファイルです。あなたopen()は、必要に応じてpoll()またはselect()を呼び出して、着信データがあるかどうかを確認しread()、データを読み取ります。

USB以前の時代では、特定のデバイスファイルは多くの場合、シリアルポート/dev/ttyS0、またはPS / 2ポートなど/dev/psauxでした。マウスに組み込まれたハードウェアプロトコルを使用してマウスと話しました。/dev/input/*サブシステムは、多くの異なる入力デバイスを処理する、デバイスに依存しない統一された方法を提供するため、最近では好まれています。特に、/dev/input/miceシステムに接続された任意のマウスから/dev/input/mouseNイベントを提供し、特定のマウスからイベントを提供します。最新のLinuxディストリビューションのほとんどでは、これらのファイルはマウスを接続すると動的に作成されます。

マウスデバイスファイルの読み取りまたは書き込みに関する正確な情報については、カーネルのドキュメントのinput / input.txtから始めることができます。特にセクション3.2.2(mousedev)と3.2.4(evdev)、およびセクション4と5をご覧ください。


8

通常、ハードウェアデバイスからの情報は、デバイスファイルを介してアプリケーションに公開されます。マウスの場合、最新のLinuxシステムでは、デバイスは/dev/mice(このデバイスは接続されているすべてのマウスからイベントを収集します。各マウスに対応するデバイスもあります)。

マウスを移動またはクリックすると、マウスはコンピューターに電気信号を送信し、コンピューターに割り込みが発生します。Linuxカーネルの割り込みハンドラーと呼ばれるコードは、イベントデータ(どのボタンが押されたかなど)を読み取り、カーネル内で一連の通知をトリガーします。

このデバイスに対応するデバイスファイルから読み取るアプリケーションがある場合、そのアプリケーションは入力が待機していることを通知されます。たとえば、アプリケーションがシステムコールでブロックされている場合、システムコールは戻ります。read

一般的なシステムでは、マウスイベントを読み取るプロセスが1つあります。それはX Windowサーバーです。そのプログラムは、グラフィック表示と入力周辺機器を管理します。個々のグラフィカルアプリケーションは、一般的なXイベントプロトコルを介してマウスイベントを通知されます。これには、キーの押下、ウィンドウフォーカスの変更、ウィンドウの可視性の変更などの他のイベントタイプが含まれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.