From 0318a2da804387450f3b78ecd5f9e74037e1ca1d Mon Sep 17 00:00:00 2001 From: ehfd <8457324+ehfd@users.noreply.github.com> Date: Fri, 10 Nov 2023 05:23:09 +0900 Subject: [PATCH] [MAJOR] Slim container by removing CUDA and extracting NVRTC There is no visible change to the user. However, the environment CUDA_VERSION is eliminated. Therefore, this commit is a breaking change. --- Dockerfile | 240 ++++++++++++++++---------------- README.md | 2 +- egl.yml | 7 + entrypoint.sh | 10 +- selkies-gstreamer-entrypoint.sh | 6 +- 5 files changed, 134 insertions(+), 131 deletions(-) diff --git a/Dockerfile b/Dockerfile index aab850e..065847c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,76 +4,48 @@ # Ubuntu release versions 22.04, and 20.04 are supported ARG UBUNTU_RELEASE=22.04 -ARG CUDA_VERSION=11.7.1 -FROM nvcr.io/nvidia/cuda:${CUDA_VERSION}-runtime-ubuntu${UBUNTU_RELEASE} +FROM ubuntu:${UBUNTU_RELEASE} LABEL maintainer "https://github.com/ehfd,https://github.com/danisla" ARG UBUNTU_RELEASE -ARG CUDA_VERSION -# Make all NVIDIA GPUs visible by default -ARG NVIDIA_VISIBLE_DEVICES=all # Use noninteractive mode to skip confirmation when installing packages ARG DEBIAN_FRONTEND=noninteractive -# All NVIDIA driver capabilities should preferably be used, check `NVIDIA_DRIVER_CAPABILITIES` inside the container if things do not work -ENV NVIDIA_DRIVER_CAPABILITIES all -# Disable VSYNC for NVIDIA GPUs -ENV __GL_SYNC_TO_VBLANK 0 -# Expose CUDA libraries -ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} -# Enable AppImage execution in a container -ENV APPIMAGE_EXTRACT_AND_RUN 1 # System defaults that should not be changed ENV DISPLAY :0 ENV XDG_RUNTIME_DIR /tmp/runtime-user ENV PULSE_SERVER unix:/run/pulse/native -# Default environment variables (password is "mypasswd") -ENV TZ UTC -ENV SIZEW 1920 -ENV SIZEH 1080 -ENV REFRESH 60 -ENV DPI 96 -ENV CDEPTH 24 -ENV VGL_DISPLAY egl -ENV PASSWD mypasswd -ENV NOVNC_ENABLE false -ENV WEBRTC_ENCODER nvh264enc -ENV WEBRTC_ENABLE_RESIZE false -ENV ENABLE_BASIC_AUTH true - -# Set versions for components that should be manually checked before upgrading, other component versions are automatically determined by fetching the version online -ARG VIRTUALGL_VERSION=3.1 -ARG NOVNC_VERSION=1.4.0 - -# Install locales to prevent X11 errors -RUN apt-get clean && \ - apt-get update && apt-get install --no-install-recommends -y locales && \ +# Install fundamental packages +RUN apt-get clean && apt-get update && apt-get upgrade -y && apt-get install --no-install-recommends -y \ + apt-transport-https \ + apt-utils \ + build-essential \ + ca-certificates \ + curl \ + gnupg \ + locales \ + make \ + software-properties-common \ + wget && \ rm -rf /var/lib/apt/lists/* && \ locale-gen en_US.UTF-8 +# Set locales ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 -# Install Xvfb and other important libraries or packages +# Install operating system libraries or packages RUN dpkg --add-architecture i386 && \ apt-get update && apt-get install --no-install-recommends -y \ - software-properties-common \ alsa-base \ alsa-utils \ - apt-transport-https \ - apt-utils \ - build-essential \ - ca-certificates \ - ssl-cert \ cups-browsed \ cups-bsd \ cups-common \ cups-filters \ cups-pdf \ - curl \ file \ - wget \ bzip2 \ gzip \ xz-utils \ @@ -86,10 +58,10 @@ RUN dpkg --add-architecture i386 && \ gcc \ git \ jq \ - make \ python3 \ python3-cups \ python3-numpy \ + ssl-cert \ mlocate \ nano \ vim \ @@ -118,30 +90,8 @@ RUN dpkg --add-architecture i386 && \ pulseaudio \ supervisor \ net-tools \ - libglvnd-dev \ - libglvnd-dev:i386 \ - libgl1-mesa-dev \ - libgl1-mesa-dev:i386 \ - libegl1-mesa-dev \ - libegl1-mesa-dev:i386 \ - libgles2-mesa-dev \ - libgles2-mesa-dev:i386 \ - libglvnd0 \ - libglvnd0:i386 \ - libgl1 \ - libgl1:i386 \ - libglx0 \ - libglx0:i386 \ - libegl1 \ - libegl1:i386 \ - libgles2 \ - libgles2:i386 \ - libglu1 \ - libglu1:i386 \ - libsm6 \ - libsm6:i386 \ - pkg-config \ packagekit-tools \ + pkg-config \ mesa-utils \ mesa-utils-extra \ va-driver-all \ @@ -156,16 +106,36 @@ RUN dpkg --add-architecture i386 && \ vdpau-driver-all \ vdpau-driver-all:i386 \ vdpauinfo \ + mesa-vulkan-drivers \ + mesa-vulkan-drivers:i386 \ + libvulkan-dev \ + libvulkan-dev:i386 \ + vulkan-tools \ + ocl-icd-libopencl1 \ + clinfo \ + dbus-user-session \ + dbus-x11 \ + libdbus-c++-1-0v5 \ + xkb-data \ + xauth \ + xbitmaps \ + xdg-user-dirs \ + xdg-utils \ + xfonts-base \ + xfonts-scalable \ + xinit \ + xsettingsd \ + libxrandr-dev \ + x11-xkb-utils \ + x11-xserver-utils \ + x11-utils \ + x11-apps \ xserver-xorg-input-all \ xserver-xorg-input-wacom \ xserver-xorg-video-all \ xserver-xorg-video-intel \ xserver-xorg-video-qxl \ - vulkan-tools \ - mesa-vulkan-drivers \ - mesa-vulkan-drivers:i386 \ - libvulkan-dev \ - libvulkan-dev:i386 \ + # Install OpenGL libraries libxau6 \ libxau6:i386 \ libxdmcp6 \ @@ -180,45 +150,75 @@ RUN dpkg --add-architecture i386 && \ libxv1:i386 \ libxtst6 \ libxtst6:i386 \ - xdg-user-dirs \ - xdg-utils \ - dbus-user-session \ - dbus-x11 \ - libdbus-c++-1-0v5 \ - xkb-data \ - x11-xkb-utils \ - x11-xserver-utils \ - x11-utils \ - x11-apps \ - xauth \ - xbitmaps \ - xfonts-base \ - xfonts-scalable \ - xinit \ - xsettingsd \ - libxrandr-dev \ - # Install Xvfb, packages above this line should be the same between docker-nvidia-glx-desktop and docker-nvidia-egl-desktop - xvfb && \ + libglvnd0 \ + libglvnd0:i386 \ + libgl1 \ + libgl1:i386 \ + libglx0 \ + libglx0:i386 \ + libegl1 \ + libegl1:i386 \ + libgles2 \ + libgles2:i386 \ + libglu1 \ + libglu1:i386 \ + libsm6 \ + libsm6:i386 && \ rm -rf /var/lib/apt/lists/* && \ + echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf && \ + echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf && \ + # Configure OpenCL manually + mkdir -pm755 /etc/OpenCL/vendors && echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd && \ + # Configure Vulkan manually + VULKAN_API_VERSION=$(dpkg -s libvulkan1 | grep -oP 'Version: [0-9|\.]+' | grep -oP '[0-9]+(\.[0-9]+)(\.[0-9]+)') && \ + mkdir -pm755 /etc/vulkan/icd.d/ && echo "{\n\ + \"file_format_version\" : \"1.0.0\",\n\ + \"ICD\": {\n\ + \"library_path\": \"libGLX_nvidia.so.0\",\n\ + \"api_version\" : \"${VULKAN_API_VERSION}\"\n\ + }\n\ +}" > /etc/vulkan/icd.d/nvidia_icd.json && \ # Configure EGL manually - mkdir -p /usr/share/glvnd/egl_vendor.d/ && \ - echo "{\n\ + mkdir -pm755 /usr/share/glvnd/egl_vendor.d/ && echo "{\n\ \"file_format_version\" : \"1.0.0\",\n\ \"ICD\": {\n\ \"library_path\": \"libEGL_nvidia.so.0\"\n\ }\n\ }" > /usr/share/glvnd/egl_vendor.d/10_nvidia.json +# Expose NVIDIA libraries and paths +ENV PATH /usr/local/nvidia/bin:${PATH} +ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}:/usr/local/nvidia/lib:/usr/local/nvidia/lib64 +# Make all NVIDIA GPUs visible by default +ENV NVIDIA_VISIBLE_DEVICES all +# All NVIDIA driver capabilities should preferably be used, check `NVIDIA_DRIVER_CAPABILITIES` inside the container if things do not work +ENV NVIDIA_DRIVER_CAPABILITIES all +# Disable VSYNC for NVIDIA GPUs +ENV __GL_SYNC_TO_VBLANK 0 -# Configure Vulkan manually -RUN VULKAN_API_VERSION=$(dpkg -s libvulkan1 | grep -oP 'Version: [0-9|\.]+' | grep -oP '[0-9]+(\.[0-9]+)(\.[0-9]+)') && \ - mkdir -p /etc/vulkan/icd.d/ && \ - echo "{\n\ - \"file_format_version\" : \"1.0.0\",\n\ - \"ICD\": {\n\ - \"library_path\": \"libGLX_nvidia.so.0\",\n\ - \"api_version\" : \"${VULKAN_API_VERSION}\"\n\ - }\n\ -}" > /etc/vulkan/icd.d/nvidia_icd.json +# Anything above this line should always be kept the same between docker-nvidia-glx-desktop and docker-nvidia-egl-desktop + +# Default environment variables (password is "mypasswd") +ENV TZ UTC +ENV SIZEW 1920 +ENV SIZEH 1080 +ENV REFRESH 60 +ENV DPI 96 +ENV CDEPTH 24 +ENV VGL_DISPLAY egl +ENV PASSWD mypasswd +ENV NOVNC_ENABLE false +ENV WEBRTC_ENCODER nvh264enc +ENV WEBRTC_ENABLE_RESIZE false +ENV ENABLE_BASIC_AUTH true + +# Set versions for components that should be manually checked before upgrading, other component versions are automatically determined by fetching the version online +ARG VIRTUALGL_VERSION=3.1 +ARG NOVNC_VERSION=1.4.0 + +# Install Xvfb +RUN apt-get update && apt-get install --no-install-recommends -y \ + xvfb && \ + rm -rf /var/lib/apt/lists/* # Install VirtualGL and make libraries available for preload ARG VIRTUALGL_URL="https://sourceforge.net/projects/virtualgl/files" @@ -234,7 +234,7 @@ RUN curl -fsSL -O "${VIRTUALGL_URL}/virtualgl_${VIRTUALGL_VERSION}_amd64.deb" && chmod u+s /usr/lib/i386-linux-gnu/libvglfaker.so && \ chmod u+s /usr/lib/i386-linux-gnu/libdlfaker.so -# Anything below this line should be always kept the same between docker-nvidia-glx-desktop and docker-nvidia-egl-desktop +# Anything below this line should always be kept the same between docker-nvidia-glx-desktop and docker-nvidia-egl-desktop # Install KDE and other GUI packages ENV XDG_CURRENT_DESKTOP KDE @@ -242,13 +242,13 @@ ENV KWIN_COMPOSE N ENV KWIN_X11_NO_SYNC_TO_VBLANK 1 # Use sudoedit to change protected files instead of using sudo on kate ENV SUDO_EDITOR kate -RUN mkdir -pm755 /etc/apt/preferences.d && \ - echo "Package: firefox*\n\ +# Enable AppImage execution in containers +ENV APPIMAGE_EXTRACT_AND_RUN 1 +RUN mkdir -pm755 /etc/apt/preferences.d && echo "Package: firefox*\n\ Pin: version 1:1snap*\n\ Pin-Priority: -1" > /etc/apt/preferences.d/firefox-nosnap && \ - # Add Mozilla Firefox PPA mkdir -pm755 /etc/apt/trusted.gpg.d && curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0AB215679C571D1C8325275B9BDB3D89CE49EC21" | gpg --dearmor -o /etc/apt/trusted.gpg.d/mozillateam-ubuntu-ppa.gpg && \ - mkdir -pm755 /etc/apt/sources.list.d && echo "deb https://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu $(grep UBUNTU_CODENAME= /etc/os-release | cut -d= -f2) main" > "/etc/apt/sources.list.d/mozillateam-ubuntu-ppa-$(grep UBUNTU_CODENAME= /etc/os-release | cut -d= -f2).list" && \ + mkdir -pm755 /etc/apt/sources.list.d && echo "deb https://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu $(grep UBUNTU_CODENAME= /etc/os-release | cut -d= -f2 | tr -d '\"') main" > "/etc/apt/sources.list.d/mozillateam-ubuntu-ppa-$(grep UBUNTU_CODENAME= /etc/os-release | cut -d= -f2 | tr -d '\"').list" && \ apt-get update && apt-get install --no-install-recommends -y \ kde-plasma-desktop \ adwaita-icon-theme-full \ @@ -391,13 +391,13 @@ logout=false" > /etc/xdg/kdeglobals # Wine, Winetricks, Lutris, and PlayOnLinux, this process must be consistent with https://wiki.winehq.org/Ubuntu ARG WINE_BRANCH=staging RUN mkdir -pm755 /etc/apt/keyrings && curl -fsSL -o /etc/apt/keyrings/winehq-archive.key "https://dl.winehq.org/wine-builds/winehq.key" && \ - curl -fsSL -o "/etc/apt/sources.list.d/winehq-$(grep UBUNTU_CODENAME= /etc/os-release | cut -d= -f2).sources" "https://dl.winehq.org/wine-builds/ubuntu/dists/$(grep UBUNTU_CODENAME= /etc/os-release | cut -d= -f2)/winehq-$(grep UBUNTU_CODENAME= /etc/os-release | cut -d= -f2).sources" && \ + curl -fsSL -o "/etc/apt/sources.list.d/winehq-$(grep UBUNTU_CODENAME= /etc/os-release | cut -d= -f2 | tr -d '\"').sources" "https://dl.winehq.org/wine-builds/ubuntu/dists/$(grep UBUNTU_CODENAME= /etc/os-release | cut -d= -f2 | tr -d '\"')/winehq-$(grep UBUNTU_CODENAME= /etc/os-release | cut -d= -f2 | tr -d '\"').sources" && \ apt-get update && apt-get install --install-recommends -y \ winehq-${WINE_BRANCH} && \ apt-get install --no-install-recommends -y \ q4wine \ playonlinux && \ - LUTRIS_VERSION=$(curl -fsSL "https://api.github.com/repos/lutris/lutris/releases/latest" | jq -r '.tag_name' | sed 's/[^0-9\.\-]*//g') && \ + LUTRIS_VERSION="$(curl -fsSL "https://api.github.com/repos/lutris/lutris/releases/latest" | jq -r '.tag_name' | sed 's/[^0-9\.\-]*//g')" && \ curl -fsSL -O "https://github.com/lutris/lutris/releases/download/v${LUTRIS_VERSION}/lutris_${LUTRIS_VERSION}_all.deb" && \ apt-get install --no-install-recommends -y ./lutris_${LUTRIS_VERSION}_all.deb && rm -f "./lutris_${LUTRIS_VERSION}_all.deb" && \ rm -rf /var/lib/apt/lists/* && \ @@ -459,16 +459,16 @@ RUN apt-get update && apt-get install --no-install-recommends -y \ vainfo \ intel-gpu-tools \ radeontop && \ - if [ "${UBUNTU_RELEASE}" \> "20.04" ]; then apt-get install --no-install-recommends -y xcvt; fi && \ + if [ "$(grep VERSION_ID= /etc/os-release | cut -d= -f2 | tr -d '\"')" \> "20.04" ]; then apt-get install --no-install-recommends -y xcvt; fi && \ rm -rf /var/lib/apt/lists/* && \ - cd /opt && \ # Automatically fetch the latest selkies-gstreamer version and install the components - SELKIES_VERSION=$(curl -fsSL "https://api.github.com/repos/selkies-project/selkies-gstreamer/releases/latest" | jq -r '.tag_name' | sed 's/[^0-9\.\-]*//g') && \ - curl -fsSL "https://github.com/selkies-project/selkies-gstreamer/releases/download/v${SELKIES_VERSION}/selkies-gstreamer-v${SELKIES_VERSION}-ubuntu${UBUNTU_RELEASE}.tgz" | tar -zxf - && \ - curl -O -fsSL "https://github.com/selkies-project/selkies-gstreamer/releases/download/v${SELKIES_VERSION}/selkies_gstreamer-${SELKIES_VERSION}-py3-none-any.whl" && pip3 install "selkies_gstreamer-${SELKIES_VERSION}-py3-none-any.whl" && rm -f "selkies_gstreamer-${SELKIES_VERSION}-py3-none-any.whl" && \ - curl -fsSL "https://github.com/selkies-project/selkies-gstreamer/releases/download/v${SELKIES_VERSION}/selkies-gstreamer-web-v${SELKIES_VERSION}.tgz" | tar -zxf - && \ - curl -O -fsSL "https://github.com/selkies-project/selkies-gstreamer/releases/download/v${SELKIES_VERSION}/selkies-js-interposer-v${SELKIES_VERSION}-ubuntu${UBUNTU_RELEASE}.deb" && apt-get update && apt-get install --no-install-recommends -y "./selkies-js-interposer-v${SELKIES_VERSION}-ubuntu${UBUNTU_RELEASE}.deb" && rm -f "selkies-js-interposer-v${SELKIES_VERSION}-ubuntu${UBUNTU_RELEASE}.deb" && rm -rf /var/lib/apt/lists/* && \ - cd /usr/local/cuda/lib64 && sudo find . -maxdepth 1 -type l -name "*libnvrtc.so.*" -exec sh -c 'ln -snf $(basename {}) libnvrtc.so' \; + SELKIES_VERSION="$(curl -fsSL "https://api.github.com/repos/selkies-project/selkies-gstreamer/releases/latest" | jq -r '.tag_name' | sed 's/[^0-9\.\-]*//g')" && \ + cd /opt && curl -fsSL "https://github.com/selkies-project/selkies-gstreamer/releases/download/v${SELKIES_VERSION}/selkies-gstreamer-v${SELKIES_VERSION}-ubuntu$(grep VERSION_ID= /etc/os-release | cut -d= -f2 | tr -d '\"').tgz" | tar -zxf - && \ + # Extract NVRTC dependency, https://developer.download.nvidia.com/compute/cuda/redist/cuda_nvrtc/LICENSE.txt + cd /tmp && curl -fsSL -o nvidia_cuda_nvrtc_linux_x86_64.whl "https://developer.download.nvidia.com/compute/redist/nvidia-cuda-nvrtc/nvidia_cuda_nvrtc-11.0.221-cp36-cp36m-linux_x86_64.whl" && unzip -joq -d ./nvrtc nvidia_cuda_nvrtc_linux_x86_64.whl && cd nvrtc && chmod 755 libnvrtc* && find . -maxdepth 1 -type f -name "*libnvrtc.so.*" -exec sh -c 'ln -snf $(basename {}) libnvrtc.so' \; && mv -f libnvrtc* /opt/gstreamer/lib/x86_64-linux-gnu/ && cd /tmp && rm -rf /tmp/* && \ + cd /tmp && curl -fsSL -O "https://github.com/selkies-project/selkies-gstreamer/releases/download/v${SELKIES_VERSION}/selkies_gstreamer-${SELKIES_VERSION}-py3-none-any.whl" && pip3 install "selkies_gstreamer-${SELKIES_VERSION}-py3-none-any.whl" && rm -f "selkies_gstreamer-${SELKIES_VERSION}-py3-none-any.whl" && \ + cd /opt && curl -fsSL "https://github.com/selkies-project/selkies-gstreamer/releases/download/v${SELKIES_VERSION}/selkies-gstreamer-web-v${SELKIES_VERSION}.tgz" | tar -zxf - && \ + cd /tmp && curl -fsSL -o selkies-js-interposer.deb "https://github.com/selkies-project/selkies-gstreamer/releases/download/v${SELKIES_VERSION}/selkies-js-interposer-v${SELKIES_VERSION}-ubuntu$(grep VERSION_ID= /etc/os-release | cut -d= -f2 | tr -d '\"').deb" && apt-get update && apt-get install --no-install-recommends -y ./selkies-js-interposer.deb && rm -f ./selkies-js-interposer.deb && rm -rf /var/lib/apt/lists/* /tmp/* # Add configuration for Selkies-GStreamer Joystick interposer ENV LD_PRELOAD /usr/local/lib/selkies-js-interposer/joystick_interposer.so${LD_PRELOAD:+:${LD_PRELOAD}} ENV SDL_JOYSTICK_DEVICE /dev/input/js0 @@ -503,7 +503,7 @@ RUN apt-get update && apt-get install --no-install-recommends -y \ cd /tmp/x11vnc && autoreconf -fi && ./configure && make install && cd / && rm -rf /tmp/* && \ curl -fsSL "https://github.com/novnc/noVNC/archive/v${NOVNC_VERSION}.tar.gz" | tar -xzf - -C /opt && \ mv -f "/opt/noVNC-${NOVNC_VERSION}" /opt/noVNC && \ - ln -snf /opt/noVNC/vnc.html /opt/noVNC/index.html && \ + cd /opt/noVNC && ln -snf vnc.html index.html && \ # Use the latest Websockify source to expose noVNC git clone "https://github.com/novnc/websockify.git" /opt/noVNC/utils/websockify @@ -532,7 +532,7 @@ RUN chmod 755 /etc/supervisord.conf EXPOSE 8080 -USER user +USER 1000 ENV SHELL /bin/bash ENV USER user WORKDIR /home/user diff --git a/README.md b/README.md index 8c79bb1..4ba4e29 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Use [docker-nvidia-glx-desktop](https://github.com/selkies-project/docker-nvidia ## Usage -This container is composed fully of vendor-neutral applications and protocols except the NVIDIA base container itself, meaning that **there is nothing stopping you from using this container with GPUs of other vendors including AMD and Intel**. Use the respective vendor's container toolkit/runtime or Kubernetes device plugin and make sure that it provisions `/dev/dri/card[n]` devices, then set the environment variable `WEBRTC_ENCODER` to the value `x264enc`, `vp8enc`, or `vp9enc` if using the selkies-gstreamer WebRTC interface. Install relevant drivers inside the container as well, including `mesa-va-drivers` and `mesa-vulkan-drivers`. However, this is not officially supported and you must solve your own problems. This container also supports running without any GPUs with software fallback (set `WEBRTC_ENCODER` to the value `x264enc`, `vp8enc`, or `vp9enc` if using the selkies-gstreamer WebRTC interface). +This container is composed fully of vendor-neutral applications and protocols except the NVIDIA base container itself, meaning that **there is nothing stopping you from using this container with GPUs of other vendors including AMD and Intel**. Use the respective vendor's container toolkit/runtime or Kubernetes device plugin and make sure that it provisions `/dev/dri/card[n]` devices, then set the environment variable `WEBRTC_ENCODER` to the value `x264enc`, `vp8enc`, or `vp9enc` if using the selkies-gstreamer WebRTC interface. However, this is not officially supported and you must solve your own problems. This container also supports running without any GPUs with software fallback (set `WEBRTC_ENCODER` to the value `x264enc`, `vp8enc`, or `vp9enc` if using the selkies-gstreamer WebRTC interface). Wine, Winetricks, Lutris, and PlayOnLinux are bundled by default. Comment out the section where it is installed within `Dockerfile` if the user wants to remove them from the container. diff --git a/egl.yml b/egl.yml index 8c23a5b..9754800 100644 --- a/egl.yml +++ b/egl.yml @@ -65,6 +65,13 @@ spec: value: "false" - name: ENABLE_BASIC_AUTH value: "true" + - name: ENABLE_HTTPS_WEB + value: "false" + # Volume mount trusted HTTPS certificate to new path for no web browser warnings +# - name: HTTPS_WEB_CERT +# value: /etc/ssl/certs/ssl-cert-snakeoil.pem +# - name: HTTPS_WEB_KEY +# value: /etc/ssl/private/ssl-cert-snakeoil.key # Defaults to `PASSWD` if unspecified, choose either `value:` or `secretKeyRef:` but not both at the same time # - name: BASIC_AUTH_PASSWORD # value: "mypasswd" diff --git a/entrypoint.sh b/entrypoint.sh index 8fbf48e..b1ff5a4 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -18,15 +18,13 @@ echo "user:$PASSWD" | sudo chpasswd sudo rm -rf /tmp/.X* ~/.cache # Change time zone from environment variable sudo ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime && echo "$TZ" | sudo tee /etc/timezone > /dev/null -# Add game directories for Lutris and VirtualGL directories to path +# Add Lutris and VirtualGL directories to path export PATH="${PATH}:/usr/local/games:/usr/games:/opt/VirtualGL/bin" # Add LibreOffice to library path export LD_LIBRARY_PATH="/usr/lib/libreoffice/program:${LD_LIBRARY_PATH}" # Start DBus without systemd sudo /etc/init.d/dbus start -# Configure environment for selkies-gstreamer utilities -source /opt/gstreamer/gst-env # Default display is :0 across the container export DISPLAY=":0" @@ -39,7 +37,7 @@ until [ -S "/tmp/.X11-unix/X${DISPLAY/:/}" ]; do sleep 1; done echo "X socket is ready" # Resize the screen to the provided size -/usr/local/bin/selkies-gstreamer-resize "${SIZEW}x${SIZEH}" +bash -c "source /opt/gstreamer/gst-env && /usr/local/bin/selkies-gstreamer-resize ${SIZEW}x${SIZEH}" # Run the x11vnc + noVNC fallback web interface if enabled if [ "${NOVNC_ENABLE,,}" = "true" ]; then @@ -52,9 +50,9 @@ fi if [ -n "$(nvidia-smi --query-gpu=uuid --format=csv | sed -n 2p)" ]; then export VGL_DISPLAY="${VGL_DISPLAY:-egl}" export VGL_REFRESHRATE="$REFRESH" - /usr/bin/vglrun +wm /usr/bin/startplasma-x11 & + /usr/bin/vglrun +wm /usr/bin/dbus-launch /usr/bin/startplasma-x11 & else - /usr/bin/startplasma-x11 & + /usr/bin/dbus-launch /usr/bin/startplasma-x11 & fi # Start Fcitx input method framework diff --git a/selkies-gstreamer-entrypoint.sh b/selkies-gstreamer-entrypoint.sh index 3177a5a..7d5e772 100755 --- a/selkies-gstreamer-entrypoint.sh +++ b/selkies-gstreamer-entrypoint.sh @@ -6,8 +6,6 @@ # Source environment for GStreamer source /opt/gstreamer/gst-env -# Add CUDA library path -export LD_LIBRARY_PATH="/usr/local/cuda/lib64:${LD_LIBRARY_PATH}" # Set default display export DISPLAY="${DISPLAY:-:0}" @@ -39,8 +37,8 @@ sudo sed -i \ -e "s|PWA_CACHE|${PWA_APP_SHORT_NAME}-webrtc-pwa|g" \ /opt/gst-web/sw.js -# Clear the cache registry to force the CUDA elements to refresh -rm -f "${HOME}/.cache/gstreamer-1.0/registry.x86_64.bin" +# Clear the cache registry +rm -rf "${HOME}/.cache/gstreamer-1.0" # Start the selkies-gstreamer WebRTC HTML5 remote desktop application selkies-gstreamer \