#!/bin/bash SCRIPTPATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" KSPATH=$(sed 's/\/scripts//g' <<< $SCRIPTPATH) KSENV="${KLIPPERSCREEN_VENV:-${HOME}/.KlipperScreen-env}" XSERVER="xinit xinput x11-xserver-utils xserver-xorg-input-evdev xserver-xorg-input-libinput" FBTURBO="xserver-xorg-video-fbturbo" FBDEV="xserver-xorg-video-fbdev" PYTHON="python3-virtualenv virtualenv python3-distutils" PYGOBJECT="libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0" MISC="librsvg2-common libopenjp2-7 libatlas-base-dev wireless-tools" OPTIONAL="xserver-xorg-legacy fonts-nanum xdotool" # moonraker will check this list when updating # if new packages are required for existing installs add them below too. PKGLIST="" Red='\033[0;31m' Green='\033[0;32m' Cyan='\033[0;36m' Normal='\033[0m' echo_text () { printf "${Normal}$1${Cyan}\n" } echo_error () { printf "${Red}$1${Normal}\n" } echo_ok () { printf "${Green}$1${Normal}\n" } install_packages() { echo_text "Update package data" sudo apt-get update echo_text "Checking for broken packages..." output=$(dpkg-query -W -f='${db:Status-Abbrev} ${binary:Package}\n' | grep -E ^.[^nci]) if [ $? -eq 0 ]; then echo_text "Detectected broken pacakges. Attempting to fix" sudo apt-get -f install output=$(dpkg-query -W -f='${db:Status-Abbrev} ${binary:Package}\n' | grep -E ^.[^nci]) if [ $? -eq 0 ]; then echo_error "Unable to fix broken packages. These must be fixed before KlipperScreen can be installed" exit 1 fi else echo_ok "No broken packages" fi echo_text "Installing KlipperScreen dependencies" sudo apt-get install -y $XSERVER if [ $? -eq 0 ]; then echo_ok "Installed X" else echo_error "Installation of X-server dependencies failed ($XSERVER)" exit 1 fi sudo apt-get install -y $OPTIONAL sudo apt-get install -y $FBTURBO if [ $? -eq 0 ]; then echo_ok "Installed FBturbo driver" else echo $_ echo_error "Installation of $FBTURBO failed, trying $FBDEV" sudo apt-get install -y $FBDEV if [ $? -eq 0 ]; then echo_ok "Installed FBdev" else echo_error "Installation of FBdev failed ($FBDEV)" exit 1 fi fi sudo apt-get install -y $PYTHON if [ $? -eq 0 ]; then echo_ok "Installed Python dependincies" else echo_error "Installation of Python dependincies failed ($PYTHON)" exit 1 fi sudo apt-get install -y $PYGOBJECT if [ $? -eq 0 ]; then echo_ok "Installed PyGobject dependincies" else echo_error "Installation of PyGobject dependincies failed ($PYGOBJECT)" exit 1 fi sudo apt-get install -y $MISC if [ $? -eq 0 ]; then echo_ok "Installed Misc packages" else echo_error "Installation of Misc packages failed ($MISC)" exit 1 fi } create_virtualenv() { echo_text "Creating virtual environment" if [ ! -d ${KSENV} ]; then virtualenv -p /usr/bin/python3 ${KSENV} # GET_PIP="${HOME}/get-pip.py" # virtualenv --no-pip -p /usr/bin/python3 ${KSENV} # curl https://bootstrap.pypa.io/pip/3.6/get-pip.py -o ${GET_PIP} # ${KSENV}/bin/python ${GET_PIP} # rm ${GET_PIP} fi source ${KSENV}/bin/activate while read requirements; do pip --disable-pip-version-check install $requirements if [ $? -gt 0 ]; then echo "Error: pip install exited with status code $?" echo "Unable to install dependencies, aborting install." deactivate exit 1 fi done < ${KSPATH}/scripts/KlipperScreen-requirements.txt deactivate echo_ok "Virtual enviroment created" } install_systemd_service() { echo_text "Installing KlipperScreen unit file" SERVICE=$(<$SCRIPTPATH/KlipperScreen.service) KSPATH_ESC=$(sed "s/\//\\\\\//g" <<< $KSPATH) KSENV_ESC=$(sed "s/\//\\\\\//g" <<< $KSENV) SERVICE=$(sed "s/KS_USER/$USER/g" <<< $SERVICE) SERVICE=$(sed "s/KS_ENV/$KSENV_ESC/g" <<< $SERVICE) SERVICE=$(sed "s/KS_DIR/$KSPATH_ESC/g" <<< $SERVICE) echo "$SERVICE" | sudo tee /etc/systemd/system/KlipperScreen.service > /dev/null sudo systemctl unmask KlipperScreen.service sudo systemctl daemon-reload sudo systemctl enable KlipperScreen } modify_user() { sudo usermod -a -G tty $USER } update_x11() { if [ -e /etc/X11/Xwrapper.conf ] then echo_text "Updating X11 Xwrapper" sudo sed -i 's/allowed_users=console/allowed_users=anybody/g' /etc/X11/Xwrapper.config else echo_text "Adding X11 Xwrapper" echo 'allowed_users=anybody' | sudo tee /etc/X11/Xwrapper.config fi } add_desktop_file() { DESKTOP=$(<$SCRIPTPATH/KlipperScreen.desktop) mkdir -p $HOME/.local/share/applications/ echo "$DESKTOP" | tee $HOME/.local/share/applications/KlipperScreen.desktop > /dev/null } start_KlipperScreen() { echo_text "Starting service..." sudo systemctl stop KlipperScreen sudo systemctl start KlipperScreen } if [ "$EUID" == 0 ] then echo_error "Plaease do not run this script as root" exit 1 fi install_packages create_virtualenv modify_user install_systemd_service update_x11 echo_ok "KlipperScreen was installed" add_desktop_file start_KlipperScreen