This commit is contained in:
neo 2025-03-28 18:49:54 +01:00
parent 90832d382c
commit faed182239
2 changed files with 86 additions and 7 deletions

View File

@ -1,26 +1,50 @@
import re
import evdev
from evdev import InputDevice, categorize, ecodes
from six import unichr
key_map = {
evdev.ecodes.KEY_A: 'a', evdev.ecodes.KEY_B: 'b', evdev.ecodes.KEY_C: 'c', evdev.ecodes.KEY_D: 'd', evdev.ecodes.KEY_E: 'e',
evdev.ecodes.KEY_F: 'f', evdev.ecodes.KEY_G: 'g', evdev.ecodes.KEY_H: 'h', evdev.ecodes.KEY_I: 'i', evdev.ecodes.KEY_J: 'j',
evdev.ecodes.KEY_K: 'k', evdev.ecodes.KEY_L: 'l', evdev.ecodes.KEY_M: 'm', evdev.ecodes.KEY_N: 'n', evdev.ecodes.KEY_O: 'o',
evdev.ecodes.KEY_P: 'p', evdev.ecodes.KEY_Q: 'q', evdev.ecodes.KEY_R: 'r', evdev.ecodes.KEY_S: 's', evdev.ecodes.KEY_T: 't',
evdev.ecodes.KEY_U: 'u', evdev.ecodes.KEY_V: 'v', evdev.ecodes.KEY_W: 'w', evdev.ecodes.KEY_X: 'x', evdev.ecodes.KEY_Y: 'y',
evdev.ecodes.KEY_Z: 'z',
evdev.ecodes.KEY_1: '1', evdev.ecodes.KEY_2: '2', evdev.ecodes.KEY_3: '3', evdev.ecodes.KEY_4: '4', evdev.ecodes.KEY_5: '5',
evdev.ecodes.KEY_6: '6', evdev.ecodes.KEY_7: '7', evdev.ecodes.KEY_8: '8', evdev.ecodes.KEY_9: '9', evdev.ecodes.KEY_0: '0',
evdev.ecodes.KEY_SPACE: ' ',
evdev.ecodes.KEY_DOT: '.',
evdev.ecodes.KEY_ENTER: '\n', # Or handle enter as needed
evdev.ecodes.KEY_BACKSPACE: '\b',
evdev.ecodes.KEY_LEFTSHIFT: '',
evdev.ecodes.KEY_SLASH: '/',
}
def capture_input_events():
try:
# List available input devices
devices = [InputDevice(path) for path in evdev.list_devices()]
for device in devices:
print(device.path, device.name, device.phys)
# Prompt the user to select a device
device_path = input("Enter the path of the device you want to capture (e.g., /dev/input/eventX): ")
device_path = find_barcode_scanner_event(devices)
device = InputDevice(device_path)
print(f"Capturing events from {device.name}...")
for event in device.read_loop():
if event.type == ecodes.EV_KEY:
print(categorize(event))
if event.code in key_map and event.value == 1:
print(key_map[event.code],end='')
else:
if event.value == 0:
continue
print(categorize(event))
#print("UNKNOWN CODE ",event.code)
elif event.type == ecodes.EV_REL:
pass # print(categorize(event))
pass #print(categorize(event))
elif event.type == ecodes.EV_ABS:
pass # print(categorize(event))
print(categorize(event))
else:
pass # print(event)
@ -29,5 +53,22 @@ def capture_input_events():
except KeyboardInterrupt:
print("Capture stopped.")
def find_barcode_scanner_event(input_list):
"""
Finds the input identifier for the "Symbol Bar Code Scanner" in a list of input device strings.
Args:
input_list: A list of strings, each representing an input device.
Returns:
The input identifier (e.g., "/dev/input/event3") if found, otherwise None.
"""
for line in input_list:
if "Symbol Bar Code Scanner" in line.name:
return line.path
return None
if __name__ == "__main__":
capture_input_events()

38
src/test/pynput_test.py Normal file
View File

@ -0,0 +1,38 @@
from pynput import keyboard
def on_press(key):
try:
print('{0}'.format(key.char),end='')
except AttributeError:
if key == keyboard.Key.enter:
print("\r\n")
#print('special key {0} pressed'.format(key))
def on_release(key):
return
print('{0} released'.format(key))
if key == keyboard.Key.esc:
# Stop listener
return False
def on_click(x, y, button, pressed):
print('{0} {1} at {2}'.format('Pressed' if pressed else 'Released', button, (x, y)))
if not pressed:
# Stop listener
return False
def on_scroll(x, y, dx, dy):
print('Scrolled {0} at {1}'.format((dx, dy), (x, y)))
def capture_pynput():
# Collect events until released
keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release)
keyboard_listener.start()
keyboard_listener.join()
if __name__ == "__main__":
capture_pynput()