andrewshadura
inputplug
Rust

XInput event monitor daemon

Last updated Dec 25, 2025
43
Stars
10
Forks
5
Issues
0
Stars/day
Attention Score
21
Language breakdown
Rust 54.0%
Roff 42.8%
Makefile 3.2%
โ–ธ Files click to expand
README

inputplug =========

inputplug is a very simple daemon which monitors XInput events and runs arbitrary scripts on hierarchy change events (such as a device being attached, removed, enabled or disabled).

To build the project, run cargo build.

*

NAME

inputplug โ€” XInput event monitor

SYNOPSIS

inputplug \[-v\] \[-n\] \[-d\] \[-0\] -c command-prefix

inputplug \[-h|--help\]

DESCRIPTION

inputplug is a daemon which connects to a running X server and monitors its XInput hierarchy change events. Such events arrive when a device is being attached or removed, enabled or disabled etc.

When a hierarchy change happens, inputplug parses the event notification structure, and calls the command specified by command-prefix. The command receives four arguments:

  • command-prefix event-type device-id device-type device-name
Event type may be one of the following:
  • XIMasterAdded
  • XIMasterRemoved
  • XISlaveAdded
  • XISlaveRemoved
  • XISlaveAttached
  • XISlaveDetached
  • XIDeviceEnabled
  • XIDeviceDisabled
Device type may be any of those:
  • XIMasterPointer
  • XIMasterKeyboard
  • XISlavePointer
  • XISlaveKeyboard
  • XIFloatingSlave
Device identifier is an integer. The device name may have embedded spaces.

OPTIONS

A summary of options is included below.

  • -h, --help
Show help (--help shows more details).
  • -v
Be a bit more verbose.
  • -n
Start up, monitor events, but don't actually run anything. With verbose more enabled, would print the actual command it'd run. This implies -d.
  • -d
Don't daemonise. Run in the foreground.
  • -0
On start, trigger added and enabled events for each plugged devices. A master device will trigger the "added" event while a slave device will trigger both the "added" and the "enabled" device.
  • -c command-prefix
Command prefix to run. Unfortunately, currently this is passed to execvp(3) directly, so spaces aren't allowed. This is subject to change in future.
  • -p pidfile
Write the process ID of the running daemon to the file pidfile

ENVIRONMENT

  • DISPLAY
X11 display to connect to.

SEE ALSO

xinput(1)

COPYRIGHT

Copyright (C) 2013, 2014, 2018, 2020, 2021 Andrej Shadura.

Copyright (C) 2014, 2020 Vincent Bernat.

Licensed as MIT/X11.

AUTHOR

Andrej Shadura

๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท andrewshadura/inputplug ยท Updated daily from GitHub