Merge pull request #134 from SunshineStream/add-sphinx-docs
Add sphinx docs
This commit is contained in:
@@ -150,7 +150,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: true # false to test all, true to fail entire job if any fail
|
fail-fast: true # false to test all, true to fail entire job if any fail
|
||||||
matrix:
|
matrix:
|
||||||
distro: [ debian, ubuntu_18_04, ubuntu_20_04, ubuntu_21_04, ubuntu_21_10 ]
|
distro: [ debian, ubuntu_18_04, ubuntu_20_04, ubuntu_21_10 ]
|
||||||
package: [ -p ]
|
package: [ -p ]
|
||||||
extension: [ deb ]
|
extension: [ deb ]
|
||||||
include: # package these differently
|
include: # package these differently
|
||||||
|
|||||||
@@ -9,10 +9,6 @@ jobs:
|
|||||||
lint:
|
lint:
|
||||||
name: Clang Format Lint
|
name: Clang Format Lint
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
|
||||||
fail-fast: false # false to test all, true to fail entire job if any fail
|
|
||||||
matrix:
|
|
||||||
inplace: [ true, false ] # removed ubuntu_18_04 for now
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -25,10 +21,10 @@ jobs:
|
|||||||
extensions: 'cpp,h,m,mm'
|
extensions: 'cpp,h,m,mm'
|
||||||
clangFormatVersion: 13
|
clangFormatVersion: 13
|
||||||
style: file
|
style: file
|
||||||
inplace: ${{ matrix.inplace }}
|
inplace: false
|
||||||
|
|
||||||
- name: Upload Artifacts
|
- name: Upload Artifacts
|
||||||
if: ${{ matrix.inplace == true }}
|
if: failure()
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: sunshine
|
name: sunshine
|
||||||
|
|||||||
@@ -3,15 +3,16 @@ name: localize
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [nightly]
|
branches: [nightly]
|
||||||
paths: # prevents workflow from running unless files in these directories change
|
paths: # prevents workflow from running unless these files change
|
||||||
- 'sunshine/**' # only localizing files inside sunshine directory
|
- 'sunshine/**'
|
||||||
|
- 'locale/sunshine.po'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
localize:
|
localize:
|
||||||
name: Update Localization
|
name: Update Localization
|
||||||
if: ${{ github.event.pull_request.merged }}
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
@@ -37,9 +38,37 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
python ./scripts/_locale.py --extract
|
python ./scripts/_locale.py --extract
|
||||||
|
|
||||||
- name: GitHub Commit & Push # push changes back into nightly
|
- name: git diff
|
||||||
uses: actions-js/push@v1.3
|
run: |
|
||||||
|
# print the git diff
|
||||||
|
git diff --exit-code locale/sunshine.po
|
||||||
|
|
||||||
|
# set the variable with minimal output
|
||||||
|
OUTPUT=$(git diff --exit-code --numstat locale/sunshine.po)
|
||||||
|
echo "git_diff=${OUTPUT}" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: git reset
|
||||||
|
if: ${{ env.git_diff != '1 1 locale/sunshine.po' }} # only run if more than 1 line changed
|
||||||
|
run: |
|
||||||
|
git reset --hard
|
||||||
|
|
||||||
|
- name: Create/Update Pull Request
|
||||||
|
uses: peter-evans/create-pull-request@v4
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
add-paths: |
|
||||||
branch: nightly
|
locale/*.po
|
||||||
message: localization updated by localize workflow
|
token: ${{ secrets.GH_PAT }} # must trigger PR tests
|
||||||
|
commit-message: New localization template
|
||||||
|
branch: localize/update
|
||||||
|
delete-branch: true
|
||||||
|
base: nightly
|
||||||
|
title: New Babel Updates
|
||||||
|
body: |
|
||||||
|
Update report
|
||||||
|
- Updated with *today's* date
|
||||||
|
- Auto-generated by [create-pull-request][1]
|
||||||
|
|
||||||
|
[1]: https://github.com/peter-evans/create-pull-request
|
||||||
|
labels: |
|
||||||
|
babel
|
||||||
|
l10n
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# .readthedocs.yaml
|
||||||
|
# Read the Docs configuration file
|
||||||
|
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||||
|
|
||||||
|
# Required
|
||||||
|
version: 2
|
||||||
|
|
||||||
|
# Set the version of Python
|
||||||
|
build:
|
||||||
|
os: ubuntu-20.04
|
||||||
|
tools:
|
||||||
|
python: "3.9"
|
||||||
|
|
||||||
|
# Build documentation in the docs/ directory with Sphinx
|
||||||
|
sphinx:
|
||||||
|
builder: html
|
||||||
|
configuration: docs/source/conf.py
|
||||||
|
fail_on_warning: true
|
||||||
|
|
||||||
|
# Using Sphinx, build docs in additional formats
|
||||||
|
formats: all
|
||||||
|
|
||||||
|
python:
|
||||||
|
install:
|
||||||
|
- requirements: ./scripts/requirements.txt
|
||||||
|
system_packages: true
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
# Docker
|
||||||
|
|
||||||
|
## Using docker run
|
||||||
|
Create and run the container (substitute your `<values>`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d \
|
||||||
|
--name=sunshine \
|
||||||
|
--restart=unless-stopped
|
||||||
|
-v <path to data>:/config \
|
||||||
|
-e PUID=<uid> \
|
||||||
|
-e PGID=<gid> \
|
||||||
|
-e TZ=<timezone> \
|
||||||
|
-p 47990:47990 \
|
||||||
|
-p 47984:47984 \
|
||||||
|
-p 47989:47989 \
|
||||||
|
-p 48010:48010 \
|
||||||
|
-p 47998:47998 \
|
||||||
|
-p 47999:47999 \
|
||||||
|
-p 48000:48000 \
|
||||||
|
-p 48002:48002 \
|
||||||
|
-p 48010:48010 \
|
||||||
|
sunshinestream/sunshine
|
||||||
|
```
|
||||||
|
|
||||||
|
To update the container it must be removed and recreated:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Stop the container
|
||||||
|
docker stop sunshine
|
||||||
|
# Remove the container
|
||||||
|
docker rm sunshine
|
||||||
|
# Pull the latest update
|
||||||
|
docker pull sunshinestream/sunshine
|
||||||
|
# Run the container with the same parameters as before
|
||||||
|
docker run -d ...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using docker-compose
|
||||||
|
|
||||||
|
Create a `docker-compose.yml` file with the following contents (substitute your `<values>`):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
sunshine:
|
||||||
|
image: sunshinestream/sunshine
|
||||||
|
container_name: sunshine
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- <path to data>:/config
|
||||||
|
environment:
|
||||||
|
- PUID=<uid>
|
||||||
|
- PGID=<gid>
|
||||||
|
- TZ=<timezone>
|
||||||
|
ports:
|
||||||
|
- "47990:47990"
|
||||||
|
- "47984:47984"
|
||||||
|
- "47989:47989"
|
||||||
|
- "48010:48010"
|
||||||
|
- "47998:47998"
|
||||||
|
- "47999:47999"
|
||||||
|
- "48000:48000"
|
||||||
|
- "48002:48002"
|
||||||
|
- "48010:48010"
|
||||||
|
```
|
||||||
|
|
||||||
|
Create and start the container (run the command from the same folder as your `docker-compose.yml` file):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
To update the container:
|
||||||
|
```bash
|
||||||
|
# Pull the latest update
|
||||||
|
docker-compose pull
|
||||||
|
# Update and restart the container
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
You must substitute the `<values>` with your own settings.
|
||||||
|
|
||||||
|
Parameters are split into two halves separated by a colon. The left side represents the host and the right side the
|
||||||
|
container.
|
||||||
|
|
||||||
|
**Example:** `-p external:internal` - This shows the port mapping from internal to external of the container.
|
||||||
|
Therefore `-p 47990:47990` would expose port `47990` from inside the container to be accessible from the host's IP on
|
||||||
|
port `47990` (e.g. `http://<host_ip>:47990`). The internal port must be `47990`, but the external port may be changed
|
||||||
|
(e.g. `-p 8080:47990`).
|
||||||
|
|
||||||
|
|
||||||
|
| Parameter | Function | Example Value | Required |
|
||||||
|
| --------------------------- | -------------------- | ------------------- | -------- |
|
||||||
|
| `-p <port>:47990` | Web UI Port | `47990` | True |
|
||||||
|
| `-v <path to data>:/config` | Volume mapping | `/home/sunshine` | True |
|
||||||
|
| `-e PUID=<uid>` | User ID | `1001` | False |
|
||||||
|
| `-e PGID=<gid>` | Group ID | `1001` | False |
|
||||||
|
| `-e TZ=<timezone>` | Lookup TZ value [here](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) | `America/New_York` | True |
|
||||||
|
|
||||||
|
### User / Group Identifiers:
|
||||||
|
|
||||||
|
When using data volumes (-v flags) permissions issues can arise between the host OS and the container. To avoid this
|
||||||
|
issue you can specify the user PUID and group PGID. Ensure the data volume directory on the host is owned by the same
|
||||||
|
user you specify.
|
||||||
|
|
||||||
|
In this instance `PUID=1001` and `PGID=1001`. To find yours use id user as below:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ id dockeruser
|
||||||
|
uid=1001(dockeruser) gid=1001(dockergroup) groups=1001(dockergroup)
|
||||||
|
```
|
||||||
@@ -1,334 +0,0 @@
|
|||||||
# Introduction
|
|
||||||
Sunshine is a Gamestream host for Moonlight
|
|
||||||
|
|
||||||
[](https://github.com/SunshineStream/Sunshine/actions/workflows/CI.yml)
|
|
||||||
[](https://github.com/sunshinestream/sunshine/releases)
|
|
||||||
[](https://crowdin.com/project/sunshinestream)
|
|
||||||
|
|
||||||
- [Building](README.md#building)
|
|
||||||
- [Credits](README.md#credits)
|
|
||||||
|
|
||||||
# Building
|
|
||||||
- [Linux](README.md#linux)
|
|
||||||
- [MacOS](README.md#macos)
|
|
||||||
- [Windows](README.md#windows-10)
|
|
||||||
|
|
||||||
## Linux
|
|
||||||
|
|
||||||
If you do not wish to clutter your PC with development files, yet you want the very latest version...
|
|
||||||
You can use these [build scripts](scripts/README.md)
|
|
||||||
They make use of docker to handle building Sunshine automatically
|
|
||||||
|
|
||||||
### Requirements:
|
|
||||||
|
|
||||||
#### Ubuntu 20.04:
|
|
||||||
Install the following:
|
|
||||||
|
|
||||||
#### Common
|
|
||||||
```
|
|
||||||
sudo apt install cmake gcc-10 g++-10 libssl-dev libavdevice-dev libboost-thread-dev libboost-filesystem-dev libboost-log-dev libpulse-dev libopus-dev libevdev-dev
|
|
||||||
```
|
|
||||||
#### X11
|
|
||||||
```
|
|
||||||
sudo apt install libxtst-dev libx11-dev libxrandr-dev libxfixes-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev
|
|
||||||
```
|
|
||||||
|
|
||||||
#### KMS
|
|
||||||
This requires additional [setup](README.md#Setup).
|
|
||||||
```
|
|
||||||
sudo apt install libdrm-dev libcap-dev
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Wayland
|
|
||||||
This is for wlroots based compositores, such as Sway
|
|
||||||
```
|
|
||||||
sudo apt install libwayland-dev
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Cuda + NvFBC
|
|
||||||
This requires proprietary software
|
|
||||||
On Ubuntu 20.04, the cuda compiler will fail since it's version is too old, it's recommended you compile the sources with the [build scripts](scripts/README.md)
|
|
||||||
```
|
|
||||||
sudo apt install nvidia-cuda-dev nvidia-cuda-toolkit
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Fedora 35:
|
|
||||||
|
|
||||||
You will need some things in the RPMFusion repo, nost notably ffmpeg.
|
|
||||||
```
|
|
||||||
sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
|
|
||||||
```
|
|
||||||
#### Development tools and libraries
|
|
||||||
```
|
|
||||||
sudo dnf install \
|
|
||||||
boost-devel \
|
|
||||||
boost-static.x86_64 \
|
|
||||||
cmake \
|
|
||||||
ffmpeg-devel \
|
|
||||||
gcc-c++ \
|
|
||||||
libevdev-devel \
|
|
||||||
libxcb-devel \
|
|
||||||
libX11-devel \
|
|
||||||
libXcursor-devel \
|
|
||||||
libXfixes-devel \
|
|
||||||
libXinerama-devel \
|
|
||||||
libXi-devel \
|
|
||||||
libXrandr-devel \
|
|
||||||
libXtst-devel \
|
|
||||||
mesa-libGL-devel \
|
|
||||||
openssl-devel \
|
|
||||||
opus-devel \
|
|
||||||
pulseaudio-libs-devel
|
|
||||||
```
|
|
||||||
#### If you need to build an RPM binary package:
|
|
||||||
```
|
|
||||||
sudo dnf install rpmbuild
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Warning:
|
|
||||||
You might require ffmpeg version >= 4.3. Check the troubleshooting section for more information.
|
|
||||||
|
|
||||||
### Compilation:
|
|
||||||
|
|
||||||
#### Ubuntu
|
|
||||||
- `git clone https://github.com/SunshineStream/Sunshine.git --recurse-submodules`
|
|
||||||
- `cd sunshine && mkdir build && cd build`
|
|
||||||
- `cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 ..`
|
|
||||||
- `make -j ${nproc}`
|
|
||||||
|
|
||||||
#### Fedora
|
|
||||||
- `git clone https://github.com/SunshineStream/Sunshine.git --recurse-submodules`
|
|
||||||
- `cd sunshine && mkdir build && cd build`
|
|
||||||
- `cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..`
|
|
||||||
- `make -j ${nproc}`
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
sunshine needs access to uinput to create mouse and gamepad events:
|
|
||||||
|
|
||||||
- Add user to group 'input':
|
|
||||||
`usermod -a -G input $USER`
|
|
||||||
- Create udev rules:
|
|
||||||
- Run the following command:
|
|
||||||
`nano /etc/udev/rules.d/85-sunshine-input.rules`
|
|
||||||
- Input the following contents:
|
|
||||||
`KERNEL=="uinput", GROUP="input", MODE="0660"`
|
|
||||||
- Save the file and exit
|
|
||||||
1. `CTRL+X` to start exit
|
|
||||||
2. `Y` to save modifications
|
|
||||||
- `assets/sunshine.conf` is an example configuration file. Modify it as you see fit, then use it by running:
|
|
||||||
`sunshine path/to/sunshine.conf`
|
|
||||||
- Configure autostart service
|
|
||||||
`path/to/build/dir/sunshine.service` is used to start sunshine in the background. To use it, do the following:
|
|
||||||
1. Copy it to the users systemd, `cp sunshine.service ~/.config/systemd/user/`
|
|
||||||
2. Starting
|
|
||||||
- Onetime:
|
|
||||||
`systemctl --user start sunshine`
|
|
||||||
- Always on boot:
|
|
||||||
`systemctl --user enable sunshine`
|
|
||||||
|
|
||||||
- `assets/apps.json` is an [example](README.md#application-list) of a list of applications that are started just before running a stream
|
|
||||||
|
|
||||||
#### Additional Setup for KMS:
|
|
||||||
Please note that `cap_sys_admin` may as well be root, except you don't need to be root to run it.
|
|
||||||
It's necessary to allow Sunshine to use KMS
|
|
||||||
- `sudo setcap cap_sys_admin+p sunshine`
|
|
||||||
|
|
||||||
### Trouleshooting:
|
|
||||||
- If you get "Could not create Sunshine Gamepad: Permission Denied", ensure you are part of the group "input":
|
|
||||||
- `groups $USER`
|
|
||||||
|
|
||||||
- If Sunshine sends audio from the microphone instead of the speaker, try the following steps:
|
|
||||||
1. Check whether you're using Pulseaudio or Pipewire
|
|
||||||
- Pulseaudio: Use `pacmd list-sources | grep "name:"`
|
|
||||||
- Pipewire: Use `pactl info | grep Source`. In some causes you'd need to use the `sink` device. Try `pactl info | grep Sink`, if _Source_ doesn't work.
|
|
||||||
2. Copy the name to the configuration option "audio_sink"
|
|
||||||
3. Restart sunshine
|
|
||||||
|
|
||||||
- If you get "Error: Failed to create client: Daemon not running", ensure that your avahi-daemon is running:
|
|
||||||
- `systemctl status avahi-daemon`
|
|
||||||
|
|
||||||
- If you use hardware acceleration on Linux using an Intel or an AMD GPU (with VAAPI), you will get tons of [graphical issues](https://github.com/loki-47-6F-64/sunshine/issues/228) if your ffmpeg version is < 4.3. If it is not available in your distribution's repositories, consider using a newer version of your distribution.
|
|
||||||
- Ubuntu started to ship ffmpeg 4.3 starting with groovy (20.10). If you're using an older version, you could use [this PPA](https://launchpad.net/%7Esavoury1/+archive/ubuntu/ffmpeg4) instead of upgrading. **Using PPAs is dangerous and may break your system. Use it at your own risk.**
|
|
||||||
|
|
||||||
## macOS
|
|
||||||
|
|
||||||
### Quickstart
|
|
||||||
|
|
||||||
- Install [MacPorts](https://www.macports.org)
|
|
||||||
- Download the `Portfile` from this repository to `/tmp`
|
|
||||||
- In a Terminal run `cd /tmp && sudo port install`
|
|
||||||
- Sunshine configuration is in `/opt/local/etc`
|
|
||||||
- Run `sunshine` to start the Sunshine server
|
|
||||||
- You will be asked to grant access to screen recording and your microphone to be able to stream it
|
|
||||||
|
|
||||||
### Manuel Build
|
|
||||||
|
|
||||||
#### Requirements:
|
|
||||||
macOS Big Sur and Xcode 12.5+:
|
|
||||||
|
|
||||||
Either, using [MacPorts](https://www.macports.org), install the following
|
|
||||||
```
|
|
||||||
sudo port install cmake boost libopus ffmpeg
|
|
||||||
```
|
|
||||||
|
|
||||||
Or, using [Homebrew](https://brew.sh), install the follwoing:
|
|
||||||
```
|
|
||||||
brew install boost cmake ffmpeg libopusenc
|
|
||||||
# if there are issues with an SSL header that is not found:
|
|
||||||
cd /usr/local/include
|
|
||||||
ln -s ../opt/openssl/include/openssl .
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Compilation:
|
|
||||||
- `git clone https://github.com/SunshineStream/Sunshine.git --recurse-submodules`
|
|
||||||
- `cd sunshine && mkdir build && cd build`
|
|
||||||
- `cmake ..`
|
|
||||||
- `make -j ${nproc}`
|
|
||||||
|
|
||||||
If cmake fails complaining to find Boost, try to set the path explicitly: `cmake -DBOOST_ROOT=[boost path] ..`, e.g., `cmake -DBOOST_ROOT=/opt/local/libexec/boost/1.76 ..`
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Sunshine can only access microphones on macOS due to system limitations. To stream system audio use [Soundflower](https://github.com/mattingalls/Soundflower) or [BlackHole](https://github.com/ExistentialAudio/BlackHole) and select their sink as audio device in `sunshine.conf`
|
|
||||||
- `assets/sunshine.conf` is an example configuration file. Modify it as you see fit, then use it by running:
|
|
||||||
`sunshine path/to/sunshine.conf`
|
|
||||||
- `assets/apps.json` is an [example](README.md#application-list) of a list of applications that are started just before running a stream
|
|
||||||
|
|
||||||
### Usage & Limitations:
|
|
||||||
- Command Keys are not forwarded by Moonlight. Right Option-Key is mapped to CMD-Key.
|
|
||||||
- Gamepads are not supported
|
|
||||||
|
|
||||||
## Windows 10
|
|
||||||
|
|
||||||
### Requirements:
|
|
||||||
|
|
||||||
First you need to install [MSYS2](https://www.msys2.org), then startup "MSYS2 MinGW 64-bit" and install the following packages using `pacman -S`:
|
|
||||||
|
|
||||||
mingw-w64-x86_64-binutils mingw-w64-x86_64-openssl mingw-w64-x86_64-cmake mingw-w64-x86_64-toolchain mingw-w64-x86_64-opus mingw-w64-x86_64-x265 mingw-w64-x86_64-boost git mingw-w64-x86_64-make cmake make gcc
|
|
||||||
|
|
||||||
### Compilation:
|
|
||||||
- `git clone https://github.com/loki-47-6F-64/sunshine.git --recursive`
|
|
||||||
- `cd sunshine && mkdir build && cd build`
|
|
||||||
- `cmake -G"Unix Makefiles" ..`
|
|
||||||
- `mingw32-make`
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- **OPTIONAL** Gamepad support: Download and run 'ViGEmBus_Setup_1.16.116.exe' from [https://github.com/ViGEm/ViGEmBus/releases]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Common
|
|
||||||
|
|
||||||
## Usage:
|
|
||||||
- run "sunshine path/to/sunshine.conf"
|
|
||||||
- If running for the first time, make sure to note the username and password Sunshine showed to you, since you **cannot get back later**!
|
|
||||||
- In Moonlight: Add PC manually
|
|
||||||
- When Moonlight request you insert the correct pin on sunshine:
|
|
||||||
- Type in the URL bar of your browser: `https://xxx.xxx.xxx.xxx:47990` where `xxx.xxx.xxx.xxx` is the IP address of your computer
|
|
||||||
- Ignore any warning given by your browser about "insecure website"
|
|
||||||
- You should compile the next page with a new username and a password, needed to login into the next step
|
|
||||||
- Press "Save" and log in using the credentials given above
|
|
||||||
- Go to "PIN" in the Header
|
|
||||||
- Type in your PIN and press Enter, you should get a Success Message
|
|
||||||
- Click on one of the Applications listed
|
|
||||||
- Have fun :)
|
|
||||||
|
|
||||||
## Shortcuts:
|
|
||||||
|
|
||||||
All shortcuts start with CTRL + ALT + SHIFT, just like Moonlight
|
|
||||||
- CTRL + ALT + SHIFT + N --> Hide/Unhide the cursor (This may be usefull for Remote Desktop Mode for Moonlight)
|
|
||||||
- CTRL + ALT + SHIFT + F1/F13 --> Switch to different monitor for Streaming
|
|
||||||
|
|
||||||
## Credits:
|
|
||||||
- [loki-47-6F-64/sunshine](https://github.com/loki-47-6F-64/sunshine) (For all the hard work put in to create sunshine in the first place!)
|
|
||||||
- [Simple-Web-Server](https://gitlab.com/eidheim/Simple-Web-Server)
|
|
||||||
- [Moonlight](https://github.com/moonlight-stream)
|
|
||||||
- [Looking-Glass](https://github.com/gnif/LookingGlass) (For showing me how to properly capture frames on Windows, saving me a lot of time :)
|
|
||||||
- [Eretik](http://eretik.omegahg.com/) (For creating PolicyConfig.h, allowing me to change the default audio device on Windows programmatically)
|
|
||||||
|
|
||||||
## Application List:
|
|
||||||
**Note:** You can change the Application List in the "Apps" section of the User Interface `https://xxx.xxx.xxx.xxx:47990/`
|
|
||||||
- You can use Environment variables in place of values
|
|
||||||
- $(HOME) will be replaced by the value of $HOME
|
|
||||||
- $$ will be replaced by $ --> $$(HOME) will be replaced by $(HOME)
|
|
||||||
- env: Adds or overwrites Environment variables for the commands/applications run by Sunshine.
|
|
||||||
- "Variable name":"Variable value"
|
|
||||||
- apps: The list of applications
|
|
||||||
- Example:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"name":"An App",
|
|
||||||
"cmd":"command to open app",
|
|
||||||
"prep-cmd":[
|
|
||||||
{
|
|
||||||
"do":"some-command",
|
|
||||||
"undo":"undo-that-command"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"detached":[
|
|
||||||
"some-command",
|
|
||||||
"another-command"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
- name: Self explanatory
|
|
||||||
- output <optional>: The file where the output of the command is stored
|
|
||||||
- If it is not specified, the output is ignored
|
|
||||||
- detached: A list of commands to be run and forgotten about
|
|
||||||
- prep-cmd: A list of commands to be run before/after the application
|
|
||||||
- If any of the prep-commands fail, starting the application is aborted
|
|
||||||
- do: Run before the application
|
|
||||||
- If it fails, all 'undo' commands of the previously succeeded 'do' commands are run
|
|
||||||
- undo <optional>: Run after the application has terminated
|
|
||||||
- This should not fail considering it is supposed to undo the 'do' commands.
|
|
||||||
- If it fails, Sunshine is terminated
|
|
||||||
- cmd <optional>: The main application
|
|
||||||
- If not specified, a processs is started that sleeps indefinitely
|
|
||||||
|
|
||||||
1. When an application is started, if there is an application already running, it will be terminated.
|
|
||||||
2. When the application has been shutdown, the stream shuts down as well.
|
|
||||||
3. In addition to the apps listed, one app "Desktop" is hardcoded into Sunshine. It does not start an application, instead it simply starts a stream.
|
|
||||||
|
|
||||||
Linux
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"env":{
|
|
||||||
"DISPLAY":":0",
|
|
||||||
"DRI_PRIME":"1",
|
|
||||||
"XAUTHORITY":"$(HOME)/.Xauthority",
|
|
||||||
"PATH":"$(PATH):$(HOME)/.local/bin"
|
|
||||||
},
|
|
||||||
"apps":[
|
|
||||||
{
|
|
||||||
"name":"Low Res Desktop",
|
|
||||||
"prep-cmd":[
|
|
||||||
{ "do":"xrandr --output HDMI-1 --mode 1920x1080", "undo":"xrandr --output HDMI-1 --mode 1920x1200" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name":"Steam BigPicture",
|
|
||||||
|
|
||||||
"output":"steam.txt",
|
|
||||||
"cmd":"steam -bigpicture",
|
|
||||||
"prep-cmd":[]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
Windows
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"env":{
|
|
||||||
"PATH":"$(PATH);C:\\Program Files (x86)\\Steam"
|
|
||||||
},
|
|
||||||
"apps":[
|
|
||||||
{
|
|
||||||
"name":"Steam BigPicture",
|
|
||||||
|
|
||||||
"output":"steam.txt",
|
|
||||||
"prep-cmd":[
|
|
||||||
{"do":"steam \"steam://open/bigpicture\""}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
+65
@@ -0,0 +1,65 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/README.rst
|
||||||
|
|
||||||
|
Overview
|
||||||
|
========
|
||||||
|
|
||||||
|
About
|
||||||
|
-----
|
||||||
|
Sunshine is a Game stream host for Moonlight. It is an open source version of GeForce Experience (GFE).
|
||||||
|
|
||||||
|
These are the advantages of Sunshine over GFE.
|
||||||
|
|
||||||
|
- FOSS (Free and Open Source Software)
|
||||||
|
- Multi-platform
|
||||||
|
|
||||||
|
- Linux (deb, rpm, and AppImage packages)
|
||||||
|
- MacOS (Portfile)
|
||||||
|
- Windows (portable binary)
|
||||||
|
|
||||||
|
- Pair over web ui
|
||||||
|
- Supports AMD and Nvidia GPUs for encoding
|
||||||
|
- Supports software encoding
|
||||||
|
- Supports streaming to multiple clients
|
||||||
|
- Web UI for configuration
|
||||||
|
|
||||||
|
Integrations
|
||||||
|
------------
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/github/workflow/status/sunshinestream/sunshine/CI/master?label=CI%20build&logo=github&style=for-the-badge
|
||||||
|
:alt: GitHub Workflow Status (CI)
|
||||||
|
:target: https://github.com/SunshineStream/Sunshine/actions/workflows/CI.yml?query=branch%3Amaster
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/github/workflow/status/sunshinestream/sunshine/localize/nightly?label=localize%20build&logo=github&style=for-the-badge
|
||||||
|
:alt: GitHub Workflow Status (localize)
|
||||||
|
:target: https://github.com/SunshineStream/Sunshine/actions/workflows/localize.yml?query=branch%3Anightly
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/readthedocs/sunshinestream?label=Docs&style=for-the-badge&logo=readthedocs
|
||||||
|
:alt: Read the Docs
|
||||||
|
:target: http://sunshinestream.readthedocs.io/
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/badge/dynamic/json?color=blue&label=localized&style=for-the-badge&query=%24.progress..data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15178612-503956.json&logo=crowdin
|
||||||
|
:alt: CrowdIn
|
||||||
|
:target: https://crowdin.com/project/sunshinestream
|
||||||
|
|
||||||
|
Support
|
||||||
|
---------
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/discord/938534566107418705?label=Discord&style=for-the-badge&color=blue&logo=discord
|
||||||
|
:alt: Discord
|
||||||
|
:target: https://sunshinestream.github.io/discord
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/github/discussions/sunshinestream/sunshine?logo=github&style=for-the-badge
|
||||||
|
:alt: GitHub Discussions
|
||||||
|
:target: https://github.com/SunshineStream/Sunshine/discussions
|
||||||
|
|
||||||
|
Downloads
|
||||||
|
---------
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/github/downloads/sunshinestream/sunshine/total?style=for-the-badge&logo=github
|
||||||
|
:alt: GitHub Releases
|
||||||
|
:target: https://github.com/SunshineStream/Sunshine/releases/latest
|
||||||
|
|
||||||
|
.. comment
|
||||||
|
image:: https://img.shields.io/docker/pulls/sunshinestream/sunshine?style=for-the-badge&logo=docker
|
||||||
|
:alt: Docker
|
||||||
|
:target: https://hub.docker.com/r/sunshinestream/sunshine
|
||||||
+1
-318
@@ -1,318 +1 @@
|
|||||||
# If no external IP address is given, Sunshine will attempt to automatically detect external ip-address
|
# See our documentation at https://sunshinestream.readthedocs.io/en/latest/about/advanced_usage.html
|
||||||
# external_ip = 123.456.789.12
|
|
||||||
|
|
||||||
# Set the familly of ports used by Sunshine
|
|
||||||
# port = 47989
|
|
||||||
|
|
||||||
# The private key must be 2048 bits
|
|
||||||
# pkey = /dir/pkey.pem
|
|
||||||
|
|
||||||
# The certificate must be signed with a 2048 bit key
|
|
||||||
# cert = /dir/cert.pem
|
|
||||||
|
|
||||||
# The name displayed by Moonlight
|
|
||||||
# If not specified, the PC's hostname is used
|
|
||||||
# sunshine_name = Sunshine
|
|
||||||
|
|
||||||
# The minimum log level printed to standard out
|
|
||||||
#
|
|
||||||
# none -> no logs are printed to standard out
|
|
||||||
#
|
|
||||||
# verbose = [0]
|
|
||||||
# debug = [1]
|
|
||||||
# info = [2]
|
|
||||||
# warning = [3]
|
|
||||||
# error = [4]
|
|
||||||
# fatal = [5]
|
|
||||||
# none = [6]
|
|
||||||
#
|
|
||||||
# min_log_level = info
|
|
||||||
|
|
||||||
# The origin of the remote endpoint address that is not denied for HTTP method /pin
|
|
||||||
# Could be any of the following values:
|
|
||||||
# pc|lan|wan
|
|
||||||
# pc: Only localhost may access /pin
|
|
||||||
# lan: Only those in LAN may access /pin
|
|
||||||
# wan: Anyone may access /pin
|
|
||||||
#
|
|
||||||
# origin_pin_allowed = pc
|
|
||||||
|
|
||||||
# The origin of the remote endpoint address that is not denied for HTTPS Web UI
|
|
||||||
# Could be any of the following values:
|
|
||||||
# pc|lan|wan
|
|
||||||
# pc: Only localhost may access the Web Manager
|
|
||||||
# lan: Only those in LAN may access the Web Manager
|
|
||||||
# wan: Anyone may access the Web Manager
|
|
||||||
#
|
|
||||||
# origin_web_ui_allowed = lan
|
|
||||||
|
|
||||||
# If UPnP is enabled, Sunshine will attempt to open ports for streaming over the internet
|
|
||||||
# To enable it, uncomment the following line:
|
|
||||||
# upnp = on
|
|
||||||
|
|
||||||
# The file where current state of Sunshine is stored
|
|
||||||
# file_state = sunshine_state.json
|
|
||||||
|
|
||||||
# The file where user credentials for the UI are stored
|
|
||||||
# By default, credentials are stored in `file_state`
|
|
||||||
# credentials_file = sunshine_state.json
|
|
||||||
|
|
||||||
# The display modes advertised by Sunshine
|
|
||||||
#
|
|
||||||
# Some versions of Moonlight, such as Moonlight-nx (Switch),
|
|
||||||
# rely on this list to ensure that the requested resolutions and fps
|
|
||||||
# are supported.
|
|
||||||
#
|
|
||||||
# fps = [10, 30, 60, 90, 120]
|
|
||||||
# resolutions = [
|
|
||||||
# 352x240,
|
|
||||||
# 480x360,
|
|
||||||
# 858x480,
|
|
||||||
# 1280x720,
|
|
||||||
# 1920x1080,
|
|
||||||
# 2560x1080,
|
|
||||||
# 3440x1440,
|
|
||||||
# 1920x1200,
|
|
||||||
# 3860x2160,
|
|
||||||
# 3840x1600,
|
|
||||||
# ]
|
|
||||||
|
|
||||||
# Sometimes it may be usefull to map keybindings.
|
|
||||||
# Wayland won't allow clients to capture the Win Key for example
|
|
||||||
#
|
|
||||||
# See https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
|
|
||||||
#
|
|
||||||
# Note:
|
|
||||||
# keybindings needs to have a multiple of two elements
|
|
||||||
# keybindings = [
|
|
||||||
# 0x10, 0xA0,
|
|
||||||
# 0x11, 0xA2,
|
|
||||||
# 0x12, 0xA4,
|
|
||||||
# 0x4A, 0x4B
|
|
||||||
# ]
|
|
||||||
|
|
||||||
# It may be possible that you cannot send the Windows Key from Moonlight directly.
|
|
||||||
# In those cases it may be useful to make Sunshine think the Right Alt key is the Windows key
|
|
||||||
# key_rightalt_to_key_win = enabled
|
|
||||||
|
|
||||||
# How long to wait in milliseconds for data from moonlight before shutting down the stream
|
|
||||||
# ping_timeout = 10000
|
|
||||||
|
|
||||||
# The file where configuration for the different applications that Sunshine can run during a stream
|
|
||||||
# file_apps = apps.json
|
|
||||||
|
|
||||||
# Percentage of error correcting packets per data packet in each video frame
|
|
||||||
# Higher values can correct for more network packet loss, but at the cost of increasing bandwidth usage
|
|
||||||
# The default value of 20 is what GeForce Experience uses
|
|
||||||
#
|
|
||||||
# The value must be greater than 0 and lower than or equal to 255
|
|
||||||
# fec_percentage = 20
|
|
||||||
|
|
||||||
# When multicasting, it could be usefull to have different configurations for each connected Client.
|
|
||||||
# For example:
|
|
||||||
# Clients connected through WAN and LAN have different bitrate contstraints.
|
|
||||||
# Decoders may require different settings for color
|
|
||||||
#
|
|
||||||
# Unlike simply broadcasting to multiple Client, this will generate distinct video streams.
|
|
||||||
# Note, CPU usage increases for each distinct video stream generated
|
|
||||||
# channels = 1
|
|
||||||
|
|
||||||
# The back/select button on the controller
|
|
||||||
# On the Shield, the home and powerbutton are not passed to Moonlight
|
|
||||||
# If, after the timeout, the back button is still pressed down, Home/Guide button press is emulated.
|
|
||||||
# If back_button_timeout < 0, then the Home/Guide button will not be emulated
|
|
||||||
# back_button_timeout = 2000
|
|
||||||
|
|
||||||
# !! Windows only !!
|
|
||||||
# Gamepads supported by Sunshine
|
|
||||||
# Possible values:
|
|
||||||
# x360 -- xbox 360 controller
|
|
||||||
# ds4 -- dualshock controller (PS4)
|
|
||||||
# gamepad = x360
|
|
||||||
|
|
||||||
# Control how fast keys will repeat themselves
|
|
||||||
# The initial delay in milliseconds before repeating keys
|
|
||||||
# key_repeat_delay = 500
|
|
||||||
#
|
|
||||||
# How often keys repeat every second
|
|
||||||
# This configurable option supports decimals
|
|
||||||
# key_repeat_frequency = 24.9
|
|
||||||
|
|
||||||
# The name of the audio sink used for Audio Loopback
|
|
||||||
# If you do not specify this variable, pulseaudio will select the default monitor device.
|
|
||||||
#
|
|
||||||
# You can find the name of the audio sink using the following command:
|
|
||||||
# !! Linux only !!
|
|
||||||
# pacmd list-sinks | grep "name:" if running vanilla pulseaudio
|
|
||||||
# pPipewire: Use `pactl info | grep Source`. In some causes you'd need to use the `sink` device. Try `pactl info | grep Sink`, if _Source_ doesn't work
|
|
||||||
# audio_sink = alsa_output.pci-0000_09_00.3.analog-stereo
|
|
||||||
#
|
|
||||||
# !! Windows only !!
|
|
||||||
# tools\audio-info.exe
|
|
||||||
# audio_sink = {0.0.0.00000000}.{FD47D9CC-4218-4135-9CE2-0C195C87405B}
|
|
||||||
#
|
|
||||||
# The virtual sink, is the audio device that's virtual (Like Steam Streaming Speakers), it allows Sunshine
|
|
||||||
# to stream audio, while muting the speakers.
|
|
||||||
# virtual_sink = {0.0.0.00000000}.{8edba70c-1125-467c-b89c-15da389bc1d4}
|
|
||||||
|
|
||||||
#
|
|
||||||
# !! MacOS only !!
|
|
||||||
# audio_sink = BlackHole 2ch
|
|
||||||
|
|
||||||
# !! Windows only !!
|
|
||||||
# You can select the video card you want to stream:
|
|
||||||
# The appropriate values can be found using the following command:
|
|
||||||
# tools\dxgi-info.exe
|
|
||||||
# adapter_name = Radeon RX 580 Series
|
|
||||||
# output_name = \\.\DISPLAY1
|
|
||||||
|
|
||||||
# !! Linux only !!
|
|
||||||
# Set the display number to stream.
|
|
||||||
# You can find them by the following command:
|
|
||||||
# xrandr --listmonitors
|
|
||||||
# Example output: "0: +HDMI-1 1920/518x1200/324+0+0 HDMI-1"
|
|
||||||
# ^ <-- You need this.
|
|
||||||
# output_name = 0
|
|
||||||
|
|
||||||
###############################################
|
|
||||||
# FFmpeg software encoding parameters
|
|
||||||
# Honestly, I have no idea what the optimal values would be.
|
|
||||||
# Play around with this :)
|
|
||||||
|
|
||||||
# Quantitization Parameter
|
|
||||||
# Some devices don't support Constant Bit Rate. For those devices, QP is used instead
|
|
||||||
# Higher value means more compression, but less quality
|
|
||||||
# qp = 28
|
|
||||||
|
|
||||||
# Minimum number of threads used by ffmpeg to encode the video.
|
|
||||||
# Increasing the value slightly reduces encoding efficiency, but the tradeoff is usually
|
|
||||||
# worth it to gain the use of more CPU cores for encoding. The ideal value is the lowest
|
|
||||||
# value that can reliably encode at your desired streaming settings on your hardware.
|
|
||||||
# min_threads = 1
|
|
||||||
|
|
||||||
# Allows the client to request HEVC Main or HEVC Main10 video streams.
|
|
||||||
# HEVC is more CPU-intensive to encode, so enabling this may reduce performance when using software encoding.
|
|
||||||
# If set to 0 (default), Sunshine will specify support for HEVC based on encoder
|
|
||||||
# If set to 1, Sunshine will not advertise support for HEVC
|
|
||||||
# If set to 2, Sunshine will advertise support for HEVC Main profile
|
|
||||||
# If set to 3, Sunshine will advertise support for HEVC Main and Main10 (HDR) profiles
|
|
||||||
# hevc_mode = 2
|
|
||||||
|
|
||||||
# Force a specific encoder, otherwise Sunshine will use the first encoder that is available
|
|
||||||
# supported encoders:
|
|
||||||
# nvenc
|
|
||||||
# amdvce # NOTE: alpha stage. The cursor is not yet displayed
|
|
||||||
# software
|
|
||||||
#
|
|
||||||
# encoder = nvenc
|
|
||||||
##################################### Software #####################################
|
|
||||||
# See x264 --fullhelp for the different presets
|
|
||||||
# sw_preset = superfast
|
|
||||||
# sw_tune = zerolatency
|
|
||||||
#
|
|
||||||
|
|
||||||
##################################### NVENC #####################################
|
|
||||||
###### presets ###########
|
|
||||||
# default
|
|
||||||
# hp -- high performance
|
|
||||||
# hq -- high quality
|
|
||||||
# slow -- hq 2 passes
|
|
||||||
# medium -- hq 1 pass
|
|
||||||
# fast -- hp 1 pass
|
|
||||||
# bd
|
|
||||||
# ll -- low latency
|
|
||||||
# llhq
|
|
||||||
# llhp
|
|
||||||
# lossless
|
|
||||||
# losslesshp
|
|
||||||
##########################
|
|
||||||
# nv_preset = llhq
|
|
||||||
#
|
|
||||||
####### rate control #####
|
|
||||||
# auto -- let ffmpeg decide rate control
|
|
||||||
# constqp -- constant QP mode
|
|
||||||
# vbr -- variable bitrate
|
|
||||||
# cbr -- constant bitrate
|
|
||||||
# cbr_hq -- cbr high quality
|
|
||||||
# cbr_ld_hq -- cbr low delay high quality
|
|
||||||
# vbr_hq -- vbr high quality
|
|
||||||
##########################
|
|
||||||
# nv_rc = auto
|
|
||||||
|
|
||||||
###### h264 entropy ######
|
|
||||||
# auto -- let ffmpeg nvenc decide the entropy encoding
|
|
||||||
# cabac
|
|
||||||
# cavlc
|
|
||||||
##########################
|
|
||||||
# nv_coder = auto
|
|
||||||
|
|
||||||
##################################### AMD #####################################
|
|
||||||
###### presets ###########
|
|
||||||
# default
|
|
||||||
# speed
|
|
||||||
# balanced
|
|
||||||
##########################
|
|
||||||
# amd_quality = balanced
|
|
||||||
#
|
|
||||||
####### rate control #####
|
|
||||||
# auto -- let ffmpeg decide rate control
|
|
||||||
# constqp -- constant QP mode
|
|
||||||
# vbr_latency -- Latency Constrained Variable Bitrate
|
|
||||||
# vbr_peak -- Peak Contrained Variable Bitrate
|
|
||||||
# cbr -- constant bitrate
|
|
||||||
##########################
|
|
||||||
# amd_rc = auto
|
|
||||||
|
|
||||||
###### h264 entropy ######
|
|
||||||
# auto -- let ffmpeg nvenc decide the entropy encoding
|
|
||||||
# cabac
|
|
||||||
# cavlc
|
|
||||||
##########################
|
|
||||||
# amd_coder = auto
|
|
||||||
|
|
||||||
#################################### VAAPI ###################################
|
|
||||||
####### adapter ##########
|
|
||||||
# Unlike with `amdvce` and `nvenc`, it doesn't matter if video encoding is done
|
|
||||||
# on a different GPU.
|
|
||||||
# Run the following commands:
|
|
||||||
# 1. ls /dev/dri/renderD*
|
|
||||||
# to find all devices capable of VAAPI
|
|
||||||
# 2. vainfo --display drm --device /dev/dri/renderD129 | grep -E "((VAProfileH264High|VAProfileHEVCMain|VAProfileHEVCMain10).*VAEntrypointEncSlice)|Driver version"
|
|
||||||
# Lists the name and capabilities of the device.
|
|
||||||
# To be supported by Sunshine, it needs to have at the very minimum:
|
|
||||||
# VAProfileH264High : VAEntrypointEncSlice
|
|
||||||
# adapter_name = /dev/dri/renderD128
|
|
||||||
|
|
||||||
################################# VideoToolbox ###############################
|
|
||||||
####### software encoding ##########
|
|
||||||
# Video Toolbox can be allowed/required to use software encoding instead of
|
|
||||||
# hardware accelerated encoding.
|
|
||||||
# auto -- let sunshine decide on encoding
|
|
||||||
# disabled -- disable software encoding
|
|
||||||
# allowed -- allow software encoding
|
|
||||||
# forced -- force software encoding
|
|
||||||
##########################
|
|
||||||
# vt_software = auto
|
|
||||||
#
|
|
||||||
####### realtime encoding ##########
|
|
||||||
# Disabling realtime encoding might result in a delayed frame encoding or frame drop
|
|
||||||
##########################
|
|
||||||
# vt_realtime = enabled
|
|
||||||
#
|
|
||||||
###### h264/hevc entropy ######
|
|
||||||
# auto -- let ffmpeg decide the entropy encoding
|
|
||||||
# cabac
|
|
||||||
# cavlc
|
|
||||||
##########################
|
|
||||||
# vt_coder = auto
|
|
||||||
|
|
||||||
|
|
||||||
##############################################
|
|
||||||
# Some configurable parameters, are merely toggles for specific features
|
|
||||||
# The first occurrence turns it on, the second occurence turns it off, the third occurence turns it on again, etc, etc
|
|
||||||
# Here, you change the default state of any flag
|
|
||||||
#
|
|
||||||
# To set the initial state of flags -0 and -1 to on, set the following flags:
|
|
||||||
# flags = 012
|
|
||||||
#
|
|
||||||
# See: sunshine --help for all options under the header: flags
|
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
"base_path": "."
|
"base_path": "."
|
||||||
"base_url": "https://api.crowdin.com" # optional (for Crowdin Enterprise only)
|
"base_url": "https://api.crowdin.com" # optional (for Crowdin Enterprise only)
|
||||||
"preserve_hierarchy": false # flatten tree on crowdin
|
"preserve_hierarchy": false # flatten tree on crowdin
|
||||||
|
"pull_request_labels": [
|
||||||
|
"crowdin",
|
||||||
|
"l10n"
|
||||||
|
]
|
||||||
|
|
||||||
"files" : [
|
"files" : [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Minimal makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line, and also
|
||||||
|
# from the environment for the first two.
|
||||||
|
SPHINXOPTS ?=
|
||||||
|
SPHINXBUILD ?= sphinx-build
|
||||||
|
SOURCEDIR = source
|
||||||
|
BUILDDIR = build
|
||||||
|
|
||||||
|
# Put it first so that "make" without argument is like "make help".
|
||||||
|
help:
|
||||||
|
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
|
|
||||||
|
.PHONY: help Makefile
|
||||||
|
|
||||||
|
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||||
|
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||||
|
%: Makefile
|
||||||
|
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
|
||||||
|
pushd %~dp0
|
||||||
|
|
||||||
|
REM Command file for Sphinx documentation
|
||||||
|
|
||||||
|
if "%SPHINXBUILD%" == "" (
|
||||||
|
set SPHINXBUILD=sphinx-build
|
||||||
|
)
|
||||||
|
set SOURCEDIR=source
|
||||||
|
set BUILDDIR=build
|
||||||
|
|
||||||
|
%SPHINXBUILD% >NUL 2>NUL
|
||||||
|
if errorlevel 9009 (
|
||||||
|
echo.
|
||||||
|
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||||
|
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||||
|
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||||
|
echo.may add the Sphinx directory to PATH.
|
||||||
|
echo.
|
||||||
|
echo.If you don't have Sphinx installed, grab it from
|
||||||
|
echo.https://www.sphinx-doc.org/
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%1" == "" goto help
|
||||||
|
|
||||||
|
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:help
|
||||||
|
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
||||||
|
|
||||||
|
:end
|
||||||
|
popd
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/docs/DOCKER_README.md
|
||||||
|
|
||||||
|
.. Todo:: This is a planned feature. Currently no Dockerfile or image exists for Sunshine.
|
||||||
|
|
||||||
|
.. mdinclude:: ../../../DOCKER_README.md
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/docs/source/about/installation.rst
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
The recommended method for running Sunshine is to use the `binaries`_ bundled with the `latest release`_.
|
||||||
|
|
||||||
|
Binaries
|
||||||
|
--------
|
||||||
|
Binaries of Sunshine are created for each release. They are available for Linux, and Windows.
|
||||||
|
Binaries can be found in the `latest release`_.
|
||||||
|
|
||||||
|
.. Todo:: Create binary package(s) for MacOS. See `here <https://github.com/SunshineStream/Sunshine/issues/61>`_.
|
||||||
|
|
||||||
|
.. Tip:: Some third party packages also exist. See
|
||||||
|
:ref:`Third Party Packages <about/third_party_packages:third party packages>`.
|
||||||
|
|
||||||
|
Docker
|
||||||
|
------
|
||||||
|
.. Todo:: Docker images of Sunshine are planned to be included in the future.
|
||||||
|
They will be available on `Dockerhub.io`_ and `ghcr.io`_.
|
||||||
|
|
||||||
|
Linux
|
||||||
|
-----
|
||||||
|
|
||||||
|
AppImage
|
||||||
|
^^^^^^^^
|
||||||
|
.. image:: https://img.shields.io/github/issues/sunshinestream/sunshine/pkg:appimage?logo=github&style=for-the-badge
|
||||||
|
:alt: GitHub issues by-label
|
||||||
|
|
||||||
|
#. Download and extract `sunshine-appimage.zip`
|
||||||
|
|
||||||
|
Debian Packages
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
.. image:: https://img.shields.io/github/issues/sunshinestream/sunshine/os:linux:debian?logo=github&style=for-the-badge
|
||||||
|
:alt: GitHub issues by-label
|
||||||
|
|
||||||
|
#. Download the corresponding `.deb` file, e.g. ``sunshine-ubuntu_20_04.deb``
|
||||||
|
#. ``sudo apt install -f <downloaded deb file>``, e.g. ``sudo apt install -f ./sunshine-ubuntu_20_04.deb``
|
||||||
|
|
||||||
|
Red Hat Packages
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
.. image:: https://img.shields.io/github/issues/sunshinestream/sunshine/os:linux:fedora?logo=github&style=for-the-badge
|
||||||
|
:alt: GitHub issues by-label
|
||||||
|
|
||||||
|
#. Download the corresponding `.rpm` file, e.g. ``sunshine-fedora_35.rpm``
|
||||||
|
#. ``sudo dnf install <downloaded rpm file>``, e.g. ``sudo dnf install ./sunshine-fedora_35.rpm``
|
||||||
|
|
||||||
|
.. Hint:: If this is the first time installing.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo usermod -a -G input $USER
|
||||||
|
sudo reboot now
|
||||||
|
|
||||||
|
.. Tip:: Optionally, run Sunshine in the background.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
systemctl --user start sunshine
|
||||||
|
|
||||||
|
MacOS
|
||||||
|
-----
|
||||||
|
.. image:: https://img.shields.io/github/issues/sunshinestream/sunshine/os:macos?logo=github&style=for-the-badge
|
||||||
|
:alt: GitHub issues by-label
|
||||||
|
|
||||||
|
#. Install `MacPorts <https://www.macports.org>`_
|
||||||
|
#. Download the `Portfile <https://github.com/SunshineStream/Sunshine/blob/master/Portfile>`_ from this repository to
|
||||||
|
``/tmp``
|
||||||
|
#. In a terminal run ``cd /tmp && sudo port install``
|
||||||
|
#. The first time you start Sunshine, you will be asked to grant access to screen recording and your microphone.
|
||||||
|
|
||||||
|
Windows
|
||||||
|
-------
|
||||||
|
.. image:: https://img.shields.io/github/issues/sunshinestream/sunshine/os:windows:10?logo=github&style=for-the-badge
|
||||||
|
:alt: GitHub issues by-label
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/github/issues/sunshinestream/sunshine/os:windows:11?logo=github&style=for-the-badge
|
||||||
|
:alt: GitHub issues by-label
|
||||||
|
|
||||||
|
#. Download and extract ``sunshine-windows.zip``
|
||||||
|
|
||||||
|
.. _latest release: https://github.com/SunshineStream/Sunshine/releases/latest
|
||||||
|
.. _Dockerhub.io: https://hub.docker.com/repository/docker/sunshinestream/sunshine
|
||||||
|
.. _ghcr.io: https://github.com/orgs/SunshineStream/packages?repo_name=sunshine
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.. include:: ../../../README.rst
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/docs/source/about/third_party_packages.rst
|
||||||
|
|
||||||
|
Third Party Packages
|
||||||
|
====================
|
||||||
|
|
||||||
|
.. Danger:: These packages are not maintained by SunshineStream. Use at your own risk.
|
||||||
|
|
||||||
|
AUR (Arch Linux User Repository)
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/aur/version/sunshine?style=for-the-badge&logo=archlinux
|
||||||
|
:alt: AUR version
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/aur/last-modified/sunshine?style=for-the-badge&logo=archlinux
|
||||||
|
:alt: AUR last modified
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/aur/votes/sunshine?style=for-the-badge&logo=archlinux
|
||||||
|
:alt: AUR votes
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/aur/maintainer/sunshine?style=for-the-badge&logo=archlinux
|
||||||
|
:alt: AUR maintainer
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/static/v1?label=maintainer&message=hadogenes&color=blue&style=for-the-badge&logo=github
|
||||||
|
:alt: GitHub Maintainer
|
||||||
|
:target: https://github.com/hadogenes
|
||||||
|
|
||||||
|
Chocolatey
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/chocolatey/v/Sunshine?style=for-the-badge&logo=chocolatey
|
||||||
|
:alt: Chocolatey Version
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/chocolatey/dt/sunshine?style=for-the-badge&logo=chocolatey
|
||||||
|
:alt: Chocolatey
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/static/v1?label=maintainer&message=AeliusSaionji&color=blue&style=for-the-badge&logo=github
|
||||||
|
:alt: GitHub Maintainer
|
||||||
|
:target: https://github.com/AeliusSaionji
|
||||||
|
|
||||||
|
Scoop
|
||||||
|
-----
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/scoop/v/sunshine?bucket=extras&style=for-the-badge
|
||||||
|
:alt: Scoop Version (extras bucket)
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/static/v1?label=maintainer&message=sitiom&color=blue&style=for-the-badge&logo=github
|
||||||
|
:alt: GitHub Maintainer
|
||||||
|
:target: https://github.com/sitiom
|
||||||
|
|
||||||
|
|
||||||
|
Legacy GitHub Repo
|
||||||
|
------------------
|
||||||
|
|
||||||
|
.. Attention:: This repo is no longer maintained. Thank you to Loki for bringing this amazing project to life!
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/github/last-commit/loki-47-6F-64/sunshine?style=for-the-badge&logo=github
|
||||||
|
:alt: GitHub last commit
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/github/release-date/loki-47-6F-64/sunshine?style=for-the-badge&logo=github
|
||||||
|
:alt: GitHub Release Date
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/github/downloads/loki-47-6F-64/sunshine/total?style=for-the-badge&logo=github
|
||||||
|
:alt: GitHub Releases
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/static/v1?label=maintainer&message=loki-47-6F-64&color=blue&style=for-the-badge&logo=github
|
||||||
|
:alt: GitHub Maintainer
|
||||||
|
:target: https://github.com/loki-47-6F-64
|
||||||
@@ -0,0 +1,165 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/docs/source/about/usage.rst
|
||||||
|
|
||||||
|
Usage
|
||||||
|
=====
|
||||||
|
#. See the `setup`_ section for your specific OS.
|
||||||
|
#. Run ``sunshine <directory of conf file>/sunshine.conf``.
|
||||||
|
|
||||||
|
.. Note:: You do not need to specify a config file. If no config file is entered the default location will be used.
|
||||||
|
|
||||||
|
.. Attention:: The configuration file specified will be created if it doesn't exist.
|
||||||
|
|
||||||
|
.. Tip:: If using the Linux AppImage, replace ``sunshine`` with ``./sunshine.AppImage``
|
||||||
|
|
||||||
|
#. Configure Sunshine in the web ui
|
||||||
|
The web ui is available on `https://localhost:47990 <https://localhost:47990>`_ by default. You may replace
|
||||||
|
`localhost` with your internal ip address.
|
||||||
|
|
||||||
|
.. Attention:: Ignore any warning given by your browser about "insecure website".
|
||||||
|
|
||||||
|
.. Caution:: If running for the first time, make sure to note the username and password Sunshine showed to you,
|
||||||
|
since you cannot get back later!
|
||||||
|
|
||||||
|
Add games and applications.
|
||||||
|
This can be configured in the web ui.
|
||||||
|
|
||||||
|
.. Note:: Additionally, apps can be configured manually. `assets/apps_<os>.json` is an example of a list of
|
||||||
|
applications that are started just before running a stream.
|
||||||
|
|
||||||
|
.. Attention:: Application list is not fully supported on MacOS
|
||||||
|
|
||||||
|
#. In Moonlight, you may need to add the PC manually.
|
||||||
|
#. When Moonlight request you insert the correct pin on sunshine:
|
||||||
|
|
||||||
|
- Login to the web ui
|
||||||
|
- Go to "PIN" in the Header
|
||||||
|
- Type in your PIN and press Enter, you should get a Success Message
|
||||||
|
- In Moonlight, select one of the Applications listed
|
||||||
|
|
||||||
|
Network
|
||||||
|
-------
|
||||||
|
Sunshine will be available on port 47990 by default.
|
||||||
|
|
||||||
|
.. Danger:: Do not expose port 47990, or the web ui, to the internet!
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
---------
|
||||||
|
To get a list of available arguments run the following:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sunshine --help
|
||||||
|
|
||||||
|
Setup
|
||||||
|
-----
|
||||||
|
|
||||||
|
Linux
|
||||||
|
^^^^^
|
||||||
|
Sunshine needs access to `uinput` to create mouse and gamepad events.
|
||||||
|
|
||||||
|
Add user to group `input`.
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
usermod -a -G input $USER
|
||||||
|
|
||||||
|
Create `udev` rules.
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
nano /etc/udev/rules.d/85-sunshine-input.rules
|
||||||
|
|
||||||
|
Input the following contents:
|
||||||
|
``KERNEL=="uinput", GROUP="input", MODE="0660"``
|
||||||
|
|
||||||
|
Save the file and exit:
|
||||||
|
|
||||||
|
#. ``CTRL+X`` to start exit.
|
||||||
|
#. ``Y`` to save modifications.
|
||||||
|
|
||||||
|
Configure autostart service
|
||||||
|
`path/to/build/dir/sunshine.service` is used to start sunshine in the background. To use it, do the following:
|
||||||
|
|
||||||
|
#. Copy it to the users systemd: ``cp sunshine.service ~/.config/systemd/user/``
|
||||||
|
#. Starting
|
||||||
|
|
||||||
|
- One time: ``systemctl --user start sunshine``
|
||||||
|
- Always on boot: ``systemctl --user enable sunshine``
|
||||||
|
|
||||||
|
Additional Setup for KMS
|
||||||
|
.. Note:: ``cap_sys_admin`` may as well be root, except you don't need to be root to run it.
|
||||||
|
|
||||||
|
It is necessary to allow Sunshine to use KMS: ``sudo setcap cap_sys_admin+p sunshine``
|
||||||
|
|
||||||
|
MacOS
|
||||||
|
^^^^^
|
||||||
|
Sunshine can only access microphones on macOS due to system limitations. To stream system audio use
|
||||||
|
`Soundflower <https://github.com/mattingalls/Soundflower>`_ or
|
||||||
|
`BlackHole <https://github.com/ExistentialAudio/BlackHole>`_ and
|
||||||
|
select their sink as audio device in `sunshine.conf`.
|
||||||
|
|
||||||
|
.. Note:: Command Keys are not forwarded by Moonlight. Right Option-Key is mapped to CMD-Key.
|
||||||
|
|
||||||
|
.. Caution:: Gamepads are not supported.
|
||||||
|
|
||||||
|
Windows
|
||||||
|
^^^^^^^
|
||||||
|
For gamepad support, install `ViGEmBus <https://github.com/ViGEm/ViGEmBus/releases/latest>`_
|
||||||
|
|
||||||
|
Shortcuts
|
||||||
|
---------
|
||||||
|
All shortcuts start with CTRL + ALT + SHIFT, just like Moonlight
|
||||||
|
|
||||||
|
- ``CTRL + ALT + SHIFT + N`` - Hide/Unhide the cursor (This may be useful for Remote Desktop Mode for Moonlight)
|
||||||
|
- ``CTRL + ALT + SHIFT + F1/F13`` - Switch to different monitor for Streaming
|
||||||
|
|
||||||
|
Application List
|
||||||
|
----------------
|
||||||
|
- You can use Environment variables in place of values
|
||||||
|
- ``$(HOME)` will be replaced by the value of ``$HOME``
|
||||||
|
- ``$$`` will be replaced by ``$``, e.g. ``$$(HOME)`` will be replaced by ``$(HOME)``
|
||||||
|
- ``env`` - Adds or overwrites Environment variables for the commands/applications run by Sunshine
|
||||||
|
- ``"Variable name":"Variable value"``
|
||||||
|
- ``apps`` - The list of applications
|
||||||
|
- Example application:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"name":"An App",
|
||||||
|
"cmd":"command to open app",
|
||||||
|
"prep-cmd":[
|
||||||
|
{
|
||||||
|
"do":"some-command",
|
||||||
|
"undo":"undo-that-command"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"detached":[
|
||||||
|
"some-command",
|
||||||
|
"another-command"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
- ``name`` - The name of the application/game
|
||||||
|
- ``output`` - The file where the output of the command is stored
|
||||||
|
- ``detached`` - A list of commands to be run and forgotten about
|
||||||
|
- ``prep-cmd`` - A list of commands to be run before/after the application
|
||||||
|
|
||||||
|
- If any of the prep-commands fail, starting the application is aborted
|
||||||
|
- ``do`` - Run before the application
|
||||||
|
|
||||||
|
- If it fails, all ``undo`` commands of the previously succeeded ``do`` commands are run
|
||||||
|
|
||||||
|
- ``undo`` - Run after the application has terminated
|
||||||
|
|
||||||
|
- This should not fail considering it is supposed to undo the ``do`` commands
|
||||||
|
- If it fails, Sunshine is terminated
|
||||||
|
|
||||||
|
- ``cmd`` - The main application
|
||||||
|
|
||||||
|
- If not specified, a process is started that sleeps indefinitely
|
||||||
|
|
||||||
|
Considerations
|
||||||
|
--------------
|
||||||
|
- When an application is started, if there is an application already running, it will be terminated.
|
||||||
|
- When the application has been shutdown, the stream shuts down as well.
|
||||||
|
- In addition to the apps listed, one app "Desktop" is hardcoded into Sunshine. It does not start an application,
|
||||||
|
instead it simply starts a stream.
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/docs/source/building/build.rst
|
||||||
|
|
||||||
|
Build
|
||||||
|
=====
|
||||||
|
Sunshine binaries are built using `CMake <https://cmake.org/>`_. Cross compilation is not
|
||||||
|
supported. That means the binaries must be built on the target operating system and architecture.
|
||||||
|
|
||||||
|
Building Locally
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Clone
|
||||||
|
^^^^^
|
||||||
|
Ensure `git <https://git-scm.com/>`_ is installed and run the following:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
git clone https://github.com/sunshinestream/sunshine.git --recurse-submodules
|
||||||
|
cd sunshine && mkdir build && cd build
|
||||||
|
|
||||||
|
Compile
|
||||||
|
^^^^^^^
|
||||||
|
See the section specific to your OS.
|
||||||
|
|
||||||
|
- :ref:`Linux <building/linux:linux>`
|
||||||
|
- :ref:`MacOS <building/macos:macos>`
|
||||||
|
- :ref:`Windows <building/windows:windows>`
|
||||||
|
|
||||||
|
Remote Build
|
||||||
|
------------
|
||||||
|
It may be beneficial to build remotely in some cases. This will enable easier building on different operating systems.
|
||||||
|
|
||||||
|
#. Fork the project
|
||||||
|
#. Activate workflows
|
||||||
|
#. Trigger the `CI` workflow manually
|
||||||
|
#. Download the artifacts/binaries from the workflow run summary
|
||||||
@@ -0,0 +1,300 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/docs/source/building/linux.rst
|
||||||
|
|
||||||
|
Linux
|
||||||
|
=====
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
.. Danger:: Installing these dependencies may break your distribution. It is recommended to build in a virtual machine
|
||||||
|
or to use the `Dockerfile builds`_ located in the `./scripts` directory.
|
||||||
|
|
||||||
|
Debian Bullseye
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
End of Life: TBD
|
||||||
|
|
||||||
|
Install Requirements
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo apt update && sudo apt install \
|
||||||
|
build-essential \
|
||||||
|
cmake \
|
||||||
|
git \
|
||||||
|
libavdevice-dev \
|
||||||
|
libboost-filesystem-dev \
|
||||||
|
libboost-log-dev \
|
||||||
|
libboost-thread-dev \
|
||||||
|
libcap-dev \ # KMS
|
||||||
|
libdrm-dev \ # KMS
|
||||||
|
libevdev-dev \
|
||||||
|
libpulse-dev \
|
||||||
|
libopus-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libwayland-dev \ # Wayland
|
||||||
|
libx11-dev \ # X11
|
||||||
|
libxcb-shm0-dev \ # X11
|
||||||
|
libxcb-xfixes0-dev \ # X11
|
||||||
|
libxcb1-dev \ # X11
|
||||||
|
libxfixes-dev \ # X11
|
||||||
|
libxrandr-dev \ # X11
|
||||||
|
libxtst-dev \ # X11
|
||||||
|
nvidia-cuda-dev \ # Cuda, NvFBC
|
||||||
|
nvidia-cuda-toolkit \ # Cuda, NvFBC
|
||||||
|
|
||||||
|
Fedora 35
|
||||||
|
^^^^^^^^^
|
||||||
|
End of Life: TBD
|
||||||
|
|
||||||
|
Install Repositories
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo dnf update && \
|
||||||
|
sudo dnf group install "Development Tools" && \
|
||||||
|
sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
|
||||||
|
|
||||||
|
Install Requirements
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo dnf install \
|
||||||
|
boost-devel \
|
||||||
|
boost-static.x86_64 \
|
||||||
|
cmake \
|
||||||
|
ffmpeg-devel \
|
||||||
|
gcc-c++ \
|
||||||
|
libevdev-devel \
|
||||||
|
libX11-devel \ # X11
|
||||||
|
libxcb-devel \ # X11
|
||||||
|
libXcursor-devel \ # X11
|
||||||
|
libXfixes-devel \ # X11
|
||||||
|
libXinerama-devel \ # X11
|
||||||
|
libXi-devel \ # X11
|
||||||
|
libXrandr-devel \ # X11
|
||||||
|
libXtst-devel \ # X11
|
||||||
|
mesa-libGL-devel \
|
||||||
|
openssl-devel \
|
||||||
|
opus-devel \
|
||||||
|
pulseaudio-libs-devel \
|
||||||
|
rpm-build \ # if you want to build an RPM binary package
|
||||||
|
|
||||||
|
Ubuntu 18.04
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
End of Life: April 2028
|
||||||
|
|
||||||
|
Install Repositories
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo apt update && sudo apt install \
|
||||||
|
software-properties-common \
|
||||||
|
&& add-apt-repository ppa:savoury1/graphics && \
|
||||||
|
add-apt-repository ppa:savoury1/multimedia && \
|
||||||
|
add-apt-repository ppa:savoury1/ffmpeg4 && \
|
||||||
|
add-apt-repository ppa:savoury1/boost-defaults-1.71 && \
|
||||||
|
add-apt-repository ppa:ubuntu-toolchain-r/test && \
|
||||||
|
|
||||||
|
Install Requirements
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo apt install \
|
||||||
|
build-essential \
|
||||||
|
cmake \
|
||||||
|
gcc-10 \
|
||||||
|
git \
|
||||||
|
g++-10 \
|
||||||
|
libavdevice-dev \
|
||||||
|
libboost-filesystem1.71-dev \
|
||||||
|
libboost-log1.71-dev \
|
||||||
|
libboost-regex1.71-dev \
|
||||||
|
libboost-thread1.71-dev \
|
||||||
|
libcap-dev \ # KMS
|
||||||
|
libdrm-dev \ # KMS
|
||||||
|
libevdev-dev \
|
||||||
|
libpulse-dev \
|
||||||
|
libopus-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libwayland-dev \ # Wayland
|
||||||
|
libx11-dev \ # X11
|
||||||
|
libxcb-shm0-dev \ # X11
|
||||||
|
libxcb-xfixes0-dev \ # X11
|
||||||
|
libxcb1-dev \ # X11
|
||||||
|
libxfixes-dev \ # X11
|
||||||
|
libxrandr-dev \ # X11
|
||||||
|
libxtst-dev \ # X11
|
||||||
|
wget \
|
||||||
|
|
||||||
|
Update gcc alias
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10
|
||||||
|
|
||||||
|
Install CuDA
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
wget https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda_11.4.2_470.57.02_linux.run --progress=bar:force:noscroll -q --show-progress -O ./cuda.run && chmod a+x ./cuda.run
|
||||||
|
./cuda.run --silent --toolkit --toolkitpath=/usr --no-opengl-libs --no-man-page --no-drm && rm ./cuda.run
|
||||||
|
|
||||||
|
Install CMake
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
wget https://cmake.org/files/v3.22/cmake-3.22.2-linux-x86_64.sh
|
||||||
|
mkdir /opt/cmake
|
||||||
|
sh /cmake-3.22.2-linux-x86_64.sh --prefix=/opt/cmake --skip-license
|
||||||
|
ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
|
||||||
|
cmake --version
|
||||||
|
|
||||||
|
Ubuntu 20.04
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
End of Life: April 2030
|
||||||
|
|
||||||
|
Install Requirements
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo apt update && sudo apt install \
|
||||||
|
build-essential \
|
||||||
|
cmake \
|
||||||
|
git \
|
||||||
|
g++-10 \
|
||||||
|
libavdevice-dev \
|
||||||
|
libboost-filesystem-dev \
|
||||||
|
libboost-log-dev \
|
||||||
|
libboost-thread-dev \
|
||||||
|
libcap-dev \ # KMS
|
||||||
|
libdrm-dev \ # KMS
|
||||||
|
libevdev-dev \
|
||||||
|
libpulse-dev \
|
||||||
|
libopus-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libwayland-dev \ # Wayland
|
||||||
|
libx11-dev \ # X11
|
||||||
|
libxcb-shm0-dev \ # X11
|
||||||
|
libxcb-xfixes0-dev \ # X11
|
||||||
|
libxcb1-dev \ # X11
|
||||||
|
libxfixes-dev \ # X11
|
||||||
|
libxrandr-dev \ # X11
|
||||||
|
libxtst-dev \ # X11
|
||||||
|
wget \
|
||||||
|
|
||||||
|
Update gcc alias
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10
|
||||||
|
|
||||||
|
Install CuDA
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
wget https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda_11.4.2_470.57.02_linux.run --progress=bar:force:noscroll -q --show-progress -O ./cuda.run && chmod a+x ./cuda.run
|
||||||
|
./cuda.run --silent --toolkit --toolkitpath=/usr --no-opengl-libs --no-man-page --no-drm && rm ./cuda.run
|
||||||
|
|
||||||
|
Ubuntu 21.10
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
End of Life: July 2022
|
||||||
|
|
||||||
|
Install Requirements
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo apt update && sudo apt install \
|
||||||
|
build-essential \
|
||||||
|
cmake \
|
||||||
|
git \
|
||||||
|
libavdevice-dev \
|
||||||
|
libboost-filesystem-dev \
|
||||||
|
libboost-log-dev \
|
||||||
|
libboost-thread-dev \
|
||||||
|
libcap-dev \ # KMS
|
||||||
|
libdrm-dev \ # KMS
|
||||||
|
libevdev-dev \
|
||||||
|
libpulse-dev \
|
||||||
|
libopus-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libwayland-dev \ # Wayland
|
||||||
|
libx11-dev \ # X11
|
||||||
|
libxcb-shm0-dev \ # X11
|
||||||
|
libxcb-xfixes0-dev \ # X11
|
||||||
|
libxcb1-dev \ # X11
|
||||||
|
libxfixes-dev \ # X11
|
||||||
|
libxrandr-dev \ # X11
|
||||||
|
libxtst-dev \ # X11
|
||||||
|
nvidia-cuda-dev \ # Cuda, NvFBC
|
||||||
|
nvidia-cuda-toolkit \ # Cuda, NvFBC
|
||||||
|
|
||||||
|
Ubuntu 22.04
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
End of Life: April 2027
|
||||||
|
|
||||||
|
.. Todo:: Create Ubuntu 22.04 Dockerfile and complete this documentation.
|
||||||
|
|
||||||
|
Build
|
||||||
|
-----
|
||||||
|
.. Attention:: Ensure you are in the build directory created during the clone step earlier before continuing.
|
||||||
|
|
||||||
|
Debian based OSes
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 ..
|
||||||
|
|
||||||
|
Red Hat based Oses
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..
|
||||||
|
|
||||||
|
Finally
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
make -j ${nproc}
|
||||||
|
|
||||||
|
Dockerfile Builds
|
||||||
|
-----------------
|
||||||
|
You may wish to simply build sunshine from source, without bloating your OS with development files.
|
||||||
|
There are scripts located in the ``./scripts`` directory that will create docker images that have the necessary
|
||||||
|
packages. As a result, removing the development files after you're done is a single command away.
|
||||||
|
These scripts use docker under the hood, as such, they can only be used to compile the Linux version
|
||||||
|
|
||||||
|
.. Todo:: Publish the Dockerfiles to Dockerhub and ghcr.
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
Install `Docker <https://docs.docker.com/engine/install/>`_
|
||||||
|
|
||||||
|
Instructions
|
||||||
|
#. :ref:`Clone <building/build:clone>`. Sunshine.
|
||||||
|
#. Select the desired Dockerfile from the ``./scripts`` directory.
|
||||||
|
|
||||||
|
Available Files:
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
Dockerfile-debian
|
||||||
|
Dockerfile-fedora_33 # end of life
|
||||||
|
Dockerfile-fedora_35
|
||||||
|
Dockerfile-ubuntu_18_04
|
||||||
|
Dockerfile-ubuntu_20_04
|
||||||
|
Dockerfile-ubuntu_21_04 # end of life
|
||||||
|
Dockerfile-ubuntu_21_10
|
||||||
|
|
||||||
|
#. Execute
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cd scripts # move to the scripts directory
|
||||||
|
./build-container.sh -f Dockerfile-<name> # create the container (replace the "<name>")
|
||||||
|
./build-sunshine.sh -p -s .. # compile and build sunshine
|
||||||
|
|
||||||
|
#. Updating
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
git pull # pull the latest changes from github
|
||||||
|
./build-sunshine.sh -p -s .. # compile and build sunshine
|
||||||
|
|
||||||
|
#. Optionally, delete the container
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
./build-container.sh -c delete
|
||||||
|
|
||||||
|
#. Install the resulting package
|
||||||
|
|
||||||
|
Debian
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo apt install -f sunshine-build/sunshine.deb
|
||||||
|
|
||||||
|
Red Hat
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo dnf install sunshine-build/sunshine.rpm
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/docs/source/building/macos.rst
|
||||||
|
|
||||||
|
MacOS
|
||||||
|
=====
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
MacOS Big Sur and Xcode 12.5+
|
||||||
|
|
||||||
|
Use either `MacPorts <https://www.macports.org>`_ or `Homebrew <https://brew.sh>`_
|
||||||
|
|
||||||
|
MacPorts
|
||||||
|
""""""""
|
||||||
|
Install Requirements
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo port install cmake boost libopus ffmpeg
|
||||||
|
|
||||||
|
Homebrew
|
||||||
|
""""""""
|
||||||
|
Install Requirements
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
brew install boost cmake ffmpeg libopusenc
|
||||||
|
# if there are issues with an SSL header that is not found:
|
||||||
|
cd /usr/local/include
|
||||||
|
ln -s ../opt/openssl/include/openssl .
|
||||||
|
|
||||||
|
Build
|
||||||
|
-----
|
||||||
|
.. Attention:: Ensure you are in the build directory created during the clone step earlier before continuing.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cmake ..
|
||||||
|
make -j ${nproc}
|
||||||
|
|
||||||
|
If cmake fails complaining to find Boost, try to set the path explicitly.
|
||||||
|
|
||||||
|
``cmake -DBOOST_ROOT=[boost path] ..``, e.g., ``cmake -DBOOST_ROOT=/opt/local/libexec/boost/1.76 ..``
|
||||||
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/docs/source/building/windows.rst
|
||||||
|
|
||||||
|
Windows
|
||||||
|
=======
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
First you need to install `MSYS2 <https://www.msys2.org>`_, then startup "MSYS2 MinGW 64-bit" and install the
|
||||||
|
following packages using:
|
||||||
|
|
||||||
|
.. code-block:: batch
|
||||||
|
|
||||||
|
pacman -S mingw-w64-x86_64-binutils mingw-w64-x86_64-openssl mingw-w64-x86_64-cmake mingw-w64-x86_64-toolchain mingw-w64-x86_64-opus mingw-w64-x86_64-x265 mingw-w64-x86_64-boost git mingw-w64-x86_64-make cmake make gcc
|
||||||
|
|
||||||
|
Build
|
||||||
|
-----
|
||||||
|
.. Attention:: Ensure you are in the build directory created during the clone step earlier before continuing.
|
||||||
|
|
||||||
|
.. code-block:: batch
|
||||||
|
|
||||||
|
cmake -G"Unix Makefiles" ..
|
||||||
|
mingw32-make
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
# Configuration file for the Sphinx documentation builder.
|
||||||
|
#
|
||||||
|
# This file only contains a selection of the most common options. For a full
|
||||||
|
# list see the documentation:
|
||||||
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
||||||
|
|
||||||
|
# standard imports
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
|
# -- Path setup --------------------------------------------------------------
|
||||||
|
|
||||||
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
|
import os
|
||||||
|
# import sys
|
||||||
|
|
||||||
|
script_dir = os.path.dirname(os.path.abspath(__file__)) # the directory of this file
|
||||||
|
source_dir = os.path.dirname(script_dir) # the source folder directory
|
||||||
|
root_dir = os.path.dirname(source_dir) # the root folder directory
|
||||||
|
|
||||||
|
# -- Project information -----------------------------------------------------
|
||||||
|
project = 'Sunshine'
|
||||||
|
copyright = f'{datetime.now ().year}, {project}'
|
||||||
|
author = 'ReenigneArcher'
|
||||||
|
|
||||||
|
# The full version, including alpha/beta/rc tags
|
||||||
|
# version = '0.13.0'
|
||||||
|
|
||||||
|
|
||||||
|
# -- General configuration ---------------------------------------------------
|
||||||
|
|
||||||
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
|
# ones.
|
||||||
|
extensions = [
|
||||||
|
'm2r2', # enable markdown files
|
||||||
|
'sphinx.ext.autosectionlabel',
|
||||||
|
'sphinx.ext.todo', # enable to-do sections
|
||||||
|
'sphinx.ext.viewcode' # add links to view source code
|
||||||
|
]
|
||||||
|
|
||||||
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
# templates_path = ['_templates']
|
||||||
|
|
||||||
|
# List of patterns, relative to source directory, that match files and
|
||||||
|
# directories to ignore when looking for source files.
|
||||||
|
# This pattern also affects html_static_path and html_extra_path.
|
||||||
|
exclude_patterns = ['toc.rst']
|
||||||
|
|
||||||
|
# Extensions to include.
|
||||||
|
source_suffix = ['.rst', '.md']
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTML output -------------------------------------------------
|
||||||
|
|
||||||
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
|
# html_static_path = ['_static']
|
||||||
|
|
||||||
|
html_logo = os.path.join(root_dir, 'sunshine.ico')
|
||||||
|
|
||||||
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
|
# a list of builtin themes.
|
||||||
|
html_theme = 'sphinx_rtd_theme'
|
||||||
|
|
||||||
|
html_theme_options = {
|
||||||
|
# 'analytics_id': 'G-XXXXXXXXXX', # Provided by Google in your dashboard
|
||||||
|
# 'analytics_anonymize_ip': False,
|
||||||
|
'logo_only': False,
|
||||||
|
'display_version': False,
|
||||||
|
'prev_next_buttons_location': 'bottom',
|
||||||
|
'style_external_links': True,
|
||||||
|
'vcs_pageview_mode': 'blob',
|
||||||
|
# 'style_nav_header_background': 'white',
|
||||||
|
# Toc options
|
||||||
|
'collapse_navigation': True,
|
||||||
|
'sticky_navigation': True,
|
||||||
|
'navigation_depth': 4,
|
||||||
|
'includehidden': True,
|
||||||
|
'titles_only': False,
|
||||||
|
}
|
||||||
|
|
||||||
|
# extension config options
|
||||||
|
autosectionlabel_prefix_document = True # Make sure the target is unique
|
||||||
|
todo_include_todos = True
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/docs/source/contributing/contributing.rst
|
||||||
|
|
||||||
|
Contributing
|
||||||
|
============
|
||||||
|
#. Fork the repo on GitHub
|
||||||
|
#. Create a new branch for the feature you are adding or the issue you are fixing
|
||||||
|
|
||||||
|
.. Tip:: Base the new branch off the `nightly` branch. It will make your life easier when you submit the PR!
|
||||||
|
|
||||||
|
#. Make changes, push commits, etc.
|
||||||
|
#. Files should contain an empty line at the end.
|
||||||
|
#. Document your code!
|
||||||
|
#. Test your code!
|
||||||
|
#. When ready create a PR to this repo on the `nightly` branch.
|
||||||
|
|
||||||
|
.. Hint:: If you accidentally make your PR against a different branch, a bot will comment letting you know it's on
|
||||||
|
the wrong branch. Don't worry. You can edit the PR to change the target branch. There is no reason to close the
|
||||||
|
PR!
|
||||||
|
|
||||||
|
.. Note:: Draft PRs are also welcome as you work through issues. The benefit of creating a draft PR is that an
|
||||||
|
automated build can run in a github runner.
|
||||||
|
|
||||||
|
.. Attention:: Do not expect partially complete PRs to be merged. These topics will be considered before merging.
|
||||||
|
|
||||||
|
- Does the code follows the style guidelines of this project?
|
||||||
|
|
||||||
|
.. Tip:: Look at examples of existing code in the project!
|
||||||
|
|
||||||
|
- Is the code well commented?
|
||||||
|
- Were documentation blocks updated for new or modified components?
|
||||||
|
|
||||||
|
.. Note:: Developers and maintainers will attempt to assist with challenging issues.
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/docs/source/contributing/localization.rst
|
||||||
|
|
||||||
|
Localization
|
||||||
|
============
|
||||||
|
Sunshine is being localized into various languages. The default language is `en` (English) and is highlighted green.
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/badge/dynamic/json?color=blue&label=de&style=for-the-badge&query=%24.progress.0.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15178612-503956.json
|
||||||
|
.. image:: https://img.shields.io/badge/dynamic/json?color=green&label=en&style=for-the-badge&query=%24.progress.1.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15178612-503956.json
|
||||||
|
.. image:: https://img.shields.io/badge/dynamic/json?color=blue&label=en-GB&style=for-the-badge&query=%24.progress.2.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15178612-503956.json
|
||||||
|
.. image:: https://img.shields.io/badge/dynamic/json?color=blue&label=en-US&style=for-the-badge&query=%24.progress.3.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15178612-503956.json
|
||||||
|
.. image:: https://img.shields.io/badge/dynamic/json?color=blue&label=es-ES&style=for-the-badge&query=%24.progress.4.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15178612-503956.json
|
||||||
|
.. image:: https://img.shields.io/badge/dynamic/json?color=blue&label=fr&style=for-the-badge&query=%24.progress.5.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15178612-503956.json
|
||||||
|
.. image:: https://img.shields.io/badge/dynamic/json?color=blue&label=it&style=for-the-badge&query=%24.progress.6.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15178612-503956.json
|
||||||
|
.. image:: https://img.shields.io/badge/dynamic/json?color=blue&label=ru&style=for-the-badge&query=%24.progress.7.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15178612-503956.json
|
||||||
|
|
||||||
|
Graph
|
||||||
|
.. image:: https://badges.awesome-crowdin.com/translation-15178612-503956.png
|
||||||
|
|
||||||
|
CrowdIn
|
||||||
|
-------
|
||||||
|
The translations occur on
|
||||||
|
`CrowdIn <https://crowdin.com/project/sunshinestream>`_. Feel free to contribute to localization there.
|
||||||
|
Only elements of the API are planned to be translated.
|
||||||
|
|
||||||
|
.. Attention:: The rest API has not yet been implemented.
|
||||||
|
|
||||||
|
Translations Basics
|
||||||
|
- The brand names `SunshineStream` and `Sunshine` should never be translated.
|
||||||
|
- Other brand names should never be translated.
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- AMD
|
||||||
|
- Nvidia
|
||||||
|
|
||||||
|
CrowdIn Integration
|
||||||
|
How does it work?
|
||||||
|
|
||||||
|
When a change is made to sunshine source code, a workflow generates new translation templates
|
||||||
|
that get pushed to CrowdIn automatically.
|
||||||
|
|
||||||
|
When translations are updated on CrowdIn, a push gets made to the `l10n_nightly` branch and a PR is made against the
|
||||||
|
`nightly` branch. Once PR is merged, all updated translations are part of the project and will be included in the
|
||||||
|
next release.
|
||||||
|
|
||||||
|
Extraction
|
||||||
|
----------
|
||||||
|
There should be minimal cases where strings need to be extracted from source code; however it may be necessary in some
|
||||||
|
situations. For example if a system tray icon is added it should be localized as it is user interfacing.
|
||||||
|
|
||||||
|
- Wrap the string to be extracted in a function as shown.
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
#include <boost/locale.hpp>
|
||||||
|
boost::locale::translate("Hello world!")
|
||||||
|
|
||||||
|
.. Warning:: This is for information only. Contributors should never include manually updated template files, or
|
||||||
|
manually compiled language files in Pull Requests.
|
||||||
|
|
||||||
|
Strings are automatically extracted from the code to the `locale/sunshine.po` template file. The generated file is
|
||||||
|
used by CrowdIn to generate language specific template files. The file is generated using the
|
||||||
|
`.github/workflows/localize.yml` workflow and is run on any push event into the `nightly` branch. Jobs are only run if
|
||||||
|
any of the following paths are modified.
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
- 'sunshine/**'
|
||||||
|
|
||||||
|
When testing locally it may be desirable to manually extract, initialize, update, and compile strings. Python is
|
||||||
|
required for this, along with the dependencies in the `./scripts/requirements.txt` file.
|
||||||
|
|
||||||
|
Extract, initialize, and update
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
python ./scripts/_locale.py --extract --init --update
|
||||||
|
|
||||||
|
Compile
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
python ./scripts/_locale.py --compile
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
:github_url: https://github.com/RetroArcher/RetroArcher/tree/nightly/docs/source/contributing/testing.rst
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
Clang Format
|
||||||
|
------------
|
||||||
|
Source code is tested against the `.clang-format` file for linting errors. The workflow file responsible for clang
|
||||||
|
format testing is `.github/workflows/clang.yml`.
|
||||||
|
|
||||||
|
Test clang-format locally.
|
||||||
|
.. Todo:: This documentation needs to be improved.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
clang-format ...
|
||||||
|
|
||||||
|
Sphinx
|
||||||
|
------
|
||||||
|
Sunshine uses `Sphinx <https://www.sphinx-doc.org/en/master/>`_ for documentation building. Sphinx is included
|
||||||
|
in the `./scripts/requirements.txt` file. Python is required to build sphinx docs. Installation and setup of python
|
||||||
|
will not be covered here.
|
||||||
|
|
||||||
|
The config file for Sphinx is `docs/source/conf.py`. This is already included in the repo and should not be modified.
|
||||||
|
|
||||||
|
Test with Sphinx
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cd docs
|
||||||
|
make html
|
||||||
|
|
||||||
|
Alternatively
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cd docs
|
||||||
|
sphinx-build -b html source build
|
||||||
|
|
||||||
|
Unit Testing
|
||||||
|
------------
|
||||||
|
.. Todo:: Sunshine does not currently have any unit tests. If you would like to help us improve please get in contact
|
||||||
|
with us, or make a PR with suggested changes.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
:github_url: https://github.com/SunshineStream/Sunshine/tree/nightly/docs/source/index.rst
|
||||||
|
|
||||||
|
SunshineStream has this documentation hosted on `Read the Docs <http://sunshinestream.readthedocs.io/>`_.
|
||||||
|
|
||||||
|
Table of Contents
|
||||||
|
=================
|
||||||
|
.. include:: toc.rst
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: About
|
||||||
|
|
||||||
|
about/overview
|
||||||
|
about/installation
|
||||||
|
about/docker
|
||||||
|
about/third_party_packages
|
||||||
|
about/usage
|
||||||
|
about/advanced_usage
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: Build
|
||||||
|
|
||||||
|
building/build
|
||||||
|
building/linux
|
||||||
|
building/macos
|
||||||
|
building/windows
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: Contributing
|
||||||
|
|
||||||
|
contributing/contributing
|
||||||
|
contributing/localization
|
||||||
|
contributing/testing
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
FROM debian:bullseye AS sunshine-debian
|
FROM debian:bullseye AS sunshine-debian
|
||||||
|
|
||||||
|
# Debian Bullseye end of life is TBD
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ARG TZ="Europe/London"
|
ARG TZ="Europe/London"
|
||||||
|
|
||||||
@@ -11,9 +13,9 @@ RUN apt-get update -y && \
|
|||||||
cmake \
|
cmake \
|
||||||
git \
|
git \
|
||||||
libavdevice-dev \
|
libavdevice-dev \
|
||||||
libboost-thread-dev \
|
|
||||||
libboost-filesystem-dev \
|
libboost-filesystem-dev \
|
||||||
libboost-log-dev \
|
libboost-log-dev \
|
||||||
|
libboost-thread-dev \
|
||||||
libcap-dev \
|
libcap-dev \
|
||||||
libdrm-dev \
|
libdrm-dev \
|
||||||
libevdev-dev \
|
libevdev-dev \
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
FROM fedora:33 AS sunshine-fedora_33
|
FROM fedora:33 AS sunshine-fedora_33
|
||||||
|
|
||||||
|
# Fedora 33 end of life is November 2021
|
||||||
|
# This file remains for reference only
|
||||||
|
|
||||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
RUN dnf -y update && \
|
RUN dnf -y update && \
|
||||||
dnf -y group install "Development Tools" && \
|
dnf -y group install "Development Tools" && \
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
FROM fedora:35 AS sunshine-fedora_35
|
FROM fedora:35 AS sunshine-fedora_35
|
||||||
|
|
||||||
|
# Fedora 35 end of life is TBD
|
||||||
|
|
||||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
RUN dnf -y update && \
|
RUN dnf -y update && \
|
||||||
dnf -y group install "Development Tools" && \
|
dnf -y group install "Development Tools" && \
|
||||||
@@ -11,8 +13,8 @@ RUN dnf -y update && \
|
|||||||
ffmpeg-devel \
|
ffmpeg-devel \
|
||||||
gcc-c++ \
|
gcc-c++ \
|
||||||
libevdev-devel \
|
libevdev-devel \
|
||||||
libxcb-devel \
|
|
||||||
libX11-devel \
|
libX11-devel \
|
||||||
|
libxcb-devel \
|
||||||
libXcursor-devel \
|
libXcursor-devel \
|
||||||
libXfixes-devel \
|
libXfixes-devel \
|
||||||
libXinerama-devel \
|
libXinerama-devel \
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
FROM ubuntu:18.04 AS sunshine-ubuntu_18_04
|
FROM ubuntu:18.04 AS sunshine-ubuntu_18_04
|
||||||
|
|
||||||
|
# Ubuntu 18.04 end of life is April 2028
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ARG TZ="Europe/London"
|
ARG TZ="Europe/London"
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
FROM ubuntu:20.04 AS sunshine-ubuntu_20_04
|
FROM ubuntu:20.04 AS sunshine-ubuntu_20_04
|
||||||
|
|
||||||
|
# Ubuntu 20.04 end of life is April 2030
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ARG TZ="Europe/London"
|
ARG TZ="Europe/London"
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
FROM ubuntu:21.04 AS sunshine-ubuntu_21_04
|
FROM ubuntu:21.04 AS sunshine-ubuntu_21_04
|
||||||
|
|
||||||
|
# Ubuntu 21.04 end of life is January 2022
|
||||||
|
# This file remains for reference only
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ARG TZ="Europe/London"
|
ARG TZ="Europe/London"
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
FROM ubuntu:21.10 AS sunshine-ubuntu_21_10
|
FROM ubuntu:21.10 AS sunshine-ubuntu_21_10
|
||||||
|
|
||||||
|
# Ubuntu 21.10 end of life is July 2022
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ARG TZ="Europe/London"
|
ARG TZ="Europe/London"
|
||||||
|
|
||||||
@@ -10,9 +12,9 @@ RUN apt-get update -y && \
|
|||||||
cmake \
|
cmake \
|
||||||
git \
|
git \
|
||||||
libavdevice-dev \
|
libavdevice-dev \
|
||||||
libboost-thread-dev \
|
|
||||||
libboost-filesystem-dev \
|
libboost-filesystem-dev \
|
||||||
libboost-log-dev \
|
libboost-log-dev \
|
||||||
|
libboost-thread-dev \
|
||||||
libcap-dev \
|
libcap-dev \
|
||||||
libdrm-dev \
|
libdrm-dev \
|
||||||
libevdev-dev \
|
libevdev-dev \
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
# Introduction
|
|
||||||
Sunshine is a Gamestream host for Moonlight
|
|
||||||
|
|
||||||
[](https://ci.appveyor.com/project/loki-47-6F-64/sunshine/branch/master)
|
|
||||||
[](https://github.com/Loki-47-6F-64/sunshine/releases)
|
|
||||||
|
|
||||||
You may wish to simply build sunshine from source, without bloating your OS with development files.
|
|
||||||
These scripts will create a docker images that have the necessary packages. As a result, removing the development files after you're done is a single command away.
|
|
||||||
These scripts use docker under the hood, as such, they can only be used to compile the Linux version
|
|
||||||
|
|
||||||
|
|
||||||
#### Requirements
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo apt install docker
|
|
||||||
```
|
|
||||||
|
|
||||||
#### instructions
|
|
||||||
|
|
||||||
You'll require one of the following Dockerfiles:
|
|
||||||
* Dockerfile-2004 --> Ubuntu 20.04
|
|
||||||
* Dockerfile-2104 --> Ubuntu 21.04
|
|
||||||
* Dockerfile-debian --> Debian Bullseye
|
|
||||||
|
|
||||||
Depending on your system, the build-* scripts may need root privilleges
|
|
||||||
|
|
||||||
First, the docker container needs to be created:
|
|
||||||
```
|
|
||||||
cd scripts
|
|
||||||
./build-container.sh -f Dockerfile-<name>
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, the sources will be compiled and the debian package generated:
|
|
||||||
```
|
|
||||||
./build-sunshine.sh -p -s ..
|
|
||||||
```
|
|
||||||
You can run `build-sunshine -p -s ..` again as long as the docker container exists.
|
|
||||||
|
|
||||||
```
|
|
||||||
git pull
|
|
||||||
./build-sunshine.sh -p -s ..
|
|
||||||
```
|
|
||||||
|
|
||||||
Optionally, the docker container can be removed after you're finished:
|
|
||||||
```
|
|
||||||
./build-container.sh -c delete
|
|
||||||
```
|
|
||||||
|
|
||||||
Finally install the resulting package:
|
|
||||||
```
|
|
||||||
sudo apt install -f sunshine-build/sunshine.deb
|
|
||||||
```
|
|
||||||
|
|
||||||
+8
-6
@@ -1,4 +1,6 @@
|
|||||||
"""_locale.py
|
"""
|
||||||
|
..
|
||||||
|
_locale.py
|
||||||
|
|
||||||
Functions related to building, initializing, updating, and compiling localization translations.
|
Functions related to building, initializing, updating, and compiling localization translations.
|
||||||
|
|
||||||
@@ -62,7 +64,7 @@ def x_extract():
|
|||||||
commands.append(filename)
|
commands.append(filename)
|
||||||
|
|
||||||
print(commands)
|
print(commands)
|
||||||
proc = subprocess.run(args=commands, cwd=root_dir)
|
subprocess.check_output(args=commands, cwd=root_dir)
|
||||||
|
|
||||||
# fix header
|
# fix header
|
||||||
body = ""
|
body = ""
|
||||||
@@ -98,7 +100,7 @@ def babel_init(locale_code: str):
|
|||||||
]
|
]
|
||||||
|
|
||||||
print(commands)
|
print(commands)
|
||||||
proc = subprocess.run(args=commands, cwd=root_dir)
|
subprocess.check_output(args=commands, cwd=root_dir)
|
||||||
|
|
||||||
|
|
||||||
def babel_update():
|
def babel_update():
|
||||||
@@ -113,7 +115,7 @@ def babel_update():
|
|||||||
]
|
]
|
||||||
|
|
||||||
print(commands)
|
print(commands)
|
||||||
proc = subprocess.run(args=commands, cwd=root_dir)
|
subprocess.check_output(args=commands, cwd=root_dir)
|
||||||
|
|
||||||
|
|
||||||
def babel_compile():
|
def babel_compile():
|
||||||
@@ -126,13 +128,13 @@ def babel_compile():
|
|||||||
]
|
]
|
||||||
|
|
||||||
print(commands)
|
print(commands)
|
||||||
proc = subprocess.run(args=commands, cwd=root_dir)
|
subprocess.check_output(args=commands, cwd=root_dir)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# Set up and gather command line arguments
|
# Set up and gather command line arguments
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description='Script helps update locale_id translations. Translations must be done manually.')
|
description='Script helps update locale translations. Translations must be done manually.')
|
||||||
|
|
||||||
parser.add_argument('--extract', action='store_true', help='Extract messages from c++ files.')
|
parser.add_argument('--extract', action='store_true', help='Extract messages from c++ files.')
|
||||||
parser.add_argument('--init', action='store_true', help='Initialize any new locales specified in target locales.')
|
parser.add_argument('--init', action='store_true', help='Initialize any new locales specified in target locales.')
|
||||||
|
|||||||
@@ -1 +1,4 @@
|
|||||||
Babel==2.9.1
|
Babel==2.9.1
|
||||||
|
m2r2==0.3.2
|
||||||
|
Sphinx==4.5.0
|
||||||
|
sphinx-rtd-theme==1.0.0
|
||||||
|
|||||||
Reference in New Issue
Block a user