[GH-ISSUE #14] Cannot create virtual display #10

Closed
opened 2026-11-01 11:23:54 +00:00 by roman · 41 comments
Owner

Originally created by @SirWalterLibrary on GitHub (Mar 25, 2026).
Original GitHub issue: https://github.com/Arbitrate3280/LutrisToSunshine/issues/14

I am running Nobara OS and have Sunshine installed. However, I cannot create a virtual display for some reason. Here’s my output:

`
python3 lutristosunshine.py virtualdisplay

Virtual display
Status: setup=configured, Sunshine=inactive, Sway=inactive
Runtime: input bridge=inactive, audio guard=inactive, portal handoff=idle
Dynamic MangoHud FPS limit: [DISABLED] wrapped launches keep their normal MangoHud FPS behavior
Dependencies: [OK] all required commands available
Headless display: not detected
Host controllers: [AUTO] none reserved; client inputs from Moonlight/Sunshine already work automatically
Blocked Flatpak apps: [OK] none detected
Next step: Run 'python3 lutristosunshine.py virtualdisplay enable' to start the stack and sync apps.

Actions

  1. Enable virtual display
  2. Configure host controllers
  3. Run doctor
  4. Test controller rumble
  5. Show logs
  6. Stop virtual display
  7. Turn off virtual display and restore Sunshine
  8. Toggle dynamic MangoHud FPS limit
  9. Exit
    Choose an action: 1
    Virtual display files installed.
    Failed to start app-dev.lizardbyte.app.Sunshine.service: Unit app-dev.lizardbyte.app.Sunshine.service not found.
    Error: unable to start the virtual display Sunshine service.

··• python3 lutristosunshine.py virtualdisplay doctor
Virtual display doctor
[PASS] Dependencies: Required commands are available.
[PASS] Setup: Managed files are installed.
[PASS] Managed udev rule: Input permissions rule is present.
[WARN] Sunshine service: Managed Sunshine unit is not active.
[WARN] Headless display: Headless Wayland display is not ready.
[INFO] Controller bridge: No host controllers configured.
[PASS] Flatpak launch audit: no blocked apps detected.
Next step: Run 'python3 lutristosunshine.py virtualdisplay enable' to start the stack and sync apps.
`

Originally created by @SirWalterLibrary on GitHub (Mar 25, 2026). Original GitHub issue: https://github.com/Arbitrate3280/LutrisToSunshine/issues/14 I am running Nobara OS and have Sunshine installed. However, I cannot create a virtual display for some reason. Here’s my output: ` python3 lutristosunshine.py virtualdisplay Virtual display Status: setup=configured, Sunshine=inactive, Sway=inactive Runtime: input bridge=inactive, audio guard=inactive, portal handoff=idle Dynamic MangoHud FPS limit: [DISABLED] wrapped launches keep their normal MangoHud FPS behavior Dependencies: [OK] all required commands available Headless display: not detected Host controllers: [AUTO] none reserved; client inputs from Moonlight/Sunshine already work automatically Blocked Flatpak apps: [OK] none detected Next step: Run 'python3 lutristosunshine.py virtualdisplay enable' to start the stack and sync apps. Actions 1. Enable virtual display 2. Configure host controllers 3. Run doctor 4. Test controller rumble 5. Show logs 6. Stop virtual display 7. Turn off virtual display and restore Sunshine 8. Toggle dynamic MangoHud FPS limit 0. Exit Choose an action: 1 Virtual display files installed. Failed to start app-dev.lizardbyte.app.Sunshine.service: Unit app-dev.lizardbyte.app.Sunshine.service not found. Error: unable to start the virtual display Sunshine service. ··• python3 lutristosunshine.py virtualdisplay doctor Virtual display doctor [PASS] Dependencies: Required commands are available. [PASS] Setup: Managed files are installed. [PASS] Managed udev rule: Input permissions rule is present. [WARN] Sunshine service: Managed Sunshine unit is not active. [WARN] Headless display: Headless Wayland display is not ready. [INFO] Controller bridge: No host controllers configured. [PASS] Flatpak launch audit: no blocked apps detected. Next step: Run 'python3 lutristosunshine.py virtualdisplay enable' to start the stack and sync apps. `
roman closed this issue 2026-11-01 11:23:55 +00:00
Author
Owner

@moozums commented on GitHub (Mar 26, 2026):

Changing line 27 in virtualdisplay/manager.py from the default:

SUNSHINE_UNIT = "app-dev.lizardbyte.app.Sunshine.service"
to
SUNSHINE_UNIT = "sunshine.service"

fixed it for me. Also on Nobara

<!-- gh-comment-id:4134046651 --> @moozums commented on GitHub (Mar 26, 2026): Changing line 27 in virtualdisplay/manager.py from the default: SUNSHINE_UNIT = "app-dev.lizardbyte.app.Sunshine.service" to SUNSHINE_UNIT = "sunshine.service" fixed it for me. Also on Nobara
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 26, 2026):

I was able to create a virtual display but I don't think it did anything. When I tried streaming to my phone, I just get a black screen.

https://imgur.com/a/46ks8Ut

Here's the doctor command I ran (seems like it created it):

https://imgur.com/a/rxWWUgk

<!-- gh-comment-id:4134732987 --> @SirWalterLibrary commented on GitHub (Mar 26, 2026): I was able to create a virtual display but I don't think it did anything. When I tried streaming to my phone, I just get a black screen. https://imgur.com/a/46ks8Ut Here's the doctor command I ran (seems like it created it): https://imgur.com/a/rxWWUgk
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 26, 2026):

show me the sunshine logs, or click the show logs option after starting a stream.

you have the dependencies installed right?
sway
swaybg
xdg-desktop-portal-wlr

Nvidia GPU? Sunshine version?

<!-- gh-comment-id:4135811200 --> @Arbitrate3280 commented on GitHub (Mar 26, 2026): show me the sunshine logs, or click the show logs option after starting a stream. you have the dependencies installed right? sway swaybg xdg-desktop-portal-wlr Nvidia GPU? Sunshine version?
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

I have sway swaybg xdg-desktop-portal-wlr all installed.

GPU: RTX 3070 Ti

Sunshine version: [2026-03-27 07:37:22.022]: Info: Sunshine version: 2025.924.154138 commit: 86188d47a7463b0f73b35de18a628353adeaa20e

I was able to get games working.

Sunshine.log

However, it seems like when I move my cursor around, it moves both the cursor in the virtual display and main display.

