Files
2026-09-26 17:37:13 +02:00

200 lines
7.6 KiB
Bash
Executable File

#!/bin/bash
# Uninstallation script for ASUS Zenbook Duo Linux dual-screen management.
# Reverses everything installed by setup-gnome.sh/setup-kde.sh/setup-niri.sh
# and (optionally) the UI app.
echo "Uninstalling Zenbook Duo Linux..."
# ============================================================================
# ARGUMENT PARSING
# ============================================================================
# Defaults: remove UI + user config for a clean reinstall.
KEEP_UI=false
KEEP_CONFIG=false
while [ "$#" -gt 0 ]; do
case "$1" in
--keep-ui)
KEEP_UI=true
shift
;;
--keep-config)
KEEP_CONFIG=true
shift
;;
-h|--help)
echo "Usage: ./uninstall.sh [--keep-ui] [--keep-config]"
echo ""
echo " --keep-ui Keep the Zenbook Duo Control UI package installed"
echo " --keep-config Keep user config files (e.g. ~/.config/zenbook-duo)"
exit 0
;;
*)
echo "Unknown argument: $1"
echo "Run with --help for usage."
exit 1
;;
esac
done
# ============================================================================
# USER CONTEXT
# ============================================================================
TARGET_USER="${USER}"
if [ "${EUID}" = "0" ]; then
if [ -n "${SUDO_USER:-}" ] && [ "${SUDO_USER}" != "root" ]; then
TARGET_USER="${SUDO_USER}"
else
echo "ERROR: uninstall.sh must be run from a real user session."
echo "Run: ./uninstall.sh"
exit 1
fi
fi
TARGET_UID="$(id -u "${TARGET_USER}" 2>/dev/null || true)"
TARGET_HOME="$(getent passwd "${TARGET_USER}" 2>/dev/null | cut -d: -f6)"
if [ -z "${TARGET_UID}" ] || [ -z "${TARGET_HOME}" ]; then
echo "ERROR: failed to resolve TARGET_USER=${TARGET_USER}"
exit 1
fi
function run_user_systemctl() {
if [ "${TARGET_USER}" = "${USER}" ] && [ "${EUID}" != "0" ]; then
XDG_RUNTIME_DIR="/run/user/${TARGET_UID}" \
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/${TARGET_UID}/bus" \
systemctl --user "$@"
return
fi
sudo -u "${TARGET_USER}" \
XDG_RUNTIME_DIR="/run/user/${TARGET_UID}" \
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/${TARGET_UID}/bus" \
systemctl --user "$@"
}
function run_user_systemctl_best_effort() {
run_user_systemctl "$@" >/dev/null 2>&1 || true
}
# ============================================================================
# STOP RUNNING UI (BEST-EFFORT)
# ============================================================================
# Close the UI if it's running so we can safely update/remove binaries.
pkill -f zenbook-duo-control 2>/dev/null || true
# ============================================================================
# SYSTEMD SERVICES
# ============================================================================
# Stop running services
sudo systemctl stop zenbook-duo.service 2>/dev/null
sudo systemctl stop zenbook-duo-rust-daemon.service 2>/dev/null
sudo systemctl stop zenbook-duo-rust-lifecycle.service 2>/dev/null
run_user_systemctl_best_effort stop zenbook-duo-user.service
run_user_systemctl_best_effort stop zenbook-duo-session-agent.service
# Disable services
sudo systemctl disable zenbook-duo.service 2>/dev/null
sudo systemctl disable zenbook-duo-rust-daemon.service 2>/dev/null
sudo systemctl disable zenbook-duo-rust-lifecycle.service 2>/dev/null
run_user_systemctl_best_effort disable zenbook-duo-user.service
run_user_systemctl_best_effort disable zenbook-duo-session-agent.service
sudo systemctl --global disable zenbook-duo-user.service 2>/dev/null
# Remove service files and sleep hook
sudo rm -f /etc/systemd/system/zenbook-duo.service
sudo rm -f /etc/systemd/system/zenbook-duo-rust-daemon.service
sudo rm -f /etc/systemd/system/zenbook-duo-rust-lifecycle.service
sudo rm -f /etc/systemd/user/zenbook-duo-user.service
sudo rm -f /etc/systemd/user/zenbook-duo-session-agent.service
sudo rm -f /usr/lib/systemd/system-sleep/duo
sudo rm -f /usr/lib/systemd/system-sleep/zenbook-duo-rust-lifecycle
# Reload systemd
sudo systemctl daemon-reload
run_user_systemctl_best_effort daemon-reload
# ============================================================================
# UDEV & HWDB RULES
# ============================================================================
sudo rm -f /etc/udev/rules.d/90-zenbook-duo-keyboard.rules
sudo rm -f /etc/udev/hwdb.d/90-zenbook-duo-keyboard.hwdb
sudo systemd-hwdb update
sudo udevadm trigger
# ============================================================================
# SUDOERS ENTRIES
# ============================================================================
# Remove sudoers lines added by the setup scripts.
if sudo grep -q "/sys/class/backlight/.*/brightness" /etc/sudoers; then
sudo sed -i '\|/sys/class/backlight/.*/brightness|d' /etc/sudoers
fi
if sudo grep -q "card1-eDP-2-backlight/brightness" /etc/sudoers; then
sudo sed -i '\|card1-eDP-2-backlight/brightness|d' /etc/sudoers
fi
if sudo grep -q "intel_backlight/brightness" /etc/sudoers; then
sudo sed -i '\|intel_backlight/brightness|d' /etc/sudoers
fi
sudo rm -f /etc/sudoers.d/zenbook-duo
# ============================================================================
# INSTALLED SCRIPT & RUNTIME FILES
# ============================================================================
sudo rm -f /usr/local/bin/duo
sudo rm -rf /usr/local/libexec/zenbook-duo
sudo rm -rf /var/lib/zenbook-duo
rm -rf /tmp/duo
# Newer versions use a per-user directory (/tmp/duo-$UID). Remove only for target user.
rm -rf "/tmp/duo-${TARGET_UID}"
# ============================================================================
# UI APP (RPM/DEB) + DESKTOP ENTRIES
# ============================================================================
if [ "$KEEP_UI" = false ]; then
# Remove the package if installed.
if command -v dnf >/dev/null 2>&1; then
sudo dnf remove -y zenbook-duo-control 2>/dev/null || true
elif command -v apt >/dev/null 2>&1; then
sudo apt remove -y zenbook-duo-control 2>/dev/null || true
sudo apt autoremove -y 2>/dev/null || true
elif command -v pacman >/dev/null 2>&1; then
sudo pacman -Rns --noconfirm zenbook-duo-control 2>/dev/null || true
elif command -v rpm >/dev/null 2>&1; then
sudo rpm -e zenbook-duo-control 2>/dev/null || true
elif command -v dpkg >/dev/null 2>&1; then
sudo dpkg -r zenbook-duo-control 2>/dev/null || true
fi
sudo rm -f /usr/local/bin/zenbook-duo-control
sudo rm -f /usr/share/applications/zenbook-duo-control.desktop
sudo rm -f /usr/share/pixmaps/zenbook-duo-control.png
# Remove any legacy user-local desktop entry created by older install-ui.sh versions.
rm -f "$TARGET_HOME/.local/share/applications/zenbook-duo-control.desktop" 2>/dev/null || true
update-desktop-database "$TARGET_HOME/.local/share/applications" 2>/dev/null || true
update-desktop-database /usr/share/applications 2>/dev/null || true
fi
# ============================================================================
# USER CONFIG (UI SETTINGS)
# ============================================================================
if [ "$KEEP_CONFIG" = false ]; then
rm -rf "$TARGET_HOME/.config/zenbook-duo" 2>/dev/null || true
fi
# ============================================================================
# FINISH
# ============================================================================
echo "Uninstall complete."
echo "Note: Your user was not removed from the 'input' group."
echo "To remove manually: sudo gpasswd -d \$USER input"