Uninstallation
This guide explains how to remove Gaze and its components from your system.
Quickest path: gaze uninstall
gaze uninstallOn 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
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.shRepeat 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
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.comRepeat 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:
sudo gaze-kde-pam disable
sudo gaze-kde-pam disable-loginA 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.
sed -i.bak '/^\s*module\s*=\s*hyprlock-gaze/d' "${XDG_CONFIG_HOME:-$HOME/.config}/hypr/hyprlock.conf"Remove GDM login defaults and overrides
sudo rm -f /etc/dconf/db/gdm.d/*gaze*
sudo dconf updateRevert PAM configuration
sudo pam-auth-update --package --remove gazeif [ -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
fisudo pam-config --delete --gaze --gaze_grosshack 2>/dev/null || true
sudo pam-config --update 2>/dev/null || truesudo sed -i '/pam_gaze/d' /etc/pam.d/sudo# 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/ArchStop and disable the daemon
sudo systemctl stop gazed
sudo systemctl disable gazedStep 2: Remove packages
sudo apt remove --purge gaze gaze-gui gaze-gnome-extension gaze-cinnamon-extension gaze-hyprlock gaze-kde
sudo apt autoremovesudo dnf remove gaze gaze-gui gaze-gnome-extension gaze-cinnamon-extension gaze-hyprlock gaze-kdesudo zypper remove gaze gaze-gui gaze-gnome-extension gaze-cinnamon-extension gaze-hyprlock gaze-kde# 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 --noconfirmflatpak uninstall com.gundulabs.GazeStep 3: Remove the package repository
sudo rm /etc/apt/sources.list.d/gundulabs.list
sudo rm /usr/share/keyrings/gundulabs-archive-keyring.gpg
sudo apt updatesudo 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 makecachesudo 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 refreshsudo dnf copr disable gundulabs/gaze
sudo dnf makecache# 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 -Syflatpak remote-delete gundulabsStep 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:
sudo dconf update
sudo glib-compile-schemas /usr/share/glib-2.0/schemasFace enrollment data
/var/lib/gaze holds the enrolled templates (users/), the TPM-sealed template key (tpm/), and any TPM-protected GNOME Keyring credentials (keyring/):
sudo rm -rf /var/lib/gazeDownloaded ML models and cache
sudo rm -rf /var/cache/gazeConfiguration
sudo rm -rf /etc/gazeSystemd drop-ins
Local overrides for the daemon (debug logging, development checkouts) live in a gazed-specific directory:
sudo rm -rf /etc/systemd/system/gazed.service.dCore 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:
sudo find /var/lib/systemd/coredump \( -name 'core.gazed.*' -o -name 'core.gaze.*' -o -name 'core.gaze-gui.*' \) -deleteSELinux policy (RPM installs with SELinux enabled)
if command -v semodule >/dev/null 2>&1; then
sudo semodule -r gaze-gdm-camera
sudo semodule -r gaze-greeter-keyring
fiStep 5: Reload system services
sudo systemctl daemon-reloadVerify removal
# 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