Ryan Kuba d49d224e3a
Fedora39 proot (#57)
* add proot-apps fedora39

* typo
2024-04-15 21:12:50 +00:00

175 lines
4.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
# Purge temp files on init and exit
function clean () {
rm -rf /tmp/{,.[!.],..?}* || :
}
trap clean SIGINT SIGTERM
clean
# Lang
if [ ! -z ${LC_ALL+x} ]; then
export LANGUAGE="${LC_ALL%.UTF-8}"
export LANG="${LC_ALL}"
fi
# Environment
export HOME=/home/kasm-user
export KASM_VNC_PATH=/usr/share/kasmvnc
export PULSE_RUNTIME_PATH=/var/run/pulse
if [ -z ${DRINODE+x} ]; then
DRINODE="/dev/dri/renderD128"
fi
KASMNVC_HW3D=''
if [ ! -z ${HW3D+x} ]; then
KASMVNC_HW3D="-hw3d"
fi
# Go URL translation
if [ ! -z ${KASM_URL+x} ]; then
export BRAVE_CLI=$KASM_URL
export CHROME_CLI=$KASM_URL
export EDGE_CLI=$KASM_URL
export FIREFOX_CLI=$KASM_URL
export OPERA_CLI=$KASM_URL
export TOR_CLI=$KASM_URL
export VIVALDI_CLI=$KASM_URL
fi
## Directory setup for home folder ##
# Create folders for upload/download
mkdir -p $HOME/Desktop $HOME/Downloads
for FOLDER in Uploads Downloads; do
if [[ ! -L $HOME/Desktop/$FOLDER ]]; then
mkdir -p $HOME/$FOLDER
ln -sf $HOME/$FOLDER $HOME/Desktop/$FOLDER
fi
done
if [[ ! -L $KASM_VNC_PATH/www/Downloads/Downloads ]]; then
ln -sf $HOME/Downloads $KASM_VNC_PATH/www/Downloads/Downloads
fi
rm -rf $HOME/.config/pulse
# Openbox config files
if [[ ! -f $HOME/.config/openbox/autostart ]]; then
mkdir -p $HOME/.config/openbox
cp /defaults/autostart $HOME/.config/openbox/autostart
fi
if [[ ! -f $HOME/.config/openbox/menu.xml ]]; then
mkdir -p $HOME/.config/openbox
cp /defaults/menu.xml $HOME/.config/openbox/menu.xml
fi
# Startup Script for DE
mkdir -p $HOME/.vnc
cp \
/defaults/startwm.sh \
$HOME/.vnc/xstartup
touch $HOME/.vnc/.de-was-selected
# Add proot-apps
if [ ! -f "${HOME}/.local/bin/proot-apps" ]; then
mkdir -p ${HOME}/.local/bin/
cp /proot-apps/* ${HOME}/.local/bin/
echo 'export PATH="$HOME/.local/bin:$PATH"' >> $HOME/.bashrc
elif ! diff -q /proot-apps/pversion ${HOME}/.local/bin/pversion > /dev/null; then
cp /proot-apps/* ${HOME}/.local/bin/
fi
## KasmVNC init ##
# Password
if [[ -f $HOME/.kasmpasswd ]]; then
rm -f $HOME/.kasmpasswd
fi
if [[ -z ${VNC_PW+x} ]]; then
VNC_PW="vncpassword"
fi
if [[ -z ${VNC_VIEW_ONLY_PW+x} ]]; then
VNC_VIEW_ONLY_PW="vncviewonlypassword"
fi
VNC_PW_HASH=$(python3 -c "import crypt; print(crypt.crypt('${VNC_PW}', '\$5\$kasm\$'));")
VNC_VIEW_PW_HASH=$(python3 -c "import crypt; print(crypt.crypt('${VNC_VIEW_ONLY_PW}', '\$5\$kasm\$'));")
echo "kasm_user:${VNC_PW_HASH}:ow" > $HOME/.kasmpasswd
echo "kasm_viewer:${VNC_VIEW_PW_HASH}:" >> $HOME/.kasmpasswd
chmod 600 $HOME/.kasmpasswd
# SSL cert
rm -f ${HOME}/.vnc/self.pem
openssl req -x509 \
-nodes \
-days 3650 \
-newkey rsa:2048 \
-keyout ${HOME}/.vnc/self.pem \
-out ${HOME}/.vnc/self.pem \
-subj "/C=US/ST=VA/L=None/O=None/OU=DoFu/CN=kasm/emailAddress=none@none.none"
# Start KasmVNC
vncserver $DISPLAY \
$KASMVNC_HW3D \
-drinode $DRINODE \
-websocketPort 6901 \
-httpd ${KASM_VNC_PATH}/www \
-FrameRate=60 \
-interface 0.0.0.0 \
-BlacklistThreshold=0 \
-FreeKeyMappings \
-PreferBandwidth \
-DynamicQualityMin=4 \
-DynamicQualityMax=7 \
-DLP_ClipDelay=0 \
-sslOnly \
-UnixRelay printer:/tmp/printer
## Microservice Init ##
# Audio
/kasmbins/kasm_websocket_relay/kasm_audio_out-linux \
kasmaudio \
8081 \
4901 \
${HOME}/.vnc/self.pem \
${HOME}/.vnc/self.pem \
"kasm_user:$VNC_PW" &
HOME=/var/run/pulse pulseaudio --start
HOME=/var/run/pulse no_proxy=127.0.0.1 ffmpeg \
-v verbose \
-f pulse \
-fragment_size ${PULSEAUDIO_FRAGMENT_SIZE:-2000} \
-ar 44100 \
-i default \
-f mpegts \
-correct_ts_overflow 0 \
-codec:a mp2 \
-b:a 128k \
-ac 1 \
-muxdelay 0.001 \
http://127.0.0.1:8081/kasmaudio > /dev/null 2>&1 &
# Audio in
/kasmbins/kasm_audio_input_server \
--ssl \
--auth-token "kasm_user:$VNC_PW" \
--cert ${HOME}/.vnc/self.pem \
--certkey ${HOME}/.vnc/self.pem &
# Uploads
/kasmbins/kasm_upload_server \
--ssl \
--auth-token "kasm_user:$VNC_PW" &
# Gamepad
if [[ ${KASM_SVC_GAMEPAD:-1} == 1 ]]; then
/kasmbins/kasm_gamepad_server \
--ssl \
--auth-token "kasm_user:$VNC_PW" \
--cert ${HOME}/.vnc/self.pem \
--certkey ${HOME}/.vnc/self.pem &
fi
# Webcam
if [[ -e /dev/video0 ]]; then
/kasmbins/kasm_webcam_server \
--port 4905 \
--ssl \
--cert ${HOME}/.vnc/self.pem \
--certkey ${HOME}/.vnc/self.pem &
fi
# Printer
/kasmbins/kasm_printer_service \
--directory $HOME/PDF \
--relay /tmp/printer &
# Show KasmVNC Logs
tail -f $HOME/.vnc/*$DISPLAY.log