4.0 KiB

Touchscreen issues

If the screen is connected over USB, issues with the cable may cause similar symptoms. For that, please see this guide.

Touch not working on RaspberryOS and derivatives

Some DSI screens have issues where touch doesn't work with the default configuration. The current workaround/temporary fix involves changing the kernel driver module used for these displays.

Open /boot/config.txt for editing using sudo nano /boot/config.txt and change

dtoverlay=vc4-kms-v3d

to

dtoverlay=vc4-fkms-v3d

Close the nano editor using ctrl+x (exit), then y for yes (save).

Reboot to apply changes.

If that doesn't fix it, you can try commenting these lines out, resulting in:

# dtoverlay=vc4-kms-v3d
# max_framebuffers=2

Reboot to apply changes.

Touch rotation and matrix

If the touch works but registers touch input in a different location from the input, then you may need to apply an input transformation matrix.

First you will need your device name. On a terminal, run:

DISPLAY=:0 xinput

Output:

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ADS7846 Touchscreen                       id=6    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]

In this case the device is the ADS7846 Touchscreen, yours may be different

You can test a change by running:

DISPLAY=:0 xinput set-prop "<device name>" 'Coordinate Transformation Matrix' <matrix>

Where the matrix can be one of the following options:

Rotation Matrix
1 0 0 0 1 0 0 0 1
90° Clockwise 0 -1 1 1 0 0 0 0 1
90° Counter-Clockwise 0 1 0 -1 0 1 0 0 1
180° (Inverts X and Y) -1 0 1 0 -1 1 0 0 1
invert Y -1 0 1 1 1 0 0 0 1
invert X -1 0 1 0 1 0 0 0 1
expand to twice the size horizontally 0.5 0 0 0 1 0 0 0 1

For more in-depth guidance on using Coordinate Transformation Matrices:

It has been reported that the touch expands with screens that don't use HDMI. This is due to the composite output, which enables automatically as a fallback when no HDMI device is plugged in. If this is the case, adding enable_tvout=0 to /boot/config.txt and reboot.

!!! example

```sh
DISPLAY=:0 xinput set-prop "ADS7846 Touchscreen" 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1
```

To make this permanent, modify the file `/etc/udev/rules.d/51-touchscreen.rules`:

```bash
sudo nano /etc/udev/rules.d/51-touchscreen.rules
```

and add following line

```sh
ACTION=="add", ATTRS{name}=="<device name>", ENV{LIBINPUT_CALIBRATION_MATRIX}="<matrix>"
```

Close the nano editor using `ctrl`+`x` (exit), then `y` for yes (save).

---

As an alternative **if the above doesn't work**:

edit `/usr/share/X11/xorg.conf.d/40-libinput.conf`

```bash
sudo nano /usr/share/X11/xorg.conf.d/40-libinput.conf
```

With the following contents:

```sh
Section "InputClass"
        Identifier "libinput touchscreen catchall"
        MatchIsTouchscreen "on"
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
        Option "TransformationMatrix" "0 -1 1 1 0 0 0 0 1"
EndSection
```
Close the nano editor using `ctrl`+`x` (exit), then `y` for yes (save).