Skip to content

Uninstallation ​

This guide explains how to remove Gaze and its components from your system.

Quickest path: gaze uninstall ​

bash
gaze uninstall

On supported Debian/Ubuntu, Fedora, openSUSE, and Arch package-manager installs, this command performs the full cleanup. It resets GNOME/GDM lock and login settings, removes system and per-user copies of the GNOME extension, reverts PAM, stops the daemon, removes packages (including AUR -debug split packages) and the repository, deletes gazed core dumps, and clears /etc/gaze, /var/cache/gaze, and /var/lib/gaze. On openSUSE, it also removes the pam-config entries, Tumbleweed repository, and signing key. Before making any changes, it shows you the plan and asks for confirmation.

gaze uninstall leaves gaze-cinnamon-extension installed

The command removes gaze, gaze-gui, gaze-gnome-extension, gaze-hyprlock, gaze-kde, and gaze-omarchy. If you also installed the Cinnamon extension, remove it separately with your package manager, then follow Reset Cinnamon lock screen settings.

Useful flags:

  • --keep-data: preserve /var/lib/gaze (enrolled faces)
  • --dry-run: print the plan without running anything
  • --yes: skip the confirmation prompt

If you'd rather run the steps yourself, follow the manual procedure below.

Step 1: Disable integrations ​

To leave your desktop integrations in a clean state, disable any that are active before removing the packages.

Reset GNOME lock screen settings ​

bash
gnome-extensions disable gaze@gundulabs.com 2>/dev/null || true
gnome-extensions uninstall gaze@gundulabs.com 2>/dev/null || true
gsettings reset-recursively org.gnome.shell.extensions.gaze
rm -rf ~/.local/share/gnome-shell/extensions/gaze@gundulabs.com
rm -f ~/.config/autostart/gaze-gnome-enable.desktop ~/.local/share/gaze/gnome-enable.sh

Repeat this for each desktop user who enabled lock screen face unlock. The rm -rf removes any per-user copy of the extension (left by gnome-extensions install or a development checkout); without it GNOME keeps listing the extension as disabled. The last line removes the one-shot autostart entry the installer leaves behind to finish enabling the extension at the next login; it normally deletes itself once it has run.

Reset Cinnamon lock screen settings ​

bash
gsettings set org.cinnamon enabled-extensions \
  "$(gsettings get org.cinnamon enabled-extensions | sed "s/, *'gaze@gundulabs.com'//; s/'gaze@gundulabs.com', *//; s/\['gaze@gundulabs.com'\]/@as []/")"
rm -rf ~/.local/share/cinnamon/extensions/gaze@gundulabs.com
rm -rf ~/.cinnamon/configs/gaze@gundulabs.com

Repeat this for each desktop user who enabled it, then reload Cinnamon (Alt + F2, r, Enter). The last line removes the extension's saved settings, which Cinnamon keeps outside dconf.

Revert KDE face unlock ​

Removing gaze-kde strips Gaze from /etc/pam.d/kde-fingerprint and, if you enabled it, from the login greeter stacks. To undo it without removing the package:

bash
sudo gaze-kde-pam disable
sudo gaze-kde-pam disable-login

A pam_gaze line you added to those files by hand, outside Gaze's marked block, is left in place, so remove it yourself.

Restore Omarchy's stock lock ​

Run gaze-omarchy disable from each user's unlocked desktop before removing gaze-omarchy or gaze-omarchy-bin. This restores the stock lock and removes only Gaze's package-owned plugin link. gaze uninstall performs this step for the current user and stops before removal if it fails. See the Omarchy guide.

Revert hyprlock face unlock ​

If you enabled Gaze for hyprlock, remove the module = hyprlock-gaze line from the auth { pam { ... } } block in ~/.config/hypr/hyprlock.conf (or restore ~/.config/hypr/hyprlock.conf.gaze-backup if the installer created one). Repeat for every user that enabled it.

bash
sed -i.bak '/^\s*module\s*=\s*hyprlock-gaze/d' "${XDG_CONFIG_HOME:-$HOME/.config}/hypr/hyprlock.conf"

Remove GDM login defaults and overrides ​

bash
sudo rm -f /etc/dconf/db/gdm.d/*gaze*
sudo dconf update

Revert PAM configuration ​

bash
sudo pam-auth-update --package --remove gaze
bash
if [ -f /etc/gaze/authselect.previous ]; then
  profile=$(sudo sed -n 's/^Profile ID:[[:space:]]*//p' /etc/gaze/authselect.previous)
  features=$(sudo sed -n 's/^- //p' /etc/gaze/authselect.previous | tr '\n' ' ')
  sudo authselect select "$profile" $features --force
else
  sudo authselect select sssd --force
