Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
XDOTOOL(1)							    XDOTOOL(1)

NAME
       xdotool - command-line X11 automation tool

SYNOPSIS
       xdotool cmd args...

       Notation: Some documentation uses [window] to denote an optional	window
       argument. This case means that the argument, if not present, will
       default to "%1".	See "WINDOW STACK" for what "%1" means.

DESCRIPTION
       xdotool lets you	programmatically (or manually) simulate	keyboard input
       and mouse activity, move	and resize windows, etc. It does this using
       X11's XTEST extension and other Xlib functions.

       There is	some support for Extended Window Manager Hints (aka EWMH or
       NetWM).	See the	"EXTENDED WINDOW MANAGER HINTS"	section	for more
       information.

KEYBOARD COMMANDS
       key [options] keystroke [keystroke ...]
	   Options:

	   --window window
	       Send keystrokes to a specific window id.	You can	use "WINDOW
	       STACK" references like "%1" and "%@" here. If there is a	window
	       stack, then "%1"	is the default,	otherwise the current window
	       is used.

	       See also: "SENDEVENT NOTES" and "WINDOW STACK"

	   --clearmodifiers
	       Clear modifiers before sending keystrokes. See CLEARMODIFIERS
	       below.

	   --delay milliseconds
	       Delay between keystrokes. Default is 12ms.

	   Type	a given	keystroke. Examples being "alt+r", "Control_L+J",
	   "ctrl+alt+n", "BackSpace".

	   Generally, any valid	X Keysym string	will work. Multiple keys are
	   separated by	'+'. Aliases exist for "alt", "ctrl", "shift",
	   "super", and	"meta" which all map to	Foo_L, such as Alt_L and
	   Control_L, etc.

	   In cases where your keyboard	doesn't	actually have the key you want
	   to type, xdotool will automatically find an unused keycode and use
	   that	to type	the key.

	   With	respect	to "COMMAND CHAINING", this command consumes the
	   remainder of	the arguments or until a new xdotool command is	seen,
	   because no xdotool commands are valid keystrokes.

	   Example: Send the keystroke "F2"
	    xdotool key	F2

	   Example: Send 'a' with an accent over it (not on English keyboards,
	   but still works with	xdotool)
	    xdotool key	Aacute

	   Example: Send ctrl+l	and then BackSpace as separate keystrokes:
	    xdotool key	ctrl+l BackSpace

	   Example: Send ctrl+c	to all windows matching	title 'gdb' (See
	   "COMMAND CHAINING")
	    xdotool search --name gdb key ctrl+c

       keydown [options] keystroke
	   Same	as above, except only keydown (press) events are sent.

       keyup keystroke
	   Same	as above, except only keyup (release) events are sent.

       type [options] something	to type
	   Options:

	   --window windowid
	       Send keystrokes to a specific window id.	See "SENDEVENT NOTES"
	       below. The default, if no window	is given, depends on the
	       window stack. If	the window stack is empty the current window
	       is typed	at using XTEST.	Otherwise, the default is "%1" (see
	       "WINDOW STACK").

	   --delay milliseconds
	       Delay between keystrokes. Default is 12ms.

	   --clearmodifiers
	       Clear modifiers before sending keystrokes. See CLEARMODIFIERS
	       below.

	   Types as if you had typed it. Supports newlines and tabs (ASCII
	   newline and tab). Each keystroke is separated by a delay given by
	   the --delay option.

	   With	respect	to "COMMAND CHAINING", this command consumes the
	   remainder of	the arguments and types	them. That is, no commands can
	   chain after 'type'.

	   Example: to type 'Hello world!' you would do:
	    xdotool type 'Hello	world!'

