Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ansible/filter_plugins/admonition.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def admonition(self, text, flavour="gfm", severity:str = "note", collapse=None,
severity = severities.get(severity, "note")
if collapse == None:
note = "!!!"
elif collapse:
elif collapse == "expanded":
note = "???+"
else:
note = "???"
Expand Down
87 changes: 48 additions & 39 deletions ansible/roles/documentation/templates/README_SNIPPETS/SELKIES.j2
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,22 @@ We are currently transitioning our desktop containers from X11 to Wayland. While
**Important:** GPU acceleration support for X11 is being deprecated. Future development for hardware acceleration will focus entirely on the Wayland stack.

To enable Wayland mode, set the following environment variable:
* `-e PIXELFLUX_WAYLAND=true`

* `-e PIXELFLUX_WAYLAND=true`

**Why use Wayland?**
* **Zero Copy Encoding:** When configured correctly with a GPU, the frame is rendered and encoded on the video card without ever being copied to the system RAM. This drastically lowers CPU usage and latency.
* **Modern Stack:** Single-application containers utilize **Labwc** (replacing Openbox) and full desktop containers use **KDE Plasma Wayland**, providing a more modern and secure compositing environment while retaining the same user experience.

* **Zero Copy Encoding:** When configured correctly with a GPU, the frame is rendered and encoded on the video card without ever being copied to the system RAM. This drastically lowers CPU usage and latency.
* **Modern Stack:** Single-application containers utilize **Labwc** (replacing Openbox) and full desktop containers use **KDE Plasma Wayland**, providing a more modern and secure compositing environment while retaining the same user experience.

#### GPU Configuration

To use hardware acceleration in Wayland mode, we distinguish between the card used for **Rendering** (3D apps/Desktops) and **Encoding** (Video Stream).

**Configuration Variables:**
* `DRINODE`: The path to the GPU used for **Rendering** (EGL).
* `DRI_NODE`: The path to the GPU used for **Encoding** (VAAPI/NVENC).

* `DRINODE`: The path to the GPU used for **Rendering** (EGL).
* `DRI_NODE`: The path to the GPU used for **Encoding** (VAAPI/NVENC).

If both variables point to the same device, the container will automatically enable **Zero Copy** encoding, significantly reducing CPU usage and latency.

Expand All @@ -54,10 +57,12 @@ For Intel and AMD GPUs.
**Note: Nvidia support is not available for Alpine-based images.**

**Prerequisites:**
1. **Driver:** Proprietary drivers **580 or higher** are required.
2. **Kernel Parameter:** Set `nvidia-drm.modeset=1` in your host bootloader (GRUB/systemd-boot).
3. **Initialization:** On headless systems, run `nvidia-modprobe --modeset` on the host (once per boot) to initialize the card.
4. **Docker Runtime:** Configure the host docker daemon to use the Nvidia runtime:

1. **Driver:** Proprietary drivers **580 or higher** are required.
2. **Kernel Parameter:** Set `nvidia-drm.modeset=1` in your host bootloader (GRUB/systemd-boot).
3. **Initialization:** On headless systems, run `nvidia-modprobe --modeset` on the host (once per boot) to initialize the card.
4. **Docker Runtime:** Configure the host docker daemon to use the Nvidia runtime:

```bash
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Expand All @@ -66,6 +71,7 @@ For Intel and AMD GPUs.
**Compose Configuration:**

```yaml
---
services:
{{ project_name }}:
image: lscr.io/{{ lsio_project_name_short }}/{{ project_name }}:{{ release_tag }}
Expand All @@ -90,10 +96,9 @@ This container is compatible with [SealSkin](https://sealskin.app).

SealSkin is a self-hosted, client-server platform that provides secure authentication and collaboration features while using a browser extension to intercept user actions such as clicking a link or downloading a file and redirect them to a secure, isolated application environment running on a remote server.

* **SealSkin Server:** [Get it Here](https://github.com/linuxserver/docker-sealskin)
* **Browser Extension:** [Chrome](https://chromewebstore.google.com/detail/sealskin-isolation/lclgfmnljgacfdpmmmjmfpdelndbbfhk) and [Firefox](https://addons.mozilla.org/en-US/firefox/addon/sealskin-isolation/).
* **Mobile App:** [iOS](https://apps.apple.com/us/app/sealskin/id6758210210) and [Android](https://play.google.com/store/apps/details?id=io.linuxserver.sealskin)

* **SealSkin Server:** [Get it Here](https://github.com/linuxserver/docker-sealskin)
* **Browser Extension:** [Chrome](https://chromewebstore.google.com/detail/sealskin-isolation/lclgfmnljgacfdpmmmjmfpdelndbbfhk) and [Firefox](https://addons.mozilla.org/en-US/firefox/addon/sealskin-isolation/).
* **Mobile App:** [iOS](https://apps.apple.com/us/app/sealskin/id6758210210) and [Android](https://play.google.com/store/apps/details?id=io.linuxserver.sealskin)

### Options in all Selkies-based GUI containers

Expand Down Expand Up @@ -127,14 +132,15 @@ This container is based on [Docker Baseimage Selkies](https://github.com/linuxse
| WATERMARK_LOCATION | Where to paint the image over the stream integer options below |

**`WATERMARK_LOCATION` Options:**
- **1**: Top Left
- **2**: Top Right
- **3**: Bottom Left
- **4**: Bottom Right
- **5**: Centered
- **6**: Animated

* **1**: Top Left
* **2**: Top Right
* **3**: Bottom Left
* **4**: Bottom Right
* **5**: Centered
* **6**: Animated
{% endset %}
{{ blurb1 | admonition(flavour=markdown, title="Click to expand: Optional Environment Variables", collapse="???") }}
{{ blurb1 | admonition(flavour=markdown, title="Click to expand: Optional Environment Variables", collapse=True) }}

{% set blurb2 %}
| Argument | Description |
Expand All @@ -143,7 +149,7 @@ This container is based on [Docker Baseimage Selkies](https://github.com/linuxse
| `-v /var/run/docker.sock:/var/run/docker.sock` | Mounts the host's Docker socket to manage host containers from within this container. |
| `--device /dev/dri:/dev/dri` | Mount a GPU into the container, this can be used in conjunction with the `DRINODE` environment variable to leverage a host video card for GPU accelerated applications. |
{% endset %}
{{ blurb2 | admonition(flavour=markdown, title="Click to expand: Optional Run Configurations (DinD & GPU Mounts)", collapse="???") }}
{{ blurb2 | admonition(flavour=markdown, title="Click to expand: Optional Run Configurations (DinD & GPU Mounts)", collapse=True) }}

{% set blurb3 %}
**Note:** This section applies only if you are **NOT** using `PIXELFLUX_WAYLAND=true`.
Expand All @@ -154,28 +160,28 @@ When using 3d acceleration via Nvidia DRM or DRI3 in X11 mode, it is important t

This will set the total virtual framebuffer to 4K. By default, the virtual monitor is 16K. If you have performance issues in an accelerated X11 session, try clamping the resolution to 1080p and work up from there:

```
```bash
-e SELKIES_MANUAL_WIDTH=1920
-e SELKIES_MANUAL_HEIGHT=1080
-e MAX_RESOLUTION=1920x1080
```
{% endset %}
{{ blurb3 | admonition(flavour=markdown, title="Click to expand: Legacy X11 Resolution & Acceleration", collapse="???") }}
{{ blurb3 | admonition(flavour=markdown, title="Click to expand: Legacy X11 Resolution & Acceleration", collapse=True) }}

### Language Support - Internationalization

To launch the desktop session in a different language, set the `LC_ALL` environment variable. For example:

* `-e LC_ALL=zh_CN.UTF-8` - Chinese
* `-e LC_ALL=ja_JP.UTF-8` - Japanese
* `-e LC_ALL=ko_KR.UTF-8` - Korean
* `-e LC_ALL=ar_AE.UTF-8` - Arabic
* `-e LC_ALL=ru_RU.UTF-8` - Russian
* `-e LC_ALL=es_MX.UTF-8` - Spanish (Latin America)
* `-e LC_ALL=de_DE.UTF-8` - German
* `-e LC_ALL=fr_FR.UTF-8` - French
* `-e LC_ALL=nl_NL.UTF-8` - Netherlands
* `-e LC_ALL=it_IT.UTF-8` - Italian
* `-e LC_ALL=zh_CN.UTF-8` - Chinese
* `-e LC_ALL=ja_JP.UTF-8` - Japanese
* `-e LC_ALL=ko_KR.UTF-8` - Korean
* `-e LC_ALL=ar_AE.UTF-8` - Arabic
* `-e LC_ALL=ru_RU.UTF-8` - Russian
* `-e LC_ALL=es_MX.UTF-8` - Spanish (Latin America)
* `-e LC_ALL=de_DE.UTF-8` - German
* `-e LC_ALL=fr_FR.UTF-8` - French
* `-e LC_ALL=nl_NL.UTF-8` - Netherlands
* `-e LC_ALL=it_IT.UTF-8` - Italian

### Application Management

Expand All @@ -187,7 +193,7 @@ Natively installed packages (e.g., via `apt-get install`) will not persist if th

To install an application, use the command line inside the container:

```
```bash
proot-apps install filezilla
```

Expand Down Expand Up @@ -225,22 +231,25 @@ These variables can be used to lock down the desktop environment for single-appl
| **`HARDEN_KEYBINDS`** | If true, disables default Openbox keybinds that can bypass other hardening options (e.g., `Alt+F4` to close windows, `Alt+Escape` to show the root menu). |
| **`RESTART_APP`** | If true, enables a watchdog service that automatically restarts the main application if it is closed. The user's autostart script is made read-only and root owned to prevent tampering. |
{% endset %}
{{ blurb4 | admonition(flavour=markdown, title="Click to expand: Hardening Options", collapse="???") }}
{{ blurb4 | admonition(flavour=markdown, title="Click to expand: Hardening Options", collapse=True) }}

{% set blurb5 %}
Using environment variables every facet of the application can be configured.

**Booleans and Locking:**
Boolean settings accept `true` or `false`. You can also prevent the user from changing a boolean setting in the UI by appending `|locked`.
* Example: `-e SELKIES_USE_CPU="true|locked"`

* Example: `-e SELKIES_USE_CPU="true|locked"`

**Enums and Lists:**
These settings accept a comma-separated list of values. The first item becomes default. If only one item is provided, the UI dropdown is hidden.
* Example: `-e SELKIES_ENCODER="jpeg"`

* Example: `-e SELKIES_ENCODER="jpeg"`

**Ranges:**
Use a hyphen-separated `min-max` format for a slider, or a single number to lock the value.
* Example: `-e SELKIES_FRAMERATE="60"`

* Example: `-e SELKIES_FRAMERATE="60"`

**Manual Resolution Mode:**
If `SELKIES_MANUAL_WIDTH` or `SELKIES_MANUAL_HEIGHT` are set, the resolution is locked to those values.
Expand Down Expand Up @@ -304,4 +313,4 @@ If `SELKIES_MANUAL_WIDTH` or `SELKIES_MANUAL_HEIGHT` are set, the resolution is
| `SELKIES_ENABLE_PLAYER3` | `True` | Enable sharing link for gamepad player 3. |
| `SELKIES_ENABLE_PLAYER4` | `True` | Enable sharing link for gamepad player 4. |
{% endset %}
{{ blurb5 | admonition(flavour=markdown, title="Click to expand: Selkies Application Settings", collapse="???") }}
{{ blurb5 | admonition(flavour=markdown, title="Click to expand: Selkies Application Settings", collapse=True) }}