2.8 KiB
2.8 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)
Add to /etc/pam.d/screensaver (requires sudo):
auth optional /usr/local/lib/ahfail/libahfail_pam.so
Place it after the existing auth line(s) so it observes the real auth result.
Configure PAM (Linux/X11)
Add to /etc/pam.d/gtklock (or i3lock, xscreensaver, etc.):
auth optional ahfail-pam.so
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.