GNU/Linux >> Linux の 問題 >  >> Linux

/dev/input/event* の形式

シンプルで生のリーダーは、次を使用して実行できます:

#!/usr/bin/python
import struct
import time
import sys

infile_path = "/dev/input/event" + (sys.argv[1] if len(sys.argv) > 1 else "0")

"""
FORMAT represents the format used by linux kernel input event struct
See https://github.com/torvalds/linux/blob/v5.5-rc5/include/uapi/linux/input.h#L28
Stands for: long int, long int, unsigned short, unsigned short, unsigned int
"""
FORMAT = 'llHHI'
EVENT_SIZE = struct.calcsize(FORMAT)

#open file in binary mode
in_file = open(infile_path, "rb")

event = in_file.read(EVENT_SIZE)

while event:
    (tv_sec, tv_usec, type, code, value) = struct.unpack(FORMAT, event)

    if type != 0 or code != 0 or value != 0:
        print("Event type %u, code %u, value %u at %d.%d" % \
            (type, code, value, tv_sec, tv_usec))
    else:
        # Events with code, type and value == 0 are "separator" events
        print("===========================================")

    event = in_file.read(EVENT_SIZE)

in_file.close()

python-evdev パッケージは、イベント デバイス インターフェイスへのバインディングを提供します。短い使用例は次のとおりです:

from evdev import InputDevice
from select import select

dev = InputDevice('/dev/input/event1')

while True:
   r,w,x = select([dev], [], [])
   for event in dev.read():
       print(event)

# event at 1337427573.061822, code 01, type 02, val 01
# event at 1337427573.061846, code 00, type 00, val 00

これまでに述べた非常に便利な純粋な Python モジュールとは異なり、evdev には C 拡張機能が含まれていることに注意してください。それらをビルドするには、Python 開発とカーネル ヘッダーをインストールする必要があります。


ここ Input.py モジュールにあります。 event.py モジュールも必要です。


フォーマットは Documentation/input/input.txt に記述されています Linux ソースのファイル。基本的に、ファイルから次の形式の構造体を読み取ります:

struct input_event {
    struct timeval time;
    unsigned short type;
    unsigned short code;
    unsigned int value;
};

type そして code linux/input.h で定義された値です .たとえば、タイプは EV_REL のようになります マウスの相対モーメント、または EV_KEY fora キープレス、および code キーコード、または REL_X です または ABS_X


Linux
  1. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  2. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  3. /dev/zero から /dev/null への DD ...実際に何が起こるか

  1. カーネル:/dev/kmem と /dev/mem を無効化

  2. Linux が /dev/tty と /dev/tty0 を使用する方法

  3. Linux で /dev/random を /dev/urandom にリンクするのは間違っていますか?

  1. echo または print /dev/stdin /dev/stdout /dev/stderr

  2. /dev/tcp を使用するために < または > が必要な理由

  3. /dev/sda と /dev/sda1 の違い