<!-- gh-comment-id:4142396957 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): I have `sway` `swaybg` `xdg-desktop-portal-wlr` all installed. GPU: RTX 3070 Ti Sunshine version: [2026-03-27 07:37:22.022]: Info: Sunshine version: 2025.924.154138 commit: 86188d47a7463b0f73b35de18a628353adeaa20e I was able to get games working. [Sunshine.log](https://github.com/user-attachments/files/26305035/Sunshine.log) However, it seems like when I move my cursor around, it moves both the cursor in the virtual display and main display.
Author
Owner

@A-Ghorab commented on GitHub (Mar 27, 2026):

just to add, on my side it did work correctly but i had to run this command

sudo usermod -aG input $USER to add input control

if the user is faced with this error

Failed to open device: '/dev/input/event0': Permission denied

To add the list Cachyos with AMD GPU working just fine

<!-- gh-comment-id:4142488556 --> @A-Ghorab commented on GitHub (Mar 27, 2026): just to add, on my side it did work correctly but i had to run this command `sudo usermod -aG input $USER` to add input control if the user is faced with this error `Failed to open device: '/dev/input/event0': Permission denied` To add the list `Cachyos with AMD GPU working just fine`
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

Also, what frame rate is the virtual display running at?

I have this issue where on TV displays, which run at 59.95 Hz, I get occasional stutters streaming at 60 Hz. My workaround is to set my main monitor at 59.95 Hz and set my Moonlight streaming setting at 60 Hz, which mostly fixes the issue.

If there is a way to set this manually either in Sunshine or virtual display, that would be helpful.

I documented this phenomenon on this page: https://github.com/frostplexx/sunshine_virt_display/issues/9

<!-- gh-comment-id:4142541205 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): Also, what frame rate is the virtual display running at? I have this issue where on TV displays, which run at 59.95 Hz, I get occasional stutters streaming at 60 Hz. My workaround is to set my main monitor at 59.95 Hz and set my Moonlight streaming setting at 60 Hz, which mostly fixes the issue. If there is a way to set this manually either in Sunshine or virtual display, that would be helpful. I documented this phenomenon on this page: https://github.com/frostplexx/sunshine_virt_display/issues/9
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

just to add, on my side it did work correctly but i had to run this command

sudo usermod -aG input $USER to add input control

if the user is faced with this error

Failed to open device: '/dev/input/event0': Permission denied

To add the list Cachyos with AMD GPU working just fine

So you were able to get to your cursor working only on your virtual display?

<!-- gh-comment-id:4142550157 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): > just to add, on my side it did work correctly but i had to run this command > > `sudo usermod -aG input $USER` to add input control > > if the user is faced with this error > > `Failed to open device: '/dev/input/event0': Permission denied` > > To add the list `Cachyos with AMD GPU working just fine` So you were able to get to your cursor working only on your virtual display?
Author
Owner

@A-Ghorab commented on GitHub (Mar 27, 2026):

just to add, on my side it did work correctly but i had to run this command
sudo usermod -aG input $USER to add input control
if the user is faced with this error
Failed to open device: '/dev/input/event0': Permission denied
To add the list Cachyos with AMD GPU working just fine

So you were able to get to your cursor working only on your virtual display?

on my side both the keyboard and mouse are only working on my "host" machine, the streaming device (my LG TV) have the controller connected to it and only works there.

i also opened steam and tried to use scroll while it's connect to my PC nothing worked, but if i unplug it and connect it to the TV the mouse works there.

<!-- gh-comment-id:4142582938 --> @A-Ghorab commented on GitHub (Mar 27, 2026): > > just to add, on my side it did work correctly but i had to run this command > > `sudo usermod -aG input $USER` to add input control > > if the user is faced with this error > > `Failed to open device: '/dev/input/event0': Permission denied` > > To add the list `Cachyos with AMD GPU working just fine` > > So you were able to get to your cursor working only on your virtual display? on my side both the keyboard and mouse are only working on my "host" machine, the streaming device (my LG TV) have the controller connected to it and only works there. i also opened steam and tried to use scroll while it's connect to my PC nothing worked, but if i unplug it and connect it to the TV the mouse works there.
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

Also, what frame rate is the virtual display running at?

I have this issue where on TV displays, which run at 59.95 Hz, I get occasional stutters streaming at 60 Hz. My workaround is to set my main monitor at 59.95 Hz and set my Moonlight streaming setting at 60 Hz, which mostly fixes the issue.

If there is a way to set this manually either in Sunshine or virtual display, that would be helpful.

I documented this phenomenon on this page: frostplexx/sunshine_virt_display#9

Is there a way to check this?

<!-- gh-comment-id:4144568681 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): > Also, what frame rate is the virtual display running at? > > I have this issue where on TV displays, which run at 59.95 Hz, I get occasional stutters streaming at 60 Hz. My workaround is to set my main monitor at 59.95 Hz and set my Moonlight streaming setting at 60 Hz, which mostly fixes the issue. > > If there is a way to set this manually either in Sunshine or virtual display, that would be helpful. > > I documented this phenomenon on this page: [frostplexx/sunshine_virt_display#9](https://github.com/frostplexx/sunshine_virt_display/issues/9) Is there a way to check this?
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 27, 2026):

Changing line 27 in virtualdisplay/manager.py from the default:

SUNSHINE_UNIT = "app-dev.lizardbyte.app.Sunshine.service" to SUNSHINE_UNIT = "sunshine.service"

fixed it for me. Also on Nobara

ah my bad, i'm running sunshine pre-releases, forgot that's not the case for every distro. Will make it look for both so people don't have to manually do this.

I have sway swaybg xdg-desktop-portal-wlr all installed.

GPU: RTX 3070 Ti

Sunshine version: [2026-03-27 07:37:22.022]: Info: Sunshine version: 2025.924.154138 commit: 86188d47a7463b0f73b35de18a628353adeaa20e

I was able to get games working.

Sunshine.log

However, it seems like when I move my cursor around, it moves both the cursor in the virtual display and main display.

Glad you managed to make it work. Can I ask what you did to fix the blackscreen issue?

Also, what frame rate is the virtual display running at?

Look at the sunshine logs after you start a stream. For example, my tv also requests 59.94:
[2026-03-27 16:33:24.177]: Info: CLIENT CONNECTED
[2026-03-27 16:33:24.213]: Info: [wayland] Found display [wayland-1]
[2026-03-27 16:33:24.213]: Info: [wayland] Found interface: zwp_linux_dmabuf_v1(2) version 4
[2026-03-27 16:33:24.213]: Info: [wayland] Found interface: zxdg_output_manager_v1(8) version 3
[2026-03-27 16:33:24.213]: Info: [wayland] Found interface: zwlr_screencopy_manager_v1(28) version 3
[2026-03-27 16:33:24.213]: Info: [wayland] Found interface: wl_output(53) version 4
[2026-03-27 16:33:24.213]: Info: [wayland] Resolution: 2560x1440
[2026-03-27 16:33:24.213]: Info: [wayland] Name: HEADLESS-1
[2026-03-27 16:33:24.213]: Info: [wayland] Found monitor: Headless output 1
[2026-03-27 16:33:24.213]: Info: [wayland] Offset: 0x0
[2026-03-27 16:33:24.213]: Info: [wayland] Logical size: 2560x1440
[2026-03-27 16:33:24.213]: Info: [wlgrab] -------- Start of Wayland monitor list --------
[2026-03-27 16:33:24.213]: Info: [wlgrab] Monitor 0 is HEADLESS-1: Headless output 1
[2026-03-27 16:33:24.213]: Info: [wlgrab] --------- End of Wayland monitor list ---------
[2026-03-27 16:33:24.213]: Info: Screencasting with Wayland's protocol
[2026-03-27 16:33:24.213]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps]