fi
bash
sudo pam-config --delete --gaze --gaze_grosshack 2>/dev/null || true
sudo pam-config --update 2>/dev/null || true
bash
sudo sed -i '/pam_gaze/d' /etc/pam.d/sudo
bash
# Remove Gaze lines from the stack where you added them.
# Use common-auth-pc on openSUSE or system-auth on Fedora/Arch.
sudo nano /etc/pam.d/common-auth-pc  # openSUSE
# sudo nano /etc/pam.d/system-auth   # Fedora/Arch

Stop and disable the daemon ​

bash
sudo systemctl stop gazed
sudo systemctl disable gazed

Step 2: Remove packages ​

bash
sudo apt remove --purge gaze gaze-gui gaze-gnome-extension gaze-cinnamon-extension gaze-hyprlock gaze-kde
sudo apt autoremove
bash
sudo dnf remove gaze gaze-gui gaze-gnome-extension gaze-cinnamon-extension gaze-hyprlock gaze-kde
bash
sudo zypper remove gaze gaze-gui gaze-gnome-extension gaze-cinnamon-extension gaze-hyprlock gaze-kde
bash
# Drop any name that isn't installed; -Rns errors out on an unknown package.
sudo pacman -Rns gaze-bin gaze-gui-bin gaze-gnome-extension-bin gaze-hyprlock-bin gaze-kde-bin
# If you installed the Cinnamon extension, remove it too (check the exact name with `pacman -Qs gaze`):
sudo pacman -Rns gaze-cinnamon-extension-bin
# AUR builds may also have installed -debug split packages:
pacman -Q | awk '/^gaze.*-debug /{print $1}' | xargs -r sudo pacman -Rns --noconfirm
bash
flatpak uninstall com.gundulabs.Gaze

Step 3: Remove the package repository ​

bash
sudo rm /etc/apt/sources.list.d/gundulabs.list
sudo rm /usr/share/keyrings/gundulabs-archive-keyring.gpg
sudo apt update
bash
sudo rm /etc/yum.repos.d/gundulabs.repo
sudo rpm -e gpg-pubkey-$(rpm -qa gpg-pubkey --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{SUMMARY}\n' | grep -i gundulabs | awk '{print $1}' | sed 's/gpg-pubkey-//')
sudo dnf makecache
bash
sudo zypper removerepo gundulabs 2>/dev/null || true
sudo rm -f /etc/zypp/repos.d/gundulabs.repo
sudo rm -f /etc/pki/rpm-gpg/RPM-GPG-KEY-gundulabs
sudo rpm -e gpg-pubkey-$(rpm -qa gpg-pubkey --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{SUMMARY}\n' | grep -i gundulabs | awk '{print $1}' | sed 's/gpg-pubkey-//') 2>/dev/null || true
sudo zypper refresh
bash
sudo dnf copr disable gundulabs/gaze
sudo dnf makecache
bash
# AUR installs do not add a Gundu Labs pacman repo.
# Only run this if you previously configured the old pacman repo.
sudo sed -i '/^\[gaze\]/,/^$/d' /etc/pacman.conf
sudo rm -f /etc/pacman.d/gaze-mirrorlist
sudo pacman -Sy
bash
flatpak remote-delete gundulabs

Step 4: Remove leftover data ​

Package removal does not delete user data, downloaded models, or configuration files that were modified. Remove these manually if you want a clean slate.

Refresh compiled GNOME settings after package removal if your package manager did not run the hook:

bash
sudo dconf update
sudo glib-compile-schemas /usr/share/glib-2.0/schemas

Face enrollment data ​

/var/lib/gaze holds the enrolled templates (users/), the TPM-sealed template key (tpm/), and any TPM-protected GNOME Keyring credentials (keyring/):

bash
sudo rm -rf /var/lib/gaze

Downloaded ML models and cache ​

bash
sudo rm -rf /var/cache/gaze

Configuration ​

bash
sudo rm -rf /etc/gaze

Systemd drop-ins ​

Local overrides for the daemon (debug logging, development checkouts) live in a gazed-specific directory:

bash
sudo rm -rf /etc/systemd/system/gazed.service.d

Core dumps ​

If gazed ever crashed, systemd may have saved core dumps. These can contain decrypted face templates from the daemon's memory, so remove them:

bash
sudo find /var/lib/systemd/coredump \( -name 'core.gazed.*' -o -name 'core.gaze.*' -o -name 'core.gaze-gui.*' \) -delete

SELinux policy (RPM installs with SELinux enabled) ​

bash
if command -v semodule >/dev/null 2>&1; then
  sudo semodule -r gaze-gdm-camera
  sudo semodule -r gaze-greeter-keyring
fi

Step 5: Reload system services ​

bash
sudo systemctl daemon-reload

Verify removal ​

bash
# All of these should fail with "command not found"
gaze --version
gazed --version
gaze-gui --help

# Should show "inactive" or "not found"
systemctl status gazed