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

FreeBSD Manual Pages

  
 
  

home | help
RIVERCTL(1)		    General Commands Manual		   RIVERCTL(1)

NAME
       riverctl	- command-line interface for controlling river

SYNOPSIS
       riverctl	[options] command [command specific arguments]

DESCRIPTION
       riverctl	 is a command-line utility used	to control and configure river
       over the	Wayland	protocol.

OPTIONS
       -h
	   Print a help	message	and exit.

       -version
	   Print the version number and	exit.

TERMINOLOGY
       This manual uses	terms that some	may find confusing, coming mostly from
       their usage among other Wayland projects.

       The compositor, display server, Wayland server etc. are ways  to	 refer
       to river	itself.

       A view (or toplevel) is what most call a	window.

       An output is a synonym for a screen or monitor.

       Tags  are  river's  way of dividing views of an output into groups (not
       necessarily disjunct), an analogy to workspaces.

COMMANDS
   ACTIONS
       close
	   Close the focused view.

       exit
	   Exit	the compositor,	terminating the	Wayland	session.

       focus-output next|previous|up|right|down|left|name
	   Focus the next or previous output, the closest output in any	direc-
	   tion	or an output by	name.

       focus-view [-skip-floating] next|previous|up|down|left|right
	   Focus the next or previous view in the stack	or the closest view in
	   any direction.

	      -skip-floating: Skip floating views, only focusing tiled	ones.

       move up|down|left|right delta
	   Move	the focused view in the	specified direction by	delta  logical
	   pixels. The view will be set	to floating.

       resize horizontal|vertical delta
	   Resize  the focused view along the given axis by delta logical pix-
	   els.	The view will be set to	floating.

       snap up|down|left|right
	   Snap	the focused view to the	specified screen edge. The  view  will
	   be set to floating.

       send-to-output [-current-tags] next|previous|up|right|down|left|name
	   Send	 the  focused view to the next or previous output, the closest
	   output in any direction or to an output by name.

	      -current-tags: Assign the currently focused tags	of the	desti-
	       nation output to	the view.

       spawn shell_command
	   Run shell_command using `/bin/sh -c shell_command`. Note that spawn
	   only	 takes	a  single argument. To spawn a command taking multiple
	   arguments, wrapping the command in quotes is	recommended.

       swap next|previous|up|down|left|right
	   Swap	the focused view with the next or previous  non-floating  view
	   in the stack	or the closest non-floating view in any	direction.

       toggle-float
	   Toggle the floating state of	the focused view.

       toggle-fullscreen
	   Toggle the fullscreen state of the focused view.

       zoom
	   Bump	 the  focused  view to the top of the layout stack. If the top
	   view	in the stack is	already	focused, bump the second view.

       default-layout namespace
	   Set the layout namespace to be used by all outputs by default.

       output-layout namespace
	   Set the layout namespace of currently  focused  output,  overriding
	   the value set with default-layout if	any.

       send-layout-cmd namespace command
	   Send	 command to the	layout generator on the	currently focused out-
	   put with the	given namespace, if any. What commands a layout	gener-
	   ator	understands depends on the layout  generator.  For  rivertile,
	   see the documentation in the	rivertile(1) man page.

   TAG MANAGEMENT
       Tags  are similar to workspaces but more	flexible. You can assign views
       multiple	tags and focus multiple	 tags  simultaneously.	Bitfields  are
       used to describe	sets of	tags when interfacing with river. As such, the
       following  commands  take a normal base 10 number as their argument but
       the  semantics  are  best  understood  in  binary.  The	binary	number
       000000001 represents a set containing only tag 1	while 100001101	repre-
       sents a set containing tags 1, 3, 4, and	9.

       When  a	view  spawns  it is assigned the currently focused tags	of the
       output.

       At least	one tag	must always be focused and each	view must be  assigned
       at  least  one  tag.  Operations	that would violate either of these re-
       quirements are ignored by river.

       set-focused-tags	tags
	   Show	views with tags	corresponding to the set bits of tags  on  the
	   currently focused output.

       set-view-tags tags
	   Assign the currently	focused	view the tags corresponding to the set
	   bits	of tags.

       toggle-focused-tags tags
	   Toggle  visibility of views with tags corresponding to the set bits
	   of tags on the currently focused output.

       toggle-view-tags	tags
	   Toggle the tags of the currently focused view corresponding to  the
	   set bits of tags.

       spawn-tagmask tagmask
	   Set	a  tagmask to filter the tags assigned to newly	spawned	views.
	   This	mask will be applied to	the tags of new	views with  a  bitwise
	   and.	 If, for example, the tags 000011111 are focused and the spawn
	   tagmask is  111110001,  a  new  view	 will  be  assigned  the  tags
	   000010001.  If no tags would	remain after filtering,	the tagmask is
	   ignored.

       focus-previous-tags
	   Sets	tags to	their previous value on	the currently focused  output,
	   allowing jumping back and forth between 2 tag setups.

       send-to-previous-tags
	   Assign  the	currently  focused  view the previous tags of the cur-
	   rently focused output.

   MAPPINGS
       Mappings	are modal in river. Each mapping is associated with a mode and
       is only active while in that mode. There	are two	special	 modes:	 "nor-
       mal"  and "locked". The normal mode is the initial mode on startup. The
       locked mode is automatically entered while the session is locked	 (e.g.
       due to a	screenlocker). It cannot be entered or exited manually.

       The following modifiers are available for use in	mappings:

	      Shift
	      Control
	      Mod1 (Alt)
	      Mod3
	      Mod4 (Super)
	      Mod5
	      None

       Alt  and	 Super are aliases for Mod1 and	Mod4 respectively. None	allows
       creating	a mapping without modifiers.

       Keys are	specified by their XKB keysym name. See	/usr/local/include/xk-
       bcommon/xkbcommon-keysyms.h for the complete list.

       Mouse buttons are specified by Linux input event	code names.  The  most
       commonly	used values are:

	      BTN_LEFT	- left mouse button
	      BTN_RIGHT - right mouse button
	      BTN_MIDDLE - middle mouse button

       A  complete  list may be	found in /usr/local/include/linux/input-event-
       codes.h

       declare-mode name
	   Create a new	mode called name.

       enter-mode name
	   Switch to given mode	if it exists.

       map [-release|-repeat|-layout index] mode modifiers key command
	   Run command when key	is pressed while modifiers are held  down  and
	   in the specified mode.

	      -release:  if  passed  activate	on  key	release	instead	of key
	       press
	      -repeat:	if passed activate repeatedly until key	 release;  may
	       not be used with	-release
	      -layout:	if passed, a specific layout is	pinned to the mapping.
	       When  the mapping is checked against a pressed key, this	layout
	       is used to translate the	key independent	of the active layout
	          index: zero-based index of a	layout set with	the  keyboard-
		   layout  command.  If	the index is out of range, the -layout
		   option will have no effect
	      mode: name of the mode for which	to create the mapping
	      modifiers: one or more of the modifiers listed above, separated
	       by a plus sign (+).
	      key: an XKB keysym name as described above
	      command:	any command that may be	run with riverctl

       map-pointer mode	modifiers button action|command
	   Move	or resize views	or run command when button and	modifiers  are
	   held	 down  while  in the specified mode. The view under the	cursor
	   will	be focused.

	      mode: name of the mode for which	to create the mapping
	      modifiers: one or more of the modifiers listed above, separated
	       by a plus sign (+).
	      button: the name	of a Linux input event code as described above
	      action: one of the following values:
	          move-view
	          resize-view
	      command:	any command that may be	run with riverctl

       map-switch mode lid|tablet state	command
	   Run command when river receives a certain switch event.

	      mode: name of the mode for which	to create the mapping
	      lid|tablet: 'lid	switch'	and 'tablet mode switch' are supported
	      state:
	          possible states for lid:
		      close
		      open
	          possible states for tablet:
		      on
		      off
	      command:	any command that may be	run with riverctl

       unmap [-release]	mode modifiers key
	   Remove the mapping defined by the arguments:

	      -release: if passed unmap the key release instead  of  the  key
	       press
	      mode: name of the mode for which	to remove the mapping
	      modifiers: one or more of the modifiers listed above, separated
	       by a plus sign (+).
	      key: an XKB keysym name as described above

       unmap-pointer mode modifiers button
	   Remove the pointer mapping defined by the arguments:

	      mode: name of the mode for which	to remove the mapping
	      modifiers: one or more of the modifiers listed above, separated
	       by a plus sign (+).
	      button: the name	of a Linux input event code as described above

       unmap-switch mode lid|tablet state
	   Remove the switch mapping defined by	the arguments:

	      mode: name of the mode for which	to remove the mapping
	      lid|tablet: the switch for which	to remove the mapping
	      state: a	state as listed	above

   RULES
       Rules  match  the  app-id and title of views against a glob pattern.  A
       glob is a string	that may optionally have an * at the beginning	and/or
       end.  An	 *  in a glob matches zero or more arbitrary characters	in the
       app-id or title.

       For example, abc	is matched by a*, *a*, *b*, *c,	abc,  and  *  but  not
       matched	by *a, b*, *b, c*, or ab. Note that * matches everything while
       ** and the empty	string are invalid.

       rule-add	[-app-id glob|-title glob] action [arguments]
	   Add a rule that applies an action to	views with  app-id  and	 title
	   matched  by	the  respective	 glob.	Omitting  -app-id or -title is
	   equivalent to passing -app-id * or -title *.	Some  actions  require
	   one or more arguments.

	   The supported action	types are:

	      float: Make the view floating. Applies only to new views.
	      no-float:  Don't	 make  the  view floating. Applies only	to new
	       views.
	      ssd: Use	server-side decorations	for the	view. Applies  to  new
	       and existing views.
	      csd:  Use  client-side decorations for the view.	Applies	to new
	       and existing views.
	      tags: Set the initial tags of the view. Requires	the tags as an
	       argument. Applies only to new views.
	      output: Set the initial output of the view. Requires the	output
	       as an argument. Applies only to new views. The  output  can  be
	       specified either	by connector name (such	as HDMI-A-1, or	DP-2),
	       or  by identifier in the	form of	MAKE MODEL SERIAL, for example
	       for an output with make:	HP Inc., model:	HP  22w,  and  serial:
	       CNC93720WF, the identifier would	be: HP Inc. HP 22w CNC93720WF.
	       If the make, model, or serial is	unknown, the word "Unknown" is
	       used instead.
	      position: Set the initial position of the view, clamping	to the
	       bounds  of the output. Requires x and y coordinates of the view
	       as arguments, both of which must	be non-negative. Applies  only
	       to new views.
	      dimensions: Set the initial dimensions of the view, clamping to
	       the  constraints	 of the	view. Requires width and height	of the
	       view as arguments, both of which	must be	non-negative.  Applies
	       only to new views.
	      fullscreen:  Make  the  view  fullscreen.  Applies  only	to new
	       views.
	      no-fullscreen: Don't make the view fullscreen. Applies only  to
	       new views.
	      tearing:	 Allow	the view to tear when fullscreen regardless of
	       the view's preference. Applies to new and existing views.
	      no-tearing: Disable tearing for	the  view  regardless  of  the
	       view's preference. Applies to new and existing views.

	   Both	 float	and  no-float  rules are added to the same list, which
	   means that adding a no-float	rule with  the	same  arguments	 as  a
	   float  rule	will  overwrite	 it.  The  same	holds for ssd and csd,
	   fullscreen and no-fullscreen, tearing and no-tearing	rules.

	   If multiple rules in	a list match a given view  the	most  specific
	   rule	will be	applied. For example with the following	rules
	       app-id  title  action
	       foo     bar    ssd
	       foo     *      csd
	       *       bar    csd
	       *       baz    ssd
	   a  view  with  app-id  'foo'	 and title 'bar' would get ssd despite
	   matching two	csd rules as the first rule is most specific. Further-
	   more	a view with app-id 'foo' and title 'baz' would get csd despite
	   matching the	last rule in the list since app-id  specificity	 takes
	   priority over title specificity.

	   If  a  view	is  not	 matched  by  any rule,	river will respect the
	   csd/ssd wishes of the client	and may	start the view floating	 based
	   on simple heuristics	intended to catch popup-like views.

	   If  a  view is started fullscreen or	is not floating, then position
	   and dimensions rules	will have no effect  A view must be matched by
	   a float rule	in order for them to take effect.

       rule-del	[-app-id glob|-title glob] action
	   Delete a rule created using rule-add	with the given arguments.

       list-rules float|ssd|tags|position|dimensions|fullscreen
	   Print the specified rule list. The output is	ordered	from most spe-
	   cific to least specific, the	same order in which views are  checked
	   against when	searching for a	match. Only the	first matching rule in
	   the list has	an effect on a given view.

   CONFIGURATION
       default-attach-mode top|bottom|above|below|after	<N>
	   Set the attach mode to be used by all outputs by default.

	   Possible values:
	      top: Prepends the newly spawned view at the top of the stack.
	      bottom:	Appends	 the  newly  spawned view at the bottom	of the
	       stack.
	      above: Inserts the newly	spawned	view above the	currently  fo-
	       cused view.
	      below:  Inserts	the newly spawned view below the currently fo-
	       cused view.
	      after <N>: Inserts the newly spawned view after N views in  the
	       stack.

	   Note	that the deprecated attach-mode	command	is aliased to default-
	   attach-mode for backwards compatibility.

       output-attach-mode top|bottom|above|below|after <N>
	   Set the attach mode of the currently	focused	output,	overriding the
	   value of default-attach-mode	if any.

       allow-tearing enabled|disabled
	   Allow  fullscreen  views to tear if requested by the	view. See also
	   the tearing rule to force enable tearing for	specific views.

       background-color	0xRRGGBB|0xRRGGBBAA
	   Set the background color.

       border-color-focused 0xRRGGBB|0xRRGGBBAA
	   Set the border color	of focused views.

       border-color-unfocused 0xRRGGBB|0xRRGGBBAA
	   Set the border color	of unfocused views.

       border-color-urgent 0xRRGGBB|0xRRGGBBAA
	   Set the border color	of urgent views.

       border-width pixels
	   Set the border width	to pixels.

       focus-follows-cursor disabled|normal|always
	   There are three available modes:

	      disabled: Moving	the cursor does	not affect focus. This is  the
	       default.
	      normal:	Moving	the  cursor  over a view will focus that view.
	       Moving the cursor within	a view will not	re-focus that view  if
	       focus has moved elsewhere.
	      always:	Moving	the  cursor will always	focus whatever view is
	       under the cursor.

	   If the view to be focused is	on an output that does not have	focus,
	   focus is switched to	that output.

       hide-cursor timeout timeout
	   Hide	the cursor if it wasn't	moved in the last timeout milliseconds
	   until it is moved again. The	default	value is 0, which disables au-
	   tomatically hiding the cursor. Show the cursor again	on  any	 move-
	   ment.

       hide-cursor when-typing enabled|disabled
	   Hide	the cursor when	pressing any non-modifier key. Show the	cursor
	   again on any	movement.

       set-cursor-warp disabled|on-output-change|on-focus-change
	   Set the cursor warp mode. There are two available modes:

	      disabled: Cursor	will not be warped. This is the	default.
	      on-output-change:  When a different output is focused, the cur-
	       sor will	be warped to its center.
	      on-focus-change:	When a different view/output is	 focused,  the
	       cursor will be warped to	its center.

       set-repeat rate delay
	   Set the keyboard repeat rate	to rate	key repeats per	second and re-
	   peat	 delay	to delay milliseconds. The default is a	rate of	25 re-
	   peats per second and	a delay	of 600ms.

       xcursor-theme theme_name	[size]
	   Set the xcursor theme to theme_name and optionally  set  the	 size.
	   The	theme  of the default seat determines the default for Xwayland
	   and is made available through the  XCURSOR_THEME  and  XCURSOR_SIZE
	   environment variables.

   INPUT CONFIGURATION
       list-inputs
	   List	all input devices.

       list-input-configs
	   List	all input configurations.

       keyboard-layout	[-rules	rules] [-model model] [-variant	variant] [-op-
       tions options] layout
	   Set the XKB layout for all keyboards.  Defaults  from  libxkbcommon
	   are used for	everything left	unspecified. Note that layout may be a
	   comma  separated  list  of  layouts	(e.g.  "us,de")	 which	may be
	   switched between using various key combinations configured  through
	   the	options	 argument (e.g.	-options "grp:ctrl_space_toggle"). See
	   xkeyboard-config(7) for possible values and more information.

       keyboard-layout-file path
	   Set the XKB layout for all keyboards	from an	XKB keymap file	at the
	   provided path. Documentation	for the	XKB keymap file	format can  be
	   found   at	the   following	  URL:	https://xkbcommon.org/doc/cur-
	   rent/keymap-text-format-v1.html

       keyboard-group-create group_name
	   Create a keyboard group. A keyboard group  collects	multiple  key-
	   boards  in  a  single  logical keyboard. This means that all	state,
	   like	the active modifiers, is shared	between	 the  keyboards	 in  a
	   group.

       keyboard-group-destroy group_name
	   Destroy  the	 keyboard group	with the given name. All attached key-
	   boards will be released, making them	act as separate	devices	again.

       keyboard-group-add group_name input_device_name
	   Add a keyboard to a keyboard	group, identified  by  the  keyboard's
	   input  device  name.	 Any  currently	connected and future keyboards
	   with	the given name will be added to	 the  group.  Simple  globbing
	   patterns  are supported, see	the rules section for further informa-
	   tion	on globs.

       keyboard-group-remove group_name	input_device_name
	   Remove a keyboard from a keyboard group,  identified	 by  the  key-
	   board's input device	name.

       The input command can be	used to	create a configuration rule for	an in-
       put device identified by	its name. The name of an input device consists
       of  its type, its decimal vendor	id, its	decimal	product	id and finally
       its self-advertised name, separated by -. Simple	globbing patterns  are
       supported, see the rules	section	for further information	on globs.

       A list of all device properties that can	be configured may be found be-
       low. However note that not every	input device supports every property.

       input name events enabled|disabled|disabled-on-external-mouse
	   Configure whether the input devices events will be used by river.

       input name accel-profile	none|flat|adaptive
	   Set the pointer acceleration	profile	of the input device.

       input name pointer-accel	factor
	   Set	the  pointer  acceleration factor of the input device. Needs a
	   float between -1.0 and 1.0.

       input name click-method none|button-areas|clickfinger
	   Set the click method	of the input device.

       input name drag enabled|disabled
	   Enable or disable the tap-and-drag functionality of the  input  de-
	   vice.

       input name drag-lock enabled|disabled
	   Enable or disable the drag lock functionality of the	input device.

       input name disable-while-typing enabled|disabled
	   Enable or disable the disable-while-typing functionality of the in-
	   put device.

       input name disable-while-trackpointing enabled|disabled
	   Enable  or disable the disable-while-trackpointing functionality of
	   the input device.

       input name middle-emulation enabled|disabled
	   Enable or disable the middle	click emulation	functionality  of  the
	   input device.

       input name natural-scroll enabled|disabled
	   Enable or disable the natural scroll	functionality of the input de-
	   vice. If active, the	scroll direction is inverted.

       input name scroll-factor	factor
	   Set	the scroll factor of the input device. Accepts a postive value
	   greater than	0. For example,	a factor of 0.5	 will  make  scrolling
	   twice  as  slow  while a factor of 3	will make scrolling 3 times as
	   fast.

       input name left-handed enabled|disabled
	   Enable or disable the left handed mode of the input device.

       input name tap enabled|disabled
	   Enable or disable the tap functionality of the input	device.

       input name tap-button-map left-right-middle|left-middle-right
	   Configure the button	mapping	for tapping.

	      left-right-middle: 1 finger tap equals left click, 2 finger tap
	       equals right click, 3 finger tap	equals middle click.
	      left-middle-right: 1 finger tap equals left click, 2 finger tap
	       equals middle click, 3 finger tap equals	right click.

       input name scroll-method	none|two-finger|edge|button
	   Set the scroll method of the	input device.

	      none: No	scrolling
	      two-finger: Scroll by swiping with two fingers simultaneously
	      edge: Scroll by swiping along the edge
	      button: Scroll with pointer movement while holding down a  but-
	       ton

       input name scroll-button	button
	   Set	the  scroll button of an input device. button is the name of a
	   Linux input event code.

       input name scroll-button-lock enabled|disabled
	   Enable or disable the scroll	button lock functionality of the input
	   device. If active, the button does not need to be  held  down.  One
	   press  makes	 the  button  considered to be held down, and a	second
	   press releases the button.

       input name map-to-output	output|disabled
	   Maps	the input to a given output. This is valid even	if the	output
	   isn't  currently  active  and  will lead to the device being	mapped
	   once	it is connected.

EXAMPLES
       Bind Super+Return in normal mode	to spawn a foot(1) terminal:

	   riverctl map	normal Mod4 Return spawn 'foot --app-id=foobar'

       Bind Super+Shift+J to swap the focused view with	the next visible view:

	   riverctl map	normal Mod4+Shift J swap next

AUTHORS
       Maintained by Isaac Freund <mail@isaacfreund.com> who  is  assisted  by
       open  source  contributors. For more information	about river's develop-
       ment, see <https://isaacfreund.com/software/river>.

SEE ALSO
       river(1), rivertile(1)

				  2025-04-24			   RIVERCTL(1)

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

home | help