<!-- gh-comment-id:4144804360 --> @Arbitrate3280 commented on GitHub (Mar 27, 2026): > Changing line 27 in virtualdisplay/manager.py from the default: > > SUNSHINE_UNIT = "app-dev.lizardbyte.app.Sunshine.service" to SUNSHINE_UNIT = "sunshine.service" > > fixed it for me. Also on Nobara ah my bad, i'm running sunshine pre-releases, forgot that's not the case for every distro. Will make it look for both so people don't have to manually do this. > I have `sway` `swaybg` `xdg-desktop-portal-wlr` all installed. > > GPU: RTX 3070 Ti > > Sunshine version: [2026-03-27 07:37:22.022]: Info: Sunshine version: 2025.924.154138 commit: 86188d47a7463b0f73b35de18a628353adeaa20e > > I was able to get games working. > > [Sunshine.log](https://github.com/user-attachments/files/26305035/Sunshine.log) > > However, it seems like when I move my cursor around, it moves both the cursor in the virtual display and main display. Glad you managed to make it work. Can I ask what you did to fix the blackscreen issue? > Also, what frame rate is the virtual display running at? Look at the sunshine logs after you start a stream. For example, my tv also requests 59.94: [2026-03-27 16:33:24.177]: Info: CLIENT CONNECTED [2026-03-27 16:33:24.213]: Info: [wayland] Found display [wayland-1] [2026-03-27 16:33:24.213]: Info: [wayland] Found interface: zwp_linux_dmabuf_v1(2) version 4 [2026-03-27 16:33:24.213]: Info: [wayland] Found interface: zxdg_output_manager_v1(8) version 3 [2026-03-27 16:33:24.213]: Info: [wayland] Found interface: zwlr_screencopy_manager_v1(28) version 3 [2026-03-27 16:33:24.213]: Info: [wayland] Found interface: wl_output(53) version 4 [2026-03-27 16:33:24.213]: Info: [wayland] Resolution: 2560x1440 [2026-03-27 16:33:24.213]: Info: [wayland] Name: HEADLESS-1 [2026-03-27 16:33:24.213]: Info: [wayland] Found monitor: Headless output 1 [2026-03-27 16:33:24.213]: Info: [wayland] Offset: 0x0 [2026-03-27 16:33:24.213]: Info: [wayland] Logical size: 2560x1440 [2026-03-27 16:33:24.213]: Info: [wlgrab] -------- Start of Wayland monitor list -------- [2026-03-27 16:33:24.213]: Info: [wlgrab] Monitor 0 is HEADLESS-1: Headless output 1 [2026-03-27 16:33:24.213]: Info: [wlgrab] --------- End of Wayland monitor list --------- [2026-03-27 16:33:24.213]: Info: Screencasting with Wayland's protocol **[2026-03-27 16:33:24.213]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps]**
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 27, 2026):

Are you still getting keyboard and mouse input leaking from the client to the host?

<!-- gh-comment-id:4144834146 --> @Arbitrate3280 commented on GitHub (Mar 27, 2026): Are you still getting keyboard and mouse input leaking from the client to the host?
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

Q: Glad you managed to make it work. Can I ask what you did to fix the blackscreen issue?

A: It was 2 things.

Number 1: A new Nobara update crashed Heroics Game Launcher so I got it working with flatpak repair and flatpak update. It worked right after.

Number 2: I have steam automatically start up on boot. However, it rests in my main display and not in the virtual display. So when I open a game in Steam, it loads in the main display. The way I got this to work is by quitting Steam, and re-running the virtual display with my Steam game. Then that worked.

Okay, I tried searching for "fps" in my logs and all I see is minimum FPS set to 30 fps:

[2026-03-27 07:43:01.698]: Info: Minimum FPS target set to ~30fps (33.3333ms)
[2026-03-27 07:43:57.738]: Info: Minimum FPS target set to ~30fps (33.3333ms)
[2026-03-27 07:46:10.181]: Info: Minimum FPS target set to ~30fps (33.3333ms)
[2026-03-27 07:47:09.772]: Info: Minimum FPS target set to ~30fps (33.3333ms)
[2026-03-27 07:47:42.928]: Info: Minimum FPS target set to ~30fps (33.3333ms)
<!-- gh-comment-id:4144841210 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): Q: Glad you managed to make it work. Can I ask what you did to fix the blackscreen issue? A: It was 2 things. Number 1: A new Nobara update crashed Heroics Game Launcher so I got it working with `flatpak repair` and `flatpak update`. It worked right after. Number 2: I have steam automatically start up on boot. However, it rests in my main display and not in the virtual display. So when I open a game in Steam, it loads in the main display. The way I got this to work is by quitting Steam, and re-running the virtual display with my Steam game. Then that worked. Okay, I tried searching for "fps" in my logs and all I see is minimum FPS set to 30 fps: [2026-03-27 07:43:01.698]: Info: Minimum FPS target set to ~30fps (33.3333ms) [2026-03-27 07:43:57.738]: Info: Minimum FPS target set to ~30fps (33.3333ms) [2026-03-27 07:46:10.181]: Info: Minimum FPS target set to ~30fps (33.3333ms) [2026-03-27 07:47:09.772]: Info: Minimum FPS target set to ~30fps (33.3333ms) [2026-03-27 07:47:42.928]: Info: Minimum FPS target set to ~30fps (33.3333ms)
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

Are you still getting keyboard and mouse input leaking from the client to the host?

Haven't gotten a chance to try this yet. I'll try the sudo usermod -aG input $USER command when I get home

<!-- gh-comment-id:4144846328 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): > Are you still getting keyboard and mouse input leaking from the client to the host? Haven't gotten a chance to try this yet. I'll try the `sudo usermod -aG input $USER` command when I get home
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 27, 2026):

When I search for FPS in my logs I get this:

[2026-03-27 16:33:24.213]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps]
[2026-03-27 16:33:24.265]: Info: Minimum FPS target set to ~30fps (33.3333ms)

When you search for "Screencasting with" what do you get? Maybe the screencasting method im using wasn't a thing in the stable release of sunshine.

<!-- gh-comment-id:4144860671 --> @Arbitrate3280 commented on GitHub (Mar 27, 2026): When I search for FPS in my logs I get this: [2026-03-27 16:33:24.213]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps] [2026-03-27 16:33:24.265]: Info: Minimum FPS target set to ~30fps (33.3333ms) When you search for "Screencasting with" what do you get? Maybe the screencasting method im using wasn't a thing in the stable release of sunshine.
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

When I search for FPS in my logs I get this:

[2026-03-27 16:33:24.213]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps] [2026-03-27 16:33:24.265]: Info: Minimum FPS target set to ~30fps (33.3333ms)

When you search for "Screencasting with" what do you get? Maybe the screencasting method im using wasn't a thing in the stable release of sunshine.

This is what I get.

Line   22: [2026-03-27 07:42:39.262]: Info: Screencasting with Wayland's protocol
Line   52: [2026-03-27 07:42:39.459]: Info: Screencasting with Wayland's protocol
Line  920: [2026-03-27 07:43:01.404]: Info: Screencasting with Wayland's protocol
Line  950: [2026-03-27 07:43:01.506]: Info: Screencasting with Wayland's protocol
Line  989: [2026-03-27 07:43:01.649]: Info: Screencasting with Wayland's protocol
Line 1017: [2026-03-27 07:43:57.413]: Info: Screencasting with Wayland's protocol
Line 1047: [2026-03-27 07:43:57.502]: Info: Screencasting with Wayland's protocol
Line 1086: [2026-03-27 07:43:57.686]: Info: Screencasting with Wayland's protocol
Line 1112: [2026-03-27 07:46:09.668]: Info: Screencasting with Wayland's protocol
Line 1142: [2026-03-27 07:46:09.742]: Info: Screencasting with Wayland's protocol
Line 1182: [2026-03-27 07:46:10.131]: Info: Screencasting with Wayland's protocol
Line 1208: [2026-03-27 07:47:09.276]: Info: Screencasting with Wayland's protocol
Line 1238: [2026-03-27 07:47:09.348]: Info: Screencasting with Wayland's protocol
Line 1277: [2026-03-27 07:47:09.701]: Info: Screencasting with Wayland's protocol
Line 1305: [2026-03-27 07:47:42.589]: Info: Screencasting with Wayland's protocol
Line 1335: [2026-03-27 07:47:42.676]: Info: Screencasting with Wayland's protocol
Line 1374: [2026-03-27 07:47:42.882]: Info: Screencasting with Wayland's protocol

