Auto Keyboard Pressing Using xvkbd in Linux
Posted on In LinuxAutomatic keyboard pressers are useful tools. However, it seems that there is no simple and easy to use automatic keyboard presser for Linux if you search for “automatic keyboard presser linux”. After some digging, I find using the xvkbd with some options is a good method for automatic keyboard pressing though it is not designed for this purpose.
Table of Contents
One example
Let’s use one example here to introduce how to use xvkbd
as a automatic keyboard presser: we want to refresh the browser every 5 seconds to check a webpage for changes. If you do it manually, you press Ctrl + r
every 5 seconds. Let’s make the computer do it automatically for us while what we need to do is just to watch the screen while drinking a cup of tea.
xvkbd sends a string
xvkbd
has an option -text
which can send the string to the focused window:
-text string Send the string to the focused window (see also `-window' option). If this option is specified, xvkbd will not open its window and terminate soon after sending the string. The string can contain: \r - Return \t - Tab \b - Backspace \e - Escape \d - Delete \S - Shift (modify the next character; please note that modify with ``\S'' will be ignored in many cases. For example, ``a\Cb\ScD\CE'' will be interpreted as a, Control-b, c, Shift-D, and Control-Shift-E.) \C - Control (modify the next character) \A - Alt (modify the next character) \M - Meta (modify the next character) \[keysym] - the keysym keysym (e.g., \[Left]), which will be processed in the similar matter with other general characters \{keysym} - the keysym keysym (e.g., \{Left}), which will be processed in more primitive matter and can also be used for modofier keys such as Control_L, Meta_L, etc.; also, \{+keysym} and \{+keysym} will simulate press and release of the key, respectively \Ddigit - delay digit * 100 ms \xvalue - move mouse pointer (use "+" or "-" for relative motion) \yvalue - move mouse pointer (use "+" or "-" for relative motion) \mdigit - simulate click of the specified mouse button
With this option, we can send out Ctrl + r
by:
xvkbd -text "\Cr"
The script as the automatic key presser
With the option of xvkbd
, we can write our own automatic key presser with a bit bash script to repeatedly invoke xvkbd
.
Here comes the script that automatically refresh the browser (the active window).
while true; do xvkbd -text "\Cr"; sleep 5; done;
Execute it in a shell, make the browser focused and then you can watch the page “automatically” refreshed.
When you want to stop the “automatic keyboard presser”, just press Ctrl+c
in the shell window.
More interesting and complex key pressers can be made using the functions provided by xvkbd
(especially the \D
to delay a little while).
Very cool article! thanks.
To find our the mouse buttons for the `m` command, you can use the `xev` command. It is usually as follows.
left = 1
wheel-as-button = 2
right = 3
wheel-up = 4
wheel-down = 5
An alternative tool to xvkbd is xdotool:
xdotool: command-line X11 automation tool: https://www.systutorials.com/docs/linux/man/1-xdotool/
To simulate pressing key K:
xdotool key k