How to calibrate a touchscreen device¶
Identifying the touch device¶
Install the libinput snap:
$ sudo snap install libinput
Use the libinput snap to identify the device:
$ sudo libinput.list-devices | grep "Calibration: [^n][^/][^a]" --before 11 --after 5 | grep -v n/a
Device: QDtech MPI7003
Kernel: /dev/input/event12
Group: 7
Seat: seat0, default
Capabilities: touch
Calibration: identity matrix
Scroll methods: none
Click methods: none
From this take the “Kernel” device path:
$ udevadm info -q property /dev/input/event21 | grep -e ID_VENDOR_ID -e ID_MODEL_ID
ID_VENDOR_ID=0483
ID_MODEL_ID=5750
We will need those IDs for the udev rule. (In this case we will have ATTRS{idVendor}=="0483",ATTRS{idProduct}=="5750",
.)
Generating the calibration matrix¶
Now calibrate the touchscreen by pressing three target spots in turn:
$ libinput.calibrate-touchscreen
Starting the calibrate-touchscreen app: touch the target spots.
(Or press <ESC> to quit!)
Calibration = 1.008, 0.001, -0.002, -0.012, 1.003, 0.002
Setting the udev rule¶
We now have the information needed to calibrate the touchscreen:
echo 'ATTRS{idVendor}=="0483",ATTRS{idProduct}=="5750", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1.035 -0.021 1.007 0 -0.018"' | \
sudo tee /etc/udev/rules.d/99-QDtech-MPI7003.rules
And ensure the new rule has been processed by udev:
sudo udevadm control --reload
Verifying the updated calibration¶
Now replug the touchscreen and see the changes:
$ sudo libinput.list-devices | grep "Calibration: [^n][^/][^a]" --before 11 --after 5 | grep -v n/a
Device: QDtech MPI7003
Kernel: /dev/input/event12
Group: 7
Seat: seat0, default
Capabilities: touch
Calibration: 0.00 1.03 -0.02 1.01 0.00 -0.02
Scroll methods: none
Click methods: none