4

キーボード入力イベントを受信するアプリケーションのテストを自動化するために使用する予定のデバイスを作成する小さなプログラムを正常にセットアップしました。

この非常に素晴らしい回答にあるように、両方の チュートリアルに従いました。

プログラムが呼び出して uinput デバイスを作成するとioctl(fd, UI_DEV_CREATE)、新しいデバイスがファイル システムに表示されるので、テスト対象のアプリケーションはそれにアタッチしてイベントを待つことができます。ターゲット システムにはすでに/dev/input/event0デバイスがあるため、新しいデバイスがパスを取得します/dev/input/event1。既存のデバイスがあるデスクトップ システム用にプログラムをコンパイルして実行すると、/dev/input/event[0-15]プログラムを実行すると新しいデバイスが取得され/dev/input/event16ます。

プログラムが作成後に新しいデバイス名を報告するようにしたいと思います。それを取得する方法はありますか?

4

2 に答える 2

7

はい、UI_GET_SYSNAME(で定義されて/usr/include/linux/uinput.hいる) がプラットフォームで使用できる場合は使用できます (たとえば、Android では何らかの理由で定義されていません)。で作成したデバイスの名前が表示され/sys/devices/virtual/inputます。sysfsでデバイスがわかったら、この SO question/dev/inputを読んで作成されたデバイスを把握できます。

次のように呼び出した後に使用UI_DEV_CREATEします(エラー/サニティチェックを省略):

ioctl(fd, UI_DEV_CREATE);

char sysfs_device_name[16];
ioctl(fd, UI_GET_SYSNAME(sizeof(sysfs_device_name)), sysfs_device_name);
printf("/sys/devices/virtual/input/%s\n", sysfs_device_name);

利用できない場合は、次/proc/bus/input/devicesのようなエントリを含む sysfs デバイスを検索してみてください。

I: Bus=0006 Vendor=0001 Product=0001 Version=0001
N: Name="your-uinput-device-name"
P: Phys=
S: Sysfs=/devices/virtual/input/input12
U: Uniq=
H: Handlers=sysrq kbd mouse0 event11 
B: PROP=0
B: EV=7
B: KEY=70000 0 0 0 0 0 7ffff ffffffff fffffffe
B: REL=143

..これは少し厄介です。しかし、ご覧のとおり、 で作成されたデバイスへのショートカットも提供され/dev/inputます。

于 2016-02-16T16:57:49.420 に答える