You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -101,11 +101,61 @@ The web interface includes a terminal with passwordless `sudo` access. Any user
101
101
102
102
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.
103
103
104
+
### Hardware Acceleration & The Move to Wayland
105
+
106
+
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.
107
+
108
+
**Important:** GPU acceleration support for X11 is being deprecated. Future development for hardware acceleration will focus entirely on the Wayland stack.
109
+
110
+
To enable Wayland mode, set the following environment variable:
111
+
*`-e PIXELFLUX_WAYLAND=true`
112
+
113
+
**Why use Wayland?**
114
+
***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.
115
+
***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.
116
+
117
+
#### GPU Configuration
118
+
119
+
To use hardware acceleration in Wayland mode, we distinguish between the card used for **Rendering** (3D apps/Desktops) and **Encoding** (Video Stream).
120
+
121
+
**Configuration Variables:**
122
+
*`DRINODE`: The path to the GPU used for **Rendering** (EGL).
123
+
*`DRI_NODE`: The path to the GPU used for **Encoding** (VAAPI/NVENC).
124
+
125
+
If both variables point to the same device, the container will automatically enable **Zero Copy** encoding, significantly reducing CPU usage and latency.
126
+
127
+
##### Intel & AMD (Open Source Drivers)
128
+
129
+
For Intel and AMD GPUs.
130
+
131
+
```yaml
132
+
devices:
133
+
- /dev/dri:/dev/dri
134
+
environment:
135
+
- PIXELFLUX_WAYLAND=true
136
+
# Optional: Specify device if multiple exist (IE: /dev/dri/renderD129)
137
+
- DRINODE=/dev/dri/renderD128
138
+
- DRI_NODE=/dev/dri/renderD128
139
+
```
140
+
141
+
142
+
### SealSkin Compatibility
143
+
144
+
This container is compatible with [SealSkin](https://sealskin.app).
145
+
146
+
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.
147
+
148
+
* **SealSkin Server:** [Get it Here](https://github.com/linuxserver/docker-sealskin)
149
+
* **Browser Extension:** [Chrome](https://chromewebstore.google.com/detail/sealskin-isolation/lclgfmnljgacfdpmmmjmfpdelndbbfhk) and [Firefox](https://addons.mozilla.org/en-US/firefox/addon/sealskin-isolation/).
150
+
* **Mobile App:** [iOS](https://apps.apple.com/us/app/sealskin/id6758210210) and [Android](https://play.google.com/store/apps/details?id=io.linuxserver.sealskin)
151
+
152
+
104
153
### Options in all Selkies-based GUI containers
105
154
106
-
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.
155
+
This container is based on [Docker Baseimage Selkies](https://github.com/linuxserver/docker-baseimage-selkies).
107
156
108
-
#### Optional Environment Variables
157
+
<details>
158
+
<summary>Click to expand: Optional Environment Variables</summary>
109
159
110
160
| Variable | Description |
111
161
| :----: | --- |
@@ -114,8 +164,8 @@ This container is based on [Docker Baseimage Selkies](https://github.com/linuxse
114
164
| CUSTOM_HTTPS_PORT | Internal port the container listens on for https if it needs to be swapped from the default `3001` |
115
165
| CUSTOM_WS_PORT | Internal port the container listens on for websockets if it needs to be swapped from the default 8082 |
| DRI_NODE | Enable VAAPI stream encoding and use the specified device IE `/dev/dri/renderD128`|
118
-
| DRINODE | Specify which GPU to use for DRI3 acceleration IE `/dev/dri/renderD129`|
167
+
| DRI_NODE | **Encoding GPU**: Enable VAAPI/NVENC stream encoding and use the specified device IE `/dev/dri/renderD128` |
168
+
| DRINODE | **Rendering GPU**: Specify which GPU to use for EGL/3D acceleration IE `/dev/dri/renderD129` |
119
169
| PASSWORD | HTTP Basic auth password, abc is default. If unset there will be no auth |
120
170
| SUBFOLDER | Subfolder for the application if running a subfolder reverse proxy, need both slashes IE `/subfolder/` |
121
171
| TITLE | The page title displayed on the web browser, default "Selkies" |
@@ -141,70 +191,52 @@ This container is based on [Docker Baseimage Selkies](https://github.com/linuxse
141
191
- **5**: Centered
142
192
- **6**: Animated
143
193
144
-
#### Optional Run Configurations
194
+
</details>
195
+
196
+
<details>
197
+
<summary>Click to expand: Optional Run Configurations (DinD & GPU Mounts)</summary>
145
198
146
199
| Argument | Description |
147
200
| :----: | --- |
148
201
| `--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`. |
149
202
| `-v /var/run/docker.sock:/var/run/docker.sock` | Mounts the host's Docker socket to manage host containers from within this container. |
150
-
|`--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) |
151
-
152
-
### Language Support - Internationalization
153
-
154
-
To launch the desktop session in a different language, set the `LC_ALL` environment variable. For example:
| `--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. |
168
204
169
-
This container is compatible with [SealSkin](https://github.com/linuxserver/docker-sealskin).
170
-
171
-
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.
205
+
</details>
172
206
173
-
***SealSkin Server:**[Get it Here](https://github.com/linuxserver/docker-sealskin)
<summary>Click to expand: Legacy X11 Resolution & Acceleration</summary>
175
209
176
-
### All GPU Acceleration - use sane resolutions
210
+
**Note:** This section applies only if you are **NOT** using `PIXELFLUX_WAYLAND=true`.
177
211
178
-
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:
212
+
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.
179
213
180
214
* `-e MAX_RESOLUTION=3840x2160`
181
215
182
-
This will set the total virtual framebuffer to 4K, you can also set a manual resolution to achieve this.
183
-
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:
216
+
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:
184
217
185
218
```
186
219
-e SELKIES_MANUAL_WIDTH=1920
187
220
-e SELKIES_MANUAL_HEIGHT=1080
188
221
-e MAX_RESOLUTION=1920x1080
189
222
```
190
223
191
-
### DRI3 GPU Acceleration
192
-
193
-
For accelerated apps or games, render devices can be mounted into the container and leveraged by applications using:
194
-
195
-
`--device /dev/dri:/dev/dri`
224
+
</details>
196
225
197
-
This feature only supports **Open Source** GPU drivers:
198
-
199
-
| Driver | Description |
200
-
| :----: | --- |
201
-
| Intel | i965 and i915 drivers for Intel iGPU chipsets |
202
-
| AMD | AMDGPU, Radeon, and ATI drivers for AMD dedicated or APU chipsets |
@@ -232,20 +264,19 @@ You can install packages from the system's native repository using the [universa
232
264
- INSTALL_PACKAGES=libfuse2|git|gdb
233
265
```
234
266
235
-
#### Hardening
267
+
### Advanced Configuration
236
268
237
-
These variables can be used to lock down the desktop environment for single-application use cases or to restrict user capabilities.
269
+
<details>
270
+
<summary>Click to expand: Hardening Options</summary>
238
271
239
-
##### Meta Variables
240
-
241
-
These variables act as presets, enabling multiple hardening options at once. Individual options can still be set to override the preset.
272
+
These variables can be used to lock down the desktop environment for single-application use cases or to restrict user capabilities.
242
273
243
274
| Variable | Description |
244
275
| :----: | --- |
245
276
| **`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. |
246
277
| **`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. |
247
278
248
-
##### Individual Hardening Variables
279
+
**Individual Hardening Variables:**
249
280
250
281
| Variable | Description |
251
282
| :--- | --- |
@@ -257,46 +288,27 @@ These variables act as presets, enabling multiple hardening options at once. Ind
257
288
| **`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). |
258
289
| **`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. |
259
290
260
-
#### Selkies application settings
291
+
</details>
261
292
262
-
Using environment variables every facet of the application can be configured.
263
-
264
-
##### Booleans and Locking
265
-
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.
266
-
267
-
* **Example**: To force CPU encoding on and prevent the user from disabling it:
268
-
```bash
269
-
-e SELKIES_USE_CPU="true|locked"
270
-
```
293
+
<details>
294
+
<summary>Click to expand: Selkies Application Settings</summary>
271
295
272
-
##### Enums and Lists
273
-
These settings accept a comma-separated list of values. Their behavior depends on the number of items provided:
274
-
275
-
* **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.
276
-
* **Single Value**: The provided value becomes the default, and the UI dropdown is hidden because the choice is locked.
277
-
278
-
* **Example**: Force the encoder to be `jpeg` with no other options available to the user:
279
-
```bash
280
-
-e SELKIES_ENCODER="jpeg"
281
-
```
282
-
283
-
##### Ranges
284
-
Range settings define a minimum and maximum for a value (e.g., framerate).
296
+
Using environment variables every facet of the application can be configured.
285
297
286
-
* **To set a range**: Use a hyphen-separated `min-max` format. The UI will show a slider.
287
-
* **To set a fixed value**: Provide a single number. This will lock the value and hide the UI slider.
298
+
**Booleans and Locking:**
299
+
Boolean settings accept `true` or `false`. You can also prevent the user from changing a boolean setting in the UI by appending `|locked`.
300
+
* Example: `-e SELKIES_USE_CPU="true|locked"`
288
301
289
-
* **Example**: Lock the framerate to exactly 60 FPS.
290
-
```bash
291
-
-e SELKIES_FRAMERATE="60"
292
-
```
302
+
**Enums and Lists:**
303
+
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.
304
+
* Example: `-e SELKIES_ENCODER="jpeg"`
293
305
294
-
##### Manual Resolution Mode
295
-
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.
306
+
**Ranges:**
307
+
Use a hyphen-separated `min-max` format for a slider, or a single number to lock the value.
308
+
* Example: `-e SELKIES_FRAMERATE="60"`
296
309
297
-
* If `SELKIES_MANUAL_WIDTH` and/or `SELKIES_MANUAL_HEIGHT` are set, the resolution is locked to those values.
298
-
* If `SELKIES_IS_MANUAL_RESOLUTION_MODE` is set to `true` without specifying width or height, the resolution defaults to **1024x768**.
299
-
* When this mode is active, the client UI for changing resolution is disabled.
310
+
**Manual Resolution Mode:**
311
+
If `SELKIES_MANUAL_WIDTH` or `SELKIES_MANUAL_HEIGHT` are set, the resolution is locked to those values.
300
312
301
313
| Environment Variable | Default Value | Description |
302
314
| --- | --- | --- |
@@ -357,12 +369,14 @@ The server can be forced to use a single, fixed resolution for all connecting cl
357
369
| `SELKIES_ENABLE_PLAYER3` | `True` | Enable sharing link for gamepad player 3. |
358
370
| `SELKIES_ENABLE_PLAYER4` | `True` | Enable sharing link for gamepad player 4. |
359
371
372
+
</details>
373
+
360
374
## Usage
361
375
362
376
To help you get started creating a container from this image you can either use docker-compose or the docker cli.
363
377
364
378
>[!NOTE]
365
-
>Unless a parameter is flaged as 'optional', it is *mandatory* and a value must be provided.
379
+
>Unless a parameter is flagged as 'optional', it is *mandatory* and a value must be provided.
366
380
367
381
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
0 commit comments