Mobile and Handhelds · Volume 4
Handheld PCs and Linux Handhelds — Windows in Your Hands, Knulli and ROCKNIX, One USB-C Port and a Dock
What changes when the PC is a ROG Ally or a Legion Go rather than a desktop (the primary-display trap when docked, the built-in touchscreen, one port for everything), where the Steam Deck is covered, why Knulli builds every Batocera gun package except OpenFIRE's, what ROCKNIX and muOS offer, and how the gun's 24 V brick, the dock and the handheld's charger fit together

4.1 A handheld PC is a PC
A ROG Ally, Legion Go, MSI Claw or Ayaneo is an x86 laptop in a controller-shaped case running Windows 11. Every program, setting and recoil route in PC-Windows works on it unchanged, and that dive is where the software lives. A Steam Deck is the same hardware idea running SteamOS, a Linux, and it is covered in Linux and Retro Distros, Volume 5.
This volume covers only what the handheld form changes: one or two USB-C ports for everything, a built-in screen too small and too close for a light gun, a built-in touchscreen that is itself an absolute pointer, and docking. It then covers the small ARM Linux handhelds, which are a different case.
The one published hands-on account of a handheld light-gun set-up found, Phil Hayton’s for GamesRadar+ (24 December 2023), chose a Windows handheld (an Ayaneo 2S) over a Steam Deck because “SteamOS support is still in the early stages”, docked it to a 50-inch television through a six-in-one USB-C dock, and used a Sinden. That is the shape this volume assumes.
4.2 Windows handhelds: what is different
The primary-display trap. Windows maps an absolute mouse’s full range onto the primary display (PC-Windows, Volume 1, section 1.4). A docked handheld has two displays, its own screen and the television, and Windows often keeps the built-in screen primary. The gun’s range then covers the handheld’s 7-inch screen while the player aims at the television. The fix is the same as on a desktop, and it is the first thing to check when a docked handheld’s aim is wildly wrong: make the television the main display, or use “Second screen only” (Windows key + P) so the built-in panel is off.
The built-in touchscreen. The handheld’s own touchscreen is also an absolute pointer, mapped to the built-in panel. Programs that read the system cursor (one gun, PC-Windows, Volume 1, section 1.3) see both; a stray touch on the handheld moves the cursor. Programs that read per-device Raw Input see the gun separately. Turning the built-in panel off with “Second screen only” disposes of this too.
The ports. The ROG Ally X (2024), for example, has “1x USB 3.2 Gen 2 Type-C support DisplayPort / power delivery” and “1x Type C support USB 4 (Thunderbolt 4 compliance, DisplayPort 1.4 with Freesync support, Power Delivery 3.0)”, a 7-inch 1920 × 1080 panel and an 80 Wh battery (ASUS specification, read 24 October 2026). Two ports make it easy: one for the dock, one spare. Single-port handhelds put everything through the dock.
Performance. These are laptop-class processors; the emulators and loaders that run on a desktop run on them, though TeknoParrot’s heaviest arcade titles and PlayStation 3 emulation are where a handheld runs out. Per-game performance is not tabulated here.
4.3 The Steam Deck
Covered in Linux and Retro Distros, Volume 5: in SteamOS’s Game Mode an absolute pointer is expected to be pinned by gamescope (issue #2458, fix pending when that volume was written), EmuDeck sets RetroArch to the sdl2 input driver, and Batocera booted from microSD is the recommended Deck route because it recognises OpenFIRE guns by name. Everything in sections 4.5 to 4.7 below applies to a Deck as to any handheld. Sinden ships a Steam Deck driver it marks “prototype”.
4.4 Linux handhelds: Knulli, ROCKNIX, muOS
The small ARM handhelds (Anbernic’s RG35XX and RG40XX families, Miyoo, Powkiddy and the like) run community Linux distributions. The Linux layer is the same as on a Raspberry Pi, so Linux and Retro Distros, Volumes 1 and 2 apply: the kernel accepts the gun’s absolute mouse, and RetroArch’s udev driver can read it per device. What differs is how much the distribution does for a gun.
Knulli is built on Batocera: its repository (knulli-cfw/knulli-linux, branch knulli-main, read 24 October 2026) carries Batocera as a git submodule and keeps Batocera’s game launcher with its gun handling (the -lightgun launch flag, the use_guns option, the pre-calibration files, and Batocera’s USB-video bandwidth patch for Sinden on its Allwinner and Rockchip boards). Its top-level Config.in pulls in sixteen of Batocera’s gun packages (AimTrak, Samco, Fusion, DolphinBar, Sinden, AE light gun, GUN4IR, Retro Shooter, GunCon 2 and 3, Blamcon, the Steam Deck gun, the calibrator, the crosshairs and the pre-calibrations), and its “batocera guns support” option selects them. It does not pull in or select openfire-guns, the Batocera package that holds the 99-openfire-guns.rules udev rule and the virtual-openfire-add script by which Batocera recognises an OpenFIRE gun (Linux and Retro Distros, Volume 3). A code search of the Knulli organisation for “openfire” returned nothing. So, as built from that branch, Knulli would not treat an OpenFIRE gun as a gun.
The repair is small: one source line for openfire-guns/Config.in and one select BR2_PACKAGE_OPENFIRE_GUNS beside the GUN4IR line. The package’s script calls evsieve-helper, and its Config.in selects BR2_PACKAGE_EVSIEVE; Knulli already builds evsieve (its knulli-system option selects it, with the comment that 32-bit ARMv8 “seems not supported”), so nothing else should be missing on its 64-bit targets. Offering that change upstream is proposed as MH-4.
ROCKNIX (ROCKNIX/distribution) uses an EmulationStation with a gun manager and a light-gun game filter, and ships RetroArch and core defaults with light-gun options; a code search for “openfire” found nothing. muOS (MustardOS/internal) ships only core option defaults that mention light guns. On both, the gun is a plain Linux absolute mouse: RetroArch with the udev driver and a light-gun device type per core, configured by hand as in Linux and Retro Distros, Volume 2.
Two practical limits apply to all of them. The device needs a USB host port, which on most of these handhelds is the same USB-C port used for charging. And the games worth a light gun on these processors are the 8- and 16-bit and PlayStation ones; Linux and Retro Distros, Volume 4 sets out which systems a Pi 4 and a Pi 5 can carry, and the faster of these handhelds sit in that range.
4.5 Power: the port, the brick and the charger
The gun’s electronics need about 150 mA at 5 V (Power Supplies, Volume 1); any USB host port supplies that, a handheld’s included. The solenoid does not run from USB at all: decision D17 puts it on the 24 V brick, through the single GX connector at the magazine base plate (D31) and the junction box at the far end of the cable (Fully Wired, Volume 4), where the brick and the USB lead to the host meet. So the handheld’s USB budget is not the constraint it would be for a USB-powered recoil gun, and its battery is not drained by the coil.
What the handheld does bring is a third power consumer at the same table:
Table 1 — What the handheld does bring is a third power consumer at the same table
| Load | Fed from |
|---|---|
| Gun logic, about 150 mA | The handheld’s USB port, through the dock |
| Gun solenoid, 24 V | Its own brick, at the junction box |
| Handheld | Its own charger, into the dock’s power-delivery input |
For comparison, Sinden’s documentation says “each recoil lightgun requires a continual draw of 500mA” from USB, which a handheld on battery would feel. A gun that must also run without a wall socket is the Wireless Power Only architecture (a battery in the gun, a thin USB lead), or Fully Wireless with its dongle in the dock.
4.6 The dock
A dock (or any USB-C hub with a power-delivery input, a video output and USB-A ports) is what turns a handheld into a light-gun machine:

What to look for, and why:
Table 2 — What to look for, and why
| Feature | Why |
|---|---|
| A power-delivery input that passes enough for the handheld | Long sessions with the screen on the television and two guns; the handheld’s own charger’s rating is the guide |
| USB-A ports, two if two guns | The junction box ends in a USB-A lead (Fully Wired, Volume 4) |
| HDMI 2.0 or better, with the television’s game mode | The picture path’s latency is the television’s (Volume 5) |
| Wired Ethernet not needed | — |
No specific dock is recommended: any of the six-in-one class does this, the one in Hayton’s account was a Baseus (out of stock when he wrote; he named a JSAUX as the alternative), and a handheld maker’s own dock is the one known to negotiate power with that handheld.
4.7 Two guns on a handheld
Two guns are two USB devices and, on Windows, two Raw Input mice, exactly as on a desktop (PC-Windows, Volume 6); on Batocera, two FIRECon presets (Linux and Retro Distros, Volume 3). The handheld adds only a port count: both guns’ USB leads go into the dock, both bricks into their junction boxes.
4.8 Why this, and why not the others
Table 3 — 4.8 Why this, and why not the others
| Option | Verdict | Why |
|---|---|---|
| Windows handheld, docked, television as the only display (MH-5) | Propose as the portable host | Everything in PC-Windows works, including game-driven recoil; the primary-display trap is removed by turning the built-in panel off |
| Steam Deck with Batocera on microSD | Second | Batocera’s OpenFIRE support works; SteamOS Game Mode’s pointer issue is avoided (Linux and Retro Distros, Volume 5) |
| Steam Deck in SteamOS Game Mode | Not yet | Absolute-pointer pinning (issue #2458) |
| Knulli handheld | After MH-4 | Batocera’s gun handling without the OpenFIRE package |
| ROCKNIX or muOS handheld | Manual only | RetroArch udev set up by hand; one or two guns; small processors |
| Android handheld | See Volume 2 | Mouse dropped; touchscreen or gamepad mode only |
4.9 What could not be verified
- Any handheld with the project’s gun.
- Whether Batocera’s OpenFIRE rule and script work unmodified under Knulli (not built or tested).
- Which Linux handhelds’ USB-C ports act as USB hosts while charging.
- Whether Windows on a particular handheld defaults the internal panel to primary when docked (it varies by maker and driver).
- Per-game performance on handheld processors.
Sources
- Phil Hayton, “I made an arcade light gun setup using a handheld, and you can too over Christmas”, GamesRadar+, 24 December 2023, republished by Yahoo Tech, https://tech.yahoo.com/general/articles/made-arcade-light-gun-setup-125306992.html — read 2026-10-24 (photographs: Future / Phil Hayton).
- ASUS, “ROG Ally X (2024) — Tech Specs”, https://rog.asus.com/gaming-handhelds/rog-ally/rog-ally-x-2024/spec/ — read 2026-10-24.
- Knulli,
knulli-cfw/knulli-linux, branchknulli-main(pushed 19 October 2026):Config.in,.gitmodules,package/system/knulli-system/Config.in(BR2_PACKAGE_BATOCERA_GUNS),package/system/knulli-configgen/, https://github.com/knulli-cfw/knulli-linux — read 2026-10-24. - Batocera,
package/batocera/controllers/guns/openfire-guns/(99-openfire-guns.rules,virtual-openfire-add,Config.in), https://github.com/batocera-linux/batocera.linux — read 2026-10-24. - ROCKNIX,
ROCKNIX/distributionandROCKNIX/emulationstation-next(code search, “lightgun”, “openfire”), https://github.com/ROCKNIX — read 2026-10-24. - MustardOS,
MustardOS/internal(code search, “lightgun”), https://github.com/MustardOS — read 2026-10-24. - Sinden Technology, “Driver Software”, https://sindenlightgun.com/drivers/ — read 2026-10-24.
Comments (0)