The Librem 5 development board is supplied with an LCD screen with an overlaid touchscreen. User input from the screen is delivered to user-space via touch events. This guide describes how to receive and interpret these events.
Note: This guide assumes that you are using a device tree binary file that is configured for LCD display and touchscreen input. Follow the procedure in Next Steps to copy the correct file into place on the development board.
The commands and script given in the next section will need to be executed
sudo unless the user is in the
input group. We assume that the
user has been added to this group from this point onwards.
Receiving Touch Events¶
Events from the touchscreen are typically delivered to a file in the
/dev/input directory. The exact file can be found by using the
tool from the
input-utils Debian package. Install and run the tool like
sudo apt install input-utils lsinput
This should produce output containing an entry like the following:
/dev/input/event4 bustype : BUS_I2C vendor : 0x416 product : 0x1638 version : 256 name : "Goodix Capacitive TouchScreen" phys : "input/ts" bits ev : (null) (null) (null)
One way to examine these events is to run the
evtest command on the device
file; in this case, the
This will listen for events from the touchscreen and write them in human-readable form to the console.
Events can also be read using the python-evdev package. The following program reads events from the device and prints their screen coordinates:
#!/usr/bin/env python3 import evdev from evdev.ecodes import (ABS_MT_TRACKING_ID, ABS_MT_POSITION_X, ABS_MT_POSITION_Y) import select import sys # Obtain an object for the input device. for path in evdev.list_devices(): device = evdev.InputDevice(path) if evdev.ecodes.EV_ABS in device.capabilities(): break else: sys.stderr.write('Failed to find the touchscreen.\n') sys.exit(1) while True: # Wait for an event. r, w, x = select.select([device.fd], , ) id_ = -1 x = y = 0 # Read the events for the device. for event in device.read(): if event.code == event.value == 0: if id_ != -1: print(x, y) elif event.code == ABS_MT_TRACKING_ID: id_ = event.value elif event.code == ABS_MT_POSITION_X: x = event.value elif event.code == ABS_MT_POSITION_Y: y = event.value
The python-evdev tutorial shows several ways of handling events that can be applied to various situations, using different techniques to read the event queue.