Skip to content

Commit 241ea44

Browse files
authored
Merge pull request #373 from linuxserver/monthly
- #371 - #372 - #375 - #374 - #376
2 parents c1f8415 + 42a3d63 commit 241ea44

5 files changed

Lines changed: 136 additions & 131 deletions

File tree

ansible/filter_plugins/admonition.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,16 @@ def admonition(self, text, flavour="gfm", severity:str = "note", collapse=None,
4040

4141
note = ""
4242

43-
aa_severity = severity
43+
clear_text = text
4444

4545
if severity == "deprecation":
4646
note = f"# DEPRECATION NOTICE \n{text}"
4747
elif flavour == "gfm":
4848
severity = severities.get(severity,"NOTE")
4949
text = text.replace("\n", "\n>")
5050
note = f">[!{severity}]\n>{text}"
51+
if collapse != None:
52+
note = f"<details>\n<summary>{title}</summary>\n\n{clear_text}\n</details>"
5153
elif flavour == "mkdocs":
5254
severity = severities.get(severity, "note")
5355
if collapse == None:
@@ -62,4 +64,3 @@ def admonition(self, text, flavour="gfm", severity:str = "note", collapse=None,
6264
note += f"\n\n {text}"
6365

6466
return note
65-

ansible/roles/deprecate/tasks/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
loop:
1212
- root/etc/s6-overlay/s6-rc.d/init-deprecate/dependencies.d
1313
- root/etc/s6-overlay/s6-rc.d/init-services/dependencies.d
14+
- root/etc/s6-overlay/s6-rc.d/user/contents.d
1415

1516
- name: Create deprecation files
1617
file:

ansible/roles/documentation/templates/README_SNIPPETS/SELKIES.j2

Lines changed: 130 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,103 @@ The web interface includes a terminal with passwordless `sudo` access. Any user
1212

1313
While not generally recommended, certain legacy environments specifically those with older hardware or outdated Linux distributions may require the deactivation of the standard seccomp profile to get containerized desktop software to run. This can be achieved by utilizing the `--security-opt seccomp=unconfined` parameter. It is critical to use this option only when absolutely necessary as it disables a key security layer of Docker, elevating the potential for container escape vulnerabilities.
1414

15-
### Options in all Selkies-based GUI containers
15+
### Hardware Acceleration & The Move to Wayland
16+
17+
We are currently transitioning our desktop containers from X11 to Wayland. While X11 is still the default, we strongly encourage users to test the new Wayland mode.
18+
19+
**Important:** GPU acceleration support for X11 is being deprecated. Future development for hardware acceleration will focus entirely on the Wayland stack.
20+
21+
To enable Wayland mode, set the following environment variable:
22+
* `-e PIXELFLUX_WAYLAND=true`
23+
24+
**Why use Wayland?**
25+
* **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.
26+
* **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.
27+
28+
#### GPU Configuration
29+
30+
To use hardware acceleration in Wayland mode, we distinguish between the card used for **Rendering** (3D apps/Desktops) and **Encoding** (Video Stream).
31+
32+
**Configuration Variables:**
33+
* `DRINODE`: The path to the GPU used for **Rendering** (EGL).
34+
* `DRI_NODE`: The path to the GPU used for **Encoding** (VAAPI/NVENC).
1635

17-
This container is based on [Docker Baseimage Selkies](https://github.com/linuxserver/docker-baseimage-selkies), which provides the following environment variables and run configurations to customize its functionality.
36+
If both variables point to the same device, the container will automatically enable **Zero Copy** encoding, significantly reducing CPU usage and latency.
1837

19-
#### Optional Environment Variables
38+
##### Intel & AMD (Open Source Drivers)
2039

40+
For Intel and AMD GPUs.
41+
42+
```yaml
43+
devices:
44+
- /dev/dri:/dev/dri
45+
environment:
46+
- PIXELFLUX_WAYLAND=true
47+
# Optional: Specify device if multiple exist (IE: /dev/dri/renderD129)
48+
- DRINODE=/dev/dri/renderD128
49+
- DRI_NODE=/dev/dri/renderD128
50+
```
51+
52+
{% if show_nvidia is defined %}##### Nvidia (Proprietary Drivers)
53+
54+
**Note: Nvidia support is not available for Alpine-based images.**
55+
56+
**Prerequisites:**
57+
1. **Driver:** Proprietary drivers **580 or higher** are required.
58+
2. **Kernel Parameter:** Set `nvidia-drm.modeset=1` in your host bootloader (GRUB/systemd-boot).
59+
3. **Initialization:** On headless systems, run `nvidia-modprobe --modeset` on the host (once per boot) to initialize the card.
60+
4. **Docker Runtime:** Configure the host docker daemon to use the Nvidia runtime:
61+
```bash
62+
sudo nvidia-ctk runtime configure --runtime=docker
63+
sudo systemctl restart docker
64+
```
65+
66+
**Compose Configuration:**
67+
68+
```yaml
69+
services:
70+
{{ project_name }}:
71+
image: lscr.io/{{ lsio_project_name_short }}/{{ project_name }}:{{ release_tag }}
72+
environment:
73+
- PIXELFLUX_WAYLAND=true
74+
# Ensure these point to the rendered node injected by the runtime (usually renderD128)
75+
- DRINODE=/dev/dri/renderD128
76+
- DRI_NODE=/dev/dri/renderD128
77+
deploy:
78+
resources:
79+
reservations:
80+
devices:
81+
- driver: nvidia
82+
count: 1
83+
capabilities: [compute,video,graphics,utility]
84+
```
85+
{% endif %}
86+
87+
### SealSkin Compatibility
88+
89+
This container is compatible with [SealSkin](https://sealskin.app).
90+
91+
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.
92+
93+
* **SealSkin Server:** [Get it Here](https://github.com/linuxserver/docker-sealskin)
94+
* **Browser Extension:** [Chrome](https://chromewebstore.google.com/detail/sealskin-isolation/lclgfmnljgacfdpmmmjmfpdelndbbfhk) and [Firefox](https://addons.mozilla.org/en-US/firefox/addon/sealskin-isolation/).
95+
* **Mobile App:** [iOS](https://apps.apple.com/us/app/sealskin/id6758210210) and [Android](https://play.google.com/store/apps/details?id=io.linuxserver.sealskin)
96+
97+
98+
### Options in all Selkies-based GUI containers
99+
100+
This container is based on [Docker Baseimage Selkies](https://github.com/linuxserver/docker-baseimage-selkies).
101+
102+
{% set blurb1 %}
21103
| Variable | Description |
22104
| :----: | --- |
23105
| PIXELFLUX_WAYLAND | **Experimental** If set to true the container will initialize in Wayland mode running [Smithay](https://github.com/Smithay/smithay) and Labwc while enabling zero copy encoding with a GPU |
24106
| CUSTOM_PORT | Internal port the container listens on for http if it needs to be swapped from the default `{% if external_http_port is defined %}{{ external_http_port }}{% else %}3000{% endif %}` |
25107
| CUSTOM_HTTPS_PORT | Internal port the container listens on for https if it needs to be swapped from the default `{% if external_https_port is defined %}{{ external_https_port }}{% else %}3001{% endif %}` |
26108
| CUSTOM_WS_PORT | Internal port the container listens on for websockets if it needs to be swapped from the default 8082 |
27109
| CUSTOM_USER | HTTP Basic auth username, abc is default. |
28-
| DRI_NODE | Enable VAAPI stream encoding and use the specified device IE `/dev/dri/renderD128` |
29-
| DRINODE | Specify which GPU to use for DRI3 acceleration IE `/dev/dri/renderD129` |
110+
| DRI_NODE | **Encoding GPU**: Enable VAAPI/NVENC stream encoding and use the specified device IE `/dev/dri/renderD128` |
111+
| DRINODE | **Rendering GPU**: Specify which GPU to use for EGL/3D acceleration IE `/dev/dri/renderD129` |
30112
| PASSWORD | HTTP Basic auth password, abc is default. If unset there will be no auth |
31113
| SUBFOLDER | Subfolder for the application if running a subfolder reverse proxy, need both slashes IE `/subfolder/` |
32114
| TITLE | The page title displayed on the web browser, default "Selkies" |
@@ -51,14 +133,34 @@ This container is based on [Docker Baseimage Selkies](https://github.com/linuxse
51133
- **4**: Bottom Right
52134
- **5**: Centered
53135
- **6**: Animated
136+
{% endset %}
137+
{{ blurb1 | admonition(flavour=markdown, title="Click to expand: Optional Environment Variables", collapse="???") }}
54138

55-
#### Optional Run Configurations
56-
139+
{% set blurb2 %}
57140
| Argument | Description |
58141
| :----: | --- |
59142
| `--privileged` | Starts a Docker-in-Docker (DinD) environment. For better performance, mount the Docker data directory from the host, e.g., `-v /path/to/docker-data:/var/lib/docker`. |
60143
| `-v /var/run/docker.sock:/var/run/docker.sock` | Mounts the host's Docker socket to manage host containers from within this container. |
61-
| `--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. Only **Open Source** drivers are supported IE (Intel,AMDGPU,Radeon,ATI,Nouveau) |
144+
| `--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. |
145+
{% endset %}
146+
{{ blurb2 | admonition(flavour=markdown, title="Click to expand: Optional Run Configurations (DinD & GPU Mounts)", collapse="???") }}
147+
148+
{% set blurb3 %}
149+
**Note:** This section applies only if you are **NOT** using `PIXELFLUX_WAYLAND=true`.
150+
151+
When using 3d acceleration via Nvidia DRM or DRI3 in X11 mode, it is important to clamp the virtual display to a reasonable max resolution to avoid memory exhaustion or poor performance.
152+
153+
* `-e MAX_RESOLUTION=3840x2160`
154+
155+
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:
156+
157+
```
158+
-e SELKIES_MANUAL_WIDTH=1920
159+
-e SELKIES_MANUAL_HEIGHT=1080
160+
-e MAX_RESOLUTION=1920x1080
161+
```
162+
{% endset %}
163+
{{ blurb3 | admonition(flavour=markdown, title="Click to expand: Legacy X11 Resolution & Acceleration", collapse="???") }}
62164

63165
### Language Support - Internationalization
64166

@@ -75,84 +177,7 @@ To launch the desktop session in a different language, set the `LC_ALL` environm
75177
* `-e LC_ALL=nl_NL.UTF-8` - Netherlands
76178
* `-e LC_ALL=it_IT.UTF-8` - Italian
77179

78-
### SealSkin Compatibility
79-
80-
This container is compatible with [SealSkin](https://github.com/linuxserver/docker-sealskin).
81-
82-
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.
83-
84-
* **SealSkin Server:** [Get it Here](https://github.com/linuxserver/docker-sealskin)
85-
* **Browser Extension:** [Install Here](https://chromewebstore.google.com/detail/sealskin-isolation/lclgfmnljgacfdpmmmjmfpdelndbbfhk)
86-
87-
### All GPU Acceleration - use sane resolutions
88-
89-
When using 3d acceleration via Nvidia DRM or DRI3 it is important to clamp the virtual display to a reasonable max resolution. This can be achieved with the environment setting:
90-
91-
* `-e MAX_RESOLUTION=3840x2160`
92-
93-
This will set the total virtual framebuffer to 4K, you can also set a manual resolution to achieve this.
94-
By default the virtual monitor in the session is 16K to support large monitors and dual display configurations. Leaving it this large has no impact on CPU based performance but costs GPU memory usage and memory bandwidth when leveraging one for acceleration. If you have performance issues in an accelerated session, try clamping the resolution to 1080p and work up from there:
95-
96-
```
97-
-e SELKIES_MANUAL_WIDTH=1920
98-
-e SELKIES_MANUAL_HEIGHT=1080
99-
-e MAX_RESOLUTION=1920x1080
100-
```
101-
102-
### DRI3 GPU Acceleration
103-
104-
For accelerated apps or games, render devices can be mounted into the container and leveraged by applications using:
105-
106-
`--device /dev/dri:/dev/dri`
107-
108-
This feature only supports **Open Source** GPU drivers:
109-
110-
| Driver | Description |
111-
| :----: | --- |
112-
| Intel | i965 and i915 drivers for Intel iGPU chipsets |
113-
| AMD | AMDGPU, Radeon, and ATI drivers for AMD dedicated or APU chipsets |
114-
| NVIDIA | nouveau2 drivers only, closed source NVIDIA drivers lack DRI3 support |
115-
116-
The `DRINODE` environment variable can be used to point to a specific GPU.
117-
118-
DRI3 will work on aarch64 given the correct drivers are installed inside the container for your chipset.
119-
120-
{% if show_nvidia is defined %}### Nvidia GPU Support
121-
122-
**Note: Nvidia support is not available for Alpine-based images.**
123-
124-
Nvidia GPU support is available by leveraging Zink for OpenGL. When a compatible Nvidia GPU is passed through, it will also be **automatically utilized for hardware-accelerated video stream encoding** (using the `x264enc` full-frame profile), significantly reducing CPU load.
125-
126-
Enable Nvidia support with the following runtime flags:
127-
128-
| Flag | Description |
129-
| :----: | --- |
130-
| `--gpus all` | Passes all available host GPUs to the container. This can be filtered to specific GPUs. |
131-
| `--runtime nvidia` | Specifies the Nvidia runtime, which provides the necessary drivers and tools from the host. |
132-
133-
For Docker Compose, you must first configure the Nvidia runtime as the default on the host:
134-
135-
```
136-
sudo nvidia-ctk runtime configure --runtime=docker --set-as-default
137-
sudo systemctl restart docker
138-
```
139-
140-
Then, assign the GPU to the service in your `compose.yaml`:
141-
142-
```
143-
services:
144-
{{ project_name }}:
145-
image: lscr.io/{{ lsio_project_name_short }}/{{ project_name }}:{{ release_tag }}
146-
deploy:
147-
resources:
148-
reservations:
149-
devices:
150-
- driver: nvidia
151-
count: 1
152-
capabilities: [compute,video,graphics,utility]
153-
```
154-
155-
{% endif %}### Application Management
180+
### Application Management
156181

157182
There are two methods for installing applications inside the container: PRoot Apps (recommended for persistence) and Native Apps.
158183

@@ -178,20 +203,17 @@ You can install packages from the system's native repository using the [universa
178203
- INSTALL_PACKAGES=libfuse2|git|gdb
179204
```
180205

181-
#### Hardening
206+
### Advanced Configuration
182207

208+
{% set blurb4 %}
183209
These variables can be used to lock down the desktop environment for single-application use cases or to restrict user capabilities.
184210

185-
##### Meta Variables
186-
187-
These variables act as presets, enabling multiple hardening options at once. Individual options can still be set to override the preset.
188-
189211
| Variable | Description |
190212
| :----: | --- |
191213
| **`HARDEN_DESKTOP`** | Enables `DISABLE_OPEN_TOOLS`, `DISABLE_SUDO`, and `DISABLE_TERMINALS`. Also sets related Selkies UI settings (`SELKIES_FILE_TRANSFERS`, `SELKIES_COMMAND_ENABLED`, `SELKIES_UI_SIDEBAR_SHOW_FILES`, `SELKIES_UI_SIDEBAR_SHOW_APPS`) if they are not explicitly set by the user. |
192214
| **`HARDEN_OPENBOX`** | Enables `DISABLE_CLOSE_BUTTON`, `DISABLE_MOUSE_BUTTONS`, and `HARDEN_KEYBINDS`. It also flags `RESTART_APP` if not set by the user, ensuring the primary application is automatically restarted if closed. |
193215

194-
##### Individual Hardening Variables
216+
**Individual Hardening Variables:**
195217

196218
| Variable | Description |
197219
| :--- | --- |
@@ -202,47 +224,26 @@ These variables act as presets, enabling multiple hardening options at once. Ind
202224
| **`DISABLE_MOUSE_BUTTONS`** | If true, disables the right-click and middle-click context menus and actions within the Openbox window manager. |
203225
| **`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). |
204226
| **`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. |
227+
{% endset %}
228+
{{ blurb4 | admonition(flavour=markdown, title="Click to expand: Hardening Options", collapse="???") }}
205229

206-
#### Selkies application settings
207-
230+
{% set blurb5 %}
208231
Using environment variables every facet of the application can be configured.
209232

210-
##### Booleans and Locking
211-
Boolean settings accept `true` or `false`. You can also prevent the user from changing a boolean setting in the UI by appending `|locked`. The UI toggle for this setting will be hidden.
212-
213-
* **Example**: To force CPU encoding on and prevent the user from disabling it:
214-
```bash
215-
-e SELKIES_USE_CPU="true|locked"
216-
```
217-
218-
##### Enums and Lists
219-
These settings accept a comma-separated list of values. Their behavior depends on the number of items provided:
220-
221-
* **Multiple Values**: The first item in the list becomes the default selection, and all items in the list become the available options in the UI dropdown.
222-
* **Single Value**: The provided value becomes the default, and the UI dropdown is hidden because the choice is locked.
233+
**Booleans and Locking:**
234+
Boolean settings accept `true` or `false`. You can also prevent the user from changing a boolean setting in the UI by appending `|locked`.
235+
* Example: `-e SELKIES_USE_CPU="true|locked"`
223236

224-
* **Example**: Force the encoder to be `jpeg` with no other options available to the user:
225-
```bash
226-
-e SELKIES_ENCODER="jpeg"
227-
```
228-
229-
##### Ranges
230-
Range settings define a minimum and maximum for a value (e.g., framerate).
231-
232-
* **To set a range**: Use a hyphen-separated `min-max` format. The UI will show a slider.
233-
* **To set a fixed value**: Provide a single number. This will lock the value and hide the UI slider.
234-
235-
* **Example**: Lock the framerate to exactly 60 FPS.
236-
```bash
237-
-e SELKIES_FRAMERATE="60"
238-
```
237+
**Enums and Lists:**
238+
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.
239+
* Example: `-e SELKIES_ENCODER="jpeg"`
239240

240-
##### Manual Resolution Mode
241-
The server can be forced to use a single, fixed resolution for all connecting clients. This mode is automatically activated if `SELKIES_MANUAL_WIDTH`, `SELKIES_MANUAL_HEIGHT`, or `SELKIES_IS_MANUAL_RESOLUTION_MODE` is set.
241+
**Ranges:**
242+
Use a hyphen-separated `min-max` format for a slider, or a single number to lock the value.
243+
* Example: `-e SELKIES_FRAMERATE="60"`
242244

243-
* If `SELKIES_MANUAL_WIDTH` and/or `SELKIES_MANUAL_HEIGHT` are set, the resolution is locked to those values.
244-
* If `SELKIES_IS_MANUAL_RESOLUTION_MODE` is set to `true` without specifying width or height, the resolution defaults to **1024x768**.
245-
* When this mode is active, the client UI for changing resolution is disabled.
245+
**Manual Resolution Mode:**
246+
If `SELKIES_MANUAL_WIDTH` or `SELKIES_MANUAL_HEIGHT` are set, the resolution is locked to those values.
246247

247248
| Environment Variable | Default Value | Description |
248249
| --- | --- | --- |
@@ -302,3 +303,5 @@ The server can be forced to use a single, fixed resolution for all connecting cl
302303
| `SELKIES_ENABLE_PLAYER2` | `True` | Enable sharing link for gamepad player 2. |
303304
| `SELKIES_ENABLE_PLAYER3` | `True` | Enable sharing link for gamepad player 3. |
304305
| `SELKIES_ENABLE_PLAYER4` | `True` | Enable sharing link for gamepad player 4. |
306+
{% endset %}
307+
{{ blurb5 | admonition(flavour=markdown, title="Click to expand: Selkies Application Settings", collapse="???") }}

ansible/roles/documentation/templates/README_SNIPPETS/USAGE.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
To help you get started creating a container from this image you can either use docker-compose or the docker cli.
44

5-
{{ "Unless a parameter is flaged as 'optional', it is *mandatory* and a value must be provided." | admonition(flavour=markdown, severity="info") }}
5+
{{ "Unless a parameter is flagged as 'optional', it is *mandatory* and a value must be provided." | admonition(flavour=markdown, severity="info") }}
66

77
### docker-compose (recommended, [click here for more info]({{ lsio_docs_url }}/general/docker-compose))
88

ansible/roles/repository/templates/Jenkinsfile.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ pipeline {
461461
-v ${WORKSPACE}:/mnt \
462462
-e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
463463
-e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \
464-
ghcr.io/linuxserver/baseimage-alpine:3 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
464+
ghcr.io/linuxserver/baseimage-alpine:3.23 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
465465
apk add --no-cache python3 && \
466466
python3 -m venv /lsiopy && \
467467
pip install --no-cache-dir -U pip && \

0 commit comments

Comments
 (0)