protonscr

[Steam RT3] corrupted cursor image in Remote Play from a 64-bit host

steamopen Streaming
ValveSoftware/steam-for-linux#13515 · opened 2026-08-13 by bolu61 · updated 2026-08-14 · 2 comments · github
Bbolu61 2026-08-13 github

Your system information

  • Steam client version (build number or date): 1786491548 (2026-08-11)
  • Distribution (e.g. Ubuntu): Fedora Linux 44, kernel 7.1.8-200.fc44.x86_64
  • Opted into Steam client beta?: Yes
  • Have you checked for system updates?: Yes
  • Steam Logs:
  • GPU: Nvidia GeForce RTX 5090, driver 610.57.04

Please describe your issue in as much detail as possible:

Cursor image is corrupt when streaming using Remote Play from a host running 64-bit Steam RT3.

The cause is that the host, to cache the cursor image, reads XFixesCursorImage.pixels, declared as a unsigned long *, but reads it as a uint32_t *. On a 64-bit system, unsigned long is 8 bytes, so when read, every other pixel 0x00000000. This is confirmed by decompiling steamui.so and visually looking at the corruption pattern.

The fix would just be reading as a unsigned long * instead of uint32_t * and manually pack the pixels when building the bitmap. Or alternatively, set the ScreenCast portal's cursor mode to Metadata and read the cursor bitmap from there.

Steps for reproducing this issue:

  1. Be on Steam RT3 64bit;
  2. Enable Remote Play;
  3. On another device, stream a game that shows a cursor.
Ssmcv 2026-08-14 github

The cause is that the host, to cache the cursor image, reads XFixesCursorImage.pixels, declared as a unsigned long *, but reads it as a uint32_t *. On a 64-bit system, unsigned long is 8 bytes, so when read, every other pixel 0x00000000. This is confirmed by decompiling steamui.so and visually looking at the corruption pattern.

That diagnosis is consistent with this only happening on the experimental steamrt3c/64-bit/containerized client. The ordinary 32-bit client is presumably still doing the cursor capture in 32-bit code, where unsigned long is the same as uint32_t.

Bbolu61 2026-08-14 github

That diagnosis is consistent with this only happening on the experimental steamrt3c/64-bit/containerized client. The ordinary 32-bit client is presumably still doing the cursor capture in 32-bit code, where unsigned long is the same as uint32_t.

Yes, this issue is specifically for the 64-bit client. Updated the title and description to make that clearer.

BTW, in my setup, the host side needs 64-bit steam for NVENC.

Nothing extracted yet.