From a043dfcf6c65c7ca7e284932fa00d84e169b397a Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Wed, 26 Oct 2022 14:53:27 -0400 Subject: [PATCH 1/9] Update apps.json - reformat `apps.json` files - use `sed` to add required prefixes for flatpak build --- .../linux/flatpak/dev.lizardbyte.sunshine.yml | 8 ++++ src_assets/linux/assets/apps.json | 40 ++++++++++--------- src_assets/macos/assets/apps.json | 8 ++-- src_assets/windows/assets/apps.json | 25 ++++++------ 4 files changed, 47 insertions(+), 34 deletions(-) diff --git a/packaging/linux/flatpak/dev.lizardbyte.sunshine.yml b/packaging/linux/flatpak/dev.lizardbyte.sunshine.yml index d9e64a13..7bb4cd1b 100644 --- a/packaging/linux/flatpak/dev.lizardbyte.sunshine.yml +++ b/packaging/linux/flatpak/dev.lizardbyte.sunshine.yml @@ -200,3 +200,11 @@ modules: url: '@GITHUB_CLONE_URL@' branch: '@GITHUB_BRANCH@' commit: '@GITHUB_COMMIT@' + post-install: + # use `sed` to update apps.json with prefixes required for flatpak + # -r (regex) + # -z (handle new lines) https://linuxhint.com/sed-replace-newline-with-space + # `/gm` global and multiline + - sed -r -z -i -e + 's/("((do)|(undo)|(cmd)|(detached))"\s*:\s*\[?\n*\s*")(.*")/\1flatpak-spawn --host \7/gm' + /app/share/sunshine/apps.json diff --git a/src_assets/linux/assets/apps.json b/src_assets/linux/assets/apps.json index 4a848bd8..927c7028 100644 --- a/src_assets/linux/assets/apps.json +++ b/src_assets/linux/assets/apps.json @@ -1,20 +1,24 @@ { - "env":{ - "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", - "detached":["setsid steam steam://open/bigpicture"], - "image-path":"steam.png" - } - ] + "env": { + "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", + "detached": [ + "setsid steam steam://open/bigpicture" + ], + "image-path": "steam.png" + } + ] } diff --git a/src_assets/macos/assets/apps.json b/src_assets/macos/assets/apps.json index 746c69b3..cb1c548a 100644 --- a/src_assets/macos/assets/apps.json +++ b/src_assets/macos/assets/apps.json @@ -1,6 +1,6 @@ { - "env":{ - "PATH":"$(PATH):$(HOME)/.local/bin" - }, - "apps":[ ] + "env": { + "PATH": "$(PATH):$(HOME)/.local/bin" + }, + "apps": [] } diff --git a/src_assets/windows/assets/apps.json b/src_assets/windows/assets/apps.json index 379dd2fb..de4847c3 100644 --- a/src_assets/windows/assets/apps.json +++ b/src_assets/windows/assets/apps.json @@ -1,14 +1,15 @@ { - "env":{ - "PATH":"$(PATH);C:\\Program Files (x86)\\Steam" - }, - "apps":[ - { - "name":"Steam BigPicture", - - "output":"steam.txt", - "detached":["steam steam://open/bigpicture"], - "image-path":"steam.png" - } - ] + "env": { + "PATH": "$(PATH);C:\\Program Files (x86)\\Steam" + }, + "apps": [ + { + "name": "Steam BigPicture", + "output": "steam.txt", + "detached": [ + "steam steam://open/bigpicture" + ], + "image-path": "steam.png" + } + ] } From dcdd716a57032d1e8197ef6c86b497bc24317d57 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Thu, 27 Oct 2022 21:51:24 -0400 Subject: [PATCH 2/9] update docker (#325) * update docker * remove legacy docker builds * update docker documentation * update docker build Co-authored-by: ABeltramo --- .docker_platforms | 1 + .dockerignore | 16 +++ .github/workflows/ci-docker.yml | 203 +++++++++++++++++++++++++++++ DOCKER_README.md | 89 ++++++------- Dockerfile | 92 +++++++++++++ docs/source/about/docker.rst | 2 - docs/source/about/installation.rst | 5 +- docs/source/building/linux.rst | 77 +---------- scripts/Dockerfile-debian | 40 ------ scripts/Dockerfile-fedora_33 | 32 ----- scripts/Dockerfile-fedora_35 | 36 ----- scripts/Dockerfile-ubuntu_18_04 | 63 --------- scripts/Dockerfile-ubuntu_20_04 | 46 ------- scripts/Dockerfile-ubuntu_21_04 | 40 ------ scripts/Dockerfile-ubuntu_21_10 | 39 ------ scripts/build-container.sh | 179 ------------------------- scripts/build-private.sh | 48 ------- scripts/build-sunshine.sh | 132 ------------------- 18 files changed, 360 insertions(+), 780 deletions(-) create mode 100644 .docker_platforms create mode 100644 .dockerignore create mode 100644 .github/workflows/ci-docker.yml create mode 100644 Dockerfile delete mode 100644 scripts/Dockerfile-debian delete mode 100644 scripts/Dockerfile-fedora_33 delete mode 100644 scripts/Dockerfile-fedora_35 delete mode 100644 scripts/Dockerfile-ubuntu_18_04 delete mode 100644 scripts/Dockerfile-ubuntu_20_04 delete mode 100644 scripts/Dockerfile-ubuntu_21_04 delete mode 100644 scripts/Dockerfile-ubuntu_21_10 delete mode 100755 scripts/build-container.sh delete mode 100755 scripts/build-private.sh delete mode 100755 scripts/build-sunshine.sh diff --git a/.docker_platforms b/.docker_platforms new file mode 100644 index 00000000..11a8121d --- /dev/null +++ b/.docker_platforms @@ -0,0 +1 @@ +linux/amd64 \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..fb14701d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,16 @@ +# ignore git files +.git* + +# ignore hidden files +.* + +# ignore repo directories and files +docs/ +packaging/ +scripts/ +tools/ +crowdin.yml + +# ignore dev directories +build/ +venv/ diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml new file mode 100644 index 00000000..962bb74c --- /dev/null +++ b/.github/workflows/ci-docker.yml @@ -0,0 +1,203 @@ +--- +# This action is centrally managed in https://github.com//.github/ +# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in +# the above-mentioned repo. + +name: CI Docker + +on: + pull_request: + branches: [master, nightly] + types: [opened, synchronize, reopened] + push: + branches: [master, nightly] + workflow_dispatch: + +jobs: + check_dockerfile: + name: Check Dockerfile + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Check + id: check + run: | + if [ -f "./Dockerfile" ] + then + FOUND=true + else + FOUND=false + fi + + echo "dockerfile=${FOUND}" >> $GITHUB_OUTPUT + + outputs: + dockerfile: ${{ steps.check.outputs.dockerfile }} + + lint_dockerfile: + name: Lint Dockerfile + needs: [check_dockerfile] + if: ${{ needs.check_dockerfile.outputs.dockerfile == 'true' }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Hadolint + id: hadolint + uses: hadolint/hadolint-action@v2.1.0 + with: + dockerfile: ./Dockerfile + ignore: DL3008,DL3013,DL3016,DL3018,DL3028,DL3059 + output-file: ./hadolint.log + verbose: true + + - name: Log + if: failure() + run: | + echo "Hadolint outcome: ${{ steps.hadolint.outcome }}" >> $GITHUB_STEP_SUMMARY + cat "./hadolint.log" >> $GITHUB_STEP_SUMMARY + + check_changelog: + name: Check Changelog + needs: [check_dockerfile] + if: ${{ needs.check_dockerfile.outputs.dockerfile == 'true' }} + runs-on: ubuntu-latest + steps: + - name: Checkout + if: ${{ github.ref == 'refs/heads/master' || github.base_ref == 'master' }} + uses: actions/checkout@v3 + + - name: Verify Changelog + id: verify_changelog + if: ${{ github.ref == 'refs/heads/master' || github.base_ref == 'master' }} + # base_ref for pull request check, ref for push + uses: LizardByte/.github/actions/verify_changelog@master + with: + token: ${{ secrets.GITHUB_TOKEN }} + outputs: + next_version: ${{ steps.verify_changelog.outputs.changelog_parser_version }} + + docker: + name: Docker + needs: [check_dockerfile, check_changelog] + if: ${{ needs.check_dockerfile.outputs.dockerfile == 'true' }} + runs-on: ubuntu-latest + permissions: + packages: write + contents: write + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Prepare + id: prepare + env: + NEXT_VERSION: ${{ needs.check_changelog.outputs.next_version }} + run: | + # get branch name + BRANCH=${GITHUB_HEAD_REF} + + if [ -z "$BRANCH" ] + then + echo "This is a PUSH event" + BRANCH=${{ github.ref_name }} + fi + + # determine to push image to dockerhub and ghcr or not + if [[ $GITHUB_EVENT_NAME == "push" ]]; then + PUSH=true + else + PUSH=false + fi + + # setup the tags + REPOSITORY=${{ github.repository }} + BASE_TAG=$(echo $REPOSITORY | tr '[:upper:]' '[:lower:]') + COMMIT=${{ github.sha }} + + TAGS="${BASE_TAG}:${COMMIT:0:7},ghcr.io/${BASE_TAG}:${COMMIT:0:7}" + + if [[ $GITHUB_REF == refs/heads/master ]]; then + TAGS="${TAGS},${BASE_TAG}:latest,ghcr.io/${BASE_TAG}:latest" + TAGS="${TAGS},${BASE_TAG}:master,ghcr.io/${BASE_TAG}:master" + elif [[ $GITHUB_REF == refs/heads/nightly ]]; then + TAGS="${TAGS},${BASE_TAG}:nightly,ghcr.io/${BASE_TAG}:nightly" + else + TAGS="${TAGS},${BASE_TAG}:test,ghcr.io/${BASE_TAG}:test" + fi + + if [[ ${NEXT_VERSION} != "" ]]; then + TAGS="${TAGS},${BASE_TAG}:${NEXT_VERSION},ghcr.io/${BASE_TAG}:${NEXT_VERSION}" + fi + + # read the platforms from `.docker_platforms` + PLATFORMS=$(<.docker_platforms) + + echo "branch=${BRANCH}" >> $GITHUB_OUTPUT + echo "build_date=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT + echo "commit=${COMMIT}" >> $GITHUB_OUTPUT + echo "platforms=${PLATFORMS}" >> $GITHUB_OUTPUT + echo "push=${PUSH}" >> $GITHUB_OUTPUT + echo "tags=${TAGS}" >> $GITHUB_OUTPUT + + - name: Set Up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + id: buildx + + - name: Cache Docker Layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Log in to Docker Hub + if: ${{ steps.prepare.outputs.push == 'true' }} # PRs do not have access to secrets + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Log in to the Container registry + if: ${{ steps.prepare.outputs.push == 'true' }} # PRs do not have access to secrets + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ secrets.GH_BOT_NAME }} + password: ${{ secrets.GH_BOT_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v3 + with: + context: ./ + file: ./Dockerfile + push: ${{ steps.prepare.outputs.push }} + platforms: ${{ steps.prepare.outputs.platforms }} + build-args: | + BRANCH=${{ steps.prepare.outputs.branch }} + BUILD_DATE=${{ steps.prepare.outputs.build_date }} + BUILD_VERSION=${{ needs.check_changelog.outputs.next_version }} + COMMIT=${{ steps.prepare.outputs.commit }} + tags: ${{ steps.prepare.outputs.tags }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + + - name: Update Docker Hub Description + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} + uses: peter-evans/dockerhub-description@v3 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_PASSWORD }} # token is not currently supported + repository: ${{ env.BASE_TAG }} + short-description: ${{ github.event.repository.description }} + readme-filepath: ./DOCKER_README.md diff --git a/DOCKER_README.md b/DOCKER_README.md index a2647e00..87dbc672 100644 --- a/DOCKER_README.md +++ b/DOCKER_README.md @@ -1,44 +1,50 @@ # Docker -## Using docker run +## Build your own containers +This image provides a method for you to easily use the latest Sunshine release in your own docker projects. It is not +intended to use as a standalone container at this point, and should be considered experimental. + +```dockerfile +FROM lizardbyte/sunshine + +# install Steam, Wayland, etc. + +ENTRYPOINT steam && sunshine +``` + +## Where used +This is a list of docker projects using Sunshine. Something missing? Let us know about it! + +- [Games on Whales](https://games-on-whales.github.io) + +## Port and Volume mappings +Examples are below of the required mappings. The configuration file will be saved to `/config` in the container. + +### Using docker run Create and run the container (substitute your ``): ```bash docker run -d \ - --name=sunshine \ + --name= \ --restart=unless-stopped - -v :/config \ -e PUID= \ -e PGID= \ -e TZ= \ + -v :/config \ -p 47984-47990:47984-47990/tcp \ -p 48010:48010 \ -p 47998-48000:47998-48000/udp \ - lizardbyte/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 lizardbyte/sunshine -# Run the container with the same parameters as before -docker run -d ... -``` - -## Using docker-compose - +### Using docker-compose Create a `docker-compose.yml` file with the following contents (substitute your ``): ```yaml version: '3' services: - sunshine: - image: lizardbyte/sunshine + : + image: container_name: sunshine restart: unless-stopped volumes: @@ -48,26 +54,12 @@ services: - PGID= - TZ= ports: - - 47984-47990:47984-47990/tcp - - 48010:48010 - - 47998-48000:47998-48000/udp + - "47984-47990:47984-47990/tcp" + - "48010:48010" + - "47998-48000:47998-48000/udp" ``` -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 +### Parameters You must substitute the `` 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 @@ -79,16 +71,17 @@ port `47990` (e.g. `http://:47990`). The internal port must be `47990`, (e.g. `-p 8080:47990`). All the ports listed in the `docker run` and `docker-compose` examples are required. -| Parameter | Function | Example Value | Required | -| --------------------------- | -------------------- | ------------------- | -------- | -| `-p :47990` | Web UI Port | `47990` | True | -| `-v :/config` | Volume mapping | `/home/sunshine` | True | -| `-e PUID=` | User ID | `1001` | False | -| `-e PGID=` | Group ID | `1001` | False | -| `-e TZ=` | Lookup TZ value [here](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) | `America/New_York` | True | +| Parameter | Function | Example Value | Required | +|-----------------------------|---------------------------|--------------------|----------| +| `-p :47990` | Web UI Port | `47990` | True | +| `-v :/config` | Volume mapping | `/home/sunshine` | True | +| `-e PUID=` | User ID | `1001` | False | +| `-e PGID=` | Group ID | `1001` | False | +| `-e TZ=` | Lookup TZ value [here][1] | `America/New_York` | False | -### User / Group Identifiers: +[1]: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +#### 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. @@ -99,3 +92,5 @@ In this instance `PUID=1001` and `PGID=1001`. To find yours use id user as below $ id dockeruser uid=1001(dockeruser) gid=1001(dockergroup) groups=1001(dockergroup) ``` + +If you want to change the PUID or PGID after the image has been built, it will require rebuilding the image. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..b493b0d4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,92 @@ +FROM ubuntu:22.04 AS sunshine-base + +ARG DEBIAN_FRONTEND=noninteractive + +FROM sunshine-base as sunshine-build + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +RUN apt-get update -y \ + && apt-get install -y --no-install-recommends \ + build-essential=12.9* \ + cmake=3.22.1* \ + libavdevice-dev=7:4.4.* \ + libboost-filesystem-dev=1.74.0* \ + libboost-log-dev=1.74.0* \ + libboost-thread-dev=1.74.0* \ + libcap-dev=1:2.44* \ + libdrm-dev=2.4.110* \ + libevdev-dev=1.12.1* \ + libpulse-dev=1:15.99.1* \ + libopus-dev=1.3.1* \ + libssl-dev=3.0.2* \ + libwayland-dev=1.20.0* \ + libx11-dev=2:1.7.5* \ + libxcb-shm0-dev=1.14* \ + libxcb-xfixes0-dev=1.14* \ + libxcb1-dev=1.14* \ + libxfixes-dev=1:6.0.0* \ + libxrandr-dev=2:1.5.2* \ + libxtst-dev=2:1.2.3* \ + nvidia-cuda-dev=11.5.1* \ + nvidia-cuda-toolkit=11.5.1* \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# copy repository +WORKDIR /root/sunshine-build/ +COPY . . + +# setup build directory +WORKDIR /root/sunshine-build/build + +# cmake and cpack +RUN cmake -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DSUNSHINE_ASSETS_DIR=share/sunshine \ + -DSUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \ + -DSUNSHINE_ENABLE_WAYLAND=ON \ + -DSUNSHINE_ENABLE_X11=ON \ + -DSUNSHINE_ENABLE_DRM=ON \ + -DSUNSHINE_ENABLE_CUDA=ON \ + /root/sunshine-build \ + && make -j "$(nproc)" \ + && cpack -G DEB + +FROM sunshine-base as sunshine + +# copy deb from builder +COPY --from=sunshine-build /root/sunshine-build/build/cpack_artifacts/Sunshine.deb /sunshine.deb + +# install sunshine +RUN apt-get update -y \ + && apt-get install -y --no-install-recommends /sunshine.deb \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# network setup +EXPOSE 47984-47990/tcp +EXPOSE 48010 +EXPOSE 47998-48000/udp + +# setup user +ARG PGID=1000 +ENV PGID=${PGID} +ARG PUID=1000 +ENV PUID=${PUID} +ENV TZ="UTC" +ARG UNAME=lizard +ENV UNAME=${UNAME} + +ENV HOME=/home/$UNAME + +RUN groupadd -f -g "${PGID}" "${UNAME}" && \ + useradd -lm -d ${HOME} -s /bin/bash -g "${PGID}" -G input -u "${PUID}" "${UNAME}" && \ + mkdir -p ${HOME}/.config/sunshine && \ + ln -s ${HOME}/.config/sunshine /config && \ + chown -R ${UNAME} ${HOME} + +USER ${UNAME} +WORKDIR ${HOME} + +# entrypoint +ENTRYPOINT ["/usr/bin/sunshine"] diff --git a/docs/source/about/docker.rst b/docs/source/about/docker.rst index 8a597e26..77e4e208 100644 --- a/docs/source/about/docker.rst +++ b/docs/source/about/docker.rst @@ -1,5 +1,3 @@ :github_url: https://github.com/LizardByte/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 diff --git a/docs/source/about/installation.rst b/docs/source/about/installation.rst index eecdc04f..621e771f 100644 --- a/docs/source/about/installation.rst +++ b/docs/source/about/installation.rst @@ -17,8 +17,9 @@ Binaries can be found in the `latest release`_. Docker ------ -.. Todo:: Docker images of Sunshine are planned to be included in the future. - They will be available on `Dockerhub.io`_ and `ghcr.io`_. +Docker images are available on `Dockerhub.io`_ and `ghcr.io`_. + +See :ref:`Docker ` for additional information. Linux ----- diff --git a/docs/source/building/linux.rst b/docs/source/building/linux.rst index c841ad61..b2b4bfc7 100644 --- a/docs/source/building/linux.rst +++ b/docs/source/building/linux.rst @@ -5,8 +5,6 @@ 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 ^^^^^^^^^^^^^^^ @@ -18,7 +16,6 @@ Install Requirements sudo apt update && sudo apt install \ build-essential \ cmake \ - git \ libavdevice-dev \ libboost-filesystem-dev \ libboost-log-dev \ @@ -97,7 +94,6 @@ Install Requirements build-essential \ cmake \ gcc-10 \ - git \ g++-10 \ libavdevice-dev \ libboost-filesystem1.71-dev \ @@ -150,7 +146,6 @@ Install Requirements sudo apt update && sudo apt install \ build-essential \ cmake \ - git \ g++-10 \ libavdevice-dev \ libboost-filesystem-dev \ @@ -183,9 +178,9 @@ Install CuDA 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 +Ubuntu 22.04 ^^^^^^^^^^^^ -End of Life: July 2022 +End of Life: April 2027 Install Requirements .. code-block:: bash @@ -193,7 +188,6 @@ Install Requirements sudo apt update && sudo apt install \ build-essential \ cmake \ - git \ libavdevice-dev \ libboost-filesystem-dev \ libboost-log-dev \ @@ -215,12 +209,6 @@ Install Requirements 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. @@ -230,7 +218,7 @@ Debian based OSes cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 .. -Red Hat based Oses +Red Hat based OSes .. code-block:: bash cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ .. @@ -241,62 +229,3 @@ Finally make -j ${nproc} cpack -G DEB # optionally, create a deb package cpack -G RPM # optionally, create a rpm package - -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 `_ - -Instructions - #. :ref:`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- # create the container (replace the "") - ./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 diff --git a/scripts/Dockerfile-debian b/scripts/Dockerfile-debian deleted file mode 100644 index fc77eb8e..00000000 --- a/scripts/Dockerfile-debian +++ /dev/null @@ -1,40 +0,0 @@ -FROM debian:bullseye AS sunshine-debian - -# Debian Bullseye end of life is TBD - -ARG DEBIAN_FRONTEND=noninteractive -ARG TZ="Europe/London" - -SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN echo deb http://deb.debian.org/debian/ bullseye main contrib non-free | tee /etc/apt/sources.list.d/non-free.list -RUN apt-get update -y && \ - apt-get install -y \ - build-essential \ - cmake \ - git \ - libavdevice-dev \ - libboost-filesystem-dev \ - libboost-log-dev \ - libboost-thread-dev \ - libcap-dev \ - libdrm-dev \ - libevdev-dev \ - libpulse-dev \ - libopus-dev \ - libssl-dev \ - libwayland-dev \ - libx11-dev \ - libxcb-shm0-dev \ - libxcb-xfixes0-dev \ - libxcb1-dev \ - libxfixes-dev \ - libxrandr-dev \ - libxtst-dev \ - nvidia-cuda-dev \ - nvidia-cuda-toolkit \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Entrypoint -COPY build-private.sh /root/build.sh -ENTRYPOINT ["/root/build.sh", "-deb"] diff --git a/scripts/Dockerfile-fedora_33 b/scripts/Dockerfile-fedora_33 deleted file mode 100644 index 320c6a67..00000000 --- a/scripts/Dockerfile-fedora_33 +++ /dev/null @@ -1,32 +0,0 @@ -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"] -RUN dnf -y update && \ - dnf -y group install "Development Tools" && \ - dnf -y 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 && \ - dnf -y install \ - boost-devel \ - boost-static.x86_64 \ - cmake \ - ffmpeg-devel \ - libevdev-devel \ - libxcb-devel \ - libX11-devel \ - libXfixes-devel \ - libXrandr-devel \ - libXtst-devel \ - openssl-devel \ - opus-devel \ - pulseaudio-libs-devel \ - libcap-devel \ - libdrm-devel \ - rpm-build \ - && dnf clean all \ - && rm -rf /var/cache/yum - -# Entrypoint -COPY build-private.sh /root/build.sh -ENTRYPOINT ["/root/build.sh", "-rpm"] diff --git a/scripts/Dockerfile-fedora_35 b/scripts/Dockerfile-fedora_35 deleted file mode 100644 index 18f5bf53..00000000 --- a/scripts/Dockerfile-fedora_35 +++ /dev/null @@ -1,36 +0,0 @@ -FROM fedora:35 AS sunshine-fedora_35 - -# Fedora 35 end of life is TBD - -SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN dnf -y update && \ - dnf -y group install "Development Tools" && \ - dnf -y 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 && \ - dnf -y install \ - boost-devel \ - boost-static.x86_64 \ - cmake \ - ffmpeg-devel \ - gcc-c++ \ - libevdev-devel \ - libX11-devel \ - libxcb-devel \ - libXcursor-devel \ - libXfixes-devel \ - libXinerama-devel \ - libXi-devel \ - libXrandr-devel \ - libXtst-devel \ - mesa-libGL-devel \ - openssl-devel \ - opus-devel \ - pulseaudio-libs-devel \ - libcap-devel \ - libdrm-devel \ - rpm-build \ - && dnf clean all \ - && rm -rf /var/cache/yum - -# Entrypoint -COPY build-private.sh /root/build.sh -ENTRYPOINT ["/root/build.sh", "-rpm"] diff --git a/scripts/Dockerfile-ubuntu_18_04 b/scripts/Dockerfile-ubuntu_18_04 deleted file mode 100644 index 6ad3e8c0..00000000 --- a/scripts/Dockerfile-ubuntu_18_04 +++ /dev/null @@ -1,63 +0,0 @@ -FROM ubuntu:18.04 AS sunshine-ubuntu_18_04 - -# Ubuntu 18.04 end of life is April 2028 - -ARG DEBIAN_FRONTEND=noninteractive -ARG TZ="Europe/London" - -SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN apt-get update -y && \ - apt-get install -y \ - 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 && \ - apt-get update -y && \ - apt-get install -y \ - 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 \ - libdrm-dev \ - libevdev-dev \ - libpulse-dev \ - libopus-dev \ - libssl-dev \ - libwayland-dev \ - libx11-dev \ - libxcb-shm0-dev \ - libxcb-xfixes0-dev \ - libxcb1-dev \ - libxfixes-dev \ - libxrandr-dev \ - libxtst-dev \ - wget \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Update gcc alias -RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 - -# Install CuDA -RUN 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 /root/cuda.run && chmod a+x /root/cuda.run -RUN /root/cuda.run --silent --toolkit --toolkitpath=/usr --no-opengl-libs --no-man-page --no-drm && rm /root/cuda.run - -# Install cmake -ADD https://cmake.org/files/v3.22/cmake-3.22.2-linux-x86_64.sh /cmake-3.22.2-linux-x86_64.sh -RUN mkdir /opt/cmake -RUN sh /cmake-3.22.2-linux-x86_64.sh --prefix=/opt/cmake --skip-license -RUN ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake -RUN cmake --version - -# Entrypoint -COPY build-private.sh /root/build.sh -ENTRYPOINT ["/root/build.sh", "-deb"] diff --git a/scripts/Dockerfile-ubuntu_20_04 b/scripts/Dockerfile-ubuntu_20_04 deleted file mode 100644 index 44e897a7..00000000 --- a/scripts/Dockerfile-ubuntu_20_04 +++ /dev/null @@ -1,46 +0,0 @@ -FROM ubuntu:20.04 AS sunshine-ubuntu_20_04 - -# Ubuntu 20.04 end of life is April 2030 - -ARG DEBIAN_FRONTEND=noninteractive -ARG TZ="Europe/London" - -SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN apt-get update -y && \ - apt-get install -y \ - build-essential \ - cmake \ - git \ - g++-10 \ - libavdevice-dev \ - libboost-filesystem-dev \ - libboost-log-dev \ - libboost-thread-dev \ - libcap-dev \ - libdrm-dev \ - libevdev-dev \ - libpulse-dev \ - libopus-dev \ - libssl-dev \ - libwayland-dev \ - libx11-dev \ - libxcb-shm0-dev \ - libxcb-xfixes0-dev \ - libxcb1-dev \ - libxfixes-dev \ - libxrandr-dev \ - libxtst-dev \ - wget \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Update gcc alias -RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 - -# Install CuDA -RUN 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 /root/cuda.run && chmod a+x /root/cuda.run -RUN /root/cuda.run --silent --toolkit --toolkitpath=/usr --no-opengl-libs --no-man-page --no-drm && rm /root/cuda.run - -# Entrypoint -COPY build-private.sh /root/build.sh -ENTRYPOINT ["/root/build.sh", "-deb"] diff --git a/scripts/Dockerfile-ubuntu_21_04 b/scripts/Dockerfile-ubuntu_21_04 deleted file mode 100644 index 012845a5..00000000 --- a/scripts/Dockerfile-ubuntu_21_04 +++ /dev/null @@ -1,40 +0,0 @@ -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 TZ="Europe/London" - -SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN apt-get update -y && \ - apt-get install -y \ - build-essential \ - cmake \ - git \ - libavdevice-dev \ - libboost-thread-dev \ - libboost-filesystem-dev \ - libboost-log-dev \ - libcap-dev \ - libdrm-dev \ - libevdev-dev \ - libpulse-dev \ - libopus-dev \ - libssl-dev \ - libwayland-dev \ - libx11-dev \ - libxcb-shm0-dev \ - libxcb-xfixes0-dev \ - libxcb1-dev \ - libxfixes-dev \ - libxrandr-dev \ - libxtst-dev \ - nvidia-cuda-dev \ - nvidia-cuda-toolkit \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Entrypoint -COPY build-private.sh /root/build.sh -ENTRYPOINT ["/root/build.sh", "-deb"] diff --git a/scripts/Dockerfile-ubuntu_21_10 b/scripts/Dockerfile-ubuntu_21_10 deleted file mode 100644 index 6be49dbe..00000000 --- a/scripts/Dockerfile-ubuntu_21_10 +++ /dev/null @@ -1,39 +0,0 @@ -FROM ubuntu:21.10 AS sunshine-ubuntu_21_10 - -# Ubuntu 21.10 end of life is July 2022 - -ARG DEBIAN_FRONTEND=noninteractive -ARG TZ="Europe/London" - -SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN apt-get update -y && \ - apt-get install -y \ - build-essential \ - cmake \ - git \ - libavdevice-dev \ - libboost-filesystem-dev \ - libboost-log-dev \ - libboost-thread-dev \ - libcap-dev \ - libdrm-dev \ - libevdev-dev \ - libpulse-dev \ - libopus-dev \ - libssl-dev \ - libwayland-dev \ - libx11-dev \ - libxcb-shm0-dev \ - libxcb-xfixes0-dev \ - libxcb1-dev \ - libxfixes-dev \ - libxrandr-dev \ - libxtst-dev \ - nvidia-cuda-dev \ - nvidia-cuda-toolkit \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Entrypoint -COPY build-private.sh /root/build.sh -ENTRYPOINT ["/root/build.sh", "-deb"] diff --git a/scripts/build-container.sh b/scripts/build-container.sh deleted file mode 100755 index 5da4784a..00000000 --- a/scripts/build-container.sh +++ /dev/null @@ -1,179 +0,0 @@ -#!/bin/bash -e -set -e - -usage() { - echo "Usage: $0 [OPTIONS]" - echo " -c: command --> default [build]" - echo " | delete --> Delete the container, Dockerfile isn't mandatory" - echo " | build --> Build the container, Dockerfile is mandatory" - echo " | compile --> Builds the container, then compiles it. Dockerfile is mandatory" - echo "" - echo " -s: path: The path to the source for compilation" - echo " -n: name: Docker container name --> default [sunshine]" - echo " --> all: Build/Compile/Delete all available docker containers" - echo " -f: Dockerfile: The name of the docker file" -} - -# Attempt to turn relative paths into absolute paths -absolute_path() { - RELATIVE_PATH=$1 - if which realpath >/dev/null 2>/dev/null - then - RELATIVE_PATH=$(realpath $RELATIVE_PATH) - else - echo "Warning: realpath is not installed on your system, ensure [$1] is absolute" - fi - - RETURN=$RELATIVE_PATH -} - -CONTAINER_NAME=sunshine -COMMAND=BUILD - -build_container() { - CONTAINER_NAME=$1 - DOCKER_FILE=$2 - - if [ ! -f "$DOCKER_FILE" ] - then - echo "Error: $DOCKER_FILE doesn't exist" - exit 7 - fi - - echo "docker build . -t $CONTAINER_NAME -f $DOCKER_FILE" - docker build . -t "$CONTAINER_NAME" -f "$DOCKER_FILE" -} - -delete() { - CONTAINER_NAME_UPPER=$(echo "$CONTAINER_NAME" | tr '[:lower:]' '[:upper:]') - if [ "$CONTAINER_NAME_UPPER" = "ALL" ] - then - shopt -s nullglob - for file in $(find . -maxdepth 1 -iname "Dockerfile-*" -type f) - do - CURRENT_CONTAINER="sunshine-$(echo $file | cut -c 14-)" - - if docker inspect "$CURRENT_CONTAINER" > /dev/null 2> /dev/null - then - echo "docker rmi $CURRENT_CONTAINER" - docker rmi "$CURRENT_CONTAINER" - fi - done - shopt -u nullglob #revert nullglob back to it's normal default state - else - if docker inspect "$CONTAINER_NAME" > /dev/null 2> /dev/null - then - echo "docker rmi $CONTAINER_NAME" - docker rmi $CONTAINER_NAME - fi - fi -} - -build() { - CONTAINER_NAME_UPPER=$(echo "$CONTAINER_NAME" | tr '[:lower:]' '[:upper:]') - if [ "$CONTAINER_NAME_UPPER" = "ALL" ] - then - shopt -s nullglob - for file in $(find . -maxdepth 1 -iname "Dockerfile-*" -type f) - do - CURRENT_CONTAINER="sunshine-$(echo $file | cut -c 14-)" - build_container "$CURRENT_CONTAINER" "$file" - done - shopt -u nullglob #revert nullglob back to it's normal default state - else - if [[ -z "$DOCKER_FILE" ]] - then - echo "Error: if container name isn't equal to 'all', you need to specify the Dockerfile" - exit 6 - fi - - build_container "$CONTAINER_NAME" "$DOCKER_FILE" - fi -} - -abort() { - echo "$1" - exit 10 -} - -compile() { - CONTAINER_NAME_UPPER=$(echo "$CONTAINER_NAME" | tr '[:lower:]' '[:upper:]') - if [ "$CONTAINER_NAME_UPPER" = "ALL" ] - then - shopt -s nullglob - - # If any docker container doesn't exist, we cannot compile all of them - for file in $(find . -maxdepth 1 -iname "Dockerfile-*" -type f) - do - CURRENT_CONTAINER="sunshine-$(echo $file | cut -c 14-)" - - # If container doesn't exist --> abort. - docker inspect "$CURRENT_CONTAINER" > /dev/null 2> /dev/null || abort "Error: container image [$CURRENT_CONTAINER] doesn't exist" - done - - for file in $(find . -maxdepth 1 -iname "Dockerfile-*" -type f) - do - CURRENT_CONTAINER="sunshine-$(echo $file | cut -c 14-)" - - echo "$PWD/build-sunshine.sh -p -n $CURRENT_CONTAINER $SUNSHINE_SOURCES" - "$PWD/build-sunshine.sh" -p -n "$CURRENT_CONTAINER" $SUNSHINE_SOURCES - done - shopt -u nullglob #revert nullglob back to it's normal default state - else - # If container exists - if docker inspect "$CONTAINER_NAME" > /dev/null 2> /dev/null - then - echo "$PWD/build-sunshine.sh -p -n $CONTAINER_NAME $SUNSHINE_SOURCES" - "$PWD/build-sunshine.sh" -p -n "$CONTAINER_NAME" $SUNSHINE_SOURCES - else - echo "Error: container image [$CONTAINER_NAME] doesn't exist" - exit 9 - fi - fi -} - -while getopts ":c:hn:f:s:" arg; do - case ${arg} in - s) - SUNSHINE_SOURCES="-s $OPTARG" - ;; - c) - COMMAND=$(echo $OPTARG | tr '[:lower:]' '[:upper:]') - ;; - n) - echo "Container name: $OPTARG" - CONTAINER_NAME="$OPTARG" - ;; - f) - echo "Using Dockerfile [$OPTARG]" - DOCKER_FILE="$OPTARG" - ;; - h) - usage - exit 0 - ;; - esac -done - -echo "$0 set to $(echo $COMMAND | tr '[:upper:]' '[:lower:]')" - -if [ "$COMMAND" = "BUILD" ] -then - echo "Start building..." - delete - build - echo "Done." -elif [ "$COMMAND" = "COMPILE" ] -then - echo "Start compiling..." - compile - echo "Done." -elif [ "$COMMAND" = "DELETE" ] -then - echo "Start deleting..." - delete - echo "Done." -else - echo "Unknown command [$(echo $COMMAND | tr '[:upper:]' '[:lower:]')]" - exit 4 -fi diff --git a/scripts/build-private.sh b/scripts/build-private.sh deleted file mode 100755 index 80c7d6bc..00000000 --- a/scripts/build-private.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -e -set -e - -CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:-Release}" -SUNSHINE_EXECUTABLE_PATH="${SUNSHINE_EXECUTABLE_PATH:-/usr/bin/sunshine}" -SUNSHINE_ASSETS_DIR="${SUNSHINE_ASSETS_DIR:-/etc/sunshine}" - - -SUNSHINE_ROOT="${SUNSHINE_ROOT:-/root/sunshine}" -SUNSHINE_TAG="${SUNSHINE_TAG:-master}" -SUNSHINE_GIT_URL="${SUNSHINE_GIT_URL:-https://github.com/lizardbyte/sunshine.git}" - - -SUNSHINE_ENABLE_WAYLAND=${SUNSHINE_ENABLE_WAYLAND:-ON} -SUNSHINE_ENABLE_X11=${SUNSHINE_ENABLE_X11:-ON} -SUNSHINE_ENABLE_DRM=${SUNSHINE_ENABLE_DRM:-ON} -SUNSHINE_ENABLE_CUDA=${SUNSHINE_ENABLE_CUDA:-ON} - -# For debugging, it would be usefull to have the sources on the host. -if [[ ! -d "$SUNSHINE_ROOT" ]] -then - git clone --depth 1 --branch "$SUNSHINE_TAG" "$SUNSHINE_GIT_URL" --recurse-submodules "$SUNSHINE_ROOT" -fi - -if [[ ! -d /root/sunshine-build ]] -then - mkdir -p /root/sunshine-build -fi -cd /root/sunshine-build - -cmake "-DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE" "-DSUNSHINE_EXECUTABLE_PATH=$SUNSHINE_EXECUTABLE_PATH" "-DSUNSHINE_ASSETS_DIR=$SUNSHINE_ASSETS_DIR" "-DSUNSHINE_ENABLE_WAYLAND=$SUNSHINE_ENABLE_WAYLAND" "-DSUNSHINE_ENABLE_X11=$SUNSHINE_ENABLE_X11" "-DSUNSHINE_ENABLE_DRM=$SUNSHINE_ENABLE_DRM" "-DSUNSHINE_ENABLE_CUDA=$SUNSHINE_ENABLE_CUDA" "$SUNSHINE_ROOT" - -make -j ${nproc} - -# Get preferred package format -if [ "$1" == "-rpm" ] -then - echo "Packaging in .rpm format." - ./gen-rpm -d -elif [ "$1" == "-deb" ] -then - echo "Packaging in .deb format." - ./gen-deb -else - echo "Preferred packaging not specified." - echo "Use -deb or -rpm to specify preferred package format." - exit 1 -fi diff --git a/scripts/build-sunshine.sh b/scripts/build-sunshine.sh deleted file mode 100755 index 42843752..00000000 --- a/scripts/build-sunshine.sh +++ /dev/null @@ -1,132 +0,0 @@ -#!/bin/bash -e -set -e - -usage() { - echo "Usage: $0" - echo " -d: Generate a debug build" - echo " -p: Generate a linux package" - echo " -e: Extension of package... i.e. 'deb', 'rpm' --> default [deb]" - echo " -u: The input device is not a TTY" - echo " -n name: Docker container name --> default [sunshine]" - echo " -s path/to/sources/sunshine: Use local sources instead of a git repository" - echo " -c path/to/cmake/binary/dir: Store cmake output on host OS" -} - -# Attempt to turn relative paths into absolute paths -absolute_path() { - RELATIVE_PATH=$1 - if which realpath >/dev/null 2>/dev/null - then - RELATIVE_PATH=$(realpath $RELATIVE_PATH) - else - echo "Warning: realpath is not installed on your system, ensure [$1] is absolute" - fi - - RETURN=$RELATIVE_PATH -} - -CMAKE_BUILD_TYPE="-e CMAKE_BUILD_TYPE=Release" -SUNSHINE_PACKAGE_BUILD=OFF -SUNSHINE_PACKAGE_EXTENSION=deb -SUNSHINE_GIT_URL=https://github.com/lizardbyte/sunshine.git -CONTAINER_NAME=sunshine - -# Docker will fail if ctrl+c is passed through and the input is not a tty -DOCKER_INTERACTIVE=-ti - -while getopts ":dpuhc:e:s:n:" arg; do - case ${arg} in - u) - echo "Input device is not a TTY" - USERNAME="$USER" - unset DOCKER_INTERACTIVE - ;; - d) - echo "Creating debug build" - CMAKE_BUILD_TYPE="-e CMAKE_BUILD_TYPE=Debug" - ;; - p) - echo "Creating package build" - SUNSHINE_PACKAGE_BUILD=ON - SUNSHINE_ASSETS_DIR="-e SUNSHINE_ASSETS_DIR=/etc/sunshine" - SUNSHINE_EXECUTABLE_PATH="-e SUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine" - ;; - e) - echo "Defining package extension: $OPTARG" - if [ "$OPTARG" == "deb" ] - then - SUNSHINE_PACKAGE_EXTENSION=$OPTARG - echo "Package extension: deb" - elif [ "$OPTARG" == "rpm" ] - then - SUNSHINE_PACKAGE_EXTENSION=$OPTARG - echo "Package extension: rpm" - else - echo "Package extension not supported: $OPTARG" - echo "Falling back to default package extension: $SUNSHINE_PACKAGE_EXTENSION" - fi - ;; - s) - absolute_path "$OPTARG" - OPTARG="$RETURN" - echo "Using sources from $OPTARG" - SUNSHINE_ROOT="-v $OPTARG:/root/sunshine" - ;; - c) - [ "$USERNAME" == "" ] && USERNAME=$(logname) - - absolute_path "$OPTARG" - OPTARG="$RETURN" - - echo "Using $OPTARG as cmake binary dir" - if [[ ! -d $OPTARG ]] - then - echo "cmake binary dir doesn't exist, a new one will be created." - mkdir -p "$OPTARG" - [ "$USERNAME" == "$USER"] || chown $USERNAME:$USERNAME "$OPTARG" - fi - - CMAKE_ROOT="-v $OPTARG:/root/sunshine-build" - ;; - n) - echo "Container name: $OPTARG" - CONTAINER_NAME=$OPTARG - ;; - h) - usage - exit 0 - ;; - esac -done - -[ "$USERNAME" = "" ] && USERNAME=$(logname) - -BUILD_DIR="$PWD/$CONTAINER_NAME-build" -[ "$SUNSHINE_ASSETS_DIR" = "" ] && SUNSHINE_ASSETS_DIR="-e SUNSHINE_ASSETS_DIR=$BUILD_DIR/assets" -[ "$SUNSHINE_EXECUTABLE_PATH" = "" ] && SUNSHINE_EXECUTABLE_PATH="-e SUNSHINE_EXECUTABLE_PATH=$BUILD_DIR/sunshine" - -echo "docker run $DOCKER_INTERACTIVE --privileged $SUNSHINE_ROOT $CMAKE_ROOT $SUNSHINE_ASSETS_DIR $SUNSHINE_EXECUTABLE_PATH $CMAKE_BUILD_TYPE --name $CONTAINER_NAME $CONTAINER_NAME" -docker run $DOCKER_INTERACTIVE --privileged $SUNSHINE_ROOT $CMAKE_ROOT $SUNSHINE_ASSETS_DIR $SUNSHINE_EXECUTABLE_PATH $CMAKE_BUILD_TYPE --name $CONTAINER_NAME $CONTAINER_NAME - -exit_code=$? - -if [ $exit_code -eq 0 ] -then - mkdir -p $BUILD_DIR - case $SUNSHINE_PACKAGE_BUILD in - ON) - echo "Downloading package to: $BUILD_DIR/$CONTAINER_NAME.$SUNSHINE_PACKAGE_EXTENSION" - docker cp $CONTAINER_NAME:/root/sunshine-build/package-$SUNSHINE_PACKAGE_EXTENSION/sunshine.$SUNSHINE_PACKAGE_EXTENSION "$BUILD_DIR/$CONTAINER_NAME.$SUNSHINE_PACKAGE_EXTENSION" - ;; - *) - echo "Downloading binary and assets to: $BUILD_DIR" - docker cp $CONTAINER_NAME:/root/sunshine/assets "$BUILD_DIR" - docker cp $CONTAINER_NAME:/root/sunshine-build/sunshine "$BUILD_DIR" - ;; - esac - echo "chown --recursive $USERNAME:$USERNAME $BUILD_DIR" - chown --recursive $USERNAME:$USERNAME "$BUILD_DIR" -fi - -echo "Removing docker container $CONTAINER_NAME" -docker rm $CONTAINER_NAME From 548eeb8889b160a696aa8f23077496c3125a201c Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Fri, 28 Oct 2022 12:20:16 -0400 Subject: [PATCH 3/9] update docs --- .github/ISSUE_TEMPLATE/bug-report.yml | 64 ++++++++++++++++++++----- README.rst | 20 +++++--- docs/source/about/installation.rst | 10 +++- docs/source/about/usage.rst | 14 +----- docs/source/troubleshooting/general.rst | 9 ++++ 5 files changed, 83 insertions(+), 34 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index bd21df29..9e685501 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -6,7 +6,22 @@ body: attributes: value: > **THIS IS NOT THE PLACE TO ASK FOR SUPPORT!** - Please use [Discord](https://docs.lizardbyte.dev/en/latest/about/support.html#discord) for support issues. + Please use our [Support Center](https://app.lizardbyte.dev/support) for support issues. + Non actionable bug reports will be locked and closed! + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have searched the existing issues + required: true + - type: checkboxes + attributes: + label: Is your issue described in the documentation? + description: Please read our [documentation](https://docs.lizardbyte.dev/projects/sunshine) + options: + - label: I have read the documentation + required: true - type: textarea id: description attributes: @@ -30,10 +45,11 @@ body: label: Host Operating System description: What version operating system are you running the software on? options: + - Docker - Linux - macOS - Windows - - other + - other, n/a - type: input id: os-version attributes: @@ -41,28 +57,50 @@ body: description: Provide the version of the operating system. Additionally a build number would be helpful. validations: required: true - - type: input + - type: dropdown id: os-architecture attributes: label: Architecture - placeholder: e.g. 32 bit, 64 bit, arm - validations: - required: true + options: + - 32 bit + - 64 bit + - arm + - other, n/a - type: input id: version attributes: - label: Sunshine Version + label: Sunshine commit or version placeholder: eg. 0.14.0 validations: required: true - - type: input + - type: dropdown + id: package_type + attributes: + label: Package + description: The package you installed + options: + - Linux - AppImage + - Linux - deb + - Linux - flatpak + - Linux - rpm + - macOS - dmg + - macOS - Portfile + - macOS - pkg + - Windows - installer + - Windows - portable + - other (not listed) + - other (self built) + - other (fork of this repo) + - type: dropdown id: graphics_type attributes: label: GPU Type description: The type of the installed graphics card. - placeholder: e.g. Intel, AMD, Nvidia - validations: - required: true + options: + - AMD + - Intel + - Nvidia + - none (software encoding) - type: input id: graphics_model attributes: @@ -83,8 +121,8 @@ body: id: capture_method attributes: label: Capture Method (Linux Only) - description: The driver/mesa version of the installed graphics card. - placeholder: e.g. PipeWire/KVM/X11 + description: If on Linux, the capture method being used. + placeholder: e.g. PipeWire/KVM/X11/KMS validations: required: false - type: textarea diff --git a/README.rst b/README.rst index 8d51ff09..4f7a5102 100644 --- a/README.rst +++ b/README.rst @@ -2,7 +2,7 @@ Overview ======== -LizardByte has the full documentation hosted on `Read the Docs `_. +LizardByte has the full documentation hosted on `Read the Docs `_. About ----- @@ -48,7 +48,8 @@ Integrations Support --------- -Our support methods are listed in our `LizardByte Docs `_. +Our support methods are listed in our +`LizardByte Docs `_. Downloads --------- @@ -57,11 +58,16 @@ Downloads :alt: GitHub Releases :target: https://github.com/LizardByte/Sunshine/releases/latest +.. image:: https://img.shields.io/docker/pulls/lizardbyte/sunshine?style=for-the-badge&logo=docker + :alt: Docker + :target: https://hub.docker.com/r/lizardbyte/sunshine + +Stats +------ +.. image:: https://img.shields.io/github/stars/lizardbyte/sunshine?logo=github&style=for-the-badge + :alt: GitHub stars + :target: https://github.com/LizardByte/Sunshine + .. image:: https://img.shields.io/badge/dynamic/json?color=blue&label=AUR&style=for-the-badge&query=$.results.0.NumVotes&url=https%3A%2F%2Fapp.lizardbyte.dev%2Funo%2Faur%2Fsunshine.json&logo=archlinux :alt: AUR votes :target: https://aur.archlinux.org/packages/sunshine - -.. comment - image:: https://img.shields.io/docker/pulls/lizardbyte/sunshine?style=for-the-badge&logo=docker - :alt: Docker - :target: https://hub.docker.com/r/lizardbyte/sunshine diff --git a/docs/source/about/installation.rst b/docs/source/about/installation.rst index 621e771f..5c9f2194 100644 --- a/docs/source/about/installation.rst +++ b/docs/source/about/installation.rst @@ -124,9 +124,15 @@ Flatpak Package Start: - .. code-block:: bash + X11 and NVFBC capture (X11 Only) + .. code-block:: bash - flatpak run dev.lizardbyte.sunshine + flatpak run dev.lizardbyte.sunshine + + KMS capture (Wayland & X11) + .. code-block:: bash + + sudo -i PULSE_SERVER=unix:$(pactl info | awk '/Server String/{print$3}') flatpak run dev.lizardbyte.sunshine Uninstall: diff --git a/docs/source/about/usage.rst b/docs/source/about/usage.rst index f1012192..0e3c87a4 100644 --- a/docs/source/about/usage.rst +++ b/docs/source/about/usage.rst @@ -67,20 +67,10 @@ Sunshine needs access to `uinput` to create mouse and gamepad events. sudo usermod -a -G input $USER #. Create `udev` rules. - .. code-block:: bash - - sudo nano /etc/udev/rules.d/85-sunshine.rules - - Input the following contents. - .. code-block:: - KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput" - - Save the file and exit: - - #. ``CTRL+X`` to start exit. - #. ``Y`` to save modifications. + echo 'KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"' | \ + sudo tee /etc/udev/rules.d/85-sunshine-input.rules #. Optionally, configure autostart service - filename: ``~/.config/systemd/user/sunshine.service`` diff --git a/docs/source/troubleshooting/general.rst b/docs/source/troubleshooting/general.rst index 865214db..6c480720 100644 --- a/docs/source/troubleshooting/general.rst +++ b/docs/source/troubleshooting/general.rst @@ -11,3 +11,12 @@ If you forgot your credentials to the web UI, try this. Can't access the web UI? #. Check firefall rules. + +NvFBC, NvENC, or general issues with Nvidia graphics card. + + - Consume grade Nvidia cards are software limited to a specific number of encodes. See + `Video Encode and Decode GPU Support Matrix `_ + for more info. + - You can usually bypass the restriction with a driver patch. See Keylase's + `Linux `_ + or `Windows `_ patches for more guidance. From d0ce0a67f2cd05722b7f6ac8b28bd46b6604c3d0 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Fri, 28 Oct 2022 15:44:27 -0400 Subject: [PATCH 4/9] fix winget releaser --- .github/workflows/CI.yml | 14 ++++++++++++++ .github/workflows/winget.yml | 17 ----------------- 2 files changed, 14 insertions(+), 17 deletions(-) delete mode 100644 .github/workflows/winget.yml diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 2d367286..8eee5358 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -800,3 +800,17 @@ jobs: next_version: ${{ needs.check_changelog.outputs.next_version }} last_version: ${{ needs.check_changelog.outputs.last_version }} release_body: ${{ needs.check_changelog.outputs.release_body }} + + release-winget: + name: Release to WinGet + needs: build_win + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} + runs-on: windows-latest # the required action can only be run on Windows + steps: + - name: Release to WinGet + uses: vedantmgoyal2009/winget-releaser@v1 + with: + identifier: LizardByte.Sunshine + release-tag: ${{ needs.check_changelog.outputs.next_version }} + installers-regex: '\.exe$' # only .exe files + token: ${{ secrets.GH_BOT_TOKEN }} diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml deleted file mode 100644 index 0cf5b371..00000000 --- a/.github/workflows/winget.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: Publish to WinGet - -on: - release: - types: [released] - -jobs: - winget-releaser: - name: winget releaser - runs-on: windows-latest - steps: - - name: winget releaser - uses: vedantmgoyal2009/winget-releaser@latest - with: - identifier: LizardByte.Sunshine - token: ${{ secrets.GH_BOT_TOKEN }} From 6e9aac3b8375763e3aca65b7b228348120809b4a Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:04:33 -0400 Subject: [PATCH 5/9] add nightly release --- .github/workflows/CI.yml | 138 +++++++++++++++++++++++++++------------ 1 file changed, 98 insertions(+), 40 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 8eee5358..41b8bd12 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -6,7 +6,7 @@ on: branches: [master, nightly] types: [opened, synchronize, reopened] push: - branches: [master] + branches: [master, nightly] workflow_dispatch: jobs: @@ -26,6 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout + if: ${{ github.ref == 'refs/heads/master' || github.base_ref == 'master' }} uses: actions/checkout@v3 - name: Verify Changelog @@ -66,10 +67,47 @@ jobs: "project(Sunshine [VERSION ${{ needs.check_changelog.outputs.next_version_bare }}]" exit 1 + setup_release: + name: Setup Release + needs: check_changelog + runs-on: ubuntu-latest + steps: + - name: Set release details + id: release_details + run: | + # determine to create a release or not + if [[ $GITHUB_EVENT_NAME == "push" ]]; then + RELEASE=true + else + RELEASE=false + fi + + # set the release tag + if [[ $GITHUB_REF == refs/heads/master ]]; then + TAG="${{ needs.check_changelog.outputs.next_version }}" + RELEASE_BODY="${{ needs.check_changelog.outputs.release_body }}" + PRE_RELEASE="false" + elif [[ $GITHUB_REF == refs/heads/nightly ]]; then + TAG="nightly" + RELEASE_BODY="automated nightly release\nupdated: $(date -u +'%Y-%m-%dT%H:%M:%SZ')" + PRE_RELEASE="true" + fi + + echo "create_release=${RELEASE}" >> $GITHUB_OUTPUT + echo "release_tag=${TAG}" >> $GITHUB_OUTPUT + echo "release_body=${RELEASE_BODY}" >> $GITHUB_OUTPUT + echo "pre_release=${PRE_RELEASE}" >> $GITHUB_OUTPUT + + outputs: + create_release: ${{ steps.release_details.outputs.create_release }} + release_tag: ${{ steps.release_details.outputs.release_tag }} + release_body: ${{ steps.release_details.outputs.release_body }} + pre_release: ${{ steps.release_details.outputs.pre_release }} + build_linux_aur: name: Linux AUR runs-on: ubuntu-latest - needs: check_changelog + needs: setup_release steps: - name: Checkout @@ -172,7 +210,7 @@ jobs: build_linux_flatpak: name: Linux Flatpak runs-on: ubuntu-22.04 - needs: check_changelog + needs: setup_release strategy: fail-fast: false # false to test all, true to fail entire job if any fail matrix: @@ -260,19 +298,23 @@ jobs: name: sunshine-linux-flatpak-${{ matrix.arch }} path: artifacts/ - - name: Create Release - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} - uses: LizardByte/.github/actions/create_release@master + - name: Create/Update GitHub Release + if: ${{ needs.setup_release.outputs.create_release == 'true' }} + uses: ncipollo/release-action@v1 with: + name: ${{ needs.setup_release.outputs.release_tag }} + tag: ${{ needs.setup_release.outputs.release_tag }} + artifacts: "*artifacts/*" token: ${{ secrets.GH_BOT_TOKEN }} - next_version: ${{ needs.check_changelog.outputs.next_version }} - last_version: ${{ needs.check_changelog.outputs.last_version }} - release_body: ${{ needs.check_changelog.outputs.release_body }} + allowUpdates: true + body: ${{ needs.setup_release.outputs.release_body }} + discussionCategory: announcements + prerelease: ${{ needs.setup_release.outputs.pre_release }} build_linux: name: Linux runs-on: ubuntu-20.04 - needs: check_changelog + needs: [check_changelog, setup_release] strategy: fail-fast: false # false to test all, true to fail entire job if any fail matrix: @@ -385,7 +427,7 @@ jobs: mv ./cpack_artifacts/Sunshine.rpm ../artifacts/sunshine.rpm - name: Set AppImage Version - if: ${{ matrix.type == 'appimage' && ( needs.check_changelog.outputs.next_version_bare != needs.check_changelog.outputs.latest_version ) }} # yamllint disable-line rule:line-length + if: ${{ matrix.type == 'appimage' && ( needs.check_changelog.outputs.next_version_bare != needs.check_changelog.outputs.last_version ) }} # yamllint disable-line rule:line-length run: | version=${{ needs.check_changelog.outputs.next_version_bare }} echo "VERSION=${version}" >> $GITHUB_ENV @@ -442,19 +484,23 @@ jobs: name: sunshine-linux-${{ matrix.type }} path: artifacts/ - - name: Create Release - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} - uses: LizardByte/.github/actions/create_release@master + - name: Create/Update GitHub Release + if: ${{ needs.setup_release.outputs.create_release == 'true' }} + uses: ncipollo/release-action@v1 with: + name: ${{ needs.setup_release.outputs.release_tag }} + tag: ${{ needs.setup_release.outputs.release_tag }} + artifacts: "*artifacts/*" token: ${{ secrets.GH_BOT_TOKEN }} - next_version: ${{ needs.check_changelog.outputs.next_version }} - last_version: ${{ needs.check_changelog.outputs.last_version }} - release_body: ${{ needs.check_changelog.outputs.release_body }} + allowUpdates: true + body: ${{ needs.setup_release.outputs.release_body }} + discussionCategory: announcements + prerelease: ${{ needs.setup_release.outputs.pre_release }} build_mac: name: MacOS runs-on: macos-11 - needs: check_changelog + needs: setup_release steps: - name: Checkout @@ -512,18 +558,22 @@ jobs: rm -f ./sunshine-macos-experimental-archive.zip ## no artifacts to release currently - # - name: Create Release - # if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} - # uses: LizardByte/.github/actions/create_release@master + # - name: Create/Update GitHub Release + # if: ${{ needs.setup_release.outputs.create_release == 'true' }} + # uses: ncipollo/release-action@v1 # with: + # name: ${{ needs.setup_release.outputs.release_tag }} + # tag: ${{ needs.setup_release.outputs.release_tag }} + # artifacts: "*artifacts/*" # token: ${{ secrets.GH_BOT_TOKEN }} - # next_version: ${{ needs.check_changelog.outputs.next_version }} - # last_version: ${{ needs.check_changelog.outputs.last_version }} - # release_body: ${{ needs.check_changelog.outputs.release_body }} + # allowUpdates: true + # body: ${{ needs.setup_release.outputs.release_body }} + # discussionCategory: announcements + # prerelease: ${{ needs.setup_release.outputs.pre_release }} build_mac_port: name: Macports - needs: check_changelog + needs: setup_release runs-on: macos-11 steps: @@ -721,19 +771,23 @@ jobs: name: sunshine-macports path: artifacts/ - - name: Create Release - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} - uses: LizardByte/.github/actions/create_release@master + - name: Create/Update GitHub Release + if: ${{ needs.setup_release.outputs.create_release == 'true' }} + uses: ncipollo/release-action@v1 with: + name: ${{ needs.setup_release.outputs.release_tag }} + tag: ${{ needs.setup_release.outputs.release_tag }} + artifacts: "*artifacts/*" token: ${{ secrets.GH_BOT_TOKEN }} - next_version: ${{ needs.check_changelog.outputs.next_version }} - last_version: ${{ needs.check_changelog.outputs.last_version }} - release_body: ${{ needs.check_changelog.outputs.release_body }} + allowUpdates: true + body: ${{ needs.setup_release.outputs.release_body }} + discussionCategory: announcements + prerelease: ${{ needs.setup_release.outputs.pre_release }} build_win: name: Windows runs-on: windows-2019 - needs: check_changelog + needs: setup_release steps: - name: Checkout @@ -792,25 +846,29 @@ jobs: name: sunshine-windows path: artifacts/ - - name: Create Release - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} - uses: LizardByte/.github/actions/create_release@master + - name: Create/Update GitHub Release + if: ${{ needs.setup_release.outputs.create_release == 'true' }} + uses: ncipollo/release-action@v1 with: + name: ${{ needs.setup_release.outputs.release_tag }} + tag: ${{ needs.setup_release.outputs.release_tag }} + artifacts: "*artifacts/*" token: ${{ secrets.GH_BOT_TOKEN }} - next_version: ${{ needs.check_changelog.outputs.next_version }} - last_version: ${{ needs.check_changelog.outputs.last_version }} - release_body: ${{ needs.check_changelog.outputs.release_body }} + allowUpdates: true + body: ${{ needs.setup_release.outputs.release_body }} + discussionCategory: announcements + prerelease: ${{ needs.setup_release.outputs.pre_release }} release-winget: name: Release to WinGet needs: build_win - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} + if: ${{ needs.setup_release.outputs.create_release == 'true' && github.ref == 'refs/heads/master' }} runs-on: windows-latest # the required action can only be run on Windows steps: - name: Release to WinGet uses: vedantmgoyal2009/winget-releaser@v1 with: identifier: LizardByte.Sunshine - release-tag: ${{ needs.check_changelog.outputs.next_version }} + release-tag: ${{ needs.setup_release.outputs.release_tag }} installers-regex: '\.exe$' # only .exe files token: ${{ secrets.GH_BOT_TOKEN }} From cf5460bd8002da1b6b61cafd2f4abfe66747892a Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Fri, 28 Oct 2022 20:46:46 -0400 Subject: [PATCH 6/9] update nightly releases - use github sha for nightly tag - specifically provide commit to release action - build aarch64 flatpak on nightly release --- .github/workflows/CI.yml | 48 ++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 41b8bd12..1cabb7e7 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -83,18 +83,23 @@ jobs: fi # set the release tag + COMMIT=${{ github.sha }} if [[ $GITHUB_REF == refs/heads/master ]]; then TAG="${{ needs.check_changelog.outputs.next_version }}" + RELEASE_NAME="${{ needs.check_changelog.outputs.next_version }}" RELEASE_BODY="${{ needs.check_changelog.outputs.release_body }}" PRE_RELEASE="false" elif [[ $GITHUB_REF == refs/heads/nightly ]]; then - TAG="nightly" + TAG="${COMMIT:0:7}" + RELEASE_NAME="nightly" RELEASE_BODY="automated nightly release\nupdated: $(date -u +'%Y-%m-%dT%H:%M:%SZ')" PRE_RELEASE="true" fi echo "create_release=${RELEASE}" >> $GITHUB_OUTPUT echo "release_tag=${TAG}" >> $GITHUB_OUTPUT + echo "release_commit=${COMMIT}" >> $GITHUB_OUTPUT + echo "release_name=${RELEASE_NAME}" >> $GITHUB_OUTPUT echo "release_body=${RELEASE_BODY}" >> $GITHUB_OUTPUT echo "pre_release=${PRE_RELEASE}" >> $GITHUB_OUTPUT @@ -217,7 +222,7 @@ jobs: arch: ['x86_64', 'aarch64'] exclude: # exclude `aarch64` on anything except a release triggering event - - arch: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) && '' || 'aarch64' }} + - arch: ${{ needs.setup_release.outputs.create_release == 'true' && '' || 'aarch64' }} steps: - name: Checkout @@ -302,8 +307,9 @@ jobs: if: ${{ needs.setup_release.outputs.create_release == 'true' }} uses: ncipollo/release-action@v1 with: - name: ${{ needs.setup_release.outputs.release_tag }} + name: ${{ needs.setup_release.outputs.release_name }} tag: ${{ needs.setup_release.outputs.release_tag }} + commit: ${{ needs.setup_release.outputs.release_commit }} artifacts: "*artifacts/*" token: ${{ secrets.GH_BOT_TOKEN }} allowUpdates: true @@ -488,8 +494,9 @@ jobs: if: ${{ needs.setup_release.outputs.create_release == 'true' }} uses: ncipollo/release-action@v1 with: - name: ${{ needs.setup_release.outputs.release_tag }} + name: ${{ needs.setup_release.outputs.release_name }} tag: ${{ needs.setup_release.outputs.release_tag }} + commit: ${{ needs.setup_release.outputs.release_commit }} artifacts: "*artifacts/*" token: ${{ secrets.GH_BOT_TOKEN }} allowUpdates: true @@ -557,19 +564,20 @@ jobs: rm -f ./sunshine-macos-experimental-bundle.dmg rm -f ./sunshine-macos-experimental-archive.zip - ## no artifacts to release currently - # - name: Create/Update GitHub Release - # if: ${{ needs.setup_release.outputs.create_release == 'true' }} - # uses: ncipollo/release-action@v1 - # with: - # name: ${{ needs.setup_release.outputs.release_tag }} - # tag: ${{ needs.setup_release.outputs.release_tag }} - # artifacts: "*artifacts/*" - # token: ${{ secrets.GH_BOT_TOKEN }} - # allowUpdates: true - # body: ${{ needs.setup_release.outputs.release_body }} - # discussionCategory: announcements - # prerelease: ${{ needs.setup_release.outputs.pre_release }} +# # no artifacts to release currently +# - name: Create/Update GitHub Release +# if: ${{ needs.setup_release.outputs.create_release == 'true' }} +# uses: ncipollo/release-action@v1 +# with: +# name: ${{ needs.setup_release.outputs.release_name }} +# tag: ${{ needs.setup_release.outputs.release_tag }} +# commit: ${{ needs.setup_release.outputs.release_commit }} +# artifacts: "*artifacts/*" +# token: ${{ secrets.GH_BOT_TOKEN }} +# allowUpdates: true +# body: ${{ needs.setup_release.outputs.release_body }} +# discussionCategory: announcements +# prerelease: ${{ needs.setup_release.outputs.pre_release }} build_mac_port: name: Macports @@ -775,8 +783,9 @@ jobs: if: ${{ needs.setup_release.outputs.create_release == 'true' }} uses: ncipollo/release-action@v1 with: - name: ${{ needs.setup_release.outputs.release_tag }} + name: ${{ needs.setup_release.outputs.release_name }} tag: ${{ needs.setup_release.outputs.release_tag }} + commit: ${{ needs.setup_release.outputs.release_commit }} artifacts: "*artifacts/*" token: ${{ secrets.GH_BOT_TOKEN }} allowUpdates: true @@ -850,8 +859,9 @@ jobs: if: ${{ needs.setup_release.outputs.create_release == 'true' }} uses: ncipollo/release-action@v1 with: - name: ${{ needs.setup_release.outputs.release_tag }} + name: ${{ needs.setup_release.outputs.release_name }} tag: ${{ needs.setup_release.outputs.release_tag }} + commit: ${{ needs.setup_release.outputs.release_commit }} artifacts: "*artifacts/*" token: ${{ secrets.GH_BOT_TOKEN }} allowUpdates: true From 2183f8eb0f3f002cb7195d154a879d0d0ceebfa2 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Fri, 28 Oct 2022 22:08:23 -0400 Subject: [PATCH 7/9] fix `setup_release` outputs --- .github/workflows/CI.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 1cabb7e7..80bc3c19 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -92,7 +92,7 @@ jobs: elif [[ $GITHUB_REF == refs/heads/nightly ]]; then TAG="${COMMIT:0:7}" RELEASE_NAME="nightly" - RELEASE_BODY="automated nightly release\nupdated: $(date -u +'%Y-%m-%dT%H:%M:%SZ')" + RELEASE_BODY="automated nightly release - $(date -u +'%Y-%m-%dT%H:%M:%SZ')" PRE_RELEASE="true" fi @@ -106,6 +106,8 @@ jobs: outputs: create_release: ${{ steps.release_details.outputs.create_release }} release_tag: ${{ steps.release_details.outputs.release_tag }} + release_commit: ${{ steps.release_details.outputs.release_commit }} + release_name: ${{ steps.release_details.outputs.release_name }} release_body: ${{ steps.release_details.outputs.release_body }} pre_release: ${{ steps.release_details.outputs.pre_release }} From 5f3a4666317c023bbc6df1d084ea517b68e43397 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Sat, 29 Oct 2022 16:52:03 -0400 Subject: [PATCH 8/9] update nightly release builds --- .github/workflows/CI.yml | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 80bc3c19..653641d4 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -90,9 +90,9 @@ jobs: RELEASE_BODY="${{ needs.check_changelog.outputs.release_body }}" PRE_RELEASE="false" elif [[ $GITHUB_REF == refs/heads/nightly ]]; then - TAG="${COMMIT:0:7}" + TAG="nightly-dev" RELEASE_NAME="nightly" - RELEASE_BODY="automated nightly release - $(date -u +'%Y-%m-%dT%H:%M:%SZ')" + RELEASE_BODY="automated nightly release - $(date -u +'%Y-%m-%dT%H:%M:%SZ') - ${COMMIT}" PRE_RELEASE="true" fi @@ -111,6 +111,32 @@ jobs: release_body: ${{ steps.release_details.outputs.release_body }} pre_release: ${{ steps.release_details.outputs.pre_release }} + setup_flatpak_matrix: + name: Setup Flatpak Matrix + runs-on: ubuntu-latest + steps: + - name: Set release details + id: flatpak_matrix + # https://www.cynkra.com/blog/2020-12-23-dynamic-gha + run: | + # determine which architectures to build + if [[ $GITHUB_EVENT_NAME == "push" ]]; then + matrix=$(( + echo '{ "arch" : ["x86_64", "aarch64"] }' + ) | jq -c .) + else + matrix=$(( + echo '{ "arch" : ["x86_64"] }' + ) | jq -c .) + fi + + echo $matrix + echo $matrix | jq . + echo "matrix=$matrix" >> $GITHUB_OUTPUT + + outputs: + matrix: ${{ steps.flatpak_matrix.outputs.matrix }} + build_linux_aur: name: Linux AUR runs-on: ubuntu-latest @@ -217,14 +243,10 @@ jobs: build_linux_flatpak: name: Linux Flatpak runs-on: ubuntu-22.04 - needs: setup_release + needs: [setup_release, setup_flatpak_matrix] strategy: fail-fast: false # false to test all, true to fail entire job if any fail - matrix: - arch: ['x86_64', 'aarch64'] - exclude: - # exclude `aarch64` on anything except a release triggering event - - arch: ${{ needs.setup_release.outputs.create_release == 'true' && '' || 'aarch64' }} + matrix: ${{fromJson(needs.setup_flatpak_matrix.outputs.matrix)}} steps: - name: Checkout From 3cab7e106791c9def031fa1631931d012359983d Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Sat, 29 Oct 2022 22:14:16 -0400 Subject: [PATCH 9/9] change docs theme to `furo` --- .readthedocs.yaml | 4 +- README.rst | 22 +- docs/requirements.txt | 4 + docs/source/about/advanced_usage.rst | 309 ++++++++++----------- docs/source/about/installation.rst | 36 +-- docs/source/about/third_party_packages.rst | 14 +- docs/source/about/usage.rst | 76 ++--- docs/source/building/build.rst | 3 - docs/source/building/linux.rst | 2 - docs/source/building/macos.rst | 11 +- docs/source/building/windows.rst | 18 +- docs/source/conf.py | 18 +- docs/source/contributing/contributing.rst | 38 +-- docs/source/contributing/localization.rst | 39 ++- docs/source/contributing/testing.rst | 10 +- docs/source/troubleshooting/general.rst | 17 +- docs/source/troubleshooting/linux.rst | 3 - docs/source/troubleshooting/macos.rst | 23 +- docs/source/troubleshooting/windows.rst | 3 - scripts/requirements.txt | 4 - 20 files changed, 277 insertions(+), 377 deletions(-) create mode 100644 docs/requirements.txt diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 156e5624..586666c2 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -10,7 +10,7 @@ version: 2 build: os: ubuntu-20.04 tools: - python: "3.9" + python: "3.10" ## apt packages required packages to run cmake on sunshine, note that additional packages are required # apt_packages: @@ -41,5 +41,5 @@ formats: all python: install: - - requirements: ./scripts/requirements.txt + - requirements: ./docs/requirements.txt system_packages: true diff --git a/README.rst b/README.rst index 4f7a5102..f7853dee 100644 --- a/README.rst +++ b/README.rst @@ -1,5 +1,3 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/README.rst - Overview ======== LizardByte has the full documentation hosted on `Read the Docs `_. @@ -13,18 +11,18 @@ Connect to Sunshine from any Moonlight client, available for nearly any device i These are the advantages of Sunshine over GeForce Experience. - - FOSS (Free and Open Source Software) - - Multi-platform +- FOSS (Free and Open Source Software) +- Multi-platform - - Linux - - macOS - - Windows + - Linux + - macOS + - Windows - - Pair over web ui - - Supports AMD, Intel, and Nvidia GPUs for encoding - - Supports software encoding - - Supports streaming to multiple clients - - Web UI for configuration +- Pair over web ui +- Supports AMD, Intel, and Nvidia GPUs for encoding +- Supports software encoding +- Supports streaming to multiple clients +- Web UI for configuration Integrations ------------ diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000..fc950e03 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,4 @@ +furo==2022.9.29 +m2r2==0.3.3 +Sphinx==5.3.0 +sphinx-copybutton==0.5.0 diff --git a/docs/source/about/advanced_usage.rst b/docs/source/about/advanced_usage.rst index b8613850..2ab43a85 100644 --- a/docs/source/about/advanced_usage.rst +++ b/docs/source/about/advanced_usage.rst @@ -1,5 +1,3 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/docs/source/about/advanced_usage.rst - Advanced Usage ============== Sunshine will work with the default settings for most users. In some cases you may want to configure Sunshine further. @@ -26,7 +24,7 @@ location by modifying the configuration file. Windows ./config/ ========= =========== -Example +**Example** .. code-block:: bash sunshine ~/sunshine_config.conf @@ -41,13 +39,13 @@ General sunshine_name ^^^^^^^^^^^^^ -Description +**Description** The name displayed by Moonlight -Default +**Default** PC hostname -Example +**Example** .. code-block:: text sunshine_name = Sunshine @@ -55,7 +53,7 @@ Example min_log_level ^^^^^^^^^^^^^ -Description +**Description** The minimum log level printed to standard out. **Choices** @@ -75,10 +73,10 @@ Description none no logging ======= =========== -Default +**Default** ``info`` -Example +**Example** .. code-block:: text min_log_level = info @@ -89,7 +87,7 @@ Controls gamepad ^^^^^^^ -Description +**Description** The type of gamepad to emulate on the host. .. Caution:: Applies to Windows only. @@ -106,10 +104,10 @@ Description ds4 dualshock controller (PS4) ===== =========== -Default +**Default** ``x360`` -Example +**Example** .. code-block:: text gamepad = x360 @@ -117,17 +115,17 @@ Example back_button_timeout ^^^^^^^^^^^^^^^^^^^ -Description +**Description** If, after the timeout, the back/select button is still pressed down, Home/Guide button press is emulated. On Nvidia Shield, the home and power button are not passed to Moonlight. .. Tip:: If back_button_timeout < 0, then the Home/Guide button will not be emulated. -Default +**Default** ``2000`` -Example +**Example** .. code-block:: text back_button_timeout = 2000 @@ -135,13 +133,13 @@ Example key_repeat_delay ^^^^^^^^^^^^^^^^ -Description +**Description** The initial delay in milliseconds before repeating keys. Controls how fast keys will repeat themselves. -Default +**Default** ``500`` -Example +**Example** .. code-block:: text key_repeat_delay = 500 @@ -149,15 +147,15 @@ Example key_repeat_frequency ^^^^^^^^^^^^^^^^^^^^ -Description +**Description** How often keys repeat every second. .. Tip:: This configurable option supports decimals. -Default +**Default** .. Todo:: Unknown -Example +**Example** .. code-block:: text key_repeat_frequency = 24.9 @@ -165,17 +163,17 @@ Example keybindings ^^^^^^^^^^^ -Description +**Description** Sometimes it may be useful to map keybindings. Wayland won't allow clients to capture the Win Key for example. .. Tip:: See `virtual key codes `_ .. Hint:: keybindings needs to have a multiple of two elements. -Default +**Default** None -Example +**Example** .. code-block:: text keybindings = [ @@ -188,14 +186,14 @@ Example key_rightalt_to_key_win ^^^^^^^^^^^^^^^^^^^^^^^ -Description +**Description** 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. -Default +**Default** None -Example +**Example** .. code-block:: text key_rightalt_to_key_win = enabled @@ -206,12 +204,12 @@ Display adapter_name ^^^^^^^^^^^^ -Description +**Description** Select the video card you want to stream. .. Tip:: To find the name of the appropriate values follow these instructions. - Linux + VA-API + **Linux + VA-API** Unlike with `amdvce` and `nvenc`, it doesn't matter if video encoding is done on a different GPU. .. code-block:: bash @@ -227,23 +225,23 @@ Description .. Todo:: macOS - Windows + **Windows** .. code-block:: batch tools\dxgi-info.exe -Default +**Default** Sunshine will select the default video card. -Examples - Linux +**Examples** + **Linux** .. code-block:: text adapter_name = /dev/dri/renderD128 .. Todo:: macOS - Windows + **Windows** .. code-block:: text adapter_name = Radeon RX 580 Series @@ -251,12 +249,12 @@ Examples output_name ^^^^^^^^^^^ -Description +**Description** Select the display number you want to stream. .. Tip:: To find the name of the appropriate values follow these instructions. - Linux + **Linux** .. code-block:: bash xrandr --listmonitors @@ -267,23 +265,23 @@ Description .. Todo:: macOS - Windows + **Windows** .. code-block:: batch tools\dxgi-info.exe -Default +**Default** Sunshine will select the default display. -Examples - Linux +**Examples** + **Linux** .. code-block:: text output_name = 0 .. Todo:: macOS - Windows + **Windows** .. code-block:: text output_name = \\.\DISPLAY1 @@ -291,16 +289,16 @@ Examples fps ^^^ -Description +**Description** The fps modes advertised by Sunshine. .. Note:: Some versions of Moonlight, such as Moonlight-nx (Switch), rely on this list to ensure that the requested fps is supported. -Default +**Default** .. Todo:: Unknown -Example +**Example** .. code-block:: text fps = [10, 30, 60, 90, 120] @@ -308,16 +306,16 @@ Example resolutions ^^^^^^^^^^^ -Description +**Description** The resolutions advertised by Sunshine. .. Note:: Some versions of Moonlight, such as Moonlight-nx (Switch), rely on this list to ensure that the requested resolution is supported. -Default +**Default** .. Todo:: Unknown -Example +**Example** .. code-block:: text resolutions = [ @@ -336,22 +334,20 @@ Example dwmflush ^^^^^^^^ -Description +**Description** Invoke DwmFlush() to sync screen capture to the Windows presentation interval. .. Caution:: Applies to Windows only. Alleviates visual stuttering during mouse movement. If enabled, this feature will automatically deactivate if the client framerate exceeds the host monitor's current refresh rate. -Default +**Default** ``enabled`` -Examples +**Example** + .. code-block:: text - Windows - .. code-block:: text - - dwmflush = enabled + dwmflush = enabled Audio ----- @@ -359,48 +355,48 @@ Audio audio_sink ^^^^^^^^^^ -Description +**Description** The name of the audio sink used for audio loopback. .. Tip:: To find the name of the audio sink follow these instructions. - Linux + pulseaudio + **Linux + pulseaudio** .. code-block:: bash pacmd list-sinks | grep "name:" - Linux + pipewire + **Linux + pipewire** .. code-block:: bash pactl info | grep Source # in some causes you'd need to use the `Sink` device, if `Source` doesn't work, so try: pactl info | grep Sink - macOS + **macOS** Sunshine can only access microphones on macOS due to system limitations. To stream system audio use `Soundflower `_ or `BlackHole `_. - Windows + **Windows** .. code-block:: batch tools\audio-info.exe -Default +**Default** Sunshine will select the default audio device. -Examples - Linux +**Examples** + **Linux** .. code-block:: text audio_sink = alsa_output.pci-0000_09_00.3.analog-stereo - macOS + **macOS** .. code-block:: text audio_sink = BlackHole 2ch - Windows + **Windows** .. code-block:: text audio_sink = {0.0.0.00000000}.{FD47D9CC-4218-4135-9CE2-0C195C87405B} @@ -408,16 +404,16 @@ Examples virtual_sink ^^^^^^^^^^^^ -Description +**Description** The audio device that's virtual, like Steam Streaming Speakers. This allows Sunshine to stream audio, while muting the speakers. .. Tip:: See `audio_sink`_! -Default +**Default** .. Todo:: Unknown -Example +**Example** .. code-block:: text virtual_sink = {0.0.0.00000000}.{8edba70c-1125-467c-b89c-15da389bc1d4} @@ -428,13 +424,13 @@ Network external_ip ^^^^^^^^^^^ -Description +**Description** If no external IP address is given, Sunshine will attempt to automatically detect external ip-address. -Default +**Default** Automatic -Example +**Example** .. code-block:: text external_ip = 123.456.789.12 @@ -442,7 +438,7 @@ Example port ^^^^ -Description +**Description** Set the family of ports used by Sunshine. Changing this value will offset other ports per the table below. .. table:: @@ -458,18 +454,15 @@ Description Video 47998 UDP +9 Control 47999 UDP +10 Audio 48000 UDP +11 - tbd 48002 UDP +13 + Mic (unused) 48002 UDP +13 ================ ============ =========================== .. Attention:: Custom ports are only allowed on select Moonlight clients. -.. Todo:: Determine the function of port 48002 UDP. See - `here `_. - -Default +**Default** ``47989`` -Example +**Example** .. code-block:: text port = 47989 @@ -477,13 +470,13 @@ Example pkey ^^^^ -Description +**Description** The private key. This must be 2048 bits. -Default +**Default** .. Todo:: Unknown -Example +**Example** .. code-block:: text pkey = /dir/pkey.pem @@ -491,13 +484,13 @@ Example cert ^^^^ -Description +**Description** The certificate. Must be signed with a 2048 bit key. -Default +**Default** .. Todo:: Unknown -Example +**Example** .. code-block:: text cert = /dir/cert.pem @@ -505,7 +498,7 @@ Example origin_pin_allowed ^^^^^^^^^^^^^^^^^^ -Description +**Description** The origin of the remote endpoint address that is not denied for HTTP method /pin. **Choices** @@ -521,10 +514,10 @@ Description wan Anyone may access /pin ===== =========== -Default +**Default** ``pc`` -Example +**Example** .. code-block:: text origin_pin_allowed = pc @@ -532,7 +525,7 @@ Example origin_web_ui_allowed ^^^^^^^^^^^^^^^^^^^^^ -Description +**Description** The origin of the remote endpoint address that is not denied for HTTPS Web UI. **Choices** @@ -548,10 +541,10 @@ Description wan Anyone may access the web ui ===== =========== -Default +**Default** ``lan`` -Example +**Example** .. code-block:: text origin_web_ui_allowed = lan @@ -559,7 +552,7 @@ Example upnp ^^^^ -Description +**Description** Sunshine will attempt to open ports for streaming over the internet. **Choices** @@ -574,10 +567,10 @@ Description off disable UPnP ===== =========== -Default +**Default** ``off`` -Example +**Example** .. code-block:: text upnp = on @@ -585,13 +578,13 @@ Example ping_timeout ^^^^^^^^^^^^ -Description +**Description** How long to wait in milliseconds for data from Moonlight before shutting down the stream. -Default +**Default** ``10000`` -Example +**Example** .. code-block:: text ping_timeout = 10000 @@ -602,22 +595,22 @@ Encoding channels ^^^^^^^^ -Description +**Description** This will generate distinct video streams, unlike simply broadcasting to multiple Clients. When multicasting, it could be useful to have different configurations for each connected Client. For instance: - - Clients connected through WAN and LAN have different bitrate constraints. - - Decoders may require different settings for color. + - Clients connected through WAN and LAN have different bitrate constraints. + - Decoders may require different settings for color. .. Warning:: CPU usage increases for each distinct video stream generated. -Default +**Default** ``1`` -Example +**Example** .. code-block:: text channels = 1 @@ -625,18 +618,18 @@ Example fec_percentage ^^^^^^^^^^^^^^ -Description +**Description** Percentage of error correcting packets per data packet in each video frame. .. Warning:: Higher values can correct for more network packet loss, but at the cost of increasing bandwidth usage. -Default +**Default** ``20`` -Range +**Range** ``1-255`` -Example +**Example** .. code-block:: text fec_percentage = 20 @@ -644,15 +637,15 @@ Example qp ^^ -Description +**Description** Quantitization Parameter. Some devices don't support Constant Bit Rate. For those devices, QP is used instead. .. Warning:: Higher value means more compression, but less quality. -Default +**Default** ``28`` -Example +**Example** .. code-block:: text qp = 28 @@ -660,17 +653,17 @@ Example min_threads ^^^^^^^^^^^ -Description +**Description** Minimum number of threads used by ffmpeg to encode the video. .. Note:: 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. -Default +**Default** ``1`` -Example +**Example** .. code-block:: text min_threads = 1 @@ -678,7 +671,7 @@ Example hevc_mode ^^^^^^^^^ -Description +**Description** Allows the client to request HEVC Main or HEVC Main10 video streams. .. Warning:: HEVC is more CPU-intensive to encode, so enabling this may reduce performance when using software @@ -698,10 +691,10 @@ Description 3 advertise support for HEVC Main and Main10 (HDR) profiles ===== =========== -Default +**Default** ``0`` -Example +**Example** .. code-block:: text hevc_mode = 2 @@ -709,7 +702,7 @@ Example encoder ^^^^^^^ -Description +**Description** Force a specific encoder. **Choices** @@ -725,10 +718,10 @@ Description software Encoding occurs on the CPU ======== =========== -Default +**Default** Sunshine will use the first encoder that is available. -Example +**Example** .. code-block:: text encoder = nvenc @@ -736,7 +729,7 @@ Example sw_preset ^^^^^^^^^ -Description +**Description** The encoder preset to use. .. Note:: This option only applies when using software `encoder`_. @@ -771,10 +764,10 @@ Description veryslow slowest ========= =========== -Default +**Default** ``superfast`` -Example +**Example** .. code-block:: text sw_preset = superfast @@ -782,7 +775,7 @@ Example sw_tune ^^^^^^^ -Description +**Description** The tuning preset to use. .. Note:: This option only applies when using software `encoder`_. @@ -807,10 +800,10 @@ Description zerolatency good for fast encoding and low-latency streaming =========== =========== -Default +**Default** ``zerolatency`` -Example +**Example** .. code-block:: text sw_tune = zerolatency @@ -818,7 +811,7 @@ Example nv_preset ^^^^^^^^^ -Description +**Description** The encoder preset to use. .. Note:: This option only applies when using nvenc `encoder`_. @@ -845,10 +838,10 @@ Description losslesshp lossless, high performance ========== =========== -Default +**Default** ``llhq`` -Example +**Example** .. code-block:: text nv_preset = llhq @@ -856,7 +849,7 @@ Example nv_rc ^^^^^ -Description +**Description** The encoder rate control. .. Note:: This option only applies when using nvenc `encoder`_. @@ -880,10 +873,10 @@ Description vbr_hq variable bitrate, high quality ========== =========== -Default +**Default** ``auto`` -Example +**Example** .. code-block:: text nv_rc = auto @@ -891,7 +884,7 @@ Example nv_coder ^^^^^^^^ -Description +**Description** The entropy encoding to use. .. Note:: This option only applies when using nvenc `encoder`_. @@ -909,10 +902,10 @@ Description cavlc ========== =========== -Default +**Default** ``auto`` -Example +**Example** .. code-block:: text nv_coder = auto @@ -920,7 +913,7 @@ Example amd_quality ^^^^^^^^^^^ -Description +**Description** The encoder preset to use. .. Note:: This option only applies when using amdvce `encoder`_. @@ -938,10 +931,10 @@ Description balanced balance performance and speed ========== =========== -Default +**Default** ``balanced`` -Example +**Example** .. code-block:: text amd_quality = balanced @@ -949,7 +942,7 @@ Example amd_rc ^^^^^^ -Description +**Description** The encoder rate control. .. Note:: This option only applies when using amdvce `encoder`_. @@ -971,10 +964,10 @@ Description vbr_peak variable bitrate, peak constrained =========== =========== -Default +**Default** ``auto`` -Example +**Example** .. code-block:: text amd_rc = auto @@ -982,7 +975,7 @@ Example amd_coder ^^^^^^^^^ -Description +**Description** The entropy encoding to use. .. Note:: This option only applies when using nvenc `encoder`_. @@ -1000,10 +993,10 @@ Description cavlc ========== =========== -Default +**Default** ``auto`` -Example +**Example** .. code-block:: text amd_coder = auto @@ -1011,7 +1004,7 @@ Example vt_software ^^^^^^^^^^^ -Description +**Description** Force Video Toolbox to use software encoding. .. Note:: This option only applies when using macOS. @@ -1030,10 +1023,10 @@ Description forced force software encoding ========== =========== -Default +**Default** ``auto`` -Example +**Example** .. code-block:: text vt_software = auto @@ -1041,17 +1034,17 @@ Example vt_realtime ^^^^^^^^^^^ -Description +**Description** Realtime encoding. .. Note:: This option only applies when using macOS. .. Warning:: Disabling realtime encoding might result in a delayed frame encoding or frame drop. -Default +**Default** ``enabled`` -Example +**Example** .. code-block:: text vt_realtime = enabled @@ -1059,7 +1052,7 @@ Example vt_coder ^^^^^^^^ -Description +**Description** The entropy encoding to use. .. Note:: This option only applies when using macOS. @@ -1077,10 +1070,10 @@ Description cavlc ========== =========== -Default +**Default** ``auto`` -Example +**Example** .. code-block:: text vt_coder = auto @@ -1091,14 +1084,14 @@ Advanced file_apps ^^^^^^^^^ -Description +**Description** The application configuration file path. The file contains a json formatted list of applications that can be started by Moonlight. -Default +**Default** OS and package dependent -Example +**Example** .. code-block:: text file_apps = apps.json @@ -1106,13 +1099,13 @@ Example file_state ^^^^^^^^^^ -Description +**Description** The file where current state of Sunshine is stored. -Default +**Default** ``sunshine_state.json`` -Example +**Example** .. code-block:: text file_state = sunshine_state.json @@ -1120,13 +1113,13 @@ Example credentials_file ^^^^^^^^^^^^^^^^ -Description +**Description** The file where user credentials for the UI are stored. -Default +**Default** ``sunshine_state.json`` -Example +**Example** .. code-block:: text credentials_file = sunshine_state.json diff --git a/docs/source/about/installation.rst b/docs/source/about/installation.rst index 5c9f2194..9f65ba59 100644 --- a/docs/source/about/installation.rst +++ b/docs/source/about/installation.rst @@ -1,5 +1,3 @@ -:github_url: https://github.com/LizardByte/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`_. @@ -36,19 +34,19 @@ AppImage .. image:: https://img.shields.io/github/issues/lizardbyte/sunshine/pkg:appimage?logo=github&style=for-the-badge :alt: GitHub issues by-label -According to AppImageLint the AppImage can run on the following distros. +According to AppImageLint the supported distro matrix of the AppImage is below. - - [✖] Debian oldstable (buster) - - [✔] Debian stable (bullseye) - - [✔] Debian testing (bookworm) - - [✔] Debian unstable (sid) - - [✔] Ubuntu jammy - - [✔] Ubuntu impish - - [✔] Ubuntu focal - - [✖] Ubuntu bionic - - [✖] Ubuntu xenial - - [✖] Ubuntu trusty - - [✖] CentOS 7 +- [✖] Debian oldstable (buster) +- [✔] Debian stable (bullseye) +- [✔] Debian testing (bookworm) +- [✔] Debian unstable (sid) +- [✔] Ubuntu jammy +- [✔] Ubuntu impish +- [✔] Ubuntu focal +- [✖] Ubuntu bionic +- [✖] Ubuntu xenial +- [✖] Ubuntu trusty +- [✖] CentOS 7 #. Download ``sunshine-appimage.zip`` and extract the contents to your home directory. #. Open terminal and run the following code. @@ -58,13 +56,11 @@ According to AppImageLint the AppImage can run on the following distros. ./sunshine.AppImage --install Start: - .. code-block:: bash ./sunshine.AppImage --install && ./sunshine.AppImage Uninstall: - .. code-block:: bash ./sunshine.AppImage --remove @@ -80,7 +76,6 @@ AUR Package makepkg -fi Uninstall: - .. code-block:: bash pacman -R sunshine @@ -99,7 +94,6 @@ Debian Package .. Tip:: You can double click the deb file to see details about the package and begin installation. Uninstall: - .. code-block:: bash sudo apt remove sunshine @@ -123,7 +117,6 @@ Flatpak Package flatpak install --user sunshine.flatpak Start: - X11 and NVFBC capture (X11 Only) .. code-block:: bash @@ -135,7 +128,6 @@ Start: sudo -i PULSE_SERVER=unix:$(pactl info | awk '/Server String/{print$3}') flatpak run dev.lizardbyte.sunshine Uninstall: - .. code-block:: bash flatpak uninstall --delete-data sunshine.flatpak @@ -161,7 +153,6 @@ RPM Package .. Tip:: You can double click the rpm file to see details about the package and begin installation. Uninstall: - .. code-block:: bash sudo dnf remove sunshine @@ -178,7 +169,6 @@ pkg #. Download the ``sunshine.pkg`` file and install it as normal. Uninstall: - .. code-block:: bash cd /etc/sunshine/assets @@ -194,7 +184,6 @@ Portfile sudo nano /opt/local/etc/macports/sources.conf Add this line, replacing your username, below the line that starts with ``rsync``. - ``file:///Users//ports`` ``Ctrl+x``, then ``Y`` to exit and save changes. @@ -212,7 +201,6 @@ Portfile #. The first time you start Sunshine, you will be asked to grant access to screen recording and your microphone. Uninstall: - .. code-block:: bash sudo port uninstall sunshine diff --git a/docs/source/about/third_party_packages.rst b/docs/source/about/third_party_packages.rst index 5ae51e8b..ad8979dc 100644 --- a/docs/source/about/third_party_packages.rst +++ b/docs/source/about/third_party_packages.rst @@ -1,5 +1,3 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/docs/source/about/third_party_packages.rst - Third Party Packages ==================== @@ -15,6 +13,12 @@ Chocolatey .. image:: https://img.shields.io/chocolatey/dt/sunshine?style=for-the-badge&logo=chocolatey :alt: Chocolatey +nixpkgs +------- +.. image:: https://img.shields.io/badge/dynamic/xml?color=orange&label=nixpkgs&style=for-the-badge&prefix=v&query=%2F%2Ftr%5B%40id%3D%27nix_unstable%27%5D%2Ftd%5B3%5D%2Fspan%2Fa&url=https%3A%2F%2Frepology.org%2Fproject%2Fsunshine%2Fversions&logo=nixos + :alt: nixpgs Version + :target: https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/sunshine/default.nix + Scoop ----- @@ -22,6 +26,12 @@ Scoop :alt: Scoop Version (extras bucket) :target: https://scoop.sh/#/apps?s=0&d=1&o=true&q=sunshine +Solus +----- +.. image:: https://img.shields.io/badge/dynamic/xml?color=orange&label=Solus&style=for-the-badge&prefix=v&query=%2F%2Ftr%5B%40id%3D%27solus%27%5D%2Ftd%5B3%5D%2Fspan%2Fa&url=https%3A%2F%2Frepology.org%2Fproject%2Fsunshine%2Fversions&logo=solus + :alt: Solus Version + :target: https://dev.getsol.us/source/sunshine + Winget ------ .. image:: https://img.shields.io/badge/dynamic/xml?color=orange&label=Winget&style=for-the-badge&prefix=v&query=%2F%2Ftr%5B%40id%3D%27winget%27%5D%2Ftd%5B3%5D%2Fspan%2Fa&url=https%3A%2F%2Frepology.org%2Fproject%2Fsunshine%2Fversions&logo=microsoft diff --git a/docs/source/about/usage.rst b/docs/source/about/usage.rst index 0e3c87a4..81cfcdcd 100644 --- a/docs/source/about/usage.rst +++ b/docs/source/about/usage.rst @@ -1,5 +1,3 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/docs/source/about/usage.rst - Usage ===== #. See the `setup`_ section for your specific OS. @@ -12,6 +10,7 @@ Usage .. 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 `_ by default. You may replace `localhost` with your internal ip address. @@ -20,14 +19,14 @@ Usage .. 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. + **Add games and applications.** + This can be configured in the web ui. - .. Note:: Additionally, apps can be configured manually. `src_assets//config/apps.json` is an example of a - list of applications that are started just before running a stream. This is the directory within the GitHub - repo. + .. Note:: Additionally, apps can be configured manually. `src_assets//config/apps.json` is an example of a + list of applications that are started just before running a stream. This is the directory within the GitHub + repo. - .. Attention:: Application list is not fully supported on macOS + .. 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: @@ -46,7 +45,6 @@ The Sunshine user interface will be available on port 47990 by default. Arguments --------- To get a list of available arguments run the following: - .. code-block:: bash sunshine --help @@ -56,7 +54,7 @@ Setup Linux ^^^^^ -The deb, rpm, and AppImage packages handle these steps automatically. The flatpak does not, third party packages +The `deb`, `rpm`, and `AppImage` packages handle these steps automatically. The flatpak does not, third party packages also may not. Sunshine needs access to `uinput` to create mouse and gamepad events. @@ -73,9 +71,9 @@ Sunshine needs access to `uinput` to create mouse and gamepad events. sudo tee /etc/udev/rules.d/85-sunshine-input.rules #. Optionally, configure autostart service - - filename: ``~/.config/systemd/user/sunshine.service`` - - contents: + - filename: ``~/.config/systemd/user/sunshine.service`` + - contents: .. code-block:: [Unit] @@ -100,12 +98,12 @@ Sunshine needs access to `uinput` to create mouse and gamepad events. Flatpak flatpak run dev.lizardbyte.sunshine ✖ ======== ============================================== =============== - Start once + **Start once** .. code-block:: bash systemctl --user start sunshine - Start on boot + **Start on boot** .. code-block:: bash systemctl --user enable sunshine @@ -114,12 +112,12 @@ Sunshine needs access to `uinput` to create mouse and gamepad events. .. 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. - Enable + **Enable** .. code-block:: bash sudo setcap cap_sys_admin+p $(readlink -f $(which sunshine)) - Disable + **Disable** .. code-block:: bash sudo setcap -r $(readlink -f $(which sunshine)) @@ -141,8 +139,7 @@ select their sink as audio device in `sunshine.conf`. .. Caution:: Gamepads are not currently supported. Configure autostart service - - MacPorts + **MacPorts** .. code-block:: bash sudo port load Sunshine @@ -153,10 +150,10 @@ For gamepad support, install `ViGEmBus `_. Cross compilation is not @@ -11,7 +9,6 @@ Building Locally Clone ^^^^^ Ensure `git `_ is installed and run the following: - .. code-block:: bash git clone https://github.com/lizardbyte/sunshine.git --recurse-submodules diff --git a/docs/source/building/linux.rst b/docs/source/building/linux.rst index b2b4bfc7..009ef882 100644 --- a/docs/source/building/linux.rst +++ b/docs/source/building/linux.rst @@ -1,5 +1,3 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/docs/source/building/linux.rst - Linux ===== diff --git a/docs/source/building/macos.rst b/docs/source/building/macos.rst index b719c6ee..074eaf4e 100644 --- a/docs/source/building/macos.rst +++ b/docs/source/building/macos.rst @@ -1,5 +1,3 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/docs/source/building/macos.rst - macOS ===== @@ -30,14 +28,13 @@ Build ----- .. Attention:: Ensure you are in the build directory created during the clone step earlier before continuing. - .. code-block:: bash +.. code-block:: bash - cmake .. - make -j ${nproc} + cmake .. + make -j ${nproc} - cpack -G DragNDrop # optionally, create a macOS dmg package + cpack -G DragNDrop # optionally, create a macOS dmg package 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 ..`` diff --git a/docs/source/building/windows.rst b/docs/source/building/windows.rst index 0c6dde57..43f84a22 100644 --- a/docs/source/building/windows.rst +++ b/docs/source/building/windows.rst @@ -1,5 +1,3 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/docs/source/building/windows.rst - Windows ======= @@ -10,18 +8,20 @@ following packages using: .. code-block:: bash - 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 + 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:: bash +.. code-block:: bash - cmake -G"Unix Makefiles" .. - cmake -G"MinGW Makefiles" .. # alternatively + cmake -G"Unix Makefiles" .. + cmake -G"MinGW Makefiles" .. # alternatively - mingw32-make + mingw32-make - cpack -G NSIS # optionally, create a windows installer - cpack -G ZIP # optionally, create a windows standalone package + cpack -G NSIS # optionally, create a windows installer + cpack -G ZIP # optionally, create a windows standalone package diff --git a/docs/source/conf.py b/docs/source/conf.py index 5ef4356c..65afdc61 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -73,23 +73,11 @@ html_logo = os.path.join(root_dir, 'sunshine.png') # 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 = 'furo' 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': '#151515', - # Toc options - 'collapse_navigation': True, - 'sticky_navigation': True, - 'navigation_depth': 4, - 'includehidden': True, - 'titles_only': False, + "top_of_page_button": "edit", + "source_edit_link": "https://github.com/lizardbyte/sunshine/tree/nightly/docs/source/{filename}", } # extension config options diff --git a/docs/source/contributing/contributing.rst b/docs/source/contributing/contributing.rst index e79fd4ea..217bda13 100644 --- a/docs/source/contributing/contributing.rst +++ b/docs/source/contributing/contributing.rst @@ -1,39 +1,5 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/docs/source/contributing/contributing.rst - Contributing ============ -.. Tip:: If this is your first time contributing to an open source project, it is a good idea to read - MDN's `Basic etiquette for open source projects`_ first. There are a few best practices to adopt that will help - ensure that you and the other project contributors feel valued and safe, and stay productive. - -#. 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. - -.. _Basic etiquette for open source projects: https://developer.mozilla.org/en-US/docs/MDN/Contribute/Open_source_etiquette +Read our contribution guide in our organization level +`docs `_. diff --git a/docs/source/contributing/localization.rst b/docs/source/contributing/localization.rst index 8b04867f..dc3e26da 100644 --- a/docs/source/contributing/localization.rst +++ b/docs/source/contributing/localization.rst @@ -1,5 +1,3 @@ -:github_url: https://github.com/LizardByte/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. @@ -24,15 +22,15 @@ Only elements of the API are planned to be translated. .. Attention:: The rest API has not yet been implemented. -Translations Basics +**Translations Basics** - The brand names `LizardByte` and `Sunshine` should never be translated. - Other brand names should never be translated. Examples: - - AMD - - Nvidia + - AMD + - Nvidia -CrowdIn Integration +**CrowdIn Integration** How does it work? When a change is made to sunshine source code, a workflow generates new translation templates @@ -47,15 +45,14 @@ 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. +- Wrap the string to be extracted in a function as shown. + .. code-block:: cpp - .. code-block:: cpp + #include + boost::locale::translate("Hello world!") - #include - boost::locale::translate("Hello world!") - - .. Tip:: More examples can be found in the documentation for - `boost locale `_. +.. Tip:: More examples can be found in the documentation for + `boost locale `_. .. Warning:: This is for information only. Contributors should never include manually updated template files, or manually compiled language files in Pull Requests. @@ -65,20 +62,20 @@ used by CrowdIn to generate language specific template files. The file is genera `.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 +.. code-block:: yaml - - 'src/**' + - 'src/**' When testing locally it may be desirable to manually extract, initialize, update, and compile strings. Python is required for this, along with the python dependencies in the `./scripts/requirements.txt` file. Additionally, `xgettext `_ must be installed. - Extract, initialize, and update - .. code-block:: bash +**Extract, initialize, and update** + .. code-block:: bash - python ./scripts/_locale.py --extract --init --update + python ./scripts/_locale.py --extract --init --update - Compile - .. code-block:: bash +**Compile** + .. code-block:: bash - python ./scripts/_locale.py --compile + python ./scripts/_locale.py --compile diff --git a/docs/source/contributing/testing.rst b/docs/source/contributing/testing.rst index a08c6f9c..512aed1c 100644 --- a/docs/source/contributing/testing.rst +++ b/docs/source/contributing/testing.rst @@ -1,12 +1,10 @@ -: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`. +format testing is `.github/workflows/cpp-clang-format-lint.yml`. Test clang-format locally. .. Todo:: This documentation needs to be improved. @@ -17,9 +15,9 @@ Test clang-format locally. Sphinx ------ -Sunshine uses `Sphinx `_ 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. +Sunshine uses `Sphinx `_ for documentation building. Sphinx, along with other +required documentation depencies are included in the `./docs/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. diff --git a/docs/source/troubleshooting/general.rst b/docs/source/troubleshooting/general.rst index 6c480720..010a52c8 100644 --- a/docs/source/troubleshooting/general.rst +++ b/docs/source/troubleshooting/general.rst @@ -1,22 +1,17 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/docs/source/troubleshooting/general.rst - General ======= If you forgot your credentials to the web UI, try this. - .. code-block:: bash sunshine -creds Can't access the web UI? - #. Check firefall rules. NvFBC, NvENC, or general issues with Nvidia graphics card. - - - Consume grade Nvidia cards are software limited to a specific number of encodes. See - `Video Encode and Decode GPU Support Matrix `_ - for more info. - - You can usually bypass the restriction with a driver patch. See Keylase's - `Linux `_ - or `Windows `_ patches for more guidance. + - Consumer grade Nvidia cards are software limited to a specific number of encodes. See + `Video Encode and Decode GPU Support Matrix `_ + for more info. + - You can usually bypass the restriction with a driver patch. See Keylase's + `Linux `_ + or `Windows `_ patches for more guidance. diff --git a/docs/source/troubleshooting/linux.rst b/docs/source/troubleshooting/linux.rst index a1c8b4da..0c8e3f97 100644 --- a/docs/source/troubleshooting/linux.rst +++ b/docs/source/troubleshooting/linux.rst @@ -1,9 +1,6 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/docs/source/troubleshooting/linux.rst - Linux ===== If screencasting fails with KMS, you may need to run the following to force unprivileged screencasting. - .. code-block:: bash sudo setcap -r $(readlink -f $(which sunshine)) diff --git a/docs/source/troubleshooting/macos.rst b/docs/source/troubleshooting/macos.rst index f6014eb7..70a0d60c 100644 --- a/docs/source/troubleshooting/macos.rst +++ b/docs/source/troubleshooting/macos.rst @@ -1,29 +1,10 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/docs/source/troubleshooting/macos.rst - macOS ===== If you get this error: - - ``Dynamic session lookup supported but failed: launchd did not provide a socket path, verify that - org.freedesktop.dbus-session.plist is loaded!`` + `Dynamic session lookup supported but failed: launchd did not provide a socket path, verify that + org.freedesktop.dbus-session.plist is loaded!` Try this. - .. code-block:: bash launchctl load -w /Library/LaunchAgents/org.freedesktop.dbus-session.plist - -Uninstall: - - - pkg - - .. code-block:: bash - - sudo chmod +x /opt/local/etc/sunshine/assets/uninstall_pkg.sh - sudo /opt/local/etc/sunshine/assets/uninstall_pkg.sh - - - Portfile - - .. code-block:: bash - - sudo port uninstall Sunshine diff --git a/docs/source/troubleshooting/windows.rst b/docs/source/troubleshooting/windows.rst index bb21589c..15053519 100644 --- a/docs/source/troubleshooting/windows.rst +++ b/docs/source/troubleshooting/windows.rst @@ -1,7 +1,4 @@ -:github_url: https://github.com/LizardByte/Sunshine/tree/nightly/docs/source/troubleshooting/windows.rst - Windows ======= No gamepad is detected. - #. Verify that you've installed `ViGEmBus `_. diff --git a/scripts/requirements.txt b/scripts/requirements.txt index 84c26fe1..ab35a359 100644 --- a/scripts/requirements.txt +++ b/scripts/requirements.txt @@ -1,5 +1 @@ Babel==2.10.3 -m2r2==0.3.2 -Sphinx==5.3.0 -sphinx-copybutton==0.5.0 -sphinx-rtd-theme==1.0.0