By the way, I already posted my log in Sunshine.log

Are you using a specific capture method to get 59.94?

Image

<!-- gh-comment-id:4144885783 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): > When I search for FPS in my logs I get this: > > [2026-03-27 16:33:24.213]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps] [2026-03-27 16:33:24.265]: Info: Minimum FPS target set to ~30fps (33.3333ms) > > When you search for "Screencasting with" what do you get? Maybe the screencasting method im using wasn't a thing in the stable release of sunshine. This is what I get. Line 22: [2026-03-27 07:42:39.262]: Info: Screencasting with Wayland's protocol Line 52: [2026-03-27 07:42:39.459]: Info: Screencasting with Wayland's protocol Line 920: [2026-03-27 07:43:01.404]: Info: Screencasting with Wayland's protocol Line 950: [2026-03-27 07:43:01.506]: Info: Screencasting with Wayland's protocol Line 989: [2026-03-27 07:43:01.649]: Info: Screencasting with Wayland's protocol Line 1017: [2026-03-27 07:43:57.413]: Info: Screencasting with Wayland's protocol Line 1047: [2026-03-27 07:43:57.502]: Info: Screencasting with Wayland's protocol Line 1086: [2026-03-27 07:43:57.686]: Info: Screencasting with Wayland's protocol Line 1112: [2026-03-27 07:46:09.668]: Info: Screencasting with Wayland's protocol Line 1142: [2026-03-27 07:46:09.742]: Info: Screencasting with Wayland's protocol Line 1182: [2026-03-27 07:46:10.131]: Info: Screencasting with Wayland's protocol Line 1208: [2026-03-27 07:47:09.276]: Info: Screencasting with Wayland's protocol Line 1238: [2026-03-27 07:47:09.348]: Info: Screencasting with Wayland's protocol Line 1277: [2026-03-27 07:47:09.701]: Info: Screencasting with Wayland's protocol Line 1305: [2026-03-27 07:47:42.589]: Info: Screencasting with Wayland's protocol Line 1335: [2026-03-27 07:47:42.676]: Info: Screencasting with Wayland's protocol Line 1374: [2026-03-27 07:47:42.882]: Info: Screencasting with Wayland's protocol By the way, I already posted my log in [Sunshine.log](https://github.com/user-attachments/files/26305035/Sunshine.log) Are you using a specific capture method to get 59.94? ![Image](https://github.com/user-attachments/assets/39e5cb89-b7d1-4b8b-873a-25b6d25430de)
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 27, 2026):

No, leave it at auto, it's already picking wlroots. I think sunshine just added more detailed logging in the pre-releases.

I will add to the script a way to expose the current resolution and refresh rate of the virtual screen. So when a stream is running you can check it.

<!-- gh-comment-id:4144929818 --> @Arbitrate3280 commented on GitHub (Mar 27, 2026): No, leave it at auto, it's already picking wlroots. I think sunshine just added more detailed logging in the pre-releases. I will add to the script a way to expose the current resolution and refresh rate of the virtual screen. So when a stream is running you can check it.
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

Nice!

Also, how exactly are you able to request 59.94 for your TV? I currently have a laptop running Ubuntu 24.04 that's hooked to my TV via HDMI. I can't request a 59.94, but rather 60 Hz. I'm wondering what your setup looks like

[2026-03-27 16:33:24.213]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps]

Image

<!-- gh-comment-id:4144941768 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): Nice! Also, how exactly are you able to request 59.94 for your TV? I currently have a laptop running Ubuntu 24.04 that's hooked to my TV via HDMI. I can't request a 59.94, but rather 60 Hz. I'm wondering what your setup looks like [2026-03-27 16:33:24.213]: Info: [wlgrab] **Requested** frame rate [60000/1001, approx. 59.9401 fps] ![Image](https://github.com/user-attachments/assets/ad2ecfa8-6004-4551-869f-961d24041e97)
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

Are you still getting keyboard and mouse input leaking from the client to the host?

By the way, does input bridge need to be active?

  Virtual display
  Status: setup=configured, Sunshine=active, Sway=active
  Runtime: input bridge=inactive, audio guard=active, portal handoff=idle
  Dynamic MangoHud FPS limit: [DISABLED] wrapped launches keep their normal MangoHud FPS behavior
  Dependencies: [OK] all required commands available
  Headless display: not detected
  Host controllers: [AUTO] none reserved; client inputs from Moonlight/Sunshine already work automatically
  Blocked Flatpak apps: [OK] none detected
<!-- gh-comment-id:4145015959 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): > Are you still getting keyboard and mouse input leaking from the client to the host? By the way, does `input bridge` need to be active? Virtual display Status: setup=configured, Sunshine=active, Sway=active Runtime: input bridge=inactive, audio guard=active, portal handoff=idle Dynamic MangoHud FPS limit: [DISABLED] wrapped launches keep their normal MangoHud FPS behavior Dependencies: [OK] all required commands available Headless display: not detected Host controllers: [AUTO] none reserved; client inputs from Moonlight/Sunshine already work automatically Blocked Flatpak apps: [OK] none detected
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 27, 2026):

you're not using kde plasma are you? I'm a kde plasma user so i only managed to test input isolation for it. Is this gnome? I can start trying to get input isolation working for it, you will need to test it for me though

im working on the version of the script that will get you the 59.95, just a second

By the way, does input bridge need to be active?

no, only if you wanted to bridge host controllers to the virtual display

<!-- gh-comment-id:4145120606 --> @Arbitrate3280 commented on GitHub (Mar 27, 2026): you're not using kde plasma are you? I'm a kde plasma user so i only managed to test input isolation for it. Is this gnome? I can start trying to get input isolation working for it, you will need to test it for me though im working on the version of the script that will get you the 59.95, just a second > By the way, does input bridge need to be active? no, only if you wanted to bridge host controllers to the virtual display
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

Are you still getting keyboard and mouse input leaking from the client to the host?

I was able to get it to work using sudo usermod input $USER

you're not using kde plasma are you? I'm a kde plasma user so i only managed to test input isolation for it. Is this gnome? I can start trying to get input isolation working for it, you will need to test it for me though

I am using KDE Plasma.

<!-- gh-comment-id:4145202255 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): > Are you still getting keyboard and mouse input leaking from the client to the host? I was able to get it to work using `sudo usermod input $USER` > you're not using kde plasma are you? I'm a kde plasma user so i only managed to test input isolation for it. Is this gnome? I can start trying to get input isolation working for it, you will need to test it for me though I am using KDE Plasma.
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 27, 2026):

great, that's that then for the input stuff. Gnome will have to wait untill someone complains about it :p

