Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/oldnomad/udotool
udotool is a tool to emulate input events in Linux. It uses kernel uinput driver, which allows userspace program to emulate an input device.
https://github.com/oldnomad/udotool
automation linux scripting xdotool
Last synced: about 1 month ago
JSON representation
udotool is a tool to emulate input events in Linux. It uses kernel uinput driver, which allows userspace program to emulate an input device.
- Host: GitHub
- URL: https://github.com/oldnomad/udotool
- Owner: oldnomad
- License: gpl-3.0
- Created: 2024-07-26T18:22:27.000Z (5 months ago)
- Default Branch: master
- Last Pushed: 2024-11-05T15:44:46.000Z (about 2 months ago)
- Last Synced: 2024-11-05T16:45:01.622Z (about 2 months ago)
- Topics: automation, linux, scripting, xdotool
- Language: C
- Homepage: https://gitlab.com/oldnomad/udotool
- Size: 262 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# UDOTOOL: Simulate input events in Linux
**udotool** is a tool to emulate input events in Linux. It uses
kernel `uinput` driver, which allows userspace program to emulate
an input device.Since the program uses a kernel feature, it works in any environment:
X11, Wayland, even console. It can emulate keyboard input,
mouse/trackball/touchpad movement and clicks, various gamepads, etc.**udotool** also supports reading commands from files or standard
input, so it can be used to create input-emulating scripts:```
#!/usr/bin/udotool -i
echo "Move mouse around and double-click"
sleep 5
position 10 12.5
loop 20
move +16 +16
key -repeat 2 BTN_LEFT
end
```**WARNING:** **udotool** is currently under active development, so
script language may change even between minor versions. Script language
is expected to become stable in version **2.0**.## Building and installing
Build-time dependencies are:
- `gcc(1)`, `glibc(7)`, `make(1)`, `install(1)`, and some common POSIX
commands are used in the build process.
- `pandoc(1)` is needed for building the manpage.
- Package `debhelper` is needed to build a Debian package.
- `git(1)` and `envsubst(1)` (package `gettext-base` in Debian) are used to
determine program version and generate file `src/config.h`.
- Linux kernel headers (package `linux-libc-dev` in Debian) are needed for
`uinput` constants.Building just the binary and the manpage, and installing them:
```sh
make all
sudo make prefix=/usr/local install
```Building Debian package:
```sh
make package
```## Quirks and tweaks
Some sections of the code are guarded by conditional compilation controlled
by preprocessor defines. Such sections may be switched on or off by passing
to `make` a list of quirk names (in variable `QUIRKS`) and a list of tweak
names (in variable `TWEAKS`). The difference between quirks and tweaks is
that quirks change visible program behavior, while tweaks are just internal
changes.Following quirks are defined at the moment:
- `LIBINPUT` (on by default): for reasons related to how `libinput` guesses
input device type, buttons with values `0x140` to `0x14f` (`BTN_TOOL_PEN`
to `BTN_TOOL_QUADTAP`), which are used by tablets (digitizers) and
touchscreens, are disabled. See [separate document](doc/QUIRK-LIBINPUT.md).Following tweaks are defined at the moment:
- `NOMMAN`: by default, we use `memfd_create(2)` to create a temporary file
in memory. If this tweak is defined, we use `open(2)` with Linux-specific
flag `O_TMPFILE` instead. Both variants are available on Linux only, and
the second one has higher chances to fail, especially if path `/tmp` is
mounted on some unsupported file system. However, it also has higher
chances to work when the system is memory-constrained.## Compatibility notes
- This program uses `/dev/uinput` device, available only in Linux. It's
not intended to be useful on other OSes.
- While it's declared that this program is compatible with Linux kernels
from 4.5 onwards, it never was actually tested on old kernels. If it
breaks on your kernel, please file a bug.## Acknowledgements and thanks
- This tool was inspired by [xdotool](https://github.com/jordansissel/xdotool)
by [Jordan Sissel](https://github.com/jordansissel).