From 96c2f2727ec43192637dbe843b91b20ff90528ff Mon Sep 17 00:00:00 2001 From: Dmitry Maksyoma Date: Sat, 15 Mar 2025 18:34:58 +1300 Subject: [PATCH 01/10] KASM-6008 Alpine: add Zink support --- dockerfile-kasm-core-alpine | 2 ++ src/common/startup_scripts/vnc_startup.sh | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/dockerfile-kasm-core-alpine b/dockerfile-kasm-core-alpine index 2192161..e900589 100644 --- a/dockerfile-kasm-core-alpine +++ b/dockerfile-kasm-core-alpine @@ -227,6 +227,8 @@ ENV AUDIO_PORT=4901 \ VNC_VIEW_ONLY_PW=vncviewonlypassword \ TZ=$TZ +RUN apk update && apk add mesa-vulkan-intel vulkan-tools + ### Ports and user EXPOSE $VNC_PORT \ $NO_VNC_PORT \ diff --git a/src/common/startup_scripts/vnc_startup.sh b/src/common/startup_scripts/vnc_startup.sh index 720795f..ca121b4 100755 --- a/src/common/startup_scripts/vnc_startup.sh +++ b/src/common/startup_scripts/vnc_startup.sh @@ -198,6 +198,9 @@ function start_window_manager (){ if [ -f /opt/VirtualGL/bin/vglrun ] && [ ! -z "${KASM_EGL_CARD}" ] && [ ! -z "${KASM_RENDERD}" ] && [ -O "${KASM_RENDERD}" ] && [ -O "${KASM_EGL_CARD}" ] ; then echo "Starting XFCE with VirtualGL using EGL device ${KASM_EGL_CARD}" DISPLAY=:1 /opt/VirtualGL/bin/vglrun -d "${KASM_EGL_CARD}" /usr/bin/startxfce4 --replace & + elif [ -n "$KASM_ENABLE_ZINK" ]; then + echo "Starting XFCE with Zink" + LIBGL_KOPPER_DRI2=1 MESA_LOADER_DRIVER_OVERRIDE=zink GALLIUM_DRIVER=zink DISPLAY=:1 /usr/bin/startxfce4 --replace & else echo "Starting XFCE" DISPLAY=:1 /usr/bin/startxfce4 --replace & @@ -275,14 +278,14 @@ function start_pcm_audio (){ HOME=/var/run/pulse pulseaudio --start fi /opt/audio/start kasmaudio 4901 ${HOME}/.vnc/self.pem ${HOME}/.vnc/self.pem "kasm_user:$VNC_PW" & - + KASM_PROCS['kasm_audio_server']=$! - + if [[ $DEBUG == true ]]; then echo -e "\n------------------ Started Audio Server ----------------------------" echo "Kasm Audio Server PID: ${KASM_PROCS['kasm_audio_server']}"; fi - fi + fi } function start_audio_in (){ From f0adf598600c91705839e8e2ed225e3e40e95918 Mon Sep 17 00:00:00 2001 From: Dmitry Maksyoma Date: Sat, 15 Mar 2025 18:38:02 +1300 Subject: [PATCH 02/10] KASM-6008 Draft scripts to run DRI3, VGL, Zink --- intel-gpu-dri3 | 1 + intel-gpu-virtualgl | 1 + intel-gpu-zink | 1 + 3 files changed, 3 insertions(+) create mode 100755 intel-gpu-dri3 create mode 100755 intel-gpu-virtualgl create mode 100755 intel-gpu-zink diff --git a/intel-gpu-dri3 b/intel-gpu-dri3 new file mode 100755 index 0000000..b1dacaa --- /dev/null +++ b/intel-gpu-dri3 @@ -0,0 +1 @@ +docker run --rm -it -e VNC_PW=bushel9 -e HW3D=true -e DRINODE=/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 kasmweb/ubuntu-jammy-desktop:1.16.1 bash diff --git a/intel-gpu-virtualgl b/intel-gpu-virtualgl new file mode 100755 index 0000000..e913ce5 --- /dev/null +++ b/intel-gpu-virtualgl @@ -0,0 +1 @@ +docker run --rm -it -e VNC_PW=bushel9 -e KASM_EGL_CARD=/dev/dri/card0 -e KASM_RENDERD=/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 kasmweb/ubuntu-jammy-desktop:1.16.1 bash diff --git a/intel-gpu-zink b/intel-gpu-zink new file mode 100755 index 0000000..c560f31 --- /dev/null +++ b/intel-gpu-zink @@ -0,0 +1 @@ +docker run --rm -it -e VNC_PW=bushel9 -e KASM_ENABLE_ZINK=1 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 kasmweb/core-alpine-321:local bash From ad8e57d599014315be873d92f01c694acdc7cfba Mon Sep 17 00:00:00 2001 From: Dmitry Maksyoma Date: Sun, 16 Mar 2025 14:27:55 +1300 Subject: [PATCH 03/10] KASM-6008 Add usage to Intel scripts --- intel-gpu-dri3 | 12 +++++++++++- intel-gpu-virtualgl | 12 +++++++++++- intel-gpu-zink | 12 +++++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/intel-gpu-dri3 b/intel-gpu-dri3 index b1dacaa..259f6ef 100755 --- a/intel-gpu-dri3 +++ b/intel-gpu-dri3 @@ -1 +1,11 @@ -docker run --rm -it -e VNC_PW=bushel9 -e HW3D=true -e DRINODE=/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 kasmweb/ubuntu-jammy-desktop:1.16.1 bash +#!/bin/bash + +set -e + +image="$1" +if [[ -z "$image" ]]; then + echo >&2 "Usage: $(basename "$0") " + exit 1 +fi + +docker run --rm -it -e VNC_PW=bushel9 -e HW3D=true -e DRINODE=/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 "$image" bash diff --git a/intel-gpu-virtualgl b/intel-gpu-virtualgl index e913ce5..c754257 100755 --- a/intel-gpu-virtualgl +++ b/intel-gpu-virtualgl @@ -1 +1,11 @@ -docker run --rm -it -e VNC_PW=bushel9 -e KASM_EGL_CARD=/dev/dri/card0 -e KASM_RENDERD=/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 kasmweb/ubuntu-jammy-desktop:1.16.1 bash +#!/bin/bash + +set -e + +image="$1" +if [[ -z "$image" ]]; then + echo >&2 "Usage: $(basename "$0") " + exit 1 +fi + +docker run --rm -it -e VNC_PW=bushel9 -e KASM_EGL_CARD=/dev/dri/card0 -e KASM_RENDERD=/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 "$image" bash diff --git a/intel-gpu-zink b/intel-gpu-zink index c560f31..f0a6929 100755 --- a/intel-gpu-zink +++ b/intel-gpu-zink @@ -1 +1,11 @@ -docker run --rm -it -e VNC_PW=bushel9 -e KASM_ENABLE_ZINK=1 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 kasmweb/core-alpine-321:local bash +#!/bin/bash + +set -e + +image="$1" +if [[ -z "$image" ]]; then + echo >&2 "Usage: $(basename "$0") " + exit 1 +fi + +docker run --rm -it -e VNC_PW=bushel9 -e KASM_ENABLE_ZINK=1 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 "$image" bash From 53f9acfb7158720b3086e993910ab593215a72f4 Mon Sep 17 00:00:00 2001 From: Dmitry Maksyoma Date: Sun, 16 Mar 2025 14:36:20 +1300 Subject: [PATCH 04/10] KASM-6008 Fix CI --- intel-gpu-dri3 => bin/intel-gpu-dri3 | 0 intel-gpu-virtualgl => bin/intel-gpu-virtualgl | 0 intel-gpu-zink => bin/intel-gpu-zink | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename intel-gpu-dri3 => bin/intel-gpu-dri3 (100%) rename intel-gpu-virtualgl => bin/intel-gpu-virtualgl (100%) rename intel-gpu-zink => bin/intel-gpu-zink (100%) diff --git a/intel-gpu-dri3 b/bin/intel-gpu-dri3 similarity index 100% rename from intel-gpu-dri3 rename to bin/intel-gpu-dri3 diff --git a/intel-gpu-virtualgl b/bin/intel-gpu-virtualgl similarity index 100% rename from intel-gpu-virtualgl rename to bin/intel-gpu-virtualgl diff --git a/intel-gpu-zink b/bin/intel-gpu-zink similarity index 100% rename from intel-gpu-zink rename to bin/intel-gpu-zink From ad14d7839d1e7179c3099e51c365ea48f9279b2f Mon Sep 17 00:00:00 2001 From: Dmitry Maksyoma Date: Sun, 16 Mar 2025 16:45:29 +1300 Subject: [PATCH 05/10] KASM-6008 Zink requires DRI3 --- bin/intel-gpu-zink | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/intel-gpu-zink b/bin/intel-gpu-zink index f0a6929..3343306 100755 --- a/bin/intel-gpu-zink +++ b/bin/intel-gpu-zink @@ -8,4 +8,4 @@ if [[ -z "$image" ]]; then exit 1 fi -docker run --rm -it -e VNC_PW=bushel9 -e KASM_ENABLE_ZINK=1 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 "$image" bash +docker run --rm -it -e VNC_PW=bushel9 -e HW3D=true -e DRINODE=/dev/dri/renderD128 -e KASM_ENABLE_ZINK=1 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 "$image" bash From 716729e652068aec5debfffcd4b696e7f31e358a Mon Sep 17 00:00:00 2001 From: Dmitry Maksyoma Date: Mon, 17 Mar 2025 14:43:49 +1300 Subject: [PATCH 06/10] KASM-6008 Install glxinfo on Alpine, Fedora --- dockerfile-kasm-core-alpine | 2 +- dockerfile-kasm-core-fedora | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/dockerfile-kasm-core-alpine b/dockerfile-kasm-core-alpine index e900589..dc6cead 100644 --- a/dockerfile-kasm-core-alpine +++ b/dockerfile-kasm-core-alpine @@ -227,7 +227,7 @@ ENV AUDIO_PORT=4901 \ VNC_VIEW_ONLY_PW=vncviewonlypassword \ TZ=$TZ -RUN apk update && apk add mesa-vulkan-intel vulkan-tools +RUN apk update && apk add mesa-vulkan-intel vulkan-tools mesa-utils ### Ports and user EXPOSE $VNC_PORT \ diff --git a/dockerfile-kasm-core-fedora b/dockerfile-kasm-core-fedora index f340aec..db2c829 100644 --- a/dockerfile-kasm-core-fedora +++ b/dockerfile-kasm-core-fedora @@ -234,6 +234,8 @@ ENV AUDIO_PORT=4901 \ VNC_VIEW_ONLY_PW=vncviewonlypassword \ TZ=$TZ +RUN dnf install -y glx-utils + ### Ports and user EXPOSE $VNC_PORT \ $NO_VNC_PORT \ From f3f95d0a6e0eb3dcdb59fc164313017243b3c2aa Mon Sep 17 00:00:00 2001 From: Dmitry Maksyoma Date: Wed, 19 Mar 2025 15:16:06 +1300 Subject: [PATCH 07/10] KASM-6008 Ensure Zink starts, when KASM_EGL_CARD is defined NVidia needs KASM_EGL_CARD to work with Zink. --- src/common/startup_scripts/vnc_startup.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/common/startup_scripts/vnc_startup.sh b/src/common/startup_scripts/vnc_startup.sh index ca121b4..ddd0df6 100755 --- a/src/common/startup_scripts/vnc_startup.sh +++ b/src/common/startup_scripts/vnc_startup.sh @@ -195,12 +195,12 @@ function start_kasmvnc (){ function start_window_manager (){ echo -e "\n------------------ Xfce4 window manager startup------------------" if [ "${START_XFCE4}" == "1" ] || [ "${START_DE}" == "xfce4-session" ]; then - if [ -f /opt/VirtualGL/bin/vglrun ] && [ ! -z "${KASM_EGL_CARD}" ] && [ ! -z "${KASM_RENDERD}" ] && [ -O "${KASM_RENDERD}" ] && [ -O "${KASM_EGL_CARD}" ] ; then - echo "Starting XFCE with VirtualGL using EGL device ${KASM_EGL_CARD}" - DISPLAY=:1 /opt/VirtualGL/bin/vglrun -d "${KASM_EGL_CARD}" /usr/bin/startxfce4 --replace & - elif [ -n "$KASM_ENABLE_ZINK" ]; then + if [ -n "$KASM_ENABLE_ZINK" ] && [ -n "$KASM_DRI_CARD" ] && [ -n "$KASM_DRI_RENDERD" ]; then echo "Starting XFCE with Zink" LIBGL_KOPPER_DRI2=1 MESA_LOADER_DRIVER_OVERRIDE=zink GALLIUM_DRIVER=zink DISPLAY=:1 /usr/bin/startxfce4 --replace & + elif [ -f /opt/VirtualGL/bin/vglrun ] && [ ! -z "${KASM_EGL_CARD}" ] && [ ! -z "${KASM_RENDERD}" ] && [ -O "${KASM_RENDERD}" ] && [ -O "${KASM_EGL_CARD}" ] ; then + echo "Starting XFCE with VirtualGL using EGL device ${KASM_EGL_CARD}" + DISPLAY=:1 /opt/VirtualGL/bin/vglrun -d "${KASM_EGL_CARD}" /usr/bin/startxfce4 --replace & else echo "Starting XFCE" DISPLAY=:1 /usr/bin/startxfce4 --replace & From ea61ceeb4057300262739a474a4c5592049d0df5 Mon Sep 17 00:00:00 2001 From: Dmitry Maksyoma Date: Wed, 19 Mar 2025 15:17:32 +1300 Subject: [PATCH 08/10] KASM-6008 Check KASM_DRI_CARD, KASM_DRI_RENDERD defined for Zink --- bin/intel-gpu-zink | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/intel-gpu-zink b/bin/intel-gpu-zink index 3343306..4ed6e0e 100755 --- a/bin/intel-gpu-zink +++ b/bin/intel-gpu-zink @@ -8,4 +8,4 @@ if [[ -z "$image" ]]; then exit 1 fi -docker run --rm -it -e VNC_PW=bushel9 -e HW3D=true -e DRINODE=/dev/dri/renderD128 -e KASM_ENABLE_ZINK=1 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 "$image" bash +docker run --rm -it -e VNC_PW=bushel9 -e HW3D=true -e DRINODE=/dev/dri/renderD128 -e KASM_ENABLE_ZINK=1 -e KASM_DRI_CARD=/dev/dri/card0 -e KASM_DRI_RENDERD=/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0:rwm --device=/dev/dri/renderD128:/dev/dri/renderD128:rwm --group-add=106 -p 443:6901 "$image" bash From 3f0948c380d582ed9986ae6cc65386cda074b2e2 Mon Sep 17 00:00:00 2001 From: Dmitry Maksyoma Date: Wed, 19 Mar 2025 16:19:13 +1300 Subject: [PATCH 09/10] KASM-6008 Install mesa-vulkan-intel on Alpine for Zink --- dockerfile-kasm-core-alpine | 2 -- dockerfile-kasm-core-fedora | 2 -- src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh | 3 ++- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/dockerfile-kasm-core-alpine b/dockerfile-kasm-core-alpine index dc6cead..2192161 100644 --- a/dockerfile-kasm-core-alpine +++ b/dockerfile-kasm-core-alpine @@ -227,8 +227,6 @@ ENV AUDIO_PORT=4901 \ VNC_VIEW_ONLY_PW=vncviewonlypassword \ TZ=$TZ -RUN apk update && apk add mesa-vulkan-intel vulkan-tools mesa-utils - ### Ports and user EXPOSE $VNC_PORT \ $NO_VNC_PORT \ diff --git a/dockerfile-kasm-core-fedora b/dockerfile-kasm-core-fedora index db2c829..f340aec 100644 --- a/dockerfile-kasm-core-fedora +++ b/dockerfile-kasm-core-fedora @@ -234,8 +234,6 @@ ENV AUDIO_PORT=4901 \ VNC_VIEW_ONLY_PW=vncviewonlypassword \ TZ=$TZ -RUN dnf install -y glx-utils - ### Ports and user EXPOSE $VNC_PORT \ $NO_VNC_PORT \ diff --git a/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh b/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh index 6d4a354..6934d83 100644 --- a/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh +++ b/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh @@ -15,7 +15,7 @@ prepare_rpm_repo_dependencies() { echo "Install KasmVNC server" cd /tmp -BUILD_ARCH=$(uname -p) +BUILD_ARCH=$(uname -m) UBUNTU_CODENAME="" COMMIT_ID="5ea11df3c02343f44533f7a44be3b97b9b9471fb" BRANCH="master" # just use 'release' for a release branch @@ -209,6 +209,7 @@ elif [[ "${DISTRO}" == "alpine" ]] ; then xterm if [ "${BUILD_ARCH}" == "x86_64" ]; then apk add --no-cache xf86-video-intel + apk add --no-cache mesa-vulkan-intel fi curl -s "${BUILD_URL}" | tar xzvf - -C / ln -s /usr/local/share/kasmvnc /usr/share/kasmvnc From 0435c5732528deaf44838fe9f6a6fdb94595fd16 Mon Sep 17 00:00:00 2001 From: Dmitry Maksyoma Date: Sat, 22 Mar 2025 15:54:27 +1300 Subject: [PATCH 10/10] KASM-6008 Zink: check KASM_EGL_CARD is set --- src/common/startup_scripts/vnc_startup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/startup_scripts/vnc_startup.sh b/src/common/startup_scripts/vnc_startup.sh index ddd0df6..623246e 100755 --- a/src/common/startup_scripts/vnc_startup.sh +++ b/src/common/startup_scripts/vnc_startup.sh @@ -195,7 +195,7 @@ function start_kasmvnc (){ function start_window_manager (){ echo -e "\n------------------ Xfce4 window manager startup------------------" if [ "${START_XFCE4}" == "1" ] || [ "${START_DE}" == "xfce4-session" ]; then - if [ -n "$KASM_ENABLE_ZINK" ] && [ -n "$KASM_DRI_CARD" ] && [ -n "$KASM_DRI_RENDERD" ]; then + if [ -n "$KASM_ENABLE_ZINK" ] && [ -n "$KASM_EGL_CARD" ] && [ -n "$KASM_RENDERD" ]; then echo "Starting XFCE with Zink" LIBGL_KOPPER_DRI2=1 MESA_LOADER_DRIVER_OVERRIDE=zink GALLIUM_DRIVER=zink DISPLAY=:1 /usr/bin/startxfce4 --replace & elif [ -f /opt/VirtualGL/bin/vglrun ] && [ ! -z "${KASM_EGL_CARD}" ] && [ ! -z "${KASM_RENDERD}" ] && [ -O "${KASM_RENDERD}" ] && [ -O "${KASM_EGL_CARD}" ] ; then