can you do a git pull to get the latest version of the script? after that run python3 lutristosunshine.py virtualdisplay and pick option 1 to re-install the updated scripts/files.

now we have 3 modes for the sway virtual display. It's the new option 9 on the list.

You can do: 1. It follows moonlight's requested fps.
2. It follows the client's actual refresh rate.
3. Custom, so you can set a resolution and refresh rate and it will use that.

2 is the one that will get your resolution refresh rate to be 59.95. But for that to work you will need to update sunshine to the latest pre-release version, because the latest stable does not yet have this piece of information on the logs:
[2026-03-27 16:33:24.213]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps]

And that's what we're using to set it.

If you don't want to do that, then you can use the custom option and input the desired resolution and refresh rate. The issue with this approach is that if you have multiple clients they will all use that custom option.

<!-- gh-comment-id:4145439030 --> @Arbitrate3280 commented on GitHub (Mar 27, 2026): great, that's that then for the input stuff. Gnome will have to wait untill someone complains about it :p can you do a git pull to get the latest version of the script? after that run python3 lutristosunshine.py virtualdisplay and pick option 1 to re-install the updated scripts/files. now we have 3 modes for the sway virtual display. It's the new option 9 on the list. You can do: 1. It follows moonlight's requested fps. 2. It follows the client's actual refresh rate. 3. Custom, so you can set a resolution and refresh rate and it will use that. 2 is the one that will get your resolution refresh rate to be 59.95. But for that to work you will need to update sunshine to the latest pre-release version, because the latest stable does not yet have this piece of information on the logs: [2026-03-27 16:33:24.213]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps] And that's what we're using to set it. If you don't want to do that, then you can use the custom option and input the desired resolution and refresh rate. The issue with this approach is that if you have multiple clients they will all use that custom option.
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

OMG thanks!!!!!!

Honestly, the 3 different options is EXACTLY what I was looking for. I am going to use option 2, but it's good to have the other options in case I wanted to

Will test when I get the chance. :)

<!-- gh-comment-id:4145453308 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): OMG thanks!!!!!! Honestly, the 3 different options is EXACTLY what I was looking for. I am going to use option 2, but it's good to have the other options in case I wanted to Will test when I get the chance. :)
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 27, 2026):

let me know if any more issues come up

<!-- gh-comment-id:4145492714 --> @Arbitrate3280 commented on GitHub (Mar 27, 2026): let me know if any more issues come up
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 27, 2026):

Okay, dumb question. How do I update my Sunshine to the pre-release on Linux?

<!-- gh-comment-id:4145626910 --> @SirWalterLibrary commented on GitHub (Mar 27, 2026): Okay, dumb question. How do I update my Sunshine to the pre-release on Linux?
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 27, 2026):

You're on Nobara right? They have an official copr for the pre-release:
https://copr.fedorainfracloud.org/coprs/lizardbyte/beta/

if you never dealt with copr then ask an AI to help you through it or look for some tutorials.

A warning though: the beta release has changed the service name and also they are introducing some new capture methods, so be ready to troubleshoot a bit after changing to it, because some issues might show up.

<!-- gh-comment-id:4145673010 --> @Arbitrate3280 commented on GitHub (Mar 27, 2026): You're on Nobara right? They have an official copr for the pre-release: https://copr.fedorainfracloud.org/coprs/lizardbyte/beta/ if you never dealt with copr then ask an AI to help you through it or look for some tutorials. A warning though: the beta release has changed the service name and also they are introducing some new capture methods, so be ready to troubleshoot a bit after changing to it, because some issues might show up.
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 28, 2026):

Okay, I tried with the newest version and it seems like it doesn't work with option 2. Here's my logs

  [2026-03-27 19:12:15.928]: Info: [wlgrab] -------- Start of Wayland monitor list --------
  [2026-03-27 19:12:15.928]: Info: [wlgrab] Monitor 0 is HEADLESS-1: Headless output 1
  [2026-03-27 19:12:15.928]: Info: [wlgrab] --------- End of Wayland monitor list ---------
  [2026-03-27 19:12:15.928]: Info: Screencasting with Wayland's protocol
  [2026-03-27 19:12:15.928]: Info: [wlgrab] Requested frame rate [60fps]
  [2026-03-27 19:12:15.928]: Info: [wayland] Found display [wayland-1]
  [2026-03-27 19:12:15.928]: Info: [wayland] Found interface: zwp_linux_dmabuf_v1(2) version 4
  [2026-03-27 19:12:15.928]: Info: [wayland] Found interface: zxdg_output_manager_v1(8) version 3
  [2026-03-27 19:12:15.928]: Info: [wayland] Found interface: zwlr_screencopy_manager_v1(28) version 3
  [2026-03-27 19:12:15.928]: Info: [wayland] Found interface: wl_output(53) version 4
  [2026-03-27 19:12:15.928]: Info: [wayland] Resolution: 2560x1440
  [2026-03-27 19:12:15.928]: Info: [wayland] Name: HEADLESS-1
  [2026-03-27 19:12:15.928]: Info: [wayland] Found monitor: Headless output 1
  [2026-03-27 19:12:15.928]: Info: [wayland] Offset: 0x0
  [2026-03-27 19:12:15.928]: Info: [wayland] Logical size: 2560x1440
  [2026-03-27 19:12:15.928]: Info: [wlgrab] Selected monitor [Headless output 1] for streaming
  [2026-03-27 19:12:15.928]: Info: Creating encoder [hevc_nvenc]
  [2026-03-27 19:12:15.928]: Info: Color coding: SDR (Rec. 601)
  [2026-03-27 19:12:15.928]: Info: Color depth: 8-bit
  [2026-03-27 19:12:15.928]: Info: Color range: MPEG
  [2026-03-27 19:12:15.929]: Info: EGL: context priority set to HIGH
  [2026-03-27 19:12:15.964]: Info: Streaming bitrate is 30988000
  [2026-03-27 19:12:15.985]: Info: Minimum FPS target set to ~30fps (33.3333ms)
  [2026-03-27 19:12:16.379]: Info: Setting default sink to: [sink-sunshine-stereo]
  [2026-03-27 19:12:16.380]: Info: Found default monitor by name: lts-sunshine-stereo.monitor
  [2026-03-27 19:12:16.413]: Info: Opus initialized: 48 kHz, 2 channels, 512 kbps (total), LOWDELAY

Here's the commands I ran for the requesting client's refresh rate:

Actions

  1. Setup or update virtual display
  2. Show full status
  3. Configure host controllers
  4. Configure display sync mode
  5. Advanced tools
  6. Exit
    Choose an action: 4
    Display sync mode
  7. Follow Moonlight's requested resolution and FPS
  8. Use the client's refresh rate
  9. Use a custom fixed mode (1920x1080 @ 60 Hz)
  10. Cancel
    Choose a mode: 2
    Refresh rate sync mode is already set to client's refresh rate for virtual-display launches.
    This controls both the virtual-display output mode and the dynamic MangoHud FPS limit source.
    Virtual display
    Status: [READY] stack is running
    Display sync: client's refresh rate; MangoHud FPS sync off
    Controllers: [AUTO] Moonlight/Sunshine client inputs work automatically
    Attention: [OK] nothing needs action right now
    Next step: Virtual display is ready. Use 'controllers', 'rumble', or 'logs' for follow-up actions.
    Actions
  11. Setup or update virtual display
  12. Show full status
  13. Configure host controllers
  14. Configure display sync mode
  15. Advanced tools
  16. Exit
    Choose an action: 0

