dotool(1)

πŸ“¦
version 1.6 Β· 4 versions
, in fedora 43, fedora 44

πŸ’– dotool β€” the manual page, but make it slay πŸ’–

okay bestie, sit down, hydrate, because we're about to talk about dotool, from the dotool(1) manual. it's a uinput tool. it's iconic. let's go. ✨


🌸 NAME 🌸

dotool β€” a uinput tool, aka the thing that types for you. no cap.


πŸŽ€ SYNOPSIS πŸŽ€

dotool < actions

that's it. that's the whole vibe. you feed it actions on stdin and it goes off. πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

dotool reads actions from stdin and simulates keyboard/mouse input using Linux's uinput module.

so basically it's a puppet master for your keyboard and mouse. it's giving main character energy, honestly. lowkey obsessed. 😭


πŸ” PERMISSION πŸ”

dotool requires write permission to /dev/uinput, which is granted to users in group input by a udev rule.

you can test:

echo type hello | dotool

and if need be, you could add your user to group input with:

groupadd -f input
usermod -a -G input $USER

and then it's foolproof to reboot to make the group and rule effective.

okay so real talk: that reboot? not optional. do it, bestie. the group and the rule need it to actually kick in. 😀

⌨️ KEYBOARD LAYOUTS ⌨️

dotool may type gobbledygook if it's simulating keycodes for a different keyboard layout than your environment is expecting.

(not the gobbledygook era πŸ’€ we do not claim her.)

you can specify the layout with the environment variables DOTOOL_XKB_LAYOUT and DOTOOL_XKB_VARIANT. for example:

echo type azerty | DOTOOL_XKB_LAYOUT=fr dotool

you can also specify the name to give the virtual keyboard with the environment variable DOTOOL_KEYBOARD_NAME, which can be useful making rules for your environment.

currently the type action has only heuristic support for dead keys. (heuristic. as in vibes-based. she's trying her best 🫢)


✨ OPTIONS ✨

  • -h, --help β€” print help and exit. the classic.
  • --list-keys β€” print the possible Linux keys and exit.
  • --list-x-keys β€” print the possible XKB keys and exit.
  • --version β€” print the version and exit.

πŸ‘‘ ACTIONS πŸ‘‘

πŸ’œ key / keydown / keyup

  • key CHORD...
  • keydown CHORD...
  • keyup CHORD...

press and/or release each CHORD. a CHORD is a key or a key with modifiers, such as a, shift+a or ctrl+shift+a.

the supported modifiers are super, altgr, ctrl, alt and shift.

keys can be specified by Linux names, XKB names prefixed with x:, or Linux keycodes prefixed with k:. the Linux names are case-insensitive, except uppercase character keys also simulate shift. this example types !!! with the us layout:

echo key shift+1 x:exclam shift+k:2 | dotool

the way that one line flexes three different naming schemes?? we stan a polyglot. πŸ”₯

πŸ’œ type

  • type TEXT β€” type TEXT. yes, really. go off.

πŸ’œ click / buttondown / buttonup

  • click left/middle/right
  • buttondown left/middle/right
  • buttonup left/middle/right

press and/or release a mouse button.

πŸ’œ wheel / hwheel

  • wheel AMOUNT
  • hwheel AMOUNT

scroll a vertical/horizontal mouse wheel by a positive or negative AMOUNT.

πŸ’œ mouseto

  • mouseto X Y β€” jump the cursor to the position X Y, where X and Y are percentages between 0.0 and 1.0.

πŸ’œ mousemove

  • mousemove X Y β€” move the cursor relative to its current position.

πŸ’œ keydelay / keyhold / typedelay / typehold

  • keydelay MILLISECONDS
  • keyhold MILLISECONDS
  • typedelay MILLISECONDS
  • typehold MILLISECONDS

set the delay between/holding each key with the key* actions/type action.

the default keydelay and typedelay is 2ms, and the default keyhold and typehold is 8ms.

girlies who tune their own timing? different breed. πŸ•βœ¨

🌈 LONG-RUNNING INSTANCE 🌈

each instance of dotool has an initial delay registering the virtual devices, but you can keep writing actions to a long-running instance. the daemon and client, dotoold and dotoolc, let you do this with a pipe behind the scenes, for example:

dotoold &
echo type super | dotoolc
echo type speedy | dotoolc

so like. start her up once, then just keep whispering to her through dotoolc. no more startup delay. it's giving efficiency, it's giving connoisseur. 🧚


πŸ’… EXAMPLES πŸ’…

this greets the world:

echo type hi | dotool

this screams for roughly three seconds:

{ echo keydown A; sleep 3; echo key H shift+1; } | dotool

three whole seconds of screaming. commitment. respect. 😌 (also note that shift+1 is !, iykyk.)


πŸ“ AUTHOR πŸ“

John Gebbie


okay bestie that's the whole page, you're officially fluent in dotool 🫢 this was the dotool(1) page from the General Commands Manual, dated 2026-10-19, and yes she's still out here being the most useful little uinput girlie in the game. mwah. πŸ’–

go type something iconic, bestie πŸ’«

πŸ“¦ where this page comes from