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 neces-
     sarily 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 direction
	 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  pix-
	 els. The view will be set to floating.

     resize horizontal|vertical delta
	 Resize  the  focused view along the given axis by delta logical pixels.
	 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 out-
	 put in any direction or to an output by name.

	 *   -current-tags: Assign the currently focused tags of the destination
	     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 argu-
	 ments, 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 output
	 with the given namespace, if any. What commands a layout generator  un-
	 derstands depends on the layout generator. For rivertile, see the docu-
	 mentation in the rivertile(1) man page.

   TAG MANAGEMENT
     Tags are similar to workspaces but more flexible. You can assign views mul-
     tiple  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 represents 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  requirements
     are ignored by river.

     set-focused-tags tags
	 Show  views with tags corresponding to the set bits of tags on the cur-
	 rently 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, al-
	 lowing jumping back and forth between 2 tag setups.

     send-to-previous-tags
	 Assign the currently focused view the previous tags  of  the  currently
	 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:  "normal"  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 screen-
     locker). 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  cre-
     ating a mapping without modifiers.

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

     Mouse  buttons are specified by Linux input event code names. The most com-
     monly 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/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-lay-
		 out  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 fo-
	 cused.

	 *   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  equiva-
	 lent 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 ar-
	     gument. 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 identi-
	     fier 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.  Furthermore  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  ti-
	 tle 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 specific
	 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  focused
	     view.
	 *   below:  Inserts  the newly spawned view below the currently focused
	     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-at-
	 tach-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  de-
	     fault.
	 *   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, fo-
	 cus is switched to that output.

     hide-cursor timeout timeout
	 Hide the cursor if it wasn't moved in the last timeout milliseconds un-
	 til it is moved again. The default value is 0, which disables automati-
	 cally hiding the cursor. Show the cursor again on any movement.

     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 cursor
	     will be warped to its center.
	 *   on-focus-change: When a different view/output is focused, the  cur-
	     sor will be warped to its center.

     set-repeat rate delay
	 Set  the keyboard repeat rate to rate key repeats per second and repeat
	 delay to delay milliseconds. The default is a rate of	25  repeats  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]  [-options
     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/current/keymap-
	 text-format-v1.html

     The  input  command can be used to create a configuration rule for an input
     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 below.
     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 device.

     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 input
	 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 device.
	 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 button

     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 de-
	 vice.	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  re-
	 leases 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 development, see
     <https://isaacfreund.com/software/river>.

SEE ALSO
     river(1), rivertile(1)

				   2026-08-06			     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+15.1.quarterly>

home | help