@ -1,6 +1,7 @@
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					#!/usr/bin/env bash 
 
					 
					 
					 
					#!/usr/bin/env bash 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					#!/bin/bash 
 
					 
					 
					 
					# Exit on error, undefined variables, and pipe failures 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					set  -euo pipefail
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Function to check if vncserver is already installed 
 
					 
					 
					 
					# Function to check if vncserver is already installed 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					check_installed( )  { 
 
					 
					 
					 
					check_installed( )  { 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -14,143 +15,167 @@ check_installed() {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Function to download a file using wget, curl, or busybox as a fallback 
 
					 
					 
					 
					# Function to download a file using wget, curl, or busybox as a fallback 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					download_file( )  { 
 
					 
					 
					 
					download_file( )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  local  url = $1 
 
					 
					 
					 
					  local  url = " $1 " 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  local  output = $2 
 
					 
					 
					 
					  local  output = " $2 " 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  command  -v wget & > /dev/null;  then 
 
					 
					 
					 
					  local  download_tool
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    wget $url  -O $output 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  elif  command  -v curl & > /dev/null;  then 
 
					 
					 
					 
					  if  command  -v curl & > /dev/null;  then 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    curl -fsSL $url  -o $output 
 
					 
					 
					 
					    # shellcheck disable=SC2034 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    download_tool = ( curl -fsSL) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  elif  command  -v wget & > /dev/null;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # shellcheck disable=SC2034 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    download_tool = ( wget -q -O-) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  elif  command  -v busybox & > /dev/null;  then 
 
					 
					 
					 
					  elif  command  -v busybox & > /dev/null;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    busybox wget -O $output  $url 
 
					 
					 
					 
					    # shellcheck disable=SC2034 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    download_tool = ( busybox wget -O-) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  else 
 
					 
					 
					 
					  else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    echo  "Neither wget, curl, nor busybox is installed. Please install one of them to proceed." 
 
					 
					 
					 
					    echo  " ERROR: No download tool available (curl, wget, or busybox required) "
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    exit  1 
 
					 
					 
					 
					    exit  1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  fi 
 
					 
					 
					 
					  fi 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # shellcheck disable=SC2288 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  " $$ {download_tool[@]} "  " $url "  > " $output "  ||  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    echo  " ERROR: Failed to download  $url " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    exit  1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Function to install kasmvncserver for debian-based distros 
 
					 
					 
					 
					# Function to install kasmvncserver for debian-based distros 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					install_deb( )  { 
 
					 
					 
					 
					install_deb( )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  local  url = $1 
 
					 
					 
					 
					  local  url = $1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  download_file $url  /tmp/kasmvncserver.deb
 
					 
					 
					 
					  local  kasmdeb = "/tmp/kasmvncserver.deb" 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  sudo apt-get update
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  DEBIAN_FRONTEND = noninteractive sudo apt-get install --yes -qq --no-install-recommends --no-install-suggests /tmp/kasmvncserver.deb
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  sudo adduser $USER  ssl-cert
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  rm /tmp/kasmvncserver.deb
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Function to install kasmvncserver for Oracle 8 
 
					 
					 
					 
					  download_file " $url "  " $kasmdeb " 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					install_rpm_oracle8( )  { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  local  url = $1 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  download_file $url  /tmp/kasmvncserver.rpm
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  sudo dnf config-manager --set-enabled ol8_codeready_builder
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  sudo dnf install oracle-epel-release-el8 -y
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  sudo dnf localinstall /tmp/kasmvncserver.rpm -y
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  sudo usermod -aG kasmvnc-cert $USER 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  rm /tmp/kasmvncserver.rpm
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Function to install kasmvncserver for CentOS 7 
 
					 
					 
					 
					  CACHE_DIR = "/var/lib/apt/lists/partial" 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					install_rpm_centos7( )  { 
 
					 
					 
					 
					  # Check if the directory exists and was modified in the last 60 minutes 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  local  url = $1 
 
					 
					 
					 
					  if  [ [  ! -d " $CACHE_DIR "  ] ]  ||  ! find " $CACHE_DIR "  -mmin -60 -print -quit & > /dev/null;  then 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  download_file $url  /tmp/kasmvncserver.rpm
 
					 
					 
					 
					    echo  "Stale package cache, updating..." 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  sudo yum install epel-release -y
 
					 
					 
					 
					    # Update package cache with a 300-second timeout for dpkg lock 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  sudo yum install /tmp/kasmvncserver.rpm -y
 
					 
					 
					 
					    sudo apt-get -o DPkg::Lock::Timeout= 300  -qq update
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  sudo usermod -aG kasmvnc-cert $USER 
 
					 
					 
					 
					  fi 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  rm /tmp/kasmvncserver.rpm
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  DEBIAN_FRONTEND = noninteractive sudo apt-get -o DPkg::Lock::Timeout= 300  install --yes -qq --no-install-recommends --no-install-suggests " $kasmdeb " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  rm " $kasmdeb " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Function to install kasmvncserver for rpm-based distros 
 
					 
					 
					 
					# Function to install kasmvncserver for rpm-based distros 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					install_rpm( )  { 
 
					 
					 
					 
					install_rpm( )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  local  url = $1 
 
					 
					 
					 
					  local  url = $1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  download_file $url  /tmp/kasmvncserver.rpm
 
					 
					 
					 
					  local  kasmrpm = "/tmp/kasmvncserver.rpm" 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  sudo rpm -i /tmp/kasmvncserver.rpm
 
					 
					 
					 
					  local  package_manager
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  rm /tmp/kasmvncserver.rpm
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  if  command  -v dnf & > /dev/null;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # shellcheck disable=SC2034 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    package_manager = ( dnf localinstall -y) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  elif  command  -v zypper & > /dev/null;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # shellcheck disable=SC2034 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    package_manager = ( zypper install -y) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  elif  command  -v yum & > /dev/null;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # shellcheck disable=SC2034 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    package_manager = ( yum localinstall -y) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  elif  command  -v rpm & > /dev/null;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # Do we need to manually handle missing dependencies? 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # shellcheck disable=SC2034 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    package_manager = ( rpm -i) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    echo  "ERROR: No supported package manager available (dnf, zypper, yum, or rpm required)" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    exit  1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  fi 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  download_file " $url "  " $kasmrpm " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  # shellcheck disable=SC2288 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  sudo " $$ {package_manager[@]} "  " $kasmrpm "  ||  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    echo  " ERROR: Failed to install  $kasmrpm " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    exit  1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  rm " $kasmrpm " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Function to install kasmvncserver for Alpine Linux 
 
					 
					 
					 
					# Function to install kasmvncserver for Alpine Linux 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					install_alpine( )  { 
 
					 
					 
					 
					install_alpine( )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  local  url = $1 
 
					 
					 
					 
					  local  url = $1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  download_file $url  /tmp/kasmvncserver.tgz
 
					 
					 
					 
					  local  kasmtgz = "/tmp/kasmvncserver.tgz" 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  tar -xzf /tmp/kasmvncserver.tgz -C /usr/local/bin/
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  rm /tmp/kasmvncserver.tgz
 
					 
					 
					 
					  download_file " $url "  " $kasmtgz " 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  tar -xzf " $kasmtgz "  -C /usr/local/bin/
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  rm " $kasmtgz " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Detect system information 
 
					 
					 
					 
					# Detect system information 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					distro = $( grep "^ID="  /etc/os-release |  awk -F=  '{print $2}' ) 
 
					 
					 
					 
					if  [ [  ! -f /etc/os-release ] ] ;  then 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					version = $( grep "^VERSION_ID="  /etc/os-release |  awk -F=  '{print $2}'  |  tr -d '"' ) 
 
					 
					 
					 
					  echo  "ERROR: Cannot detect OS: /etc/os-release not found" 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					arch = $( uname -m) 
 
					 
					 
					 
					  exit  1 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					fi 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# shellcheck disable=SC1091 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					source  /etc/os-release
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					distro = " $ID " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					distro_version = " $VERSION_ID " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					codename = " $VERSION_CODENAME " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					arch = " $( uname -m) " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					if  [ [  " $ID "  = =  "ol"  ] ] ;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  distro = "oracle" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  distro_version = " $$ {distro_version%%.*} " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					elif  [ [  " $ID "  = =  "fedora"  ] ] ;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  distro_version = " $( grep -oP '\(\K[\w ]+'  /etc/fedora-release |  tr '[:upper:]'  '[:lower:]'  |  tr -d ' ' ) " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					fi 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					echo  " Detected Distribution:  $distro " 
 
					 
					 
					 
					echo  " Detected Distribution:  $distro " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					echo  " Detected Version:  $version " 
 
					 
					 
					 
					echo  " Detected Version:  $distro_version " 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					echo  " Detected Codename:  $codename " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					echo  " Detected Architecture:  $arch " 
 
					 
					 
					 
					echo  " Detected Architecture:  $arch " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Map arch to package arch 
 
					 
					 
					 
					# Map arch to package arch 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					if  [ [  " $arch "  = =  "x86_64"  ] ] ;  then 
 
					 
					 
					 
					case  " $arch "  in
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  [ [  " $distro "  = =  "ubuntu"  ||  " $distro "  = =  "debian"  ||  " $distro "  = =  "kali"  ] ] ;  then 
 
					 
					 
					 
					  x86_64) 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    arch = "amd64" 
 
					 
					 
					 
					    if  [ [  " $distro "  = ~ ^( ubuntu| debian| kali) $ ] ] ;  then 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  else 
 
					 
					 
					 
					      arch = "amd64" 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    arch = "x86_64" 
 
					 
					 
					 
					    fi 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  fi 
 
					 
					 
					 
					    ; ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					elif  [ [  " $arch "  = =  "aarch64"  ||  " $arch "  = =  "arm64"  ] ] ;  then 
 
					 
					 
					 
					  aarch64) 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  [ [  " $distro "  = =  "ubuntu"  ||  " $distro "  = =  "debian"  ||  " $distro "  = =  "kali"  ] ] ;  then 
 
					 
					 
					 
					    if  [ [  " $distro "  = ~ ^( ubuntu| debian| kali) $ ] ] ;  then 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    arch = "arm64" 
 
					 
					 
					 
					      arch = "arm64" 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  else 
 
					 
					 
					 
					    fi 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    arch = "aarch64" 
 
					 
					 
					 
					    ; ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  fi 
 
					 
					 
					 
					  arm64) 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					else 
 
					 
					 
					 
					    : # This is effectively a noop 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  echo  " Unsupported architecture:  $arch " 
 
					 
					 
					 
					    ; ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  exit  1 
 
					 
					 
					 
					  *) 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					fi 
 
					 
					 
					 
					    echo  " ERROR: Unsupported architecture:  $arch " 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    exit  1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    ; ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					esac 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Check if vncserver is installed, and install if not 
 
					 
					 
					 
					# Check if vncserver is installed, and install if not 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					if  ! check_installed;  then 
 
					 
					 
					 
					if  ! check_installed;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  echo  " Installing KASM version:  ${ VERSION } " 
 
					 
					 
					 
					  # Check for NOPASSWD sudo (required) 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  if  ! command  -v sudo & > /dev/null ||  ! sudo -n true  2> /dev/null;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    echo  "ERROR: sudo NOPASSWD access required!" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    exit  1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  fi 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  base_url = " https://github.com/kasmtech/KasmVNC/releases/download/v ${ KASM_VERSION } " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  echo  " Installing KASM version:  ${ KASM_VERSION } " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  case  $distro  in
 
					 
					 
					 
					  case  $distro  in
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ubuntu |  debian |  kali) 
 
					 
					 
					 
					    ubuntu |  debian |  kali) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      case  $version  in
 
					 
					 
					 
					      bin_name = " kasmvncserver_ $$ {codename}_ ${ KASM_VERSION } _ $$ {arch}.deb " 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        "20.04" ) 
 
					 
					 
					 
					      install_deb " $base_url / $bin_name " 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					          install_deb " https://github.com/kasmtech/KasmVNC/releases/download/v ${ VERSION } /kasmvncserver_focal_ ${ VERSION } _ $$ {arch}.deb " 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          ; ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        "22.04" ) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          install_deb " https://github.com/kasmtech/KasmVNC/releases/download/v ${ VERSION } /kasmvncserver_jammy_ ${ VERSION } _ $$ {arch}.deb " 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          ; ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        "24.04" ) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          install_deb " https://github.com/kasmtech/KasmVNC/releases/download/v ${ VERSION } /kasmvncserver_noble_ ${ VERSION } _ $$ {arch}.deb " 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          ; ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        *) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          echo  " Unsupported Ubuntu/Debian/Kali version:  $$ {version} " 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          exit  1 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          ; ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      esac 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					      ; ; 
 
					 
					 
					 
					      ; ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    oracle) 
 
					 
					 
					 
					    oracle |  fedora |  opensuse) 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  [ [  " $version "  = =  "8"  ] ] ;  then 
 
					 
					 
					 
					      bin_name = " kasmvncserver_ $$ {distro}_ $$ {distro_version}_ ${ KASM_VERSION } _ $$ {arch}.rpm " 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        install_rpm_oracle8 " https://github.com/kasmtech/KasmVNC/releases/download/v ${ VERSION } /kasmvncserver_oracle_8_ ${ VERSION } _ $$ {arch}.rpm " 
 
					 
					 
					 
					      install_rpm " $base_url / $bin_name " 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      else 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        echo  " Unsupported Oracle version:  $$ {version} " 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        exit  1 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      fi 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ; ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    centos) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  [ [  " $version "  = =  "7"  ] ] ;  then 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        install_rpm_centos7 " https://github.com/kasmtech/KasmVNC/releases/download/v ${ VERSION } /kasmvncserver_centos_core_ ${ VERSION } _ $$ {arch}.rpm " 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      else 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        install_rpm " https://github.com/kasmtech/KasmVNC/releases/download/v ${ VERSION } /kasmvncserver_centos_core_ ${ VERSION } _ $$ {arch}.rpm " 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      fi 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					      ; ; 
 
					 
					 
					 
					      ; ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    alpine) 
 
					 
					 
					 
					    alpine) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  [ [  " $version "  = =  "3.17"  ||  " $version "  = =  "3.18"  ||  " $version "  = =  "3.19"  ||  " $version "  = =  "3.20"  ] ] ;  then 
 
					 
					 
					 
					      bin_name = " kasmvnc.alpine_ $$ {distro_version//./}_ $$ {arch}.tgz " 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        install_alpine " https://github.com/kasmtech/KasmVNC/releases/download/v ${ VERSION } /kasmvnc.alpine_ $$ {version}_ $$ {arch}.tgz " 
 
					 
					 
					 
					      install_alpine " $base_url / $bin_name " 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      else 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        echo  " Unsupported Alpine version:  $$ {version} " 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        exit  1 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      fi 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ; ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    fedora |  opensuse) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      install_rpm " https://github.com/kasmtech/KasmVNC/releases/download/v ${ VERSION } /kasmvncserver_ $$ {distro}_ $$ {version}_ ${ VERSION } _ $$ {arch}.rpm " 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					      ; ; 
 
					 
					 
					 
					      ; ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    *) 
 
					 
					 
					 
					    *) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      echo  " Unsupported distribution:  $ ${  distro} " 
 
					 
					 
					 
					      echo  " Unsupported distribution:  $distro " 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					      exit  1 
 
					 
					 
					 
					      exit  1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ; ; 
 
					 
					 
					 
					      ; ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  esac 
 
					 
					 
					 
					  esac 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -158,22 +183,53 @@ else
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  echo  "vncserver already installed. Skipping installation." 
 
					 
					 
					 
					  echo  "vncserver already installed. Skipping installation." 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					fi 
 
					 
					 
					 
					fi 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Coder port-forwarding from dashboard only supports HTTP 
 
					 
					 
					 
					if  command  -v sudo & > /dev/null &&  sudo -n true  2> /dev/null;  then 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					sudo bash -c " cat > /etc/kasmvnc/kasmvnc.yaml <<EOF 
 
					 
					 
					 
					  kasm_config_file = "/etc/kasmvnc/kasmvnc.yaml" 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  SUDO = sudo
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  kasm_config_file = " $HOME /.vnc/kasmvnc.yaml " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  SUDO = 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  echo  "WARNING: Sudo access not available, using user config dir!" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  if  [ [  -f " $kasm_config_file "  ] ] ;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    echo  "WARNING: Custom user KasmVNC config exists, not overwriting!" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    echo  "WARNING: Ensure that you manually configure the appropriate settings." 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    kasm_config_file = "/dev/stderr" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  else 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    echo  "WARNING: This may prevent custom user KasmVNC settings from applying!" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    mkdir -p " $HOME /.vnc " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  fi 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					fi 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					echo  " Writing KasmVNC config to  $kasm_config_file " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					$SUDO  tee " $kasm_config_file "  > /dev/null << EOF
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					network:
 
					 
					 
					 
					network:
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  protocol: http
 
					 
					 
					 
					  protocol: http
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  websocket_port: ${ PORT } 
 
					 
					 
					 
					  websocket_port: ${ PORT } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  ssl:
 
					 
					 
					 
					  ssl:
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    require_ssl: false
 
					 
					 
					 
					    require_ssl: false
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    pem_certificate:
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    pem_key:
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  udp:
 
					 
					 
					 
					  udp:
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    public_ip: 127.0.0.1
 
					 
					 
					 
					    public_ip: 127.0.0.1
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					EOF" 
 
					 
					 
					 
					EOF
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# This password is not used since we start the server without auth. 
 
					 
					 
					 
					# This password is not used since we start the server without auth. 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# The server is protected via the Coder session token / tunnel 
 
					 
					 
					 
					# The server is protected via the Coder session token / tunnel 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# and does not listen publicly 
 
					 
					 
					 
					# and does not listen publicly 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					echo  -e "password\npassword\n"  |  vncpasswd -wo -u $USER 
 
					 
					 
					 
					echo  -e "password\npassword\n"  |  vncpasswd -wo -u " $USER " 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# Start the server 
 
					 
					 
					 
					# Start the server 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					printf  "🚀 Starting KasmVNC server...\n" 
 
					 
					 
					 
					printf  "🚀 Starting KasmVNC server...\n" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					sudo -u $USER  bash -c " vncserver -select-de  ${ DESKTOP_ENVIRONMENT }  -disableBasicAuth "  > /tmp/kasmvncserver.log 2>& 1  & 
 
					 
					 
					 
					vncserver -select-de " ${ DESKTOP_ENVIRONMENT } "  -disableBasicAuth > /tmp/kasmvncserver.log 2>& 1  & 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					pid = $! 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					# Wait for server to start 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					sleep 5 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					grep -v '^[[:space:]]*$'  /tmp/kasmvncserver.log |  tail -n 10 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					if  ps -p $pid  |  grep -q " ^ $pid " ;  then 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  echo  "ERROR: Failed to start KasmVNC server. Check full logs at /tmp/kasmvncserver.log" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  exit  1 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					fi 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					printf  "🚀 KasmVNC server started successfully!\n"