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
23 changes: 16 additions & 7 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ LABEL maintainer="thelamer"
# title
ENV TITLE=WPS-Office \
NO_FULL=true \
NO_GAMEPAD=true
NO_GAMEPAD=true \
PIXELFLUX_WAYLAND=true \
SELKIES_DESKTOP=true

RUN \
echo "**** add icon ****" && \
Expand All @@ -26,12 +28,6 @@ RUN \
qt6-base \
tint2 \
thunar && \
echo "**** install sfwbar ****" && \
cd /tmp && \
git clone https://aur.archlinux.org/sfwbar.git && \
chown -R abc:abc sfwbar && \
cd sfwbar && \
sudo -u abc makepkg -sAci --skipinteg --noconfirm --needed && \
echo "**** install wps-office ****" && \
cd /tmp && \
git clone https://aur.archlinux.org/wps-office-cn.git && \
Expand Down Expand Up @@ -63,6 +59,19 @@ RUN \
$(pacman -Qdtq) && \
rm -rf \
/tmp/* \
/usr/share/applications/avahi-discover.desktop \
/usr/share/applications/bssh.desktop \
/usr/share/applications/bvnc.desktop \
/usr/share/applications/cmake-gui.desktop \
/usr/share/applications/footclient.desktop \
/usr/share/applications/foot-server.desktop \
/usr/share/applications/thunar-bulk-rename.desktop \
/usr/share/applications/thunar-settings.desktop \
/usr/share/applications/tint2conf.desktop \
/usr/share/applications/tint2.desktop \
/usr/share/applications/uxterm.desktop \
/usr/share/applications/xfce4-about.desktop \
/usr/share/applications/xterm.desktop \
/var/cache/pacman/pkg/* \
/var/lib/pacman/sync/*

Expand Down
36 changes: 32 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,9 @@ To use hardware acceleration in Wayland mode, we distinguish between the card us
* `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.
If both variables point to the same device, the container will automatically enable **Zero Copy** encoding, significantly reducing CPU usage and latency. If they are set to different devices one will be used for **Rendering** and one for **Encoding** with a cpu readback.

You can also use the environment variable `AUTO_GPU=true`, with this set the first card detected in the container (IE `/dev/dri/renderD128`) will be used and configured for **Zero Copy**.

##### Intel & AMD (Open Source Drivers)

Expand All @@ -122,13 +124,34 @@ For Intel and AMD GPUs.

##### Nvidia (Proprietary Drivers)

**Note: Nvidia support is currently considered experimental, driver changes can break it at any time.**

**Note: Nvidia support is not available for Alpine-based images.**

**Note: Nvidia frames have issues with hardware decoders in Chromium browsers you need to navigate to `chrome://flags/#disable-accelerated-video-decode` and toggle it to `Disabled` for smooth playback**

**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.
1. **Driver:** Proprietary drivers **580 or higher** are required. **Crucially, you should install the driver using the `.run` file downloaded directly from the Nvidia website.**
* **Unraid:** Use the production branch from the Nvidia Driver Plugin.

2. **Kernel Parameter:** You must set `nvidia-drm.modeset=1 nvidia_drm.fbdev=1` in your host bootloader.
* **Standard Linux (GRUB):** Edit `/etc/default/grub` and add the parameter to your existing `GRUB_CMDLINE_LINUX_DEFAULT` line:

```text
GRUB_CMDLINE_LINUX_DEFAULT="<other existing options> nvidia-drm.modeset=1 nvidia_drm.fbdev=1"
```

Then apply the changes by running:

```bash
sudo update-grub
```

* **Unraid (Syslinux):** Edit the file `/boot/syslinux/syslinux.cfg` and add `nvidia-drm.modeset=1 nvidia_drm.fbdev=1` to the end of the `append` line for the Unraid OS boot entry.

3. **Hardware Initialization:** **On headless systems, the Nvidia video card requires a physical dummy plug inserted into the GPU so that DRM initializes properly.**

4. **Docker Runtime:** Configure the host docker daemon to use the Nvidia runtime:

```bash
Expand Down Expand Up @@ -157,6 +180,8 @@ services:
capabilities: [compute,video,graphics,utility]
```

* **Unraid:** Ensure you're properly setting the DRINODE/DRI_NODE and adding `--gpus all --runtime nvidia` to your extra parameters.

### SealSkin Compatibility

This container is compatible with [SealSkin](https://sealskin.app).
Expand All @@ -177,12 +202,14 @@ This container is based on [Docker Baseimage Selkies](https://github.com/linuxse
| Variable | Description |
| :----: | --- |
| 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 |
| SELKIES_DESKTOP | If set to true and in Wayland mode, a simple panel will be initialized with labwc |
| CUSTOM_PORT | Internal port the container listens on for http if it needs to be swapped from the default `3000` |
| CUSTOM_HTTPS_PORT | Internal port the container listens on for https if it needs to be swapped from the default `3001` |
| CUSTOM_WS_PORT | Internal port the container listens on for websockets if it needs to be swapped from the default 8082 |
| CUSTOM_USER | HTTP Basic auth username, abc is default. |
| DRI_NODE | **Encoding GPU**: Enable VAAPI/NVENC stream encoding and use the specified device IE `/dev/dri/renderD128` |
| DRINODE | **Rendering GPU**: Specify which GPU to use for EGL/3D acceleration IE `/dev/dri/renderD129` |
| AUTO_GPU | If set to true and in Wayland mode, we will automatically use the first GPU available for encoding and rendering IE `/dev/dri/renderD128` |
| PASSWORD | HTTP Basic auth password, abc is default. If unset there will be no auth |
| SUBFOLDER | Subfolder for the application if running a subfolder reverse proxy, need both slashes IE `/subfolder/` |
| TITLE | The page title displayed on the web browser, default "Selkies" |
Expand Down Expand Up @@ -612,6 +639,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64

## Versions

* **11.04.26:** - Make Wayland default disable with PIXELFLUX_WAYLAND=false.
* **21.03.26:** - Use Wayland ozone platform for chromium fixes scaling and acceleration.
* **28.12.25:** - Add Wayland init logic.
* **10.07.25:** - Rebase to Selkies HTTPS IS NOW REQUIRED, merge chinese and english image.
Expand Down
1 change: 1 addition & 0 deletions readme-vars.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ init_diagram: |
"wps-office:latest" <- Base Images
# changelog
changelogs:
- {date: "11.04.26:", desc: "Make Wayland default disable with PIXELFLUX_WAYLAND=false."}
- {date: "21.03.26:", desc: "Use Wayland ozone platform for chromium fixes scaling and acceleration."}
- {date: "28.12.25:", desc: "Add Wayland init logic."}
- {date: "10.07.25:", desc: "Rebase to Selkies HTTPS IS NOW REQUIRED, merge chinese and english image."}
Expand Down
14 changes: 11 additions & 3 deletions root/defaults/autostart_wayland
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
#!/bin/bash

# default file copies first run
if [ ! -f "${HOME}/Desktop/wps-office-prometheus.desktop" ]; then
cp /usr/share/applications/wps-office-prometheus.desktop "${HOME}/Desktop/"
cp /usr/share/applications/chromium.desktop "${HOME}/Desktop/"
fi

if [ ! -f $HOME/.config/Kingsoft/Office.conf ]; then
mkdir -p $HOME/.config/Kingsoft
echo "[kdcsdk]
Expand All @@ -7,7 +14,8 @@ NotFirstOpen=true
common\\AcceptedEULA=true" > $HOME/.config/Kingsoft/Office.conf
fi

gio mime x-scheme-handler/http chromium.desktop
gio mime x-scheme-handler/https chromium.desktop
gio mime application/x-terminal-emulator foot.desktop

# Start UI
sfwbar &
wps
touch "${HOME}/.config/panel-reload"