diff --git a/services/selkies.nix b/services/selkies.nix index 15afc6d..b8c8e03 100644 --- a/services/selkies.nix +++ b/services/selkies.nix @@ -22,6 +22,12 @@ let && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ wine wine32 wine64 winbind cabextract ca-certificates wget \ && rm -rf /var/lib/apt/lists/* + # `gw` launcher: GW is 32-bit, so it needs the 32-bit NVIDIA GL libs (mounted + # at /usr/lib/i386-linux-gnu/nvidia by the service) on the loader path, and + # VirtualGL (EGL backend) to render on the M2000. Without this GW falls back + # to llvmpipe (software) and pegs ~18 CPU cores at <20 fps. + RUN printf '#!/bin/bash\nexport LD_LIBRARY_PATH=/usr/lib/i386-linux-gnu/nvidia\nexport VGL_DISPLAY=egl VGL_FPS=60\ncd "$HOME/.wine/drive_c/Program Files (x86)/Guild Wars/"\nexec vglrun wine Gw.exe "$@"\n' > /usr/local/bin/gw \ + && chmod +x /usr/local/bin/gw USER 1000 ''; in @@ -29,8 +35,9 @@ in config = lib.mkIf (config.networking.hostName == "FredOS-Mediaserver") { virtualisation.docker.enable = true; - # GPU into the container (CDI: nvidia.com/gpu=all) + 32-bit host GL libs so - # the toolkit can expose them to the 32-bit Wine/GW OpenGL stack. + # GPU into the container via CDI (nvidia.com/gpu=all). The CDI spec only + # carries the 64-bit driver libs, so the 32-bit set (for 32-bit Wine/GW) is + # bind-mounted separately below; enable32Bit makes them exist on the host. hardware.nvidia-container-toolkit.enable = true; hardware.graphics.enable32Bit = true; @@ -71,16 +78,17 @@ in -p 65532-65535:65532-65535/udp \ -e TZ=Europe/Stockholm \ -e DISPLAY_SIZEW=1280 -e DISPLAY_SIZEH=720 \ - -e DISPLAY_REFRESH=30 -e DISPLAY_DPI=96 -e DISPLAY_CDEPTH=24 \ + -e DISPLAY_REFRESH=60 -e DISPLAY_DPI=96 -e DISPLAY_CDEPTH=24 \ -e PASSWD=selkies \ -e SELKIES_ENCODER=nvh264enc \ -e SELKIES_VIDEO_BITRATE=8000 \ - -e SELKIES_FRAMERATE=30 \ + -e SELKIES_FRAMERATE=60 \ -e SELKIES_ENABLE_BASIC_AUTH=false \ -e SELKIES_TURN_HOST=10.0.0.1 \ -e SELKIES_TURN_PROTOCOL=udp \ -e SELKIES_TURN_PORT=3478 \ -e TURN_MIN_PORT=65532 -e TURN_MAX_PORT=65535 \ + -v ${config.hardware.nvidia.package.lib32}/lib:/usr/lib/i386-linux-gnu/nvidia:ro \ -v /var/lib/selkies/home:/home/ubuntu \ selkies-gw:local '';