MOUSE COMMANDS
       mousemove [options] x y OR 'restore'
	   Move	the mouse to the specific X and	Y coordinates on the screen.

	   You can move	the mouse to the previous location if you specify
	   'restore' instead of	an X and Y coordinate. Restoring only works if
	   you have moved previously in	this same command invocation. Further,
	   it does not work with the --window option.

	   For example,	to click the top-left corner of	the screen and move
	   the mouse to	the original position before you moved it, use this:
	    xdotool mousemove 0	0 click	1 mousemove restore

	   --window WINDOW
	       Specify a window	to move	relative to. Coordinates 0,0 are at
	       the top left of the window you choose.

	       "WINDOW STACK" references are valid here, such as %1 and	%@.
	       Though, using %@	probably doesn't make sense.

	   --screen SCREEN
	       Move the	mouse to the specified screen to move to. This is only
	       useful if you have multiple screens and ARE NOT using Xinerama.

	       The default is the current screen. If you specify --window, the
	       --screen	flag is	ignored.

	   --polar
	       Use polar coordinates. This makes 'x' an	angle (in degrees,
	       0-360, etc) and 'y' the distance.

	       Rotation	starts at 'up' (0 degrees) and rotates clockwise: 90 =
	       right, 180 = down, 270 =	left.

	       The origin defaults to the center of the	current	screen.	If you
	       specify a --window, then	the origin is the center of that
	       window.

	   --clearmodifiers
	       See CLEARMODIFIERS

	   --sync
	       After sending the mouse move request, wait until	the mouse is
	       actually	moved. If no movement is necessary, we will not	wait.
	       This is useful for scripts that depend on actions being
	       completed before	moving on.

	       Note: We	wait until the mouse moves at all, not necessarily
	       that it actually	reaches	your intended destination. Some
	       applications lock the mouse cursor to certain regions of	the
	       screen, so waiting for any movement is better in	the general
	       case than waiting for a specific	target.

       mousemove_relative [options] x y
	   Move	the mouse x,y pixels relative to the current position of the
	   mouse cursor.

	   --polar
	       Use polar coordinates. This makes 'x' an	angle (in degrees,
	       0-360, etc) and 'y' the distance.

	       Rotation	starts at 'up' (0 degrees) and rotates clockwise: 90 =
	       right, 180 = down, 270 =	left.

	   --sync
	       After sending the mouse move request, wait until	the mouse is
	       actually	moved. If no movement is necessary, we will not	wait.
	       This is useful for scripts that depend on actions being
	       completed before	moving on.

	       Note that we wait until the mouse moves at all, not necessarily
	       that it actually	reaches	your intended destination. Some
	       applications lock the mouse cursor to certain regions of	the
	       screen, so waiting for any movement is better in	the general
	       case than waiting for a specific	target.

	   --clearmodifiers
	       See CLEARMODIFIERS

       click [options] button
	   Send	a click, that is, a mousedown followed by mouseup for the
	   given button	with a short delay between the two (currently 12ms).

	   Buttons generally map this way: Left	mouse is 1, middle is 2, right
	   is 3, wheel up is 4,	wheel down is 5.

	   --clearmodifiers
	       Clear modifiers before clicking.	See CLEARMODIFIERS below.

	   --repeat REPEAT
	       Specify how many	times to click.	Default	is 1. For a
	       double-click, use '--repeat 2'

	   --delay MILLISECONDS
	       Specify how long, in milliseconds, to delay between clicks.
	       This option is not used if the --repeat flag is set to 1
	       (default).

	   --window WINDOW
	       Specify a window	to send	a click	to. See	"SENDEVENT NOTES"
	       below for caveats. Uses the current mouse position when
	       generating the event.

	       The default, if no window is given, depends on the window
	       stack. If the window stack is empty the current window is typed
	       at using	XTEST. Otherwise, the default is "%1" (see "WINDOW
	       STACK").

       mousedown [options] button
	   Same	as click, except only a	mouse down is sent.

       mouseup [options] button
	   Same	as click, except only a	mouse up is sent.

       getmouselocation	[--shell]
	   Outputs the x, y, screen, and window	id of the mouse	cursor.	Screen
	   numbers will	be nonzero if you have multiple	monitors and are not
	   using Xinerama.

	   This	command	updates	the window stack with the window id of the
	   window directly underneath the mouse.

	   --shell
	       This makes getmouselocation output shell	data you can eval.
	       Example:

		% xdotool getmouselocation --shell
		X=880
		Y=443
		SCREEN=0
		WINDOW=16777250

		% eval $(xdotool getmouselocation --shell)
		% echo $X,$Y
		714,324

       behave_screen_edge [options] where command ...
	   Bind	an action to events when the mouse hits	the screen edge	or
	   corner.

	   Options are:

	   --delay MILLISECONDS
	       Delay in	milliseconds before running the	command. This allows
	       you to require a	given edge or corner to	be held	for a short
	       period before your command will run. If you leave the edge or
	       corner before the delay expires then the	time will reset.

	   --quiesce MILLISECONDS
	       Delay in	milliseconds before the	next command will run. This
	       helps prevent accidentally running your command extra times;
	       especially useful if you	have a very short --delay (like	the
	       default of 0).

	   Event timeline

	    * Mouse hits an edge or corner.
	    * If delay is nonzero, the mouse must stay in this edge or corner until delay time expires.
	    * If still in the edge/corner, trigger.
	    * If quiesce is nonzero, then there	is a cool-down period where the	next
	      trigger cannot occur

	   Valid 'where' values	are:

	   left
	   top-left
	   top
	   top-right
	   right
	   bottom-left
	   bottom
	   bottom-right

	   Examples:
	    # Activate google-chrome when you move the mouse to	the
	   bottom-left corner:
	    xdotool behave_screen_edge bottom-left \
	      search --class google-chrome windowactivate

	    # Go to the	next workspace (right).	Known to work in GNOME (metacity and compiz)
	    xdotool behave_screen_edge --delay 500 bottom-right	key XF86Forward

	    # Activate firefox and do a	web search in a	new tab	for text in your clipboard
	    xdotool behave_screen_edge --delay 1000 top-left \
		search --classname Navigator \
		windowactivate --sync key --delay 250 ctrl+t ctrl+k ctrl+v Return

WINDOW COMMANDS
       search [options]	pattern
	   Search for windows with titles, names, or classes with a regular
	   expression pattern. The output is line-delimited list of X window
	   identifiers.	If you are using "COMMAND CHAINING", the search
	   command will	only write window ids to stdout	if it is the last (or
	   only) command in the	chain; otherwise, it is	silent.

	   The result is saved to the window stack for future chained
	   commands. See "WINDOW STACK"	and "COMMAND CHAINING" for details.

	   Patterns are	POSIX extended regular expressions (ERE), e. g.
	   "Chrom(e|ium)$" for windows ending in "Chrome" or "Chromium". See
	   regex(7) for	syntax details.	 Matches are case-insensitive.

	   The default options are "--name --class --classname --role" (unless
	   you specify one or more of --name, --class, --classname, or
	   --role).

	   The options available are:

	   --class
	       Match against the window	class.

	   --classname
	       Match against the window	classname.

	   --role
	       Match against the window	role.

	   --maxdepth N
	       Set recursion/child search depth. Default is -1,	meaning
	       infinite. 0 means no depth, only	root windows will be searched.
	       If you only want	toplevel windows, set maxdepth of 1 (or	2,
	       depending on how	your window manager does decorations).

	   --name
	       Match against the window	name. This is the same string that is
	       displayed in the	window titlebar.

	   --onlyvisible
	       Show only visible windows in the	results. This means ones with
	       map state IsViewable.

	   --pid PID
	       Match windows that belong to a specific process id. This	may
	       not work	for some X applications	that do	not set	this metadata
	       on its windows.

	   --screen N
	       Select windows only on a	specific screen. Default is to search
	       all screens. Only meaningful if you have	multiple displays and
	       are not using Xinerama.

	   --desktop N
	       Only match windows on a certain desktop.	'N' is a number. The
	       default is to search all	desktops.

	   --limit N
	       Stop searching after finding N matching windows.	Specifying a
	       limit will help speed up	your search if you only	want a few
	       results.

	       The default is no search	limit (which is	equivalent to '--limit
	       0')

	   --title
	       DEPRECATED. See --name.

	   --all
	       Require that all	conditions be met. For example:

		xdotool	search --all --pid 1424	--name "Hello World"

	       This will match only windows that have "Hello World" as a name
	       and are owned by	pid 1424.

	   --any
	       Match windows that match	any condition (logically, 'or'). This
	       is on by	default. For example:

		xdotool	search --any --pid 1424	--name "Hello World"

	       This will match any windows owned by pid	1424 or	windows	with
	       name "Hello World"

	   --sync
	       Block until there are results. This is useful when you are
	       launching an application	and want to wait until the application
	       window is visible.  For example:

		google-chrome &
		xdotool	search --sync --onlyvisible --class "google-chrome"

       selectwindow
	   Get the window id (for a client) by clicking	on it. Useful for
	   having scripts query	you humans for what window to act on. For
	   example, killing a window by	clicking on it:

	    xdotool selectwindow windowkill

       behave window action command ...
	   Bind	an action to an	event on a window. This	lets you run
	   additional xdotool commands whenever	a matched event	occurs.

	   The command run as a	result of the behavior is run with %1 being
	   the window that was acted upon. Examples follow after the event
	   list.

	   The following are valid events:

	   mouse-enter
	       Fires when the mouse enters a window. This is similar to	'mouse
	       over' events in javascript, if that helps.

	   mouse-leave
	       Fires when the mouse leaves a window. This is the opposite of
	       'mouse-enter'

	   mouse-click
	       Fires when the mouse is clicked.	Specifically, when the mouse
	       button is released.

	   focus
	       Fires when the window gets input	focus.

	   blur
	       Fires when the window loses focus.

	   Examples:

	    # Print the	cursor location	whenever the mouse enters a currently-visible
	    # window:
	    xdotool search --onlyvisible . behave %@ mouse-enter getmouselocation

	    # Print the	window title and pid whenever an xterm gets focus
	    xdotool search --class xterm behave	%@ focus getwindowname getwindowpid

	    # Emulate focus-follows-mouse
	    xdotool search . behave %@ mouse-enter windowfocus

       getwindowpid [window]
	   Output the PID owning a given window. This requires effort from the
	   application owning a	window and may not work	for all	windows. This
	   uses	_NET_WM_PID property of	the window. See	"EXTENDED WINDOW
	   MANAGER HINTS" below	for more information.

	   If no window	is given, the default is '%1'. If no windows are on
	   the stack, then this	is an error. See "WINDOW STACK"	for more
	   details.

	   Example: Find the PID for all xterms:
	    xdotool search --class xterm getwindowpid %@

       getwindowname [window]
	   Output the name of a	given window, also known as the	title. This is
	   the text displayed in the window's titlebar by your window manager.

	   If no window	is given, the default is '%1'. If no windows are on
	   the stack, then this	is an error. See "WINDOW STACK"	for more
	   details.

       getwindowgeometry [options] [window]
	   Output the geometry (location and position) of a window. The	values
	   include: x, y, width, height, and screen number.

	   --shell
	       Output values suitable for 'eval' in a shell.

       getwindowfocus [-f]
	   Prints the window id	of the currently focused window. Saves the
	   result to the window	stack. See "WINDOW STACK" for more details.

	   If the current window has no	WM_CLASS property, we assume it	is not
	   a normal top-level window and traverse up the parents until we find
	   a window with a WM_CLASS set	and return that	window id.

	   If you really want the window currently having focus	and don't care
	   if it has a WM_CLASS	setting, then use 'getwindowfocus -f'

       windowsize [options] [window] width height
	   Set the window size of the given window. If no window is given, %1
	   is the default.  See	"WINDOW	STACK" and "COMMAND CHAINING" for more
	   details.

	   Percentages are valid for width and height. They are	relative to
	   the geometry	of the screen the window is on.	For example, to	make a
	   window the full width of the	screen,	but half height:

	    xdotool windowsize I<window> 100% 50%

	   Percentages are valid with --usehints and still mean	pixel-width
	   relative to the screen size.

	   The options available are:

	   --usehints
	       Use window sizing hints (when available)	to set width and
	       height.	This is	useful on terminals for	setting	the size based
	       on row/column of	text rather than pixels.

	   --sync
	       After sending the window	size request, wait until the window is
	       actually	resized. If no change is necessary, we will not	wait.
	       This is useful for scripts that depend on actions being
	       completed before	moving on.

	       Note: Because many window managers may ignore or	alter the
	       original	resize request,	we will	wait until the size changes
	       from its	original size, not necessary to	the requested size.

	   Example: To set a terminal to be 80x24 characters, you would	use:
	    xdotool windowsize --usehints some_windowid	80 24

       windowmove [options] [window] x y
	   Move	the window to the given	position. If no	window is given, %1 is
	   the default.	See "WINDOW STACK" and "COMMAND	CHAINING" for more
	   details.

	   If the given	x coordinate is	literally 'x', then the	window's
	   current x position will be unchanged. The same applies for 'y'.

	   Examples:

	    xdotool getactivewindow windowmove 100 100	  # Moves to 100,100
	    xdotool getactivewindow windowmove x 100	  # Moves to x,100
	    xdotool getactivewindow windowmove 100 y	  # Moves to 100,y
	    xdotool getactivewindow windowmove 100 y	  # Moves to 100,y

	   Percentages are valid for width and height. They are	relative to
	   the geometry	of the screen the window is on.	For example, to	make a
	   window the full width of the	screen,	but half height:

	    xdotool windowmove I<window> 100% 50%

	   --sync
	       After sending the window	move request, wait until the window is
	       actually	moved. If no movement is necessary, we will not	wait.
	       This is useful for scripts that depend on actions being
	       completed before	moving on.

	   --relative
	       Make movement relative to the current window position.

       windowfocus [options] [window]
	   Focus a window. If no window	is given, %1 is	the default. See
	   "WINDOW STACK" and "COMMAND CHAINING" for more details.

	   Uses	XSetInputFocus which may be ignored by some window managers or
	   programs.

	   --sync
	       After sending the window	focus request, wait until the window
	       is actually focused. This is useful for scripts that depend on
	       actions being completed before moving on.

       windowmap [options] [window]
	   Map a window. In X11	terminology, mapping a window means making it
	   visible on the screen. If no	window is given, %1 is the default.
	   See "WINDOW STACK" and "COMMAND CHAINING" for more details.

	   --sync
	       After requesting	the window map,	wait until the window is
	       actually	mapped (visible). This is useful for scripts that
	       depend on actions being completed before	moving on.

       windowminimize [options]	[window]
	   Minimize a window. In X11 terminology, this is called 'iconify.' If
	   no window is	given, %1 is the default. See "WINDOW STACK" and
	   "COMMAND CHAINING" for more details.

	   --sync
	       After requesting	the window minimize, wait until	the window is
	       actually	minimized. This	is useful for scripts that depend on
	       actions being completed before moving on.

       windowraise [window_id=%1]
	   Raise the window to the top of the stack. This may not work on all
	   window managers. If no window is given, %1 is the default. See
	   "WINDOW STACK" and "COMMAND CHAINING" for more details.

       windowreparent [source_window] destination_window
	   Reparent a window. This moves the source_window to be a child
	   window of destination_window. If no source is given,	%1 is the
	   default.  "WINDOW STACK" window references (like %1)	are valid for
	   both	source_window and destination_window See "WINDOW STACK"	and
	   "COMMAND CHAINING" for more details.

       windowclose [window]
	   Close a window. This	action will destroy the	window,	but will not
	   try to kill the client controlling it. If no	window is given, %1 is
	   the default.	See "WINDOW STACK" and "COMMAND	CHAINING" for more
	   details.

       windowquit [window]
	   Close a window gracefully. This action sends	a request, allowing
	   the application to apply close confirmation mechanics. If no	window
	   is given, %1	is the default.	See "WINDOW STACK" and "COMMAND
	   CHAINING" for more details.

       windowkill [window]
	   Kill	a window. This action will destroy the window and kill the
	   client controlling it. If no	window is given, %1 is the default.
	   See WINDOW STACK and	"COMMAND CHAINING" for more details.

       windowunmap [options] [window_id=%1]
	   Unmap a window, making it no	longer appear on your screen. If no
	   window is given, %1 is the default. See "WINDOW STACK" and "COMMAND
	   CHAINING" for more details.

	   --sync
	       After requesting	the window unmap, wait until the window	is
	       actually	unmapped (hidden). This	is useful for scripts that
	       depend on actions being completed before	moving on.

       set_window [options] [windowid=%1]
	   Set properties about	a window. If no	window is given, %1 is the
	   default. See	"WINDOW	STACK" and "COMMAND CHAINING" for more
	   details.

	   Options:

	   --name newname
	       Set window WM_NAME (the window title, usually)

	   --icon-name newiconname
	       Set window WM_ICON_NAME (the window title when minimized,
	       usually)

	   --role newrole
	       Set window WM_WINDOW_ROLE

	   --classname newclassname
	       Set window class	name (not to be	confused with window class)

	   --class newclass
	       Set window class	(not to	be confused with window	class name)

	   --urgency value
	       Set window urgency hint.	If the value is	1, the window will be
	       marked urgent, and the window manager will somehow highlight it
	       for the user's attention.  If the value is 0, the window	will
	       be marked non-urgent.

	   --overrideredirect value
	       Set window's override_redirect value. This value	is a hint to
	       the window manager for whether or not it	should be managed. If
	       the redirect value is 0,	then the window	manager	will draw
	       borders and treat this window normally. If the value is 1, the
	       window manager will ignore this window.

	       If you change this value, your window manager may not notice
	       the change until	the window is mapped again, so you may want to
	       issue 'windowunmap' and 'windowmap' to make the window manager
	       take note.

DESKTOP	AND WINDOW COMMANDS
       These commands follow the EWMH standard.	See the	section	"EXTENDED
       WINDOW MANAGER HINTS" for more information.

       windowactivate [options]	[window]
	   Activate the	window.	This command is	different from windowfocus: if
	   the window is on another desktop, we	will switch to that desktop.
	   It also uses	a different method for bringing	the window up. I
	   recommend trying this command before	using windowfocus, as it will
	   work	on more	window managers.

	   If no window	is given, %1 is	the default. See "WINDOW STACK"	and
	   "COMMAND CHAINING" for more details.

	   --sync
	       After sending the window	activation, wait until the window is
	       actually	activated. This	is useful for scripts that depend on
	       actions being completed before moving on.

       getactivewindow
	   Output the current active window. This command is often more
	   reliable than getwindowfocus. The result is saved to	the window
	   stack. See "WINDOW STACK" for more details.

       windowstate [--add PROPERTY] [--remove PROPERTY]	[--toggle PROPERTY]
       [window]
	   Change a property on	a window.

	   Some	properties may have no effect some windows or in some window
	   managers.

	   Properties can be any of:

	   MODAL - makes the window into a modal
	   STICKY - makes the window appear on all workspaces
	   MAXIMIZED_VERT - sizes the window maximized vertically
	   MAXIMIZED_HORZ - sizes the window maximized horizontally
	   ABOVE - Show	window above all others	(always	on top)
	   BELOW - Show	window below all others
	   SKIP_TASKBAR	- hides	the window from	the taskbar
	   SKIP_PAGER -	hides the window from the window pager
	   FULLSCREEN -	makes window fullscreen
	   HIDDEN - unmaps the window
	   SHADED - rolls the window up
	   DEMANDS_ATTENTION - marks window urgent or needing attention

	   This	feature	requires a window manager which	supports EWMH. Most
	   window managers probably support this :)

       getwindowclassname [window]
	   Prints the class name for the window.

       set_num_desktops	number
	   Changes the number of desktops or workspaces.

       get_num_desktops
	   Output the current number of	desktops.

       get_desktop_viewport [--shell]
	   Report the current viewport's position. If --shell is given,	the
	   output is friendly to shell eval.

	   Viewports are sometimes used	instead	of 'virtual desktops' on some
	   window managers. A viewport is simply a view	on a very large
	   desktop area.

       set_desktop_viewport x y
	   Move	the viewport to	the given position. Not	all requests will be
	   obeyed - some windowmangers only obey requests that align to
	   workspace boundaries, such as the screen size.

	   For example,	if your	screen is 1280x800, you	can move to the	2nd
	   workspace by	doing:
	    xdotool set_desktop_viewport 1280 0

       set_desktop [options] desktop_number
	   Change the current view to the specified desktop.

	   --relative
	       Use relative movements instead of absolute. This	lets you move
	       relative	to the current desktop.

       get_desktop
	   Output the current desktop in view.

       set_desktop_for_window [window] desktop_number
	   Move	a window to a different	desktop. If no window is given,	%1 is
	   the default.	See "WINDOW STACK" and "COMMAND	CHAINING" for more
	   details.

       get_desktop_for_window [window]
	   Output the desktop currently	containing the given window. Move a
	   window to a different desktop. If no	window is given, %1 is the
	   default. See	WINDOW STACK and "COMMAND CHAINING" for	more details.

MISCELLANEOUS COMMANDS
       exec [options] command [...]
	   Execute a program. This is often useful when	combined with
	   behave_screen_edge to do things like	locking	your screen.

	   Options:

	   --sync
	       Block until the child process exits. The	child process exit
	       status is then passed to	the parent process (xdotool) which
	       copies it.

	   Examples:
	    # Lock the screen when the mouse sits in the top-right corner
	    xdotool behave_screen_edge --delay 1000 top-right \
	      exec gnome-screensaver-command --lock
	    # Substitute 'xscreensaver-command -lock' if you use that program.

	    # The following will fail to move the mouse	because	we use '--sync'	and
	    # /bin/false exits nonzero:
	    xdotool exec --sync	/bin/false mousemove 0 0

	    # This succeeds, though, since we do not use --sync	on the exec command.
	    xdotool exec /bin/false mousemove 0	0

       sleep seconds
	   Sleep for a specified period. Fractions of seconds (like 1.3, or
	   0.4)	are valid, here.

SCRIPTS
       xdotool can read	a list of commands via stdin or	a file if you want. A
       script will fail	when any command fails.

       Truthfully, 'script' mode isn't fully fleshed out and may fall below
       your expectations. If you have suggestions, please email	the list or
       file a bug (See CONTACT).

       Scripts can use positional arguments (Represented by $1,	$2, ...) and
       environment variables (like $HOME or $WINDOWID).	Quoting	arguments
       should work as expected.

       Scripts are processed for parameter and environment variable expansion
       and then	run as if you had invoked xdotool with the entire script on
       one line	(using COMMAND CHAINING).

          Read	commands from a	file:

	    xdotool filename

          Read	commands from stdin:

	    xdotool -

          Read	commands from a	redirected file

	    xdotool - <	myfile

       You can also write scripts that only execute xdotool. Example:

	#!/usr/local/bin/xdotool
	search --onlyvisible --classname $1

	windowsize %@ $2 $3
	windowraise %@

	windowmove %1 0	0
	windowmove %2 $2 0
	windowmove %3 0	$3
	windowmove %4 $2 $3

       This script will	take all windows matched by the	classname query	given
       by arg1 ($1) and	sizes/moves them into a	2x2 grid with windows sized by
       the 2nd and 3rd parameters.

       Here's an example usage:

	% ./myscript xterm 600 400

       Running it like this will take 4	visible	xterms,	raise them, and	move
       them into a 2x2 tile grid with each window 600x400 pixels in size.

CLEARMODIFIERS
       Any command taking the --clearmodifiers flag will attempt to clear any
       active input modifiers during the command and restore them afterwards.

       For example, if you were	to run this command:
	xdotool	key a

       The result would	be 'a' or 'A' depending	on whether or not you were
       holding the shift key on	your keyboard. Often it	is undesirable to have
       any modifiers active, so	you can	tell xdotool to	clear any active
       modifiers.

       The order of operations if you hold shift while running 'xdotool	key
       --clearmodifiers	a' is this:

       1. Query	for all	active modifiers (finds	shift, in this case)
       2. Try to clear shift by	sending	'key up' for the shift key
       3. Runs normal 'xdotool key a'
       4. Restore shift	key by sending 'key down' for shift

       The --clearmodifiers flag can currently clear of	the following:

          any key in your active keymap that has a modifier associated	with
	   it.	(See xmodmap(1)'s 'xmodmap -pm'	output)

          mouse buttons (1, 2,	3, 4, and 5)

          caps	lock

SENDEVENT NOTES
       If you are trying to send key input to a	specific window, and it	does
       not appear to be	working, then it's likely your application is ignoring
       the events xdotool is generating. This is fairly	common.

       Sending keystrokes to a specific	window uses a different	API than
       simply typing to	the active window. If you specify 'xdotool type
       --window	12345 hello' xdotool will generate key events and send them
       directly	to window 12345.  However, X11 servers will set	a special flag
       on all events generated in this way (see	XEvent.xany.send_event in
       X11's manual). Many programs observe this flag and reject these events.

       It is important to note that for	key and	mouse events, we only use
       XSendEvent when a specific window is targeted. Otherwise, we use	XTEST.

       Some programs can be configured to accept events	even if	they are
       generated by xdotool. Seek the documentation of your application	for
       help.

       Specific	application notes (from	the author's testing): * Firefox 3
       seems to	ignore all input when it does not have focus.  * xterm can be
       configured while	running	with ctrl+leftclick, 'Allow SendEvents'	*
       gnome-terminal appears to accept	generated input	by default.

WINDOW STACK
       Certain commands	(search, getactivewindow, getwindowfocus) will find
       windows for you.	These results generally	printed	to stdout, but they
       are also	saved to memory	for future use during the lifetime of the
       xdotool process.	See "COMMAND CHAINING" for more	information.

       The only	modifications support for the window stack are to replace it.
       That is,	two of two sequential searches,	only the last one's results
       will be the window stack.

COMMAND	CHAINING
       xdotool supports	running	multiple commands on a single invocation.
       Generally, you'll start with a search command (see "WINDOW STACK") and
       then perform a set of actions on	those results.

       To query	the window stack, you can use special notation "%N" where N is
       a number	or the '@' symbol. If %N is given, the Nth window will be
       selected	from the window	stack. Generally you will only want the	first
       window or all windows.  Note that the order of windows in the window
       stack corresponds to the	window stacking	order, i.e. the	bottom-most
       window will be reported first (see XQueryTree(3)). Thus the order of
       the windows in the window stack may not be consistent across
       invocations.

       The notation described above is used as the "window" argument for any
       given command.

       For example, to resize all xterms to 80x24:

	xdotool	search --class xterm --	windowsize --usehints %@ 80 24

       Resize move the current window:

	xdotool	getactivewindow	windowmove 0 0

       In all cases, the default window	argument, if omitted, will default to
       "%1". It	is obviously an	error if you omit the window argument and the
       window stack is empty. If you try to use	the window stack and it	is
       empty, it is also an error.

       To activate the first firefox window found:

	xdotool	search --class firefox windowactivate

       These would error:

	xdotool	windowactivate
	xdotool	windowactivate %1
	xdotool	windowactivate %@

       When xdotool exits, the current window stack is lost.

       Additionally, commands that modify the "WINDOW STACK" will not print
       the results if they are not the last command. For example:

	# Output the active window:
	% xdotool getactivewindow
	20971533

	# Output the pid of the	active window, but not the active window id:
	% xdotool getactivewindow getwindowpid
	4686

EXTENDED WINDOW	MANAGER	HINTS
       The following pieces of the EWMH	standard are supported:

       _NET_SUPPORTED
	   Asks	the window manager what	is supported

       _NET_CURRENT_DESKTOP
	   Query and set the current desktop. Support for this enables these
	   commands: "set_desktop", "get_desktop".

       _NET_WM_DESKTOP
	   Query and set what desktop a	window is living in. Support for this
	   enables these commands: "set_desktop_for_window",
	   "get_desktop_for_window".

       _NET_ACTIVE_WINDOW
	   Allows you to query and set the active window by asking the window
	   manager to bring it forward.	Support	for this enables these
	   commands: "windowactivate", "getactivewindow".

       _NET_WM_PID
	   This	feature	is application dependent, not window-manager
	   dependent. Query the	PID owning a given window. Support for this
	   enables these commands: "getwindowpid".

SUPPORTED FEATURES
       xdotool (and libxdo) will try to	function under all circumstances.
       However,	there may be some cases	where functionality is not provided by
       your X server or	by your	window manager.	In these cases,	xdotool	will
       try to detect and tell you if an	action requires	a feature not
       currently supported by your system.

       For window-manager specific features, see "EXTENDED WINDOW MANAGER
       HINTS".

       XTEST
	   If your X server does not support XTEST, then some typing and mouse
	   movement features may not work. Specifically, typing	and mouse
	   actions that	act on the "current window" (window 0 in libxdo) are
	   unlikely to work.

	   In most cases, XTEST	is a feature you can enable on your X server
	   if it is not	enabled	by default.

	   You can see the list	of supported X extensions by typing 'xdpyinfo'
	   and looking the text	'number	of extensions: ...'

BUGS
       Typing unusual symbols under non-us keybindings is known	to
       occasionally send the wrong character.

SEE ALSO
       xprop(1), xwininfo(1),

       Project site: <http://www.semicomplete.com/projects/xdotool>

       Source code and Issues: <https://github.com/jordansissel/xdotool>

       EWMH specification:
       <http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html>

CONTACT
       Please send questions to	xdotool-users@googlegroups.com.	File bugs and
       feature requests	at the following URL:

       <https://github.com/jordansissel/xdotool/issues>

       Alternately, if you prefer email, feel free to file bugs	by emailing
       the list.  What works for you :)

AUTHOR
       xdotool was written by Jordan Sissel.

       This manual page	was written originally by Daniel Kahn Gillmor
       <dkg@fifthhorseman.net> for the Debian project (but may be used by
       others).	It is maintained by Jordan Sissel.

       Patches,	ideas, and other contributions by many,	nice folks. See	the
       CHANGELIST file for who provided	what.

				  2021-09-03			    XDOTOOL(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=xdotool&sektion=1&manpath=FreeBSD+Ports+15.0>

home | help