Here's the xrandr command I ran from my TV's display:

  mohamed@mohamed-Latitude-7390:~$ xrandr -d :1
  Screen 0: minimum 8 x 8, current 2560 x 1440, maximum 32767 x 32767
  eDP1 connected (normal left inverted right x axis y axis)
     1920x1080     60.05 +  59.93    48.04  
     1680x1050     59.88  
     1400x1050     59.98  
     1600x900      60.00    59.95    59.82  
     1280x1024     60.02  
     1400x900      59.96    59.88  
     1280x960      60.00  
     1368x768      60.00    59.88    59.85  
     1280x800      59.81    59.91  
     1280x720      59.86    60.00    59.74  
     1024x768      60.00  
     1024x576      60.00    59.90    59.82  
     960x540       60.00    59.63    59.82  
     800x600       60.32    56.25  
     864x486       60.00    59.92    59.57  
     640x480       59.94  
     720x405       59.51    60.00    58.99  
     640x360       59.84    59.32    60.00  
  DP1 disconnected (normal left inverted right x axis y axis)
  DP2 disconnected (normal left inverted right x axis y axis)
  HDMI1 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 1420mm x 800mm
     4096x2160     30.00    24.00    29.97    23.98  
     3840x2160     30.00    25.00    24.00    29.97    23.98  
     2560x1440     59.95* 
     1920x1080     60.00    50.00    59.94    30.00    25.00    24.00    29.97    23.98  
     1920x1080i    60.00    50.00    59.94  
     1680x1050     59.88  
     1600x900      60.00  
     1280x1024     75.02    60.02  
     1440x900      59.90  
     1280x800      59.91  
     1152x864      75.00  
     1280x720      60.00    50.00    59.94  
     1024x768      75.03    70.07    60.00  
     832x624       74.55  
     800x600       72.19    75.00    60.32  
     720x576       50.00  
     720x576i      50.00  
     720x480       60.00    59.94  
     720x480i      60.00    59.94  
     640x480       75.00    72.81    66.67    60.00    59.94  
     720x400       70.08  
  HDMI2 disconnected (normal left inverted right x axis y axis)
  VIRTUAL1 disconnected (normal left inverted right x axis y axis)
  mohamed@mohamed-Latitude-7390:~$ 
<!-- gh-comment-id:4146075271 --> @SirWalterLibrary commented on GitHub (Mar 28, 2026): Okay, I tried with the newest version and it seems like it doesn't work with option 2. Here's my logs [2026-03-27 19:12:15.928]: Info: [wlgrab] -------- Start of Wayland monitor list -------- [2026-03-27 19:12:15.928]: Info: [wlgrab] Monitor 0 is HEADLESS-1: Headless output 1 [2026-03-27 19:12:15.928]: Info: [wlgrab] --------- End of Wayland monitor list --------- [2026-03-27 19:12:15.928]: Info: Screencasting with Wayland's protocol [2026-03-27 19:12:15.928]: Info: [wlgrab] Requested frame rate [60fps] [2026-03-27 19:12:15.928]: Info: [wayland] Found display [wayland-1] [2026-03-27 19:12:15.928]: Info: [wayland] Found interface: zwp_linux_dmabuf_v1(2) version 4 [2026-03-27 19:12:15.928]: Info: [wayland] Found interface: zxdg_output_manager_v1(8) version 3 [2026-03-27 19:12:15.928]: Info: [wayland] Found interface: zwlr_screencopy_manager_v1(28) version 3 [2026-03-27 19:12:15.928]: Info: [wayland] Found interface: wl_output(53) version 4 [2026-03-27 19:12:15.928]: Info: [wayland] Resolution: 2560x1440 [2026-03-27 19:12:15.928]: Info: [wayland] Name: HEADLESS-1 [2026-03-27 19:12:15.928]: Info: [wayland] Found monitor: Headless output 1 [2026-03-27 19:12:15.928]: Info: [wayland] Offset: 0x0 [2026-03-27 19:12:15.928]: Info: [wayland] Logical size: 2560x1440 [2026-03-27 19:12:15.928]: Info: [wlgrab] Selected monitor [Headless output 1] for streaming [2026-03-27 19:12:15.928]: Info: Creating encoder [hevc_nvenc] [2026-03-27 19:12:15.928]: Info: Color coding: SDR (Rec. 601) [2026-03-27 19:12:15.928]: Info: Color depth: 8-bit [2026-03-27 19:12:15.928]: Info: Color range: MPEG [2026-03-27 19:12:15.929]: Info: EGL: context priority set to HIGH [2026-03-27 19:12:15.964]: Info: Streaming bitrate is 30988000 [2026-03-27 19:12:15.985]: Info: Minimum FPS target set to ~30fps (33.3333ms) [2026-03-27 19:12:16.379]: Info: Setting default sink to: [sink-sunshine-stereo] [2026-03-27 19:12:16.380]: Info: Found default monitor by name: lts-sunshine-stereo.monitor [2026-03-27 19:12:16.413]: Info: Opus initialized: 48 kHz, 2 channels, 512 kbps (total), LOWDELAY Here's the commands I ran for the requesting client's refresh rate: Actions 1. Setup or update virtual display 2. Show full status 3. Configure host controllers 4. Configure display sync mode 5. Advanced tools 0. Exit Choose an action: 4 Display sync mode 1. Follow Moonlight's requested resolution and FPS 2. Use the client's refresh rate 3. Use a custom fixed mode (1920x1080 @ 60 Hz) 0. Cancel Choose a mode: 2 Refresh rate sync mode is already set to client's refresh rate for virtual-display launches. This controls both the virtual-display output mode and the dynamic MangoHud FPS limit source. Virtual display Status: [READY] stack is running Display sync: client's refresh rate; MangoHud FPS sync off Controllers: [AUTO] Moonlight/Sunshine client inputs work automatically Attention: [OK] nothing needs action right now Next step: Virtual display is ready. Use 'controllers', 'rumble', or 'logs' for follow-up actions. Actions 1. Setup or update virtual display 2. Show full status 3. Configure host controllers 4. Configure display sync mode 5. Advanced tools 0. Exit Choose an action: 0 Here's the `xrandr` command I ran from my TV's display: mohamed@mohamed-Latitude-7390:~$ xrandr -d :1 Screen 0: minimum 8 x 8, current 2560 x 1440, maximum 32767 x 32767 eDP1 connected (normal left inverted right x axis y axis) 1920x1080 60.05 + 59.93 48.04 1680x1050 59.88 1400x1050 59.98 1600x900 60.00 59.95 59.82 1280x1024 60.02 1400x900 59.96 59.88 1280x960 60.00 1368x768 60.00 59.88 59.85 1280x800 59.81 59.91 1280x720 59.86 60.00 59.74 1024x768 60.00 1024x576 60.00 59.90 59.82 960x540 60.00 59.63 59.82 800x600 60.32 56.25 864x486 60.00 59.92 59.57 640x480 59.94 720x405 59.51 60.00 58.99 640x360 59.84 59.32 60.00 DP1 disconnected (normal left inverted right x axis y axis) DP2 disconnected (normal left inverted right x axis y axis) HDMI1 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 1420mm x 800mm 4096x2160 30.00 24.00 29.97 23.98 3840x2160 30.00 25.00 24.00 29.97 23.98 2560x1440 59.95* 1920x1080 60.00 50.00 59.94 30.00 25.00 24.00 29.97 23.98 1920x1080i 60.00 50.00 59.94 1680x1050 59.88 1600x900 60.00 1280x1024 75.02 60.02 1440x900 59.90 1280x800 59.91 1152x864 75.00 1280x720 60.00 50.00 59.94 1024x768 75.03 70.07 60.00 832x624 74.55 800x600 72.19 75.00 60.32 720x576 50.00 720x576i 50.00 720x480 60.00 59.94 720x480i 60.00 59.94 640x480 75.00 72.81 66.67 60.00 59.94 720x400 70.08 HDMI2 disconnected (normal left inverted right x axis y axis) VIRTUAL1 disconnected (normal left inverted right x axis y axis) mohamed@mohamed-Latitude-7390:~$
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 28, 2026):

Do 2. Show full status while streaming, it will show the current resolution and refresh rate of the sway virtual display.

<!-- gh-comment-id:4146089758 --> @Arbitrate3280 commented on GitHub (Mar 28, 2026): Do 2. Show full status while streaming, it will show the current resolution and refresh rate of the sway virtual display.
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 28, 2026):

Image

Virtual display
Status: setup=configured, Sunshine=active, Sway=active
Runtime: input bridge=inactive, audio guard=active, portal handoff=idle
Host session: KDE / /usr/share/wayland-sessions/plasma.desktop
Input isolation: kwin-runtime-disable - disabled 5 of 5 Sunshine device(s) in KWin
Dynamic MangoHud FPS limit: [DISABLED] wrapped launches keep their normal MangoHud FPS behavior
MangoHud env value: not active
Refresh rate sync mode: client's refresh rate
Dependencies: [OK] all required commands available
Headless display: wayland-1
Current headless mode: 2560x1440 @ 60 Hz
Host controllers: [AUTO] none reserved; client inputs from Moonlight/Sunshine already work automatically
Blocked Flatpak apps: [OK] none detected
Next step: Virtual display is ready. Use 'controllers', 'rumble', or 'logs' for follow-up actions.

Virtual display
Status: [READY] stack is running
Display sync: client's refresh rate; MangoHud FPS sync off
Controllers: [AUTO] Moonlight/Sunshine client inputs work automatically
Attention: [OK] nothing needs action right now
Next step: Virtual display is ready. Use 'controllers', 'rumble', or 'logs' for follow-up actions.

<!-- gh-comment-id:4146102162 --> @SirWalterLibrary commented on GitHub (Mar 28, 2026): <img width="1038" height="414" alt="Image" src="https://github.com/user-attachments/assets/d4116f81-6503-4bca-bfa3-6d19a1360ed4" /> Virtual display Status: setup=configured, Sunshine=active, Sway=active Runtime: input bridge=inactive, audio guard=active, portal handoff=idle Host session: KDE / /usr/share/wayland-sessions/plasma.desktop Input isolation: kwin-runtime-disable - disabled 5 of 5 Sunshine device(s) in KWin Dynamic MangoHud FPS limit: [DISABLED] wrapped launches keep their normal MangoHud FPS behavior MangoHud env value: not active Refresh rate sync mode: client's refresh rate Dependencies: [OK] all required commands available Headless display: wayland-1 Current headless mode: 2560x1440 @ 60 Hz Host controllers: [AUTO] none reserved; client inputs from Moonlight/Sunshine already work automatically Blocked Flatpak apps: [OK] none detected Next step: Virtual display is ready. Use 'controllers', 'rumble', or 'logs' for follow-up actions. Virtual display Status: [READY] stack is running Display sync: client's refresh rate; MangoHud FPS sync off Controllers: [AUTO] Moonlight/Sunshine client inputs work automatically Attention: [OK] nothing needs action right now Next step: Virtual display is ready. Use 'controllers', 'rumble', or 'logs' for follow-up actions.
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 28, 2026):

Grab the latest version of the script, do a re-install again I had some more fixes. But what I think is happening here is that moonlight is sending the refresh rate of the main monitor, not the tv. Both are the same resolution, one is 60hz the other 59.95hz.

Moonlight is reportign the client's refresh rate as 60fps:
[2026-03-27 19:12:15.928]: Info: [wlgrab] Requested frame rate [60fps]

It's an integrated display right? I don't suppose you can turn it off leaving only the tv on?

<!-- gh-comment-id:4146108326 --> @Arbitrate3280 commented on GitHub (Mar 28, 2026): Grab the latest version of the script, do a re-install again I had some more fixes. But what I think is happening here is that moonlight is sending the refresh rate of the main monitor, not the tv. Both are the same resolution, one is 60hz the other 59.95hz. Moonlight is reportign the client's refresh rate as 60fps: [2026-03-27 19:12:15.928]: Info: [wlgrab] Requested frame rate [60fps] It's an integrated display right? I don't suppose you can turn it off leaving only the tv on?
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 28, 2026):

Or maybe set the tv as your main monitor? Idk how moonlight is deciding which one to send.

<!-- gh-comment-id:4146123628 --> @Arbitrate3280 commented on GitHub (Mar 28, 2026): Or maybe set the tv as your main monitor? Idk how moonlight is deciding which one to send.
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 28, 2026):

Basically, I have a laptop (lid closed) connected to my TV (so it's the only display).

I'll grab the latest and try again

<!-- gh-comment-id:4146131727 --> @SirWalterLibrary commented on GitHub (Mar 28, 2026): Basically, I have a laptop (lid closed) connected to my TV (so it's the only display). I'll grab the latest and try again
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 28, 2026):

When the lid is closed, does the monitor stops showing up in the screen/monitor part of the system settings?

<!-- gh-comment-id:4146138103 --> @Arbitrate3280 commented on GitHub (Mar 28, 2026): When the lid is closed, does the monitor stops showing up in the screen/monitor part of the system settings?
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 28, 2026):

Yes. The monitor of the laptop is disabled when closed, but still displays to the TV at 2560x1440 at 59.95

<!-- gh-comment-id:4146143109 --> @SirWalterLibrary commented on GitHub (Mar 28, 2026): Yes. The monitor of the laptop is disabled when closed, but still displays to the TV at 2560x1440 at 59.95
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 28, 2026):

Hmmm, the issue is that we're setting it to what moonlight reports. And moonlight is reporting it as 60, most likely reporting the wrong monitor.

[2026-03-27 19:12:15.928]: Info: [wlgrab] Requested frame rate [60fps]

I really don't know how to help you here, as this is outside of our project and goes into moonlight land.

For reference, on my end for my tv it reports it like so:
[2026-03-27 20:49:33.469]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps].

<!-- gh-comment-id:4146156273 --> @Arbitrate3280 commented on GitHub (Mar 28, 2026): Hmmm, the issue is that we're setting it to what moonlight reports. And moonlight is reporting it as 60, most likely reporting the wrong monitor. > [2026-03-27 19:12:15.928]: Info: [wlgrab] Requested frame rate [60fps] I really don't know how to help you here, as this is outside of our project and goes into moonlight land. For reference, on my end for my tv it reports it like so: [2026-03-27 20:49:33.469]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps].
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 28, 2026):

Is your TV hooked to a computer or do you have Moonlight installed on your TV?

<!-- gh-comment-id:4146172184 --> @SirWalterLibrary commented on GitHub (Mar 28, 2026): Is your TV hooked to a computer or do you have Moonlight installed on your TV?
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 28, 2026):

I have moonlight installed on the TV (Android TV)

<!-- gh-comment-id:4146174936 --> @Arbitrate3280 commented on GitHub (Mar 28, 2026): I have moonlight installed on the TV (Android TV)
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 28, 2026):

Hey, just wanted to say, I really appreciate your time and effort! It really does not go unnoticed.

Just one last question/comment:

I DO think this is a Moonlight issue, which is sad to say and I wish there was a way to manually set things on there rather than attempt some tricks to get 59.95 Hz to work.

I would like to understand what option 2 does for 4. Configure display sync mode. Is it requesting the client's refresh rate from the connected display?

I'm no wizard like you, but maybe there is a different way we can extract the 59.95 Hz. I think it's defaulting to 60 Hz because it doesn't know where to grab which display from the client's refresh rate. For reference, I am using the xrandr -d :0 command on Linux to show display settings.

Let me know if that makes sense. It can be a bit confusing how I worded this.

Thanks so much!!!

<!-- gh-comment-id:4146289254 --> @SirWalterLibrary commented on GitHub (Mar 28, 2026): Hey, just wanted to say, I really appreciate your time and effort! It really does not go unnoticed. Just one last question/comment: I DO think this is a Moonlight issue, which is sad to say and I wish there was a way to manually set things on there rather than attempt some tricks to get 59.95 Hz to work. I would like to understand what option 2 does for `4. Configure display sync mode`. Is it requesting the client's refresh rate from the connected display? I'm no wizard like you, but maybe there is a different way we can extract the 59.95 Hz. I think it's defaulting to 60 Hz because it doesn't know where to grab which display from the client's refresh rate. For reference, I am using the `xrandr -d :0` command on Linux to show display settings. Let me know if that makes sense. It can be a bit confusing how I worded this. Thanks so much!!!
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 28, 2026):

Here's what I mean

Image
<!-- gh-comment-id:4146292795 --> @SirWalterLibrary commented on GitHub (Mar 28, 2026): Here's what I mean <img width="759" height="831" alt="Image" src="https://github.com/user-attachments/assets/6997b104-f5fc-4549-88fb-c1dc7415ce53" />
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 28, 2026):

So, here's how it works:

LutrisToSunshine only has the information about the clients that Sunshine offers to it. And Sunshine only has the information about the clients that Moonlight gives to it.

For option 2 (Use the client's refresh rate), it works like this:
On my case, Moonlight reports to Sunshine that the client's refresh rate is
[2026-03-27 20:49:33.469]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps].

LutrisToSunshine is looking at the Sunshine's logs, once this information shows up there, it sets the refresh rate of the virtual display to what is appearing at the logs, in this case 59.94.

For option 1 (Follow Moonlight's requested resolution and FPS) Moonlight can automatically populate a env variable "SUNSHINE_CLIENT_FPS", so we use the value of that variable.

I do think that the issue is that Moonlight is picking the wrong monitor and sending info about your laptop screen instead of the TV. A way to test this would be to change the resolution and refresh rate of your laptop and then start a stream, to see if the "Info: [wlgrab] Requested frame rate" matches it.

If that is confirmed to be the case, then I think your next step should be to figure out if there's a way you can hide/completely disable the laptop monitor. Because if it's still showing in xrandr then it might still be showing to Moonlight, even with a close lid.

Otherwise, the last option is to do option 3 of the display snyc mode:
3. Use a custom fixed mode (1920x1080 @ 60 Hz)
And set this to 2560x1440@59.95 every time you want to stream to that TV. But yeah, a pain in the ass to do this every time.

It would be great if Sunshine showed on the logs the name of the client when a stream started. This way I could modify the script so you could set it up that every time client X connected (in this case your tv), it would use 2560x1440@59.95.

<!-- gh-comment-id:4146377531 --> @Arbitrate3280 commented on GitHub (Mar 28, 2026): So, here's how it works: LutrisToSunshine only has the information about the clients that Sunshine offers to it. And Sunshine only has the information about the clients that Moonlight gives to it. For option 2 (Use the client's refresh rate), it works like this: On my case, Moonlight reports to Sunshine that the client's refresh rate is [2026-03-27 20:49:33.469]: Info: [wlgrab] Requested frame rate [60000/1001, approx. 59.9401 fps]. LutrisToSunshine is looking at the Sunshine's logs, once this information shows up there, it sets the refresh rate of the virtual display to what is appearing at the logs, in this case 59.94. For option 1 (Follow Moonlight's requested resolution and FPS) Moonlight can automatically populate a env variable "SUNSHINE_CLIENT_FPS", so we use the value of that variable. I do think that the issue is that Moonlight is picking the wrong monitor and sending info about your laptop screen instead of the TV. A way to test this would be to change the resolution and refresh rate of your laptop and then start a stream, to see if the "Info: [wlgrab] Requested frame rate" matches it. If that is confirmed to be the case, then I think your next step should be to figure out if there's a way you can hide/completely disable the laptop monitor. Because if it's still showing in xrandr then it might still be showing to Moonlight, even with a close lid. Otherwise, the last option is to do option 3 of the display snyc mode: 3. Use a custom fixed mode (1920x1080 @ 60 Hz) And set this to 2560x1440@59.95 every time you want to stream to that TV. But yeah, a pain in the ass to do this every time. It would be great if Sunshine showed on the logs the name of the client when a stream started. This way I could modify the script so you could set it up that every time client X connected (in this case your tv), it would use 2560x1440@59.95.
Author
Owner

@Arbitrate3280 commented on GitHub (Mar 28, 2026):

If you're open to a really hacky workaround, there's also the option of forking moonlight, poking around the code to figure out the right place and changing it so it forcibly reports 59.95, and use that version on this machine hehehe.

Otherwise I'm all out of ideas.

Hope you can figure something out!

<!-- gh-comment-id:4146397979 --> @Arbitrate3280 commented on GitHub (Mar 28, 2026): If you're open to a really hacky workaround, there's also the option of forking moonlight, poking around the code to figure out the right place and changing it so it forcibly reports 59.95, and use that version on this machine hehehe. Otherwise I'm all out of ideas. Hope you can figure something out!
Author
Owner

@SirWalterLibrary commented on GitHub (Mar 28, 2026):

Hey, I did some more testing and I feel that the stuttering issue is nonexistent now (yayyyyy). I turned on V sync and frame pacing on my Moonlight client setting in combination of virtual displays. I think that helped. I will update further if I continue to see the same pattern or experience stuttering.

I made a Reddit post that covers this:
https://www.reddit.com/r/MoonlightStreaming/s/cBY5QHtpMJ

<!-- gh-comment-id:4146777832 --> @SirWalterLibrary commented on GitHub (Mar 28, 2026): Hey, I did some more testing and I feel that the stuttering issue is nonexistent now (yayyyyy). I turned on V sync and frame pacing on my Moonlight client setting in combination of virtual displays. I think that helped. I will update further if I continue to see the same pattern or experience stuttering. I made a Reddit post that covers this: https://www.reddit.com/r/MoonlightStreaming/s/cBY5QHtpMJ
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Arbitrate3280/LutrisToSunshine#10
No description provided.