LizardByte / LizardByte/libvirtualhid

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

オープン
#83 コメント 0 件 リアクション 0 件 担当者 1 名 GitHub で見る

@LizardByte-bot がすでに取り組んでいます。

2026年8月15日 から。

主要言語
C++
スター
54
フォーク
15
平均マージ
11時間 32分
マージ済み PR(30日)
34

説明

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.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。