xidlehook 0.4.8

xautolock rewrite in Rust, with a few extra features
xidlehook-0.4.8 is not a library.

xidlehook

Because xautolock is annoying to work with.

xidlehook is a general-purpose replacement for xautolock.
It basically just executes a command when the computer has been idle for _ minutes.

Improvements over xautolock:

  • As well as a notifier, there is now a canceller, for when the user stops it from locking.
  • Not specific to locking. Multiple instances can run at the same time.
  • Optionally only run once.
  • Optionally prevent locking when an application is fullscreen.
  • Optionally prevent locking when any application plays audio.

Missing features:

  • Magic corners.
  • --killer stuff whatever that is.
  • Bell, because you should be using --notify.
  • All the instance related stuff (you should use unix sockets with --socket).

Example

Here's a lock using i3lock, with screen dim support:

xidlehook \
  --time 5 \
  --timer 'xrandr --output "$(xrandr | grep primary | cut -d " " -f 1)" --brightness 1; i3lock' \
  --notify 10 \
  --notifier  'xrandr --output "$(xrandr | grep primary | cut -d " " -f 1)" --brightness .1' \
  --canceller 'xrandr --output "$(xrandr | grep primary | cut -d " " -f 1)" --brightness 1' \
  --not-when-fullscreen \
  --not-when-audio

Note: Every command is passed through sh -c, so you should be able to mostly use normal syntax.

For an example in practice, here's what I use personally.

Installation

Installation using cargo:

cargo install xidlehook

Or if you're on Arch Linux and prefer using the AUR:

AUR package

Or if you're using Nix:

nix-env -iA nixpkgs.xidlehook

Or if you want to clone it manually:

git clone https://github.com/jD91mZM2/xidlehook
cd xidlehook
cargo build --release

Too bloaty?

Are you not using pulseaudio?
You can disable that requirement completely with --no-default-features!
This however gets rid of --not-when-audio.

Socket API

The socket API is very simple. Each packet is a single byte.

Byte Command
0x0 Deactivate
0x1 Activate
0x2 Trigger the timer command

For example, if you wanted to lock the screen, you could bind the following to a keyboard shortcut:

echo -ne "\x2" | socat - UNIX-CONNECT:/path/to/xidlehook.sock