Files
2026-08-23 23:39:57 +00:00

67 lines
2.7 KiB
Markdown

# Sunshine Snake Glue
(Yes it's a silly name)
## What's This?
A tool that changes the resolution of a Sunshine host to an approximation of the client Moonlight resolution.
## What is Sunshine and Moonlight?
[Sunshine](https://github.com/lizardbyte/sunshine)
[Moonlight](https://moonlight-stream.org/)
**TLDR**: Sunshine is an ultra low latency display streaming server, and Moonlight is a client for it. I get around 1ms~ when using it for my tablet as a second display.
## What Does This Support?
Linux, specifically only GNOME's Wayland session at the moment.
### Support list:
| Compositor | Support |
| :--- | ---: |
| GNOME | ⚠️ (Functional/Work in progress) |
| KDE Plasma | ❌ |
| Sway | ❌ |
| Hyprland | ❌ |
### X11?
I don't think I'll ever extend this to support X11. Sunshine has options to interact with an X server, Wayland compositors tend to be much stricter, and this is just a middle layer to make that communication pleasant. Sunshine's documentation [even has instructions for X11](https://docs.lizardbyte.dev/projects/sunshine/master/md_docs_2app__examples.html#x11). Yes, it does mention GNOME's Wayland session, but it makes the bold assumption that the client has an exact match with a resolution/refresh rate the compositor offers.
## Dependencies
A version of GNOME that supports `gdctl`, and Python 3.10+
## Usage
### Arguments
- `set` changes the resolution of the given display adapter
- `create` generates a script, filling placeholders documented below. (It aligns the application with the matched resolution, not Sunshine's internal resolution info)
- `reset` sets the resolution of the provided adapter back to what it was before connecting.
### Common Usage
`[path]` represents the full path of sunshine snake glue for brevity.
`[display adapter]` represents the adapter identifier that Sunshine internally uses.
`[string with placeholders]` is self explanatory.
#### Do Instructions
Do: `python3 [path] set [display adapter]`
Do: `python3 [path] create [display adapter] [string with placeholders]`
(This saves a file in `~/.sunshine-snake-glue` called `script.sh`, and sets its permissions accordingly.)
#### Undo Instructions
Undo: `python3 [path] reset [display adapter]`
#### Possible Placeholders
- `{res_x}` (The horizontal resolution.)
- `{res_y}` (The vertical resolution.)
- `{rate}` (The refresh rate.)
### Example Usage
#### Do:
```
python3 /home/ogrey/Development/sunshine-snake-glue set HDMI-2
python3 /home/ogrey/Development/sunshine-snake-glue create HDMI-2 "gamescope -f -W {res_x} -H {res_y} -r {rate} -e -- steam -bigpicture -steamos3"
```
#### Command:
```
/home/agrey/.sunshine-snake-glue/script.sh
```
#### Undo:
```
python3 /home/agrey/Development/sunshine-snake-glue reset HDMI-2
```