Calibrating an external touchscreen display on SteamDeck

A drawing shows a SteamDeck next to a mini-monitor.
Both have a silly face on their screens.

Things are never too easy with this little console.

Quick Notes

Each of these things is unexpectedly fiddly for devices that are supposedly usable by normal people without technical backgrounds:

  • SteamDeck itself has enough quirks for a few months worth of posts.
  • The official SteamDeck dock is too cool for DisplayPort->HDMI adapters and randomly stopped charging the console while I was plugging cables in and out (but plugging the charger directly still works, as does using the console's factory charger with the dock)
  • If you are connecting Verbatim PMT-14 with a HDMI + USB-A (which I had to because the dock has no USB-C outputs), you have to connect power after USB-A or the touchscreen will not work.
    Or you could hold down the Power button for a few seconds until the display turns off, and then hold it for a few more seconds until it turns on (and now sees the data cable).

So, after overcoming these minor hurdles and being briefly concerned that the dock decided has had enough of my experiments, I connect everything and the touchscreen works, but there's a catch: tapping the top-left corner of the display moves the cursor to the top-left corner of the desktop (read: all displays combined) instead of the top-left corner of the display.

This isn't uncommon for USB touchpads as the operating system doesn't know what screen it is for, though usually the behaviour is to map it to the primary screen, not the whole desktop.

Setting up xinput on SteamDeck

As in, the Xorg utility for testing and configuring input devices like mice, keyboards, and touchpads.

The utility is pretty tiny and usually comes pre-installed on Linux distributions, but I guess gamers don't need such conveniences. Anyway,

You can install AUR packages on SteamDeck, but they will disappear during system updates as the system partition gets completely overwritten. In other words, save a copy of this snippet / page in case you'll need to re-adjust your displays later.

sudo steamos-readonly disable
sudo pacman-key --init
sudo pacman-key --populate archlinux
sudo pacman-key --populate holo
sudo pacman -S xorg-xinput

Or you could go through the whole ordeal with setting up a separate directory for your pacman packages, though I don't think that's worth it for a single thing.

Calibrating

Supposedly people usually use xinput_calibrator for this, but that does not simply install on SteamDeck, and it's just a little math anyway, so I made a little web-based calculator.

First, do xinput list in terminal (Konsole). You'll see something like this

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Valve Software Steam Controller           id=18   [slave  pointer  (2)]
⎜   ↳ ...
⎜   ↳ Silicon Integrated System Co. SiS HID Touch Controller Mouse      id=27   [slave  pointer  (2)]
⎜   ↳ Silicon Integrated System Co. SiS HID Touch Controller    id=28   [slave  pointer  (2)]

In my example, touchscreen is evidently ID 28. Write it down in the following field: Then, do xrandr in terminal to list your displays; copy-paste the output into this field:

If all is well, you should be able to pick a display here: And here's the command to map the chosen touchscreen to the chosen display:

And that's all

Related posts:

Leave a Reply

Your email address will not be published. Required fields are marked *
Note: JavaScript is currently required to post comments.

This site uses Akismet to reduce spam. Learn how your comment data is processed.