i have no taken into account old distros that have python 2 as default since python 2 has not been supported since 2020 keep in mind that python 3.7 is out of support and i will push KS requeriments to 3.9 when buster enters EOL mid-next year (bullseye has 3.9) 3.8 will be out of support close to buster, it will be skipped so anyone on legacy distros will not be able to update KS past july 2024
199 lines
5.7 KiB
Bash
Executable File
199 lines
5.7 KiB
Bash
Executable File
#!/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"
|
|
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 wireless-tools libdbus-glib-1-dev autoconf"
|
|
OPTIONAL="xserver-xorg-legacy fonts-nanum fonts-ipafont libmpv-dev"
|
|
|
|
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 "Detected broken packages. 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
|
|
echo $_
|
|
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
|
|
sudo apt-get install -y $PYTHON
|
|
if [ $? -eq 0 ]; then
|
|
echo_ok "Installed Python dependencies"
|
|
else
|
|
echo_error "Installation of Python dependencies failed ($PYTHON)"
|
|
exit 1
|
|
fi
|
|
sudo apt-get install -y $PYGOBJECT
|
|
if [ $? -eq 0 ]; then
|
|
echo_ok "Installed PyGobject dependencies"
|
|
else
|
|
echo_error "Installation of PyGobject dependencies 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
|
|
# ModemManager interferes with klipper comms
|
|
# on buster it's installed as a dependency of mpv
|
|
# it doesn't happen on bullseye
|
|
sudo systemctl mask ModemManager.service
|
|
}
|
|
|
|
check_requirements()
|
|
{
|
|
echo_text "Checking Python version"
|
|
python3 --version
|
|
if ! python -c 'import sys; exit(1) if sys.version_info <= (3,7) else exit(0)'; then
|
|
echo_text 'Not supported'
|
|
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
|
|
pip --disable-pip-version-check install -r ${KSPATH}/scripts/KlipperScreen-requirements.txt
|
|
if [ $? -gt 0 ]; then
|
|
echo_error "Error: pip install exited with status code $?"
|
|
echo_text "Trying again with new tools..."
|
|
sudo apt-get install -y build-essential cmake
|
|
pip install --upgrade pip setuptools
|
|
pip install -r ${KSPATH}/scripts/KlipperScreen-requirements.txt
|
|
if [ $? -gt 0 ]; then
|
|
echo_error "Unable to install dependencies, aborting install."
|
|
deactivate
|
|
exit 1
|
|
fi
|
|
fi
|
|
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.config ]
|
|
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
|
|
sudo cp $SCRIPTPATH/../styles/icon.svg /usr/share/icons/hicolor/scalable/apps/KlipperScreen.svg
|
|
}
|
|
|
|
start_KlipperScreen()
|
|
{
|
|
echo_text "Starting service..."
|
|
sudo systemctl stop KlipperScreen
|
|
sudo systemctl start KlipperScreen
|
|
}
|
|
if [ "$EUID" == 0 ]
|
|
then echo_error "Please do not run this script as root"
|
|
exit 1
|
|
fi
|
|
install_packages
|
|
check_requirements
|
|
create_virtualenv
|
|
modify_user
|
|
install_systemd_service
|
|
update_x11
|
|
echo_ok "KlipperScreen was installed"
|
|
add_desktop_file
|
|
start_KlipperScreen
|