diff --git a/ci-scripts/template-vars.yaml b/ci-scripts/template-vars.yaml
index f3ef4fb..1049868 100644
--- a/ci-scripts/template-vars.yaml
+++ b/ci-scripts/template-vars.yaml
@@ -290,6 +290,33 @@ multiImages:
- src/ubuntu/install/ansible/**
- src/ubuntu/install/chrome/**
- src/ubuntu/install/slack/**
+ - name: ubuntu-noble-desktop
+ singleapp: false
+ base: core-ubuntu-noble
+ dockerfile: dockerfile-kasm-ubuntu-noble-desktop
+ changeFiles:
+ - dockerfile-kasm-ubuntu-noble-desktop
+ - src/ubuntu/install/zoom/**
+ - src/ubuntu/install/vs_code/**
+ - src/ubuntu/install/tools/**
+ - src/ubuntu/install/thunderbird/**
+ - src/ubuntu/install/terraform/**
+ - src/ubuntu/install/telegram/**
+ - src/ubuntu/install/sublime_text/**
+ - src/ubuntu/install/signal/**
+ - src/ubuntu/install/remmina/**
+ - src/ubuntu/install/only_office/**
+ - src/ubuntu/install/obs/**
+ - src/ubuntu/install/nextcloud/**
+ - src/ubuntu/install/misc/**
+ - src/ubuntu/install/gimp/**
+ - src/ubuntu/install/gamepad_utils/**
+ - src/ubuntu/install/firefox/**
+ - src/ubuntu/install/cleanup/**
+ - src/ubuntu/install/chromium/**
+ - src/ubuntu/install/ansible/**
+ - src/ubuntu/install/chrome/**
+ - src/ubuntu/install/slack/**
- name: vlc
singleapp: true
base: core-ubuntu-focal
@@ -455,6 +482,19 @@ multiImages:
- src/ubuntu/install/cleanup/**
- src/ubuntu/install/chromium/**
- src/ubuntu/install/slack/**
+ - name: fedora-40-desktop
+ singleapp: false
+ base: core-fedora-40
+ dockerfile: dockerfile-kasm-fedora-40-desktop
+ changeFiles:
+ - dockerfile-kasm-fedora-40-desktop
+ - src/oracle/install/**
+ - src/ubuntu/install/thunderbird/**
+ - src/ubuntu/install/remmina/**
+ - src/ubuntu/install/firefox/**
+ - src/ubuntu/install/cleanup/**
+ - src/ubuntu/install/chromium/**
+ - src/ubuntu/install/slack/**
- name: kali-rolling-desktop
singleapp: false
base: core-kali-rolling
diff --git a/dockerfile-kasm-fedora-40-desktop b/dockerfile-kasm-fedora-40-desktop
new file mode 100644
index 0000000..bcbbcaa
--- /dev/null
+++ b/dockerfile-kasm-fedora-40-desktop
@@ -0,0 +1,53 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-fedora-40"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+
+USER root
+
+ENV DISTRO=fedora40
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+WORKDIR $HOME
+
+### Envrionment config
+ENV SKIP_CLEAN=true \
+ KASM_RX_HOME=$STARTUPDIR/kasmrx \
+ DONT_PROMPT_WSL_INSTALL="No_Prompt_please" \
+ INST_DIR=$STARTUPDIR/install \
+ INST_SCRIPTS="/oracle/install/tools/install_tools_deluxe.sh \
+ /oracle/install/misc/install_tools.sh \
+ /ubuntu/install/chromium/install_chromium.sh \
+ /ubuntu/install/firefox/install_firefox.sh \
+ /oracle/install/sublime_text/install_sublime_text.sh \
+ /oracle/install/vs_code/install_vs_code.sh \
+ /ubuntu/install/remmina/install_remmina.sh \
+ /oracle/install/only_office/install_only_office.sh \
+ /oracle/install/gimp/install_gimp.sh \
+ /oracle/install/zoom/install_zoom.sh \
+ /oracle/install/ansible/install_ansible.sh \
+ /oracle/install/telegram/install_telegram.sh \
+ /ubuntu/install/thunderbird/install_thunderbird.sh \
+ /ubuntu/install/slack/install_slack.sh \
+ /ubuntu/install/cleanup/cleanup.sh"
+
+# Copy install scripts
+COPY ./src/ $INST_DIR
+
+# Run installations
+RUN \
+ for SCRIPT in $INST_SCRIPTS; do \
+ bash ${INST_DIR}${SCRIPT} || exit 1; \
+ done && \
+ $STARTUPDIR/set_user_permission.sh $HOME && \
+ rm -f /etc/X11/xinit/Xclients && \
+ chown 1000:0 $HOME && \
+ mkdir -p /home/kasm-user && \
+ chown -R 1000:0 /home/kasm-user && \
+ rm -Rf ${INST_DIR}
+
+# Userspace Runtime
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+USER 1000
+
+CMD ["--tail-log"]
diff --git a/dockerfile-kasm-ubuntu-noble-desktop b/dockerfile-kasm-ubuntu-noble-desktop
new file mode 100644
index 0000000..a36e192
--- /dev/null
+++ b/dockerfile-kasm-ubuntu-noble-desktop
@@ -0,0 +1,57 @@
+ARG BASE_TAG="develop"
+ARG BASE_IMAGE="core-ubuntu-noble"
+FROM kasmweb/$BASE_IMAGE:$BASE_TAG
+
+USER root
+
+ENV HOME /home/kasm-default-profile
+ENV STARTUPDIR /dockerstartup
+WORKDIR $HOME
+
+### Envrionment config
+ENV DEBIAN_FRONTEND=noninteractive \
+ SKIP_CLEAN=true \
+ KASM_RX_HOME=$STARTUPDIR/kasmrx \
+ DONT_PROMPT_WSL_INSTALL="No_Prompt_please" \
+ INST_DIR=$STARTUPDIR/install \
+ INST_SCRIPTS="/ubuntu/install/tools/install_tools_deluxe.sh \
+ /ubuntu/install/misc/install_tools.sh \
+ /ubuntu/install/chrome/install_chrome.sh \
+ /ubuntu/install/chromium/install_chromium.sh \
+ /ubuntu/install/firefox/install_firefox.sh \
+ /ubuntu/install/sublime_text/install_sublime_text.sh \
+ /ubuntu/install/vs_code/install_vs_code.sh \
+ /ubuntu/install/nextcloud/install_nextcloud.sh \
+ /ubuntu/install/remmina/install_remmina.sh \
+ /ubuntu/install/only_office/install_only_office.sh \
+ /ubuntu/install/signal/install_signal.sh \
+ /ubuntu/install/gimp/install_gimp.sh \
+ /ubuntu/install/zoom/install_zoom.sh \
+ /ubuntu/install/ansible/install_ansible.sh \
+ /ubuntu/install/telegram/install_telegram.sh \
+ /ubuntu/install/thunderbird/install_thunderbird.sh \
+ /ubuntu/install/slack/install_slack.sh \
+ /ubuntu/install/gamepad_utils/install_gamepad_utils.sh \
+ /ubuntu/install/cleanup/cleanup.sh"
+
+# Copy install scripts
+COPY ./src/ $INST_DIR
+
+# Run installations
+RUN \
+ for SCRIPT in $INST_SCRIPTS; do \
+ bash ${INST_DIR}${SCRIPT} || exit 1; \
+ done && \
+ $STARTUPDIR/set_user_permission.sh $HOME && \
+ rm -f /etc/X11/xinit/Xclients && \
+ chown 1000:0 $HOME && \
+ mkdir -p /home/kasm-user && \
+ chown -R 1000:0 /home/kasm-user && \
+ rm -Rf ${INST_DIR}
+
+# Userspace Runtime
+ENV HOME /home/kasm-user
+WORKDIR $HOME
+USER 1000
+
+CMD ["--tail-log"]
diff --git a/docs/fedora-40-desktop/README.md b/docs/fedora-40-desktop/README.md
new file mode 100644
index 0000000..2ea974b
--- /dev/null
+++ b/docs/fedora-40-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Fedora 40 Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/fedora-37-desktop.png "Image Screenshot"
diff --git a/docs/fedora-40-desktop/demo.txt b/docs/fedora-40-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/fedora-40-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/fedora-40-desktop/description.txt b/docs/fedora-40-desktop/description.txt
new file mode 100644
index 0000000..b88a8b7
--- /dev/null
+++ b/docs/fedora-40-desktop/description.txt
@@ -0,0 +1 @@
+Fedora 40 desktop for Kasm Workspaces
diff --git a/docs/ubuntu-noble-desktop/README.md b/docs/ubuntu-noble-desktop/README.md
new file mode 100644
index 0000000..c01fb1c
--- /dev/null
+++ b/docs/ubuntu-noble-desktop/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Ubuntu Noble Desktop with various productivity and development apps installed.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://5856039.fs1.hubspotusercontent-na1.net/hubfs/5856039/dockerhub/image-screenshots/ubuntu_jammy_desktop.png "Image Screenshot"
diff --git a/docs/ubuntu-noble-desktop/demo.txt b/docs/ubuntu-noble-desktop/demo.txt
new file mode 100644
index 0000000..0b606c7
--- /dev/null
+++ b/docs/ubuntu-noble-desktop/demo.txt
@@ -0,0 +1,9 @@
+# Live Demo
+
+
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/ubuntu-noble-desktop/description.txt b/docs/ubuntu-noble-desktop/description.txt
new file mode 100644
index 0000000..91d23d4
--- /dev/null
+++ b/docs/ubuntu-noble-desktop/description.txt
@@ -0,0 +1 @@
+Ubuntu productivity desktop for Kasm Workspaces
\ No newline at end of file
diff --git a/src/oracle/install/ansible/install_ansible.sh b/src/oracle/install/ansible/install_ansible.sh
index d07cd32..e76efcf 100644
--- a/src/oracle/install/ansible/install_ansible.sh
+++ b/src/oracle/install/ansible/install_ansible.sh
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -ex
-if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39) ]]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39|fedora40) ]]; then
dnf install -y ansible
if [ -z ${SKIP_CLEAN+x} ]; then
dnf clean all
diff --git a/src/oracle/install/gimp/install_gimp.sh b/src/oracle/install/gimp/install_gimp.sh
index 83b370e..c72b185 100644
--- a/src/oracle/install/gimp/install_gimp.sh
+++ b/src/oracle/install/gimp/install_gimp.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
set -ex
-if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39) ]]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39|fedora40) ]]; then
dnf install -y gimp
if [ -z ${SKIP_CLEAN+x} ]; then
dnf clean all
diff --git a/src/oracle/install/libre_office/install_libre_office.sh b/src/oracle/install/libre_office/install_libre_office.sh
index bf40005..5f9ce68 100644
--- a/src/oracle/install/libre_office/install_libre_office.sh
+++ b/src/oracle/install/libre_office/install_libre_office.sh
@@ -7,7 +7,7 @@ if [ "$ARCH" == "amd64" ] ; then
exit 0
fi
-if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39) ]]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39|fedora40) ]]; then
dnf install -y \
libreoffice-core \
libreoffice-writer \
diff --git a/src/oracle/install/only_office/install_only_office.sh b/src/oracle/install/only_office/install_only_office.sh
index 67bdfe8..26cac31 100644
--- a/src/oracle/install/only_office/install_only_office.sh
+++ b/src/oracle/install/only_office/install_only_office.sh
@@ -8,7 +8,7 @@ if [ "$ARCH" == "arm64" ] ; then
fi
curl -L -o only_office.rpm "https://download.onlyoffice.com/install/desktop/editors/linux/onlyoffice-desktopeditors.$(arch).rpm"
-if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39) ]]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39|fedora40) ]]; then
dnf localinstall -y only_office.rpm
if [ -z ${SKIP_CLEAN+x} ]; then
dnf clean all
diff --git a/src/oracle/install/slack/install_slack.sh b/src/oracle/install/slack/install_slack.sh
index 589efe7..28e9b7c 100644
--- a/src/oracle/install/slack/install_slack.sh
+++ b/src/oracle/install/slack/install_slack.sh
@@ -21,7 +21,7 @@ version=4.12.2
# This path may not be accurate once arm64 support arrives. Specifically I don't know if it will still be under x64
wget -q https://downloads.slack-edge.com/releases/linux/${version}/prod/x64/slack-${version}-0.1.fc21.x86_64.rpm -O slack.rpm
-if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39) ]]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39|fedora40) ]]; then
dnf localinstall -y slack.rpm
if [ -z ${SKIP_CLEAN+x} ]; then
dnf clean all
diff --git a/src/oracle/install/sublime_text/install_sublime_text.sh b/src/oracle/install/sublime_text/install_sublime_text.sh
index e5d41f8..f09887b 100644
--- a/src/oracle/install/sublime_text/install_sublime_text.sh
+++ b/src/oracle/install/sublime_text/install_sublime_text.sh
@@ -8,7 +8,7 @@ fi
rpm -v --import https://download.sublimetext.com/sublimehq-rpm-pub.gpg
-if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39) ]]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39|fedora40) ]]; then
dnf config-manager --add-repo https://download.sublimetext.com/rpm/stable/$(arch)/sublime-text.repo
dnf install -y sublime-text
if [ -z ${SKIP_CLEAN+x} ]; then
diff --git a/src/oracle/install/terraform/install_terraform.sh b/src/oracle/install/terraform/install_terraform.sh
index 3d16e87..aecc842 100644
--- a/src/oracle/install/terraform/install_terraform.sh
+++ b/src/oracle/install/terraform/install_terraform.sh
@@ -14,7 +14,7 @@ if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almali
if [ -z ${SKIP_CLEAN+x} ]; then
dnf clean all
fi
-elif [[ "${DISTRO}" == @(fedora37|fedora38|fedora39) ]]; then
+elif [[ "${DISTRO}" == @(fedora37|fedora38|fedora39|fedora40) ]]; then
dnf config-manager --add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo
dnf install -y terraform
if [ -z ${SKIP_CLEAN+x} ]; then
diff --git a/src/oracle/install/vs_code/install_vs_code.sh b/src/oracle/install/vs_code/install_vs_code.sh
index f5d4058..def2b44 100644
--- a/src/oracle/install/vs_code/install_vs_code.sh
+++ b/src/oracle/install/vs_code/install_vs_code.sh
@@ -3,7 +3,7 @@ set -ex
ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/x64/g')
wget -q https://update.code.visualstudio.com/latest/linux-rpm-${ARCH}/stable -O vs_code.rpm
-if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39) ]]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39|fedora40) ]]; then
wget -q https://update.code.visualstudio.com/latest/linux-rpm-${ARCH}/stable -O vs_code.rpm
dnf localinstall -y vs_code.rpm
else
@@ -20,7 +20,7 @@ chown 1000:1000 $HOME/Desktop/code.desktop
rm vs_code.rpm
# Conveniences for python development
-if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39) ]]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39|fedora40) ]]; then
dnf install -y python3-setuptools python3-virtualenv
if [ -z ${SKIP_CLEAN+x} ]; then
dnf clean all
diff --git a/src/oracle/install/zoom/install_zoom.sh b/src/oracle/install/zoom/install_zoom.sh
index 8d3ccd1..4bcc98b 100644
--- a/src/oracle/install/zoom/install_zoom.sh
+++ b/src/oracle/install/zoom/install_zoom.sh
@@ -8,7 +8,7 @@ fi
wget -q https://zoom.us/client/latest/zoom_$(arch).rpm
-if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39) ]]; then
+if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39|fedora40) ]]; then
dnf localinstall -y zoom_$(arch).rpm
if [ -z ${SKIP_CLEAN+x} ]; then
dnf clean all
diff --git a/src/ubuntu/install/ansible/install_ansible.sh b/src/ubuntu/install/ansible/install_ansible.sh
index e5eba5c..6fb9906 100644
--- a/src/ubuntu/install/ansible/install_ansible.sh
+++ b/src/ubuntu/install/ansible/install_ansible.sh
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -ex
-if grep -q "ID=debian" /etc/os-release; then
+if grep -q "ID=debian" /etc/os-release || grep -q "VERSION_CODENAME=noble" /etc/os-release; then
apt-get update
apt-get install -y ansible
else
diff --git a/src/ubuntu/install/chromium/install_chromium.sh b/src/ubuntu/install/chromium/install_chromium.sh
index 15fc092..30b786d 100644
--- a/src/ubuntu/install/chromium/install_chromium.sh
+++ b/src/ubuntu/install/chromium/install_chromium.sh
@@ -9,8 +9,8 @@ if [[ "${DISTRO}" == @(debian|opensuse|ubuntu) ]] && [ ${ARCH} = 'amd64' ] && [
exit 0
fi
-if [[ "${DISTRO}" == @(centos|oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39) ]]; then
- if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39) ]]; then
+if [[ "${DISTRO}" == @(centos|oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39|fedora40) ]]; then
+ if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38|fedora39|fedora40) ]]; then
dnf install -y chromium
if [ -z ${SKIP_CLEAN+x} ]; then
dnf clean all
@@ -124,7 +124,7 @@ if [ "${DISTRO}" != "opensuse" ] && ! grep -q "ID=debian" /etc/os-release && ! g
cp /usr/bin/chromium-browser /usr/bin/chromium
fi
-if [[ "${DISTRO}" == @(centos|oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|opensuse|fedora37|fedora38|fedora39) ]]; then
+if [[ "${DISTRO}" == @(centos|oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|opensuse|fedora37|fedora38|fedora39|fedora40) ]]; then
cat >> $HOME/.config/mimeapps.list <"$preferences_file" <>$HOME/.mozilla/firefox/profiles.ini <>$HOME/.mozilla/firefox/profiles.ini <