megalock 0.1.0

X11 xlock replacement
# megalock: X11 xlock replacement

This currently is a substrate for a minimal xlock replacement in Rust. It is only functional with X11, but performs the following functions:

- Blanks the entire screen regardless of monitor configuration
- Grabs the keyboard and pointing devices
- Buffers all input into a password
- Performs all password checking through PAM
- Upon pressing enter, verifies that password
    - On success, the program exits
    - On failure, the program clears the password field and continues
- Additionally, the following environment variables are respected:
    - `TRACE=1`: Enable Trace (lowest) level debugging
    - `DEBUG=1`: Enable Debug level logging -- most status changes, but no raw data
    - `EXIT_TRAP=n`: Forcefully terminate the program after `n` seconds

It performs no indication of events while displaying the lock screen. This is
being worked on now.

Events are all synthetic, which are then translated to X11 calls in a dedicated thread. This should allow for easy porting to wayland later without breaking the X11 contract, allowing `megalock` to work with both systems natively.

Optimized binary size is about 730k, which was a nice discovery. We'll see if that sticks.

## PAM configuration

If you use `megalock`, be sure to put [contrib/megalock](contrib/megalock) in `/etc/pam.d` so that megalock can use the PAM subsystem effectively. `megalock` may not work on OpenBSD.

## Thanks

Special thanks to Michael Stapelberg, who wrote `i3lock`, I spent a lot of time reading it while learning how to write this program.

## Author

Erik Hollensbe <git@hollensbe.org>

## License

MIT