3.1 KiB
Ah ah ah, you didn't say the magic word
This gtklock module listens for failed unlock attempts and recreates Dennis Nedry’s “ah ah ah” lockout scene from Jurassic Park.
- Animation: Spawns a looping "Nedry" sprite at a random location on the screen.
- Audio: Plays the "ah ah ah, you didn't say the magic word" clip.
- Safety: Sprites avoid overlapping a configurable "deadzone" (e.g., your login box).
- Performance: Uses pre-warmed audio players for low latency and scaled images to fit any screen.
Requirements
- Build: Meson, Ninja, Rust (Cargo), GTK+3 development headers.
- Runtime:
gtklock,gstreamer,gst-plugins-base,gst-plugins-good(for audio playback).
Build & Install
-
Install Dependencies (Arch Linux example):
sudo pacman -S meson ninja rust gtk3 gstreamer gst-plugins-base gst-plugins-good gst-libav -
Build:
meson setup builddir meson compile -C builddir -
Install:
sudo meson install -C builddir
Usage
Run gtklock with the module path:
gtklock -m /usr/lib/gtklock/ahfail-module.so
Arguments
-
--deadzone=X,Y,W,H: Defines a rectangle where sprites will not spawn (e.g., to keep your password field visible).gtklock -m ahfail-module.so -- --deadzone=860,440,200,200(Note the
--separator before module arguments) -
--audio-uri=URI: Override the default audio clip.gtklock -m ahfail-module.so -- --audio-uri=file:///home/user/custom.mp3
macOS (build from source)
Prerequisites
brew install gtk+3 gstreamer gst-plugins-base gst-plugins-good meson ninja rust
Build
meson setup builddir
meson compile -C builddir
Produces:
builddir/ahfail-module.so— gtklock module (Wayland/Linux only)builddir/libahfail_pam.so— PAM module (macOS + X11 Linux)builddir/ahfail-display— display binary (spawned by PAM module)
Install
sudo mkdir -p /usr/local/lib/ahfail
sudo cp builddir/libahfail_pam.so /usr/local/lib/ahfail/
sudo cp builddir/ahfail-display /usr/local/lib/ahfail/
Configure PAM (macOS)
Find your screen locker's PAM service file. On macOS 13+ the screensaver uses /etc/pam.d/screensaverui; on older versions it may be /etc/pam.d/screensaver. Add the following line after the existing auth entries (requires sudo):
auth optional /usr/local/lib/ahfail/libahfail_pam.so
Configure PAM (Linux/X11)
Add to /etc/pam.d/gtklock (or i3lock, xscreensaver, etc.). Use the full path because $(libdir)/ahfail is not in PAM's default search path:
auth optional /usr/lib/ahfail/libahfail_pam.so
On Fedora/RHEL replace /usr/lib with /usr/lib64.
Development
- Run Tests:
cargo test - Benchmarks:
cargo test --test benchmarks -- --nocapture - Linting:
cargo clippy
Customization
To change the default sprite or audio:
- Replace files in
assets/. - Update
assets/ahfail.gresource.xml. - Rebuild with Meson.