The cause is that the host, to cache the cursor image, reads
XFixesCursorImage.pixels, declared as aunsigned long *, but reads it as auint32_t *. On a 64-bit system, unsigned long is 8 bytes, so when read, every other pixel0x00000000. 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.
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 longis the same asuint32_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.
Your system information
1786491548(2026-08-11)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 aunsigned long *, but reads it as auint32_t *. On a 64-bit system, unsigned long is 8 bytes, so when read, every other pixel0x00000000. 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 ofuint32_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: