Skip to content

Linux: Firefox exposes reserved Xbox Series buttons and swaps X/Y #83

Description

@ReenigneArcher

Environment

  • Host OS: Linux
  • Virtual controller provider: libvirtualhid through Sunshine
  • Profile: Xbox Series
  • Browser: Firefox
  • Reported identity: 045e-0b13-Sunshine (libvirtualhid) X-Box Series Controller
  • Tester: https://app.lizardbyte.dev/gamepad-tester/

Observed behavior

  • Firefox exposes 20 buttons.
  • B17 is the Share button and is now labeled correctly by gamepad-helper.
  • B18 and B19 remain visible but do not represent real Xbox Series controls.
  • The physical X and Y buttons are swapped.
  • Chromium exposes only B17 beyond the standard buttons and reports X/Y correctly.

Source-level explanation

The Linux uinput backend advertises KEY_RECORD for Share and also advertises reserved BTN_C and BTN_Z capabilities to preserve sparse Xbox button slots. Firefox starts with 17 canonical buttons and then appends every advertised nonstandard key capability, producing:

  • B17: KEY_RECORD
  • B18: reserved BTN_C
  • B19: reserved BTN_Z

Firefox only applies its Xbox-specific BTN_NORTH/BTN_WEST correction when an ancestor driver is named xpad or microsoft. A uinput-created virtual controller does not have either driver ancestry despite using Microsoft VID/PID.

Firefox source:
https://searchfox.org/firefox-main/source/dom/gamepad/linux/LinuxGamepad.cpp

Expected behavior

  • Firefox exposes the standard 17 buttons plus Share at B17.
  • No phantom B18/B19 controls are presented.
  • X and Y match the physical Xbox layout.

Constraints

Steam currently handles this virtual Xbox Series controller correctly and is the priority consumer. Do not remove reserved capabilities or swap emitted X/Y without validating Steam and Chromium. Keep any compatibility change Linux-specific and avoid changing the Windows backend.

Metadata

Metadata

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions