Merge remote-tracking branch 'sunshine/master'
This commit is contained in:
@@ -4,6 +4,28 @@ set -e
|
||||
# update pacman
|
||||
pacman --noconfirm -Syu
|
||||
|
||||
gcc_version="14.2.0-3"
|
||||
|
||||
broken_deps=(
|
||||
"mingw-w64-ucrt-x86_64-gcc"
|
||||
"mingw-w64-ucrt-x86_64-gcc-libs"
|
||||
)
|
||||
|
||||
tarballs=""
|
||||
for dep in "${broken_deps[@]}"; do
|
||||
tarball="${dep}-${gcc_version}-any.pkg.tar.zst"
|
||||
|
||||
# download and install working version
|
||||
wget https://repo.msys2.org/mingw/ucrt64/${tarball}
|
||||
|
||||
tarballs="${tarballs} ${tarball}"
|
||||
done
|
||||
|
||||
# install broken dependencies
|
||||
if [ -n "$tarballs" ]; then
|
||||
pacman -U --noconfirm ${tarballs}
|
||||
fi
|
||||
|
||||
# install dependencies
|
||||
dependencies=(
|
||||
"git"
|
||||
@@ -20,7 +42,8 @@ dependencies=(
|
||||
"mingw-w64-ucrt-x86_64-opus"
|
||||
"mingw-w64-ucrt-x86_64-toolchain"
|
||||
)
|
||||
pacman -S --noconfirm "${dependencies[@]}"
|
||||
|
||||
pacman -Syu --noconfirm --ignore="$(IFS=,; echo "${broken_deps[*]}")" "${dependencies[@]}"
|
||||
|
||||
# build
|
||||
mkdir -p build
|
||||
|
||||
@@ -49,6 +49,7 @@ INPUT = ../README.md \
|
||||
legal.md \
|
||||
configuration.md \
|
||||
app_examples.md \
|
||||
awesome_sunshine.md \
|
||||
guides.md \
|
||||
performance_tuning.md \
|
||||
api.md \
|
||||
|
||||
@@ -24,22 +24,25 @@ process is killed.}
|
||||
@tabs{
|
||||
@tab{Linux | <!-- -->
|
||||
\| Field \| Value \|
|
||||
\|-------------------\|-----------------------------------------------------\|
|
||||
\|------------------------------\|------------------------------------------------------\|
|
||||
\| Application Name \| @code{}Steam Big Picture@endcode \|
|
||||
\| Command Preporations -> Undo \| @code{}setsid steam steam://close/bigpicture@endcode \|
|
||||
\| Detached Commands \| @code{}setsid steam steam://open/bigpicture@endcode \|
|
||||
\| Image \| @code{}steam.png@endcode \|
|
||||
}
|
||||
@tab{macOS | <!-- -->
|
||||
\| Field \| Value \|
|
||||
\|-------------------\|---------------------------------------------------\|
|
||||
\|------------------------------\|------------------------------------------------\|
|
||||
\| Application Name \| @code{}Steam Big Picture@endcode \|
|
||||
\| Detached Commands \| @code{}open steam steam://open/bigpicture@endcode \|
|
||||
\| Command Preporations -> Undo \| @code{}open steam://close/bigpicture@endcode \|
|
||||
\| Detached Commands \| @code{}open steam://open/bigpicture@endcode \|
|
||||
\| Image \| @code{}steam.png@endcode \|
|
||||
}
|
||||
@tab{Windows | <!-- -->
|
||||
\| Field \| Value \|
|
||||
\|-------------------\|----------------------------------------\|
|
||||
\|------------------------------\|-------------------------------------------\|
|
||||
\| Application Name \| @code{}Steam Big Picture@endcode \|
|
||||
\| Command Preporations -> Undo \| @code{}steam://close/bigpicture@endcode \|
|
||||
\| Detached Commands \| @code{}steam://open/bigpicture@endcode \|
|
||||
\| Image \| @code{}steam.png@endcode \|
|
||||
}
|
||||
@@ -210,7 +213,7 @@ xrandr --output ${display_output} --primary --mode ${mode_alias} --pos 0x0 --rot
|
||||
```
|
||||
}
|
||||
|
||||
###### Wayland
|
||||
###### Wayland (wlroots, e.g. hyprland)
|
||||
|
||||
| Prep Step | Command |
|
||||
|-----------|------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
@@ -219,17 +222,30 @@ xrandr --output ${display_output} --primary --mode ${mode_alias} --pos 0x0 --rot
|
||||
|
||||
@hint{`wlr-xrandr` only works with wlroots-based compositors.}
|
||||
|
||||
###### Gnome (Wayland, X11)
|
||||
###### Gnome (X11)
|
||||
|
||||
| Prep Step | Command |
|
||||
|-----------|---------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Do | @code{}sh -c "xrandr --output HDMI-1 --mode ${SUNSHINE_CLIENT_WIDTH}x${SUNSHINE_CLIENT_HEIGHT} --rate ${SUNSHINE_CLIENT_FPS}"@endcode |
|
||||
| Undo | @code{}xrandr --output HDMI-1 --mode 3840x2160 --rate 120@endcode |
|
||||
|
||||
The commands above are valid for an X11 session but won't work for
|
||||
Wayland. In that case `xrandr` must be replaced by [gnome-randr.py](https://gitlab.com/Oschowa/gnome-randr).
|
||||
This script is intended as a drop-in replacement with the same syntax. (It can be saved in
|
||||
`/usr/local/bin` and needs to be made executable.)
|
||||
###### Gnome (Wayland)
|
||||
|
||||
| Prep Step | Command |
|
||||
|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Do | @code{}sh -c "displayconfig-mutter set --connector HDMI-1 --resolution ${SUNSHINE_CLIENT_WIDTH}x${SUNSHINE_CLIENT_HEIGHT} --refresh-rate ${SUNSHINE_CLIENT_FPS} --hdr ${SUNSHINE_CLIENT_HDR}"@endcode |
|
||||
| Undo | @code{}displayconfig-mutter set --connector HDMI-1 --resolution 3840x2160 --refresh-rate 120 --hdr false@endcode |
|
||||
|
||||
Installation instructions for displayconfig-mutter can be [found here](https://github.com/eaglesemanation/displayconfig-mutter). Alternatives include
|
||||
[gnome-randr-rust](https://github.com/maxwellainatchi/gnome-randr-rust) and [gnome-randr.py](https://gitlab.com/Oschowa/gnome-randr), but both of those are
|
||||
unmaintained and do not support newer Mutter features such as HDR and VRR.
|
||||
|
||||
@hint{HDR support has been added to Gnome 48, to check if your display supports it you can run this:
|
||||
```
|
||||
displayconfig-mutter list
|
||||
```
|
||||
If it doesn't, then remove ``--hdr`` flag from both ``Do`` and ``Undo`` steps.
|
||||
}
|
||||
|
||||
###### KDE Plasma (Wayland, X11)
|
||||
|
||||
@@ -323,8 +339,8 @@ UAC prompt.
|
||||
<div class="section_buttons">
|
||||
|
||||
| Previous | Next |
|
||||
|:----------------------------------|--------------------:|
|
||||
| [Configuration](configuration.md) | [Guides](guides.md) |
|
||||
|:----------------------------------|----------------------------------------:|
|
||||
| [Configuration](configuration.md) | [Awesome-Sunshine](awesome_sunshine.md) |
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
23
docs/awesome_sunshine.md
Normal file
23
docs/awesome_sunshine.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# Awesome-Sunshine
|
||||
|
||||
@htmlonly
|
||||
<script type="module" src="https://md-block.verou.me/md-block.js"></script>
|
||||
<md-block
|
||||
hlinks=""
|
||||
hmin="2"
|
||||
src="https://raw.githubusercontent.com/LizardByte/awesome-sunshine/master/README.md">
|
||||
</md-block>
|
||||
@endhtmlonly
|
||||
|
||||
<div class="section_buttons">
|
||||
|
||||
| Previous | Next |
|
||||
|:--------------------------------|--------------------:|
|
||||
| [App Examples](app_examples.md) | [Guides](guides.md) |
|
||||
|
||||
</div>
|
||||
|
||||
<details style="display: none;">
|
||||
<summary></summary>
|
||||
[TOC]
|
||||
</details>
|
||||
@@ -770,6 +770,29 @@ editing the `conf` file in a text editor. Use the examples as reference.
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### stream_audio
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>Description</td>
|
||||
<td colspan="2">
|
||||
Whether to stream audio or not. Disabling this can be useful for streaming headless displays as second monitors.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Default</td>
|
||||
<td colspan="2">@code{}
|
||||
enabled
|
||||
@endcode</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Example</td>
|
||||
<td colspan="2">@code{}
|
||||
stream_audio = disabled
|
||||
@endcode</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### install_steam_audio_drivers
|
||||
|
||||
<table>
|
||||
@@ -1947,7 +1970,8 @@ editing the `conf` file in a text editor. Use the examples as reference.
|
||||
</tr>
|
||||
<tr>
|
||||
<td>wlr</td>
|
||||
<td>Capture for wlroots based Wayland compositors via DMA-BUF.
|
||||
<td>Capture for wlroots based Wayland compositors via wlr-screencopy-unstable-v1. It is possible to capture
|
||||
virtual displays in e.g. Hyprland using this method.
|
||||
@note{Applies to Linux only.}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -8,8 +8,8 @@ Feel free to contribute your own tips and trips by making a PR to
|
||||
<div class="section_buttons">
|
||||
|
||||
| Previous | Next |
|
||||
|:--------------------------------|--------------------------------------------:|
|
||||
| [App Examples](app_examples.md) | [Performance Tuning](performance_tuning.md) |
|
||||
|:----------------------------------------|--------------------------------------------:|
|
||||
| [Awesome-Sunshine](awesome_sunshine.md) | [Performance Tuning](performance_tuning.md) |
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ ext-js:
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="icon text-white">
|
||||
<img class="icon" src="https://moonlight-stream.org/images/moonlight.svg" alt="Moonlight">
|
||||
<img class="icon" src="https://moonlight-stream.org/images/moonlight.svg" alt="Moonlight"/>
|
||||
</div>
|
||||
<div class="ms-3">
|
||||
<h5 class="fw-bolder mb-0">Moonlight Support</h5>
|
||||
@@ -163,7 +163,7 @@ ext-js:
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="icon text-white">
|
||||
<i class="fa-fw fa-2x fab fa-android"></i>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/android.svg" alt="Android"/>
|
||||
</div>
|
||||
<div class="ms-3">
|
||||
<h5 class="fw-bolder mb-0">
|
||||
@@ -182,7 +182,7 @@ ext-js:
|
||||
<a href="https://play.google.com/store/apps/details?id=com.limelight" target="_blank">
|
||||
<img alt="Get it on Google Play"
|
||||
src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png"
|
||||
height="60">
|
||||
height="60"/>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
@@ -190,14 +190,14 @@ ext-js:
|
||||
<img alt="Available at Amazon Appstore"
|
||||
src="https://images-na.ssl-images-amazon.com/images/G/01/mobile-apps/devportal2/res/images/amazon-appstore-badge-english-black.png"
|
||||
height="60"
|
||||
style="padding: 10px;">
|
||||
style="padding: 10px;"/>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://f-droid.org/packages/com.limelight" target="_blank">
|
||||
<img alt="Get it on F-Droid"
|
||||
src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
|
||||
height="60">
|
||||
height="60"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -210,7 +210,7 @@ ext-js:
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="icon text-white">
|
||||
<i class="fa-fw fa-2x fab fa-chrome"></i>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/chromewebstore.svg" alt="Chrome Web Store"/>
|
||||
</div>
|
||||
<div class="ms-3">
|
||||
<h5 class="fw-bolder mb-0">
|
||||
@@ -229,7 +229,7 @@ ext-js:
|
||||
<a href="https://chrome.google.com/webstore/detail/moonlight-game-streaming/gemamigbbenahjlfnmlfdjhdnkpbkfjj" target="_blank" class="btn btn-outline-light">
|
||||
<img alt="Available in the Chrome Web Store"
|
||||
src="https://developer.chrome.com/static/docs/webstore/branding/image/206x58-chrome-web-043497a3d766e.png"
|
||||
height="30">
|
||||
height="30"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -242,7 +242,8 @@ ext-js:
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="icon text-white">
|
||||
<i class="fa-fw fa-2x fab fa-apple"></i>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/ios.svg" alt="iOS"/>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/appletv.svg" alt="Apple TV"/>
|
||||
</div>
|
||||
<div class="ms-3">
|
||||
<h5 class="fw-bolder mb-0">
|
||||
@@ -261,14 +262,14 @@ ext-js:
|
||||
<a href="https://apps.apple.com/us/app/moonlight-game-streaming/id1000551566" target="_blank">
|
||||
<img alt="Download on the App Store"
|
||||
src="https://developer.apple.com/assets/elements/badges/download-on-the-app-store.svg"
|
||||
height="40">
|
||||
height="40"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="pb-3">
|
||||
<a href="https://apps.apple.com/us/app/moonlight-game-streaming/id1000551566" target="_blank">
|
||||
<img alt="Download on Apple TV"
|
||||
src="https://developer.apple.com/app-store/marketing/guidelines/images/badge-download-on-apple-tv.svg"
|
||||
height="40">
|
||||
height="40"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -281,10 +282,10 @@ ext-js:
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="icon text-white">
|
||||
<i class="fa-fw fa-2x fab fa-linux"></i>
|
||||
<i class="fa-fw fa-2x fab fa-apple"></i>
|
||||
<i class="fa-fw fa-2x fab fa-windows"></i>
|
||||
<i class="fa-fw fa-2x fab fa-steam"></i>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/linux.svg" alt="Linux"/>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/macos.svg" alt="macOS"/>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/icons/windows.svg" alt="Windows"/>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/steam.svg" alt="Steam"/>
|
||||
</div>
|
||||
<div class="ms-3">
|
||||
<h5 class="fw-bolder mb-0">
|
||||
@@ -314,7 +315,7 @@ ext-js:
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="icon text-white">
|
||||
<i class="fa-fw fa-2x fas fa-microchip"></i>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/raspberrypi.svg" alt="Raspberry Pi"/>
|
||||
</div>
|
||||
<div class="ms-3">
|
||||
<h5 class="fw-bolder mb-0">
|
||||
@@ -344,7 +345,7 @@ ext-js:
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="icon text-white">
|
||||
<i class="fa-fw fa-2x fab fa-xbox"></i>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/icons/xbox.svg" alt="Xbox"/>
|
||||
</div>
|
||||
<div class="ms-3">
|
||||
<h5 class="fw-bolder mb-0">
|
||||
@@ -363,7 +364,7 @@ ext-js:
|
||||
<a href="https://apps.microsoft.com/store/detail/moonlight-uwp/9MW1BS08ZBTH" target="_blank">
|
||||
<img alt="Get it from Microsoft"
|
||||
src="https://get.microsoft.com/images/en-us%20dark.svg"
|
||||
height="40">
|
||||
height="40"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -376,7 +377,7 @@ ext-js:
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="icon text-white">
|
||||
<i class="fa-fw fa-2x fab fa-playstation"></i>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/playstationvita.svg" alt="PlayStation Vita"/>
|
||||
</div>
|
||||
<div class="ms-3">
|
||||
<h5 class="fw-bolder mb-0">
|
||||
@@ -406,12 +407,16 @@ ext-js:
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="icon text-white">
|
||||
<i class="fa-fw fa-2x fas fa-code"></i>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/icons/nintendo-switch.svg" alt="Nintendo Switch"/>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/android.svg" alt="Android"/>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/appletv.svg" alt="Apple TV"/>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/ios.svg" alt="iOS"/>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/macos.svg" alt="macOS"/>
|
||||
</div>
|
||||
<div class="ms-3">
|
||||
<h5 class="fw-bolder mb-0">
|
||||
<a href="https://github.com/XITRIX/Moonlight-Switch" target="_blank" class="text-white text-decoration-none">
|
||||
Nintendo Switch
|
||||
Moonlight Switch
|
||||
</a>
|
||||
</h5>
|
||||
</div>
|
||||
@@ -436,7 +441,7 @@ ext-js:
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="icon text-white">
|
||||
<i class="fa-fw fa-2x fas fa-code"></i>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v12/icons/wiiu.svg" alt="Wii U"/>
|
||||
</div>
|
||||
<div class="ms-3">
|
||||
<h5 class="fw-bolder mb-0">
|
||||
@@ -466,7 +471,7 @@ ext-js:
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="icon text-white">
|
||||
<i class="fa-fw fa-2x fas fa-code"></i>
|
||||
<img class="invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/lg.svg" alt="LG webOS TV"/>
|
||||
</div>
|
||||
<div class="ms-3">
|
||||
<h5 class="fw-bolder mb-0">
|
||||
@@ -514,7 +519,7 @@ ext-js:
|
||||
</div>
|
||||
<div class="card-footer p-3 px-4">
|
||||
<a class="btn btn-outline-light me-3 mb-3" href="https://docs.lizardbyte.dev/projects/sunshine" target="_blank">
|
||||
<i class="fa-fw fas fa-book"></i>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/readthedocs.svg" alt="ReadTheDocs"/>
|
||||
Read the Docs
|
||||
</a>
|
||||
</div>
|
||||
@@ -537,27 +542,37 @@ ext-js:
|
||||
</div>
|
||||
<div class="card-footer p-3 px-4">
|
||||
<a class="latest-button btn btn-outline-light me-3 mb-3 d-none" href="https://github.com/LizardByte/Sunshine/releases/latest" target="_blank">
|
||||
<i class="fa-fw fab fa-github"></i>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/github.svg" alt="GitHub"/>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/icons/windows.svg" alt="Windows"/>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/debian.svg" alt="Debian"/>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/ubuntu.svg" alt="Ubuntu"/>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/flatpak.svg" alt="Flatpak"/>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/linux.svg" alt="AppImage"/>
|
||||
Latest: <span id="latest-version" class="crowdin-ignore"></span>
|
||||
</a>
|
||||
<a class="beta-button btn btn-outline-light me-3 mb-3 d-none" href="#" target="_blank">
|
||||
<i class="fa-fw fas fa-flask"></i>
|
||||
<i class="fa-fw fa-lg fas fa-flask"></i>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/icons/windows.svg" alt="Windows"/>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/debian.svg" alt="Debian"/>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/ubuntu.svg" alt="Ubuntu"/>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/flatpak.svg" alt="Flatpak"/>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/linux.svg" alt="AppImage"/>
|
||||
Beta: <span id="beta-version" class="crowdin-ignore"></span>
|
||||
</a>
|
||||
<a class="btn btn-outline-light me-3 mb-3" href="https://github.com/LizardByte/pacman-repo" target="_blank">
|
||||
<i class="fa-fw fab fa-linux"></i>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/archlinux.svg" alt="Arch Linux"/>
|
||||
Arch Linux
|
||||
</a>
|
||||
<a class="btn btn-outline-light me-3 mb-3" href="https://hub.docker.com/r/lizardbyte/sunshine" target="_blank">
|
||||
<i class="fa-fw fab fa-docker"></i>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/docker.svg" alt="Docker"/>
|
||||
Docker
|
||||
</a>
|
||||
<a class="btn btn-outline-light me-3 mb-3" href="https://flathub.org/apps/dev.lizardbyte.app.Sunshine" target="_blank">
|
||||
<i class="fa-fw fab fa-linux"></i>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/flathub.svg" alt="Flathub"/>
|
||||
Flathub
|
||||
</a>
|
||||
<a class="btn btn-outline-light me-3 mb-3" href="https://github.com/LizardByte/homebrew-homebrew" target="_blank">
|
||||
<i class="fa-fw fas fa-beer-mug-empty"></i>
|
||||
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@v14/icons/homebrew.svg" alt="Homebrew"/>
|
||||
Homebrew
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"vue-i18n": "11.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@codecov/vite-plugin": "1.9.0",
|
||||
"@vitejs/plugin-vue": "4.6.2",
|
||||
"serve": "14.2.3",
|
||||
"vite": "4.5.9",
|
||||
|
||||
Submodule packaging/linux/flatpak/deps/flatpak-builder-tools updated: aac65cf44c...bf91cb0bee
@@ -29,6 +29,7 @@ class @PROJECT_NAME@ < Formula
|
||||
depends_on "cmake" => :build
|
||||
depends_on "doxygen" => :build
|
||||
depends_on "graphviz" => :build
|
||||
depends_on "ninja" => :build
|
||||
depends_on "node" => :build
|
||||
depends_on "pkg-config" => :build
|
||||
depends_on "curl"
|
||||
@@ -38,6 +39,24 @@ class @PROJECT_NAME@ < Formula
|
||||
depends_on "icu4c" => :recommended
|
||||
|
||||
on_linux do
|
||||
# the "build" dependencies are for libayatana-appindicator
|
||||
depends_on "at-spi2-core" => :build
|
||||
depends_on "cairo" => :build
|
||||
depends_on "fontconfig" => :build
|
||||
depends_on "freetype" => :build
|
||||
depends_on "fribidi" => :build
|
||||
depends_on "gettext" => :build
|
||||
depends_on "gobject-introspection" => :build
|
||||
depends_on "graphite2" => :build
|
||||
depends_on "gtk+3" => :build
|
||||
depends_on "harfbuzz" => :build
|
||||
depends_on "intltool" => :build
|
||||
depends_on "libepoxy" => :build
|
||||
depends_on "libxdamage" => :build
|
||||
depends_on "libxkbcommon" => :build
|
||||
depends_on "pango" => :build
|
||||
depends_on "perl" => :build
|
||||
depends_on "pixman" => :build
|
||||
depends_on "avahi"
|
||||
depends_on "libcap"
|
||||
depends_on "libdrm"
|
||||
@@ -56,6 +75,128 @@ class @PROJECT_NAME@ < Formula
|
||||
depends_on "pulseaudio"
|
||||
depends_on "systemd"
|
||||
depends_on "wayland"
|
||||
|
||||
# resources that do not have brew packages
|
||||
resource "libayatana-appindicator" do
|
||||
url "https://github.com/AyatanaIndicators/libayatana-appindicator/archive/refs/tags/0.5.94.tar.gz"
|
||||
sha256 "884a6bc77994c0b58c961613ca4c4b974dc91aa0f804e70e92f38a542d0d0f90"
|
||||
end
|
||||
|
||||
resource "libdbusmenu" do
|
||||
url "https://launchpad.net/libdbusmenu/16.04/16.04.0/+download/libdbusmenu-16.04.0.tar.gz"
|
||||
sha256 "b9cc4a2acd74509435892823607d966d424bd9ad5d0b00938f27240a1bfa878a"
|
||||
|
||||
patch 'From 729546c51806a1b3ea6cb6efb7a115b1baa811f1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <stefan.bruens@rwth-aachen.de>
|
||||
Date: Mon, 18 Nov 2019 19:58:53 +0100
|
||||
Subject: [PATCH 1/1] Fix HAVE_VALGRIND AM_CONDITIONAL
|
||||
|
||||
The AM_CONDITIONAL should also be run with --disable-tests, otherwise
|
||||
HAVE_VALGRIND is undefined.
|
||||
---
|
||||
configure | 4 ++--
|
||||
configure.ac | 2 +-
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index 831a3bb..8913b9b 100644
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -14801,6 +14801,8 @@ else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
have_valgrind=yes
|
||||
+fi
|
||||
+
|
||||
fi
|
||||
if test "x$have_valgrind" = "xyes"; then
|
||||
HAVE_VALGRIND_TRUE=
|
||||
@@ -14811,8 +14813,6 @@ else
|
||||
fi
|
||||
|
||||
|
||||
-fi
|
||||
-
|
||||
|
||||
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index ace54d1..cbd38a6 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -120,8 +120,8 @@ PKG_CHECK_MODULES(DBUSMENUTESTS, json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION
|
||||
[have_tests=yes]
|
||||
)
|
||||
PKG_CHECK_MODULES(DBUSMENUTESTSVALGRIND, valgrind, have_valgrind=yes, have_valgrind=no)
|
||||
-AM_CONDITIONAL([HAVE_VALGRIND], [test "x$have_valgrind" = "xyes"])
|
||||
])
|
||||
+AM_CONDITIONAL([HAVE_VALGRIND], [test "x$have_valgrind" = "xyes"])
|
||||
|
||||
AC_SUBST(DBUSMENUTESTS_CFLAGS)
|
||||
AC_SUBST(DBUSMENUTESTS_LIBS)
|
||||
--
|
||||
2.46.2
|
||||
|
||||
|
||||
'
|
||||
end
|
||||
|
||||
resource "ayatana-ido" do
|
||||
url "https://github.com/AyatanaIndicators/ayatana-ido/archive/refs/tags/0.10.4.tar.gz"
|
||||
sha256 "bd59abd5f1314e411d0d55ce3643e91cef633271f58126be529de5fb71c5ab38"
|
||||
|
||||
patch 'From 8a09e6ad33c58c017c0c8fd756da036fc39428ea Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Koskovich <akoskovich@pm.me>
|
||||
Date: Sun, 29 Sep 2024 13:47:54 -0400
|
||||
Subject: [PATCH 1/1] Make introspection configurable
|
||||
|
||||
---
|
||||
CMakeLists.txt | 1 +
|
||||
src/CMakeLists.txt | 4 ++++
|
||||
2 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 0e13fcd..f3e9ec0 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -12,6 +12,7 @@ endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
option(ENABLE_TESTS "Enable all tests and checks" OFF)
|
||||
option(ENABLE_COVERAGE "Enable coverage reports (includes enabling all tests and checks)" OFF)
|
||||
option(ENABLE_WERROR "Treat all build warnings as errors" OFF)
|
||||
+option(ENABLE_INTROSPECTION "Enable introspection" ON)
|
||||
|
||||
if(ENABLE_COVERAGE)
|
||||
set(ENABLE_TESTS ON)
|
||||
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
||||
index 5b3638d..aca9481 100644
|
||||
--- a/src/CMakeLists.txt
|
||||
+++ b/src/CMakeLists.txt
|
||||
@@ -108,6 +108,8 @@ install(TARGETS "ayatana-ido3-0.4" LIBRARY DESTINATION "${CMAKE_INSTALL_FULL_LIB
|
||||
|
||||
# AyatanaIdo3-0.4.gir
|
||||
|
||||
+if (ENABLE_INTROSPECTION)
|
||||
+
|
||||
find_package(GObjectIntrospection REQUIRED QUIET)
|
||||
|
||||
if (INTROSPECTION_FOUND)
|
||||
@@ -183,3 +185,5 @@ if (INTROSPECTION_FOUND)
|
||||
endif ()
|
||||
|
||||
endif ()
|
||||
+
|
||||
+endif ()
|
||||
--
|
||||
2.46.2
|
||||
|
||||
|
||||
'
|
||||
end
|
||||
|
||||
resource "libayatana-indicator" do
|
||||
url "https://github.com/AyatanaIndicators/libayatana-indicator/archive/refs/tags/0.9.4.tar.gz"
|
||||
sha256 "a18d3c682e29afd77db24366f8475b26bda22b0e16ff569a2ec71cd6eb4eac95"
|
||||
end
|
||||
end
|
||||
|
||||
def install
|
||||
@@ -65,12 +206,12 @@ class @PROJECT_NAME@ < Formula
|
||||
|
||||
args = %W[
|
||||
-DBUILD_WERROR=ON
|
||||
-DCMAKE_CXX_STANDARD=20
|
||||
-DCMAKE_INSTALL_PREFIX=#{prefix}
|
||||
-DHOMEBREW_ALLOW_FETCHCONTENT=ON
|
||||
-DOPENSSL_ROOT_DIR=#{Formula["openssl"].opt_prefix}
|
||||
-DSUNSHINE_ASSETS_DIR=sunshine/assets
|
||||
-DSUNSHINE_BUILD_HOMEBREW=ON
|
||||
-DSUNSHINE_ENABLE_TRAY=OFF
|
||||
-DSUNSHINE_PUBLISHER_NAME='LizardByte'
|
||||
-DSUNSHINE_PUBLISHER_WEBSITE='https://app.lizardbyte.dev'
|
||||
-DSUNSHINE_PUBLISHER_ISSUE_URL='https://app.lizardbyte.dev/support'
|
||||
@@ -105,16 +246,69 @@ class @PROJECT_NAME@ < Formula
|
||||
end
|
||||
|
||||
args << "-DCUDA_FAIL_ON_MISSING=OFF" if OS.linux?
|
||||
args << "-DSUNSHINE_ENABLE_TRAY=OFF" if OS.mac?
|
||||
|
||||
system "cmake", "-S", ".", "-B", "build", *std_cmake_args, *args
|
||||
# Handle system tray on Linux
|
||||
if OS.linux?
|
||||
# Build and install libayatana components
|
||||
|
||||
cd "build" do
|
||||
system "make"
|
||||
# Build libdbusmenu
|
||||
resource("libdbusmenu").stage do
|
||||
system "./configure",
|
||||
"--prefix=#{prefix}",
|
||||
"--with-gtk=3",
|
||||
"--disable-dumper",
|
||||
"--disable-static",
|
||||
"--disable-tests",
|
||||
"--disable-gtk-doc",
|
||||
"--enable-introspection=no",
|
||||
"--disable-vala"
|
||||
system "make", "install"
|
||||
|
||||
bin.install "tests/test_sunshine"
|
||||
end
|
||||
|
||||
# Build ayatana-ido
|
||||
resource("ayatana-ido").stage do
|
||||
system "cmake", "-S", ".", "-B", "build", "-G", "Ninja",
|
||||
"-DCMAKE_INSTALL_PREFIX=#{prefix}",
|
||||
"-DENABLE_INTROSPECTION=OFF",
|
||||
*std_cmake_args
|
||||
system "ninja", "-C", "build"
|
||||
system "ninja", "-C", "build", "install"
|
||||
end
|
||||
|
||||
# Build libayatana-indicator
|
||||
resource("libayatana-indicator").stage do
|
||||
ENV.append_path "PKG_CONFIG_PATH", "#{lib}/pkgconfig"
|
||||
ENV.append "LDFLAGS", "-L#{lib}"
|
||||
|
||||
system "cmake", "-S", ".", "-B", "build", "-G", "Ninja",
|
||||
"-DCMAKE_INSTALL_PREFIX=#{prefix}",
|
||||
*std_cmake_args
|
||||
system "ninja", "-C", "build"
|
||||
system "ninja", "-C", "build", "install"
|
||||
end
|
||||
|
||||
# Build libayatana-appindicator
|
||||
resource("libayatana-appindicator").stage do
|
||||
system "cmake", "-S", ".", "-B", "build", "-G", "Ninja",
|
||||
"-DCMAKE_INSTALL_PREFIX=#{prefix}",
|
||||
"-DENABLE_BINDINGS_MONO=OFF",
|
||||
"-DENABLE_BINDINGS_VALA=OFF",
|
||||
"-DENABLE_GTKDOC=OFF",
|
||||
*std_cmake_args
|
||||
system "ninja", "-C", "build"
|
||||
system "ninja", "-C", "build", "install"
|
||||
end
|
||||
end
|
||||
|
||||
system "cmake", "-S", ".", "-B", "build", "-G", "Unix Makefiles",
|
||||
*std_cmake_args,
|
||||
*args
|
||||
|
||||
system "make", "-C", "build"
|
||||
system "make", "-C", "build", "install"
|
||||
bin.install "build/tests/test_sunshine"
|
||||
|
||||
# codesign the binary on intel macs
|
||||
system "codesign", "-s", "-", "--force", "--deep", bin/"sunshine" if OS.mac? && Hardware::CPU.intel?
|
||||
|
||||
@@ -157,6 +351,7 @@ class @PROJECT_NAME@ < Formula
|
||||
system bin/"sunshine", "--version"
|
||||
|
||||
# run the test suite
|
||||
system bin/"test_sunshine", "--gtest_color=yes"
|
||||
system bin/"test_sunshine", "--gtest_color=yes", "--gtest_output=xml:test_results.xml"
|
||||
assert_path_exists testpath/"test_results.xml"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -90,6 +90,52 @@ shift $((OPTIND -1))
|
||||
# dependencies array to build out
|
||||
dependencies=()
|
||||
|
||||
function add_arch_deps() {
|
||||
dependencies+=(
|
||||
'avahi'
|
||||
'base-devel'
|
||||
'cmake'
|
||||
'curl'
|
||||
"gcc${gcc_version}"
|
||||
"gcc${gcc_version}-libs"
|
||||
'git'
|
||||
'libayatana-appindicator'
|
||||
'libcap'
|
||||
'libdrm'
|
||||
'libevdev'
|
||||
'libmfx'
|
||||
'libnotify'
|
||||
'libpulse'
|
||||
'libva'
|
||||
'libx11'
|
||||
'libxcb'
|
||||
'libxfixes'
|
||||
'libxrandr'
|
||||
'libxtst'
|
||||
'miniupnpc'
|
||||
'ninja'
|
||||
'nodejs'
|
||||
'npm'
|
||||
'numactl'
|
||||
'openssl'
|
||||
'opus'
|
||||
'udev'
|
||||
'wayland'
|
||||
)
|
||||
|
||||
if [ "$skip_libva" == 0 ]; then
|
||||
dependencies+=(
|
||||
"libva" # VA-API
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "$skip_cuda" == 0 ]; then
|
||||
dependencies+=(
|
||||
"cuda" # VA-API
|
||||
)
|
||||
fi
|
||||
}
|
||||
|
||||
function add_debian_based_deps() {
|
||||
dependencies+=(
|
||||
"bison" # required if we need to compile doxygen
|
||||
@@ -157,8 +203,8 @@ function add_fedora_deps() {
|
||||
dependencies+=(
|
||||
"cmake"
|
||||
"doxygen"
|
||||
"gcc"
|
||||
"g++"
|
||||
"gcc${gcc_version}"
|
||||
"gcc${gcc_version}-c++"
|
||||
"git"
|
||||
"graphviz"
|
||||
"libappindicator-gtk3-devel"
|
||||
@@ -198,9 +244,15 @@ function add_fedora_deps() {
|
||||
}
|
||||
|
||||
function install_cuda() {
|
||||
nvcc_path=$(command -v nvcc 2>/dev/null) || true
|
||||
if [ -n "$nvcc_path" ]; then
|
||||
echo "found system cuda"
|
||||
return
|
||||
fi
|
||||
# check if we need to install cuda
|
||||
if [ -f "${build_dir}/cuda/bin/nvcc" ]; then
|
||||
echo "cuda already installed"
|
||||
nvcc_path="${build_dir}/cuda/bin/nvcc"
|
||||
echo "found local cuda"
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -237,11 +289,13 @@ function install_cuda() {
|
||||
chmod a+x "${build_dir}/cuda.run"
|
||||
"${build_dir}/cuda.run" --silent --toolkit --toolkitpath="${build_dir}/cuda" --no-opengl-libs --no-man-page --no-drm
|
||||
rm "${build_dir}/cuda.run"
|
||||
nvcc_path="${build_dir}/cuda/bin/nvcc"
|
||||
}
|
||||
|
||||
function check_version() {
|
||||
local package_name=$1
|
||||
local min_version=$2
|
||||
local max_version=$3
|
||||
local installed_version
|
||||
|
||||
echo "Checking if $package_name is installed and at least version $min_version"
|
||||
@@ -250,6 +304,8 @@ function check_version() {
|
||||
installed_version=$(dpkg -s "$package_name" 2>/dev/null | grep '^Version:' | awk '{print $2}')
|
||||
elif [ "$distro" == "fedora" ]; then
|
||||
installed_version=$(rpm -q --queryformat '%{VERSION}' "$package_name" 2>/dev/null)
|
||||
elif [ "$distro" == "arch" ]; then
|
||||
installed_version=$(pacman -Q "$package_name" | awk '{print $2}' )
|
||||
else
|
||||
echo "Unsupported Distro"
|
||||
return 1
|
||||
@@ -260,11 +316,12 @@ function check_version() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ "$(printf '%s\n' "$installed_version" "$min_version" | sort -V | head -n1)" = "$min_version" ]; then
|
||||
echo "$package_name version $installed_version is at least $min_version"
|
||||
if [[ "$(printf '%s\n' "$installed_version" "$min_version" | sort -V | head -n1)" = "$min_version" ]] && \
|
||||
[[ "$(printf '%s\n' "$installed_version" "$max_version" | sort -V | head -n1)" = "$installed_version" ]]; then
|
||||
echo "Installed version is within range"
|
||||
return 0
|
||||
else
|
||||
echo "$package_name version $installed_version is less than $min_version"
|
||||
echo "$package_name version $installed_version is out of range"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
@@ -305,7 +362,9 @@ function run_install() {
|
||||
# Update the package list
|
||||
$package_update_command
|
||||
|
||||
if [ "$distro" == "debian" ]; then
|
||||
if [ "$distro" == "arch" ]; then
|
||||
add_arch_deps
|
||||
elif [ "$distro" == "debian" ]; then
|
||||
add_debian_deps
|
||||
elif [ "$distro" == "ubuntu" ]; then
|
||||
add_ubuntu_deps
|
||||
@@ -314,7 +373,7 @@ function run_install() {
|
||||
${sudo_cmd} dnf group install "development-tools" -y
|
||||
elif [ "$distro" == "fedora" ] && [ "$version" <= "40" ]; then
|
||||
add_fedora_deps
|
||||
${sudo_cmd} dnf group install "Development Tools" -y
|
||||
${sudo_cmd} dnf group install "$dev_tools_group" -y
|
||||
fi
|
||||
|
||||
|
||||
@@ -333,8 +392,11 @@ function run_install() {
|
||||
"gcc-ranlib"
|
||||
)
|
||||
|
||||
# update alternatives for gcc and g++ if a debian based distro
|
||||
if [ "$distro" == "debian" ] || [ "$distro" == "ubuntu" ]; then
|
||||
#set gcc version based on distros
|
||||
if [ "$distro" == "arch" ]; then
|
||||
export CC=gcc-14
|
||||
export CXX=g++-14
|
||||
elif [ "$distro" == "debian" ] || [ "$distro" == "ubuntu" ]; then
|
||||
for file in "${gcc_alternative_files[@]}"; do
|
||||
file_path="/etc/alternatives/$file"
|
||||
if [ -e "$file_path" ]; then
|
||||
@@ -353,7 +415,7 @@ function run_install() {
|
||||
# compile cmake if the version is too low
|
||||
cmake_min="3.25.0"
|
||||
target_cmake_version="3.30.1"
|
||||
if ! check_version "cmake" "$cmake_min"; then
|
||||
if ! check_version "cmake" "$cmake_min" "inf"; then
|
||||
cmake_prefix="https://github.com/Kitware/CMake/releases/download/v"
|
||||
if [ "$architecture" == "x86_64" ]; then
|
||||
cmake_arch="x86_64"
|
||||
@@ -371,7 +433,8 @@ function run_install() {
|
||||
# compile doxygen if version is too low
|
||||
doxygen_min="1.10.0"
|
||||
_doxygen_min="1_10_0"
|
||||
if ! check_version "doxygen" "$doxygen_min"; then
|
||||
doxygen_max="1.12.0"
|
||||
if ! check_version "doxygen" "$doxygen_min" "$doxygen_max"; then
|
||||
if [ "${SUNSHINE_COMPILE_DOXYGEN}" == "true" ]; then
|
||||
echo "Compiling doxygen"
|
||||
doxygen_url="https://github.com/doxygen/doxygen/releases/download/Release_${_doxygen_min}/doxygen-${doxygen_min}.src.tar.gz"
|
||||
@@ -383,7 +446,7 @@ function run_install() {
|
||||
ninja -C "build" -j"${num_processors}"
|
||||
ninja -C "build" install
|
||||
else
|
||||
echo "Doxygen version too low, skipping docs"
|
||||
echo "Doxygen version not in range, skipping docs"
|
||||
cmake_args+=("-DBUILD_DOCS=OFF")
|
||||
fi
|
||||
fi
|
||||
@@ -399,12 +462,10 @@ function run_install() {
|
||||
fi
|
||||
|
||||
# run the cuda install
|
||||
if [ -n "$cuda_version" ] && [ "$skip_cuda" == 0 ]; then
|
||||
if [ "$skip_cuda" == 0 ]; then
|
||||
install_cuda
|
||||
cmake_args+=("-DSUNSHINE_ENABLE_CUDA=ON")
|
||||
cmake_args+=("-DCMAKE_CUDA_COMPILER:PATH=${build_dir}/cuda/bin/nvcc")
|
||||
else
|
||||
cmake_args+=("-DSUNSHINE_ENABLE_CUDA=OFF")
|
||||
cmake_args+=("-DCMAKE_CUDA_COMPILER:PATH=$nvcc_path")
|
||||
fi
|
||||
|
||||
# Cmake stuff here
|
||||
@@ -444,7 +505,15 @@ function run_install() {
|
||||
|
||||
# Determine the OS and call the appropriate function
|
||||
cat /etc/os-release
|
||||
if grep -q "Debian GNU/Linux 12 (bookworm)" /etc/os-release; then
|
||||
|
||||
if grep -q "Arch Linux" /etc/os-release; then
|
||||
distro="arch"
|
||||
version=""
|
||||
package_update_command="${sudo_cmd} pacman -Syu --noconfirm"
|
||||
package_install_command="${sudo_cmd} pacman -Sy --needed"
|
||||
nvm_node=0
|
||||
gcc_version="14"
|
||||
elif grep -q "Debian GNU/Linux 12 (bookworm)" /etc/os-release; then
|
||||
distro="debian"
|
||||
version="12"
|
||||
package_update_command="${sudo_cmd} apt-get update"
|
||||
@@ -453,33 +522,36 @@ if grep -q "Debian GNU/Linux 12 (bookworm)" /etc/os-release; then
|
||||
cuda_build="525.60.13"
|
||||
gcc_version="12"
|
||||
nvm_node=0
|
||||
elif grep -q "PLATFORM_ID=\"platform:f39\"" /etc/os-release; then
|
||||
distro="fedora"
|
||||
version="39"
|
||||
package_update_command="${sudo_cmd} dnf update -y"
|
||||
package_install_command="${sudo_cmd} dnf install -y"
|
||||
cuda_version="12.4.0"
|
||||
cuda_build="550.54.14"
|
||||
gcc_version="13"
|
||||
nvm_node=0
|
||||
elif grep -q "PLATFORM_ID=\"platform:f40\"" /etc/os-release; then
|
||||
distro="fedora"
|
||||
version="40"
|
||||
package_update_command="${sudo_cmd} dnf update -y"
|
||||
package_install_command="${sudo_cmd} dnf install -y"
|
||||
cuda_version=
|
||||
cuda_build=
|
||||
cuda_version=12.6.3
|
||||
cuda_build=560.35.05
|
||||
gcc_version="13"
|
||||
nvm_node=0
|
||||
dev_tools_group="Development Tools"
|
||||
elif grep -q "PLATFORM_ID=\"platform:f41\"" /etc/os-release; then
|
||||
distro="fedora"
|
||||
version="41"
|
||||
package_update_command="${sudo_cmd} dnf update -y"
|
||||
package_install_command="${sudo_cmd} dnf install -y"
|
||||
cuda_version=
|
||||
cuda_build=
|
||||
cuda_version=12.6.3
|
||||
cuda_build=560.35.05
|
||||
gcc_version="13"
|
||||
nvm_node=0
|
||||
dev_tools_group="development-tools"
|
||||
elif grep -q "PLATFORM_ID=\"platform:f42\"" /etc/os-release; then
|
||||
distro="fedora"
|
||||
version="42"
|
||||
package_update_command="${sudo_cmd} dnf update -y"
|
||||
package_install_command="${sudo_cmd} dnf install -y"
|
||||
cuda_version=12.8.1
|
||||
cuda_build=570.124.06
|
||||
gcc_version="14"
|
||||
nvm_node=0
|
||||
dev_tools_group="development-tools"
|
||||
elif grep -q "Ubuntu 22.04" /etc/os-release; then
|
||||
distro="ubuntu"
|
||||
version="22.04"
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
Babel==2.17.0
|
||||
clang-format
|
||||
clang-format==20.*
|
||||
|
||||
@@ -129,13 +129,10 @@ namespace audio {
|
||||
|
||||
void capture(safe::mail_t mail, config_t config, void *channel_data) {
|
||||
auto shutdown_event = mail->event<bool>(mail::shutdown);
|
||||
|
||||
if (config.input_only) {
|
||||
BOOST_LOG(info) << "Input only session, audio will not be captured."sv;
|
||||
if (!config::audio.stream || config.input_only) {
|
||||
shutdown_event->view();
|
||||
return;
|
||||
}
|
||||
|
||||
auto stream = stream_configs[map_stream(config.channels, config.flags[config_t::HIGH_QUALITY])];
|
||||
if (config.flags[config_t::CUSTOM_SURROUND_PARAMS]) {
|
||||
apply_surround_params(stream, config.customStreamParams);
|
||||
|
||||
@@ -416,12 +416,7 @@ namespace config {
|
||||
auto final_resolution = entry.template get_optional<std::string>("final_resolution"s);
|
||||
auto final_refresh_rate = entry.template get_optional<std::string>("final_refresh_rate"s);
|
||||
|
||||
output_field.push_back(video_t::dd_t::mode_remapping_entry_t {
|
||||
requested_resolution.value_or(""),
|
||||
requested_fps.value_or(""),
|
||||
final_resolution.value_or(""),
|
||||
final_refresh_rate.value_or("")
|
||||
});
|
||||
output_field.push_back(video_t::dd_t::mode_remapping_entry_t {requested_resolution.value_or(""), requested_fps.value_or(""), final_resolution.value_or(""), final_refresh_rate.value_or("")});
|
||||
}
|
||||
}};
|
||||
|
||||
@@ -523,6 +518,7 @@ namespace config {
|
||||
audio_t audio {
|
||||
{}, // audio_sink
|
||||
{}, // virtual_sink
|
||||
true, // stream audio
|
||||
true, // install_steam_drivers
|
||||
true, // keep_sink_default
|
||||
true, // auto_capture
|
||||
@@ -1215,6 +1211,7 @@ namespace config {
|
||||
|
||||
string_f(vars, "audio_sink", audio.sink);
|
||||
string_f(vars, "virtual_sink", audio.virtual_sink);
|
||||
bool_f(vars, "stream_audio", audio.stream);
|
||||
bool_f(vars, "install_steam_audio_drivers", audio.install_steam_drivers);
|
||||
bool_f(vars, "keep_sink_default", audio.keep_default);
|
||||
bool_f(vars, "auto_capture_sink", audio.auto_capture);
|
||||
|
||||
@@ -152,6 +152,7 @@ namespace config {
|
||||
struct audio_t {
|
||||
std::string sink;
|
||||
std::string virtual_sink;
|
||||
bool stream;
|
||||
bool install_steam_drivers;
|
||||
bool keep_default;
|
||||
bool auto_capture;
|
||||
|
||||
@@ -117,15 +117,26 @@ namespace {
|
||||
|
||||
using virtual_sink_waveformats_t = std::vector<WAVEFORMATEXTENSIBLE>;
|
||||
|
||||
/**
|
||||
* @brief List of supported waveformats for an N-channel virtual audio device
|
||||
* @tparam channel_count Number of virtual audio channels
|
||||
* @returns std::vector<WAVEFORMATEXTENSIBLE>
|
||||
* @note The list of virtual formats returned are sorted in preference order and the first valid
|
||||
* format will be used. All bits-per-sample options are listed because we try to match
|
||||
* this to the default audio device. See also: set_format() below.
|
||||
*/
|
||||
template<WORD channel_count>
|
||||
virtual_sink_waveformats_t create_virtual_sink_waveformats() {
|
||||
if constexpr (channel_count == 2) {
|
||||
auto channel_mask = waveformat_mask_stereo;
|
||||
// only choose 24 or 16-bit formats to avoid clobbering existing Dolby/DTS spatial audio settings
|
||||
// The 32-bit formats are a lower priority for stereo because using one will disable Dolby/DTS
|
||||
// spatial audio mode if the user enabled it on the Steam speaker.
|
||||
return {
|
||||
create_waveformat(sample_format_e::s24in32, channel_count, channel_mask),
|
||||
create_waveformat(sample_format_e::s24, channel_count, channel_mask),
|
||||
create_waveformat(sample_format_e::s16, channel_count, channel_mask),
|
||||
create_waveformat(sample_format_e::f32, channel_count, channel_mask),
|
||||
create_waveformat(sample_format_e::s32, channel_count, channel_mask),
|
||||
};
|
||||
} else if (channel_count == 6) {
|
||||
auto channel_mask1 = waveformat_mask_surround51_with_backspeakers;
|
||||
@@ -298,6 +309,10 @@ namespace platf::audio {
|
||||
auto waveformatext_pointer = reinterpret_cast<const WAVEFORMATEXTENSIBLE *>(mixer_waveformat.get());
|
||||
capture_waveformat.dwChannelMask = waveformatext_pointer->dwChannelMask;
|
||||
}
|
||||
|
||||
BOOST_LOG(info) << "Audio mixer format is "sv << mixer_waveformat->wBitsPerSample << "-bit, "sv
|
||||
<< mixer_waveformat->nSamplesPerSec << " Hz, "sv
|
||||
<< ((mixer_waveformat->nSamplesPerSec != 48000) ? "will be resampled to 48000 by Windows"sv : "no resampling needed"sv);
|
||||
}
|
||||
|
||||
status = audio_client->Initialize(
|
||||
@@ -315,7 +330,7 @@ namespace platf::audio {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
BOOST_LOG(info) << "Audio capture format is " << logging::bracket(waveformat_to_pretty_string(capture_waveformat));
|
||||
BOOST_LOG(info) << "Audio capture format is "sv << logging::bracket(waveformat_to_pretty_string(capture_waveformat));
|
||||
|
||||
return audio_client;
|
||||
}
|
||||
@@ -795,6 +810,22 @@ namespace platf::audio {
|
||||
}
|
||||
}
|
||||
|
||||
// When switching to a Steam virtual speaker device, try to retain the bit depth of the
|
||||
// default audio device. Switching from a 16-bit device to a 24-bit one has been known to
|
||||
// cause glitches for some users.
|
||||
int wanted_bits_per_sample = 32;
|
||||
auto current_default_dev = default_device(device_enum);
|
||||
if (current_default_dev) {
|
||||
audio::prop_t prop;
|
||||
prop_var_t current_device_format;
|
||||
|
||||
if (SUCCEEDED(current_default_dev->OpenPropertyStore(STGM_READ, &prop)) && SUCCEEDED(prop->GetValue(PKEY_AudioEngine_DeviceFormat, ¤t_device_format.prop))) {
|
||||
auto *format = (WAVEFORMATEXTENSIBLE *) current_device_format.prop.blob.pBlobData;
|
||||
wanted_bits_per_sample = format->Samples.wValidBitsPerSample;
|
||||
BOOST_LOG(info) << "Virtual audio device will use "sv << wanted_bits_per_sample << "-bit to match default device"sv;
|
||||
}
|
||||
}
|
||||
|
||||
auto &device_id = virtual_sink_info->first;
|
||||
auto &waveformats = virtual_sink_info->second.get().virtual_sink_waveformats;
|
||||
for (const auto &waveformat : waveformats) {
|
||||
@@ -804,6 +835,10 @@ namespace platf::audio {
|
||||
auto waveformat_copy = waveformat;
|
||||
auto waveformat_copy_pointer = reinterpret_cast<WAVEFORMATEX *>(&waveformat_copy);
|
||||
|
||||
if (wanted_bits_per_sample != waveformat.Samples.wValidBitsPerSample) {
|
||||
continue;
|
||||
}
|
||||
|
||||
WAVEFORMATEXTENSIBLE p {};
|
||||
if (SUCCEEDED(policy->SetDeviceFormat(device_id_copy.c_str(), waveformat_copy_pointer, (WAVEFORMATEX *) &p))) {
|
||||
BOOST_LOG(info) << "Changed virtual audio sink format to " << logging::bracket(waveformat_to_pretty_string(waveformat));
|
||||
|
||||
@@ -100,6 +100,13 @@ const validateFallbackMode = (event) => {
|
||||
</template>
|
||||
</PlatformLayout>
|
||||
|
||||
<!-- Disable Audio -->
|
||||
<Checkbox class="mb-3"
|
||||
id="stream_audio"
|
||||
locale-prefix="config"
|
||||
v-model="config.stream_audio"
|
||||
default="true"
|
||||
></Checkbox>
|
||||
|
||||
<AdapterNameSelector
|
||||
:platform="platform"
|
||||
|
||||
@@ -386,7 +386,9 @@
|
||||
"restart_note": "Apollo is restarting to apply changes.",
|
||||
"server_cmd": "Server Commands",
|
||||
"server_cmd_desc": "Configure a list of commands to be executed when called from client during streaming.",
|
||||
"sunshine_name": "Apollo Name",
|
||||
"stream_audio": "Stream Audio",
|
||||
"stream_audio_desc": "Whether to stream audio or not. Disabling this can be useful for streaming headless displays as second monitors.",
|
||||
"sunshine_name": "Server Name",
|
||||
"sunshine_name_desc": "The name displayed by Moonlight. If not specified, the PC's hostname is used",
|
||||
"sw_preset": "SW Presets",
|
||||
"sw_preset_desc": "Optimize the trade-off between encoding speed (encoded frames per second) and compression efficiency (quality per bit in the bitstream). Defaults to superfast.",
|
||||
|
||||
@@ -30,6 +30,12 @@
|
||||
"detached": [
|
||||
"setsid steam steam://open/bigpicture"
|
||||
],
|
||||
"prep-cmd": [
|
||||
{
|
||||
"do": "",
|
||||
"undo": "setsid steam steam://close/bigpicture"
|
||||
}
|
||||
],
|
||||
"image-path": "steam.png"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -19,6 +19,12 @@
|
||||
"detached": [
|
||||
"open steam://open/bigpicture"
|
||||
],
|
||||
"prep-cmd": [
|
||||
{
|
||||
"do": "",
|
||||
"undo": "open steam://close/bigpicture"
|
||||
}
|
||||
],
|
||||
"image-path": "steam.png"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -9,6 +9,12 @@
|
||||
{
|
||||
"name": "Steam Big Picture",
|
||||
"cmd": "steam://open/bigpicture",
|
||||
"prep-cmd": [
|
||||
{
|
||||
"do": "",
|
||||
"undo": "steam://close/bigpicture"
|
||||
}
|
||||
],
|
||||
"auto-detach": true,
|
||||
"wait-all": true,
|
||||
"prep-cmd": [
|
||||
|
||||
2
third-party/inputtino
vendored
2
third-party/inputtino
vendored
Submodule third-party/inputtino updated: fd136cfe49...17a9b9ce85
2
third-party/wayland-protocols
vendored
2
third-party/wayland-protocols
vendored
Submodule third-party/wayland-protocols updated: 4313a51a17...810f1adaf3
@@ -3,6 +3,7 @@ import fs from 'fs';
|
||||
import { resolve } from 'path'
|
||||
import { defineConfig } from 'vite'
|
||||
import { ViteEjsPlugin } from "vite-plugin-ejs";
|
||||
import { codecovVitePlugin } from "@codecov/vite-plugin";
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import process from 'process'
|
||||
|
||||
@@ -49,7 +50,16 @@ export default defineConfig({
|
||||
}
|
||||
},
|
||||
base: './',
|
||||
plugins: [vue(), ViteEjsPlugin({ header })],
|
||||
plugins: [
|
||||
vue(),
|
||||
ViteEjsPlugin({ header }),
|
||||
// The Codecov vite plugin should be after all other plugins
|
||||
codecovVitePlugin({
|
||||
enableBundleAnalysis: process.env.CODECOV_TOKEN !== undefined,
|
||||
bundleName: "sunshine",
|
||||
uploadToken: process.env.CODECOV_TOKEN,
|
||||
}),
|
||||
],
|
||||
root: resolve(assetsSrcPath),
|
||||
build: {
|
||||
outDir: resolve(assetsDstPath),
|
||||
|
||||
Reference in New Issue
Block a user