diff --git a/dockerfile-kasm-core b/dockerfile-kasm-core index 3f00480..bd090eb 100644 --- a/dockerfile-kasm-core +++ b/dockerfile-kasm-core @@ -86,6 +86,12 @@ RUN bash $INST_SCRIPTS/gamepad/install_gamepad.sh && rm -rf $INST_SCRIPTS/gamepa COPY ./src/ubuntu/install/webcam $INST_SCRIPTS/webcam/ RUN bash $INST_SCRIPTS/webcam/install_webcam.sh && rm -rf $INST_SCRIPTS/webcam/ +### Install Printer +COPY ./src/ubuntu/install/printer $INST_SCRIPTS/printer/ +COPY ./src/ubuntu/install/printer/start_cups.sh /etc/cups/start_cups.sh +RUN bash $INST_SCRIPTS/printer/install_printer.sh && rm -rf $INST_SCRIPTS/printer +COPY ./src/ubuntu/install/printer/resources/*.ppd /etc/cups/ppd/ + ### Install custom cursors COPY ./src/ubuntu/install/cursors $INST_SCRIPTS/cursors/ RUN bash $INST_SCRIPTS/cursors/install_cursors.sh && rm -rf $INST_SCRIPTS/cursors/ @@ -151,6 +157,7 @@ RUN touch $STARTUPDIR/wm.log \ && chmod 755 $STARTUPDIR/audio_input/kasm_audio_input_server \ && chmod 755 $STARTUPDIR/gamepad/kasm_gamepad_server \ && chmod 755 $STARTUPDIR/webcam/kasm_webcam_server \ + && chmod 755 $STARTUPDIR/printer/kasm_printer_service \ && chmod 755 $STARTUPDIR/generate_container_user \ && chmod +x $STARTUPDIR/jsmpeg/kasm_audio_out-linux \ && rm -rf $STARTUPDIR/install \ diff --git a/dockerfile-kasm-core-alpine b/dockerfile-kasm-core-alpine index 7a6bd9e..30d0bea 100644 --- a/dockerfile-kasm-core-alpine +++ b/dockerfile-kasm-core-alpine @@ -84,6 +84,12 @@ RUN bash $INST_SCRIPTS/gamepad/install_gamepad.sh && rm -rf $INST_SCRIPTS/gamepa COPY ./src/ubuntu/install/webcam $INST_SCRIPTS/webcam/ RUN bash $INST_SCRIPTS/webcam/install_webcam.sh && rm -rf $INST_SCRIPTS/webcam/ +### Install Printer +COPY ./src/ubuntu/install/printer $INST_SCRIPTS/printer/ +COPY ./src/ubuntu/install/printer/start_cups.sh /etc/cups/start_cups.sh +RUN bash $INST_SCRIPTS/printer/install_printer.sh && rm -rf $INST_SCRIPTS/printer +COPY ./src/ubuntu/install/printer/resources/*.ppd /etc/cups/ppd/ + ### Copy built Squid COPY --from=squid_builder /usr/local/squid /usr/local/squid diff --git a/dockerfile-kasm-core-centos b/dockerfile-kasm-core-centos index 7d8fbf9..ba67797 100644 --- a/dockerfile-kasm-core-centos +++ b/dockerfile-kasm-core-centos @@ -91,6 +91,12 @@ RUN bash $INST_SCRIPTS/gamepad/install_gamepad.sh && rm -rf $INST_SCRIPTS/gamepa COPY ./src/ubuntu/install/webcam $INST_SCRIPTS/webcam/ RUN bash $INST_SCRIPTS/webcam/install_webcam.sh && rm -rf $INST_SCRIPTS/webcam/ +### Install Printer +COPY ./src/ubuntu/install/printer $INST_SCRIPTS/printer/ +COPY ./src/ubuntu/install/printer/start_cups.sh /etc/cups/start_cups.sh +RUN bash $INST_SCRIPTS/printer/install_printer.sh && rm -rf $INST_SCRIPTS/printer +COPY ./src/ubuntu/install/printer/resources/*.ppd /etc/cups/ppd/ + ### Copy built Squid COPY --from=squid_builder /usr/local/squid /usr/local/squid diff --git a/dockerfile-kasm-core-fedora b/dockerfile-kasm-core-fedora index 9c02566..b5cfa93 100644 --- a/dockerfile-kasm-core-fedora +++ b/dockerfile-kasm-core-fedora @@ -99,6 +99,12 @@ RUN bash $INST_SCRIPTS/gamepad/install_gamepad.sh && rm -rf $INST_SCRIPTS/gamepa COPY ./src/ubuntu/install/webcam $INST_SCRIPTS/webcam/ RUN bash $INST_SCRIPTS/webcam/install_webcam.sh && rm -rf $INST_SCRIPTS/webcam/ +### Install Printer +COPY ./src/ubuntu/install/printer $INST_SCRIPTS/printer/ +COPY ./src/ubuntu/install/printer/start_cups.sh /etc/cups/start_cups.sh +RUN bash $INST_SCRIPTS/printer/install_printer.sh && rm -rf $INST_SCRIPTS/printer +COPY ./src/ubuntu/install/printer/resources/*.ppd /etc/cups/ppd/ + ### Copy built Squid COPY --from=squid_builder /usr/local/squid /usr/local/squid diff --git a/dockerfile-kasm-core-oracle b/dockerfile-kasm-core-oracle index d30f46f..04ee8a4 100644 --- a/dockerfile-kasm-core-oracle +++ b/dockerfile-kasm-core-oracle @@ -114,6 +114,12 @@ RUN bash $INST_SCRIPTS/gamepad/install_gamepad.sh && rm -rf $INST_SCRIPTS/gamepa COPY ./src/ubuntu/install/webcam $INST_SCRIPTS/webcam/ RUN bash $INST_SCRIPTS/webcam/install_webcam.sh && rm -rf $INST_SCRIPTS/webcam/ +### Install Printer +COPY ./src/ubuntu/install/printer $INST_SCRIPTS/printer/ +COPY ./src/ubuntu/install/printer/start_cups.sh /etc/cups/start_cups.sh +RUN bash $INST_SCRIPTS/printer/install_printer.sh && rm -rf $INST_SCRIPTS/printer +COPY ./src/ubuntu/install/printer/resources/*.ppd /etc/cups/ppd/ + ### Copy built Squid COPY --from=squid_builder /usr/local/squid /usr/local/squid diff --git a/dockerfile-kasm-core-suse b/dockerfile-kasm-core-suse index 95c1bb0..d78d99d 100644 --- a/dockerfile-kasm-core-suse +++ b/dockerfile-kasm-core-suse @@ -89,6 +89,12 @@ RUN bash $INST_SCRIPTS/gamepad/install_gamepad.sh && rm -rf $INST_SCRIPTS/gamepa COPY ./src/ubuntu/install/webcam $INST_SCRIPTS/webcam/ RUN bash $INST_SCRIPTS/webcam/install_webcam.sh && rm -rf $INST_SCRIPTS/webcam/ +### Install Printer +COPY ./src/ubuntu/install/printer $INST_SCRIPTS/printer/ +COPY ./src/ubuntu/install/printer/start_cups.sh /etc/cups/start_cups.sh +RUN bash $INST_SCRIPTS/printer/install_printer.sh && rm -rf $INST_SCRIPTS/printer +COPY ./src/ubuntu/install/printer/resources/*.ppd /etc/cups/ppd/ + ### Copy built Squid COPY --from=squid_builder /usr/local/squid /usr/local/squid diff --git a/src/common/startup_scripts/vnc_startup.sh b/src/common/startup_scripts/vnc_startup.sh index 419a1a6..e89fe79 100755 --- a/src/common/startup_scripts/vnc_startup.sh +++ b/src/common/startup_scripts/vnc_startup.sh @@ -145,6 +145,11 @@ function start_kasmvnc (){ chmod +x $HOME/.vnc/xstartup VNCOPTIONS="$VNCOPTIONS -select-de manual" + + if [[ ${KASM_SVC_PRINTER:-1} == 1 ]]; then + VNCOPTIONS="$VNCOPTIONS -UnixRelay printer:/tmp/printer" + fi + if [[ "${BUILD_ARCH}" =~ ^aarch64$ ]] && [[ -f /lib/aarch64-linux-gnu/libgcc_s.so.1 ]] ; then LD_PRELOAD=/lib/aarch64-linux-gnu/libgcc_s.so.1 vncserver $DISPLAY $KASMVNC_HW3D -drinode $DRINODE -depth $VNC_COL_DEPTH -geometry $VNC_RESOLUTION -websocketPort $NO_VNC_PORT -httpd ${KASM_VNC_PATH}/www -sslOnly -FrameRate=$MAX_FRAME_RATE -interface 0.0.0.0 -BlacklistThreshold=0 -FreeKeyMappings $VNCOPTIONS $KASM_SVC_SEND_CUT_TEXT $KASM_SVC_ACCEPT_CUT_TEXT else @@ -288,6 +293,24 @@ function start_webcam (){ fi } +function start_printer (){ + if [[ ${KASM_SVC_PRINTER:-1} == 1 ]]; then + echo 'Starting printer service' + if [[ $DEBUG == true ]]; then + $STARTUPDIR/printer/kasm_printer_service --debug --directory $HOME/PDF --relay /tmp/printer + else + $STARTUPDIR/printer/kasm_printer_service --directory $HOME/PDF --relay /tmp/printer + fi + + KASM_PROCS['kasm_printer']=$! + + if [[ $DEBUG == true ]]; then + echo -e "\n------------------ Started Printer Service ----------------------------" + echo "Kasm Printer PID: ${KASM_PROCS['kasm_printer']}"; + fi + fi +} + function custom_startup (){ custom_startup_script=/dockerstartup/custom_startup.sh if [ -f "$custom_startup_script" ]; then @@ -356,6 +379,7 @@ start_upload start_gamepad profile_size_check & start_webcam +start_printer STARTUP_COMPLETE=1 diff --git a/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh b/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh index 8385d43..e75e920 100644 --- a/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh +++ b/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh @@ -17,8 +17,8 @@ echo "Install KasmVNC server" cd /tmp BUILD_ARCH=$(uname -p) UBUNTU_CODENAME="" -COMMIT_ID="9450157af1e16f9a27c12170ac0ebfd28ee50ebc" -BRANCH="master" # just use 'release' for a release branch +COMMIT_ID="d0db55dcbc5e5d02f0102f7beb841861a00533c6" +BRANCH="feature_KASM-4608_linux_printing" # just use 'release' for a release branch KASMVNC_VER="1.1.1" COMMIT_ID_SHORT=$(echo "${COMMIT_ID}" | cut -c1-6) diff --git a/src/ubuntu/install/printer/install_printer.sh b/src/ubuntu/install/printer/install_printer.sh new file mode 100755 index 0000000..564a8e8 --- /dev/null +++ b/src/ubuntu/install/printer/install_printer.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +### every exit != 0 fails the script +set -e + +echo $DISTRO + +if [ "${DISTRO}" == "oracle7" ] || [ "${DISTRO}" == "centos" ]; then + yum install -y cups cups-pdf +elif [[ "${DISTRO}" == @(almalinux8|almalinux9|oracle8|oracle9|rockylinux8|rockylinux9|fedora37|fedora38) ]]; then + dnf install -y cups cups-pdf +elif [ "${DISTRO}" == "opensuse" ]; then + zypper install -y cups cups-pdf +elif [ "${DISTRO}" == "alpine" ]; then + echo '@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories + apk add --no-cache cups cups-pdf@testing +else + apt-get update + apt-get install -y cups cups-pdf +fi + +COMMIT_ID="049908cfa22a536a1ea9c2e0d42528711b013625" +BRANCH="feature_KASM-4608_kasm_printing" +COMMIT_ID_SHORT=$(echo "${COMMIT_ID}" | cut -c1-6) + +ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/amd64/g') + +mkdir -p $STARTUPDIR/printer +wget -qO- https://kasmweb-build-artifacts.s3.amazonaws.com/kasm_printer_service/${COMMIT_ID}/kasm_printer_service_${ARCH}_${BRANCH}.${COMMIT_ID_SHORT}.tar.gz | tar -xvz -C $STARTUPDIR/printer/ + +echo "${BRANCH}:${COMMIT_ID}" > $STARTUPDIR/printer/kasm_printer.version \ No newline at end of file diff --git a/src/ubuntu/install/printer/resources/kasm.ppd b/src/ubuntu/install/printer/resources/kasm.ppd new file mode 100644 index 0000000..5be5a90 --- /dev/null +++ b/src/ubuntu/install/printer/resources/kasm.ppd @@ -0,0 +1,21 @@ +*PPD-Adobe: "4.3" +*FormatVersion: "4.3" +*FileVersion: "1.1" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "kasm.PPD" +*Manufacturer: "Kasm" +*Product: "(CUPS v1.1)" +*ModelName: "Kasm Virtual Printer" +*ShortNickName: "Kasm Virtual Printer" +*NickName: "Kasm Virtual Printer (no options)" +*1284DeviceID: "MFG:Kasm;MDL:Kasm Virtual Printer;DES:Kasm Virtual Printer Printer;CLS:PRINTER;CMD:POSTSCRIPT;" +*% cupsFilter: "application/vnd.cups-postscript 0 pstitleiconv" +*PSVersion: "(2017.000) 0" +*LanguageLevel: "2" +*ColorDevice: True +*DefaultColorSpace: RGB +*FileSystem: False +*Throughput: "8" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 \ No newline at end of file diff --git a/src/ubuntu/install/printer/start_cups.sh b/src/ubuntu/install/printer/start_cups.sh new file mode 100755 index 0000000..177d6f9 --- /dev/null +++ b/src/ubuntu/install/printer/start_cups.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -ex +{ + PRINTER_NAME=${KASM_PRINTER_NAME:-Kasm-Printer} + + echo "Starting cups" + /usr/sbin/cupsd -f & + until [[ "$(lpstat -r)" == "scheduler is running" ]]; do sleep 15; done + + echo "Creating a virtual printer: $PRINTER_NAME" + lpadmin -p $PRINTER_NAME -E -v cups-pdf:/ -P /etc/cups/ppd/kasm.ppd + + echo "Done!" +} 2>&1 | tee /tmp/start_cups.log