#!/bin/env bash set -e DAEMON_SOCKET=/run/lactd.sock UNIT_PATH=/etc/systemd/system/lactd.service if [ ! -e "${DAEMON_SOCKET}" ]; then echo "${DAEMON_SOCKET} does not exist, showing setup prompt" APP_COMMIT=$(grep app-commit= /.flatpak-info | sed "s/app-commit=//") APP_PATH=$(grep app-path= /.flatpak-info | sed "s/app-path=//" | sed "s/${APP_COMMIT}/active/") DAEMON_SH_PATH="${APP_PATH}/bin/daemon.sh" set +e if [ "${LACT_UNATTENDED_SETUP}" == "true" ]; then YAD_OUTPUT="TRUE|" EXIT_CODE=0 else YAD_OUTPUT=$(yad --title="LACT Flatpak Setup" \ --text="The LACT system service could not be found. In order to edit GPU settings, LACT requires a service to be running as root. This setup will install lactd.service outside of the Flatpak sandbox. It is possible to skip this step if you wish to use LACT only for information and monitoring. Do you wish to install the service?" \ --form \ --field "Autostart service at boot":CHK "TRUE") EXIT_CODE=$? fi set -e if [ ${EXIT_CODE} -eq 0 ]; then IFS="|" read -ra OPTIONS <<< "$YAD_OUTPUT" AUTOSTART="${OPTIONS[0]}" echo "Setting up the service with autostart ${AUTOSTART}" UNIT="\ [Unit] Description=GPU Control Daemon (via Flatpak) After=multi-user.target [Service] Environment=FLATPAK_INSTALL_USER=$USER ExecStart=bash $DAEMON_SH_PATH Nice=-10 Restart=on-failure [Install] WantedBy=multi-user.target\ " if flatpak-spawn --host sh -c "command -v pkexec" > /dev/null 2>&1; then ROOT_WRAPPER="pkexec" else ROOT_WRAPPER="run0 --pipe" fi echo "Using root wrapper ${ROOT_WRAPPER}" echo "${UNIT}" | flatpak-spawn --host tee /tmp/lact-unit-setup flatpak-spawn --host $ROOT_WRAPPER sh -c "cp /tmp/lact-unit-setup ${UNIT_PATH} && (chcon -R -t bin_t $DAEMON_SH_PATH || true)" echo "Unit file created at ${UNIT_PATH}" flatpak-spawn --host rm /tmp/lact-unit-setup if [ "${AUTOSTART}" == "TRUE" ]; then echo "Enabling the service with autostart" flatpak-spawn --host $ROOT_WRAPPER sh -c "systemctl daemon-reload && systemctl enable --now lactd.service" else echo "Starting the service without autostart" flatpak-spawn --host $ROOT_WRAPPER sh -c "systemctl daemon-reload && systemctl start lactd.service" fi if [ "${LACT_UNATTENDED_SETUP}" != "true" ]; then yad --text 'The service has been started. Please run LACT again.' --button=OK:0 fi exit 0 else echo "Service setup rejected, skipping" fi fi lact $@