Skip to content

Infinite Scroll Bug (Weapon Switch Loop) in Rainbow Six Siege via Moonlight/Sunshine (Linux Client) #4933

@yngwizop

Description

@yngwizop

Is there an existing issue for this?

  • I have searched the existing issues

Is your issue described in the documentation?

  • I have read the documentation

Is your issue present in the latest beta/pre-release?

None

Describe the Bug

Hi guys, this is my current problem:

When streaming Tom Clancy's Rainbow Six Siege via a Moonlight/Sunshine setup, a severe input bug occurs involving the mouse wheel. The system setup consists of a Windows host PC running Sunshine and a Debian Linux client using Moonlight. The input device connected to the client is a wired Logitech G502 HERO. As soon as the mouse wheel is moved by even a single notch in Rainbow Six Siege, the input gets stuck in an infinite loop. The game interprets the input as a continuously held key, resulting in a rapid, non-stop weapon switching loop.

Expected Behavior

Scrolling the mouse wheel by a single notch should result in a single, discrete weapon switch in Games, just like it behaves locally or on the host's desktop.

Additional Context

Technical Analysis & Root Cause:

Notably, this behavior is exclusively limited to the Rainbow Six Siege engine. In other games (e.g., Titanfall 2) and on the regular Windows desktop of the host, the scroll wheel functions flawlessly.

Based on an analysis of how Sunshine processes scroll events (LizardByte/Sunshine/src/input.cpp and LizardByte/Sunshine/src/platform/windows/input.cpp), the issue is caused by a conflict between Linux libinput high-resolution scroll events and the aggressive raw input handling of R6 Siege:

The libinput behavior: libinput on the Debian client sends many small, high-resolution scroll deltas (e.g., values like 15, 30) instead of a single standard ±120 value per notch.

With High-Res Scrolling ENABLED: Sunshine passes every tiny delta individually as a MOUSEEVENTF_WHEEL event to Windows via SendInput(). Siege's raw input system interprets every single micro-event as a full weapon switch trigger, causing the infinite loop.

With High-Res Scrolling DISABLED: Sunshine uses an accumulator to collect the deltas until they reach the standard WHEEL_DELTA (120). However, because libinput sends such a massive flood of micro-events, Sunshine still generates a rapid succession of full, discrete ticks.

The R6 Siege Engine (Anvil + BattlEye): Rainbow Six Siege uses highly aggressive raw input polling without any debounce logic for scroll wheel events. While the Windows desktop and other games internally filter these rapid scroll bursts, Siege interprets the rapid sequence of discrete events generated by Sunshine's accumulator as a continuous, held-down input.

Troubleshooting Steps Already Taken:

Disabling "High Resolution Scrolling Support" in the Sunshine Web UI (ineffective due to the accumulator behavior described above).

Toggling the "Raw Input" setting in the Rainbow Six Siege in-game options.

Attempting to artificially "digitize" the signal on the Linux level using tools like imwheel to force hard, discrete scroll steps. While this stops the high-res flooding, it triggers a side effect where the game (or the BattlEye anti-cheat) completely blocks regular mouse clicks.

Host Operating System

Windows

Operating System Version

11

Architecture

amd64/x86_64

Package

Linux - AppImage

GPU Type

Nvidia

GPU Model

RTX 5060Ti

GPU Driver/Mesa Version

Version 595.97

Capture Method

None

Apps

Log output

Online logs

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions