GNU/Linux >> Belajar Linux >  >> Linux

Format dari /dev/input/event*

Pembaca yang sederhana dan mentah dapat dilakukan dengan menggunakan:

#!/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()

Paket python-evdev menyediakan pengikatan ke antarmuka perangkat acara. Contoh penggunaan singkatnya adalah:

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

Perlu diingat bahwa, tidak seperti modul Pythonic murni yang disebutkan sejauh ini, evdev berisi ekstensi C. Membangunnya membutuhkan pengembangan Python dan header kernel Anda.


Di sini, di modul Input.py. Anda juga memerlukan modul event.py.


Formatnya dijelaskan dalam Documentation/input/input.txt file di sumber Linux. Pada dasarnya, Anda membaca struct dari formulir berikut dari file:

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

type dan code adalah nilai yang didefinisikan dalam linux/input.h . Misalnya, ketik mungkin EV_REL untuk momen relatif mouse, atau EV_KEY untuk penekanan tombol, dan code adalah kode kunci, atau REL_X atau ABS_X untuk hiburan.


Linux
  1. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  2. Apa itu file /dev/zero dan /dev/null di Linux?

  3. Bagaimana Anda menukar/dev/sda dengan/dev/sdb?

  1. kernel:menonaktifkan /dev/kmem dan /dev/mem

  2. Bagaimana Linux menggunakan /dev/tty dan /dev/tty0

  3. Apakah salah menautkan /dev/random ke /dev/urandom di Linux?

  1. gema atau cetak /dev/stdin /dev/stdout /dev/stderr

  2. Mengapa < atau > diperlukan untuk menggunakan /dev/tcp

  3. Perbedaan antara /dev/sda dan /dev/sda1