sway-input(5)
π sway-input(5) β File Formats Manual π
πΈ NAME πΈ
sway-input β input configuration file and commands. bestie, this is literally the input config page and command list, periodt. β¨
π¦ DESCRIPTION π¦
okay so Sway lets you configure devices inside the sway configuration file. To get a list of available device identifiers, run swaymsg -t get_inputs. Settings can also be applied to all input devices by using the wildcard, *, in place of <identifier> in the commands below. In addition, settings can be applied to a type of device by using type:<input_type> in place of <identifier>.
In the configuration file, settings with a more specific selector take precedence over more general ones: <identifier> > type:<input_type> > *. When executing input commands, however, the settings are applied to all matching input devices! This means type:<input_type> can override previously set <identifier> settings, even though in a configuration file they would take precedence. Similarly * can override both <identifier> and type:<input_type> settings, if applied later. lowkey wild, but that's the rule. π
Tip: If the configuration settings do not appear to be taking effect, you could try using*instead of<identifier>. If it works with the wildcard, try using a different identifier fromswaymsg -t get_inputsuntil you find the correct input device. iykyk π«Ά
Current available input types are:
touchpadpointerkeyboardtouchtablet_tooltablet_padswitch
Note: The type configurations are applied as the devices appear and get applied on top of the existing device configurations. vibe check: they stack. π
π₯ INPUT COMMANDS π₯
β¨οΈ KEYBOARD CONFIGURATION β¨οΈ
input <identifier> repeat_delay <milliseconds>β Sets the amount of time a key must be held before it starts repeating.input <identifier> repeat_rate <characters per second>β Sets the frequency of key repeats once therepeat_delayhas passed.
For more information on these xkb configuration options, see xkeyboard-config(7). π
input <identifier> xkb_file <file_name>β Sets all xkb configurations from a complete.xkbfile. This file can be dumped fromxkbcomp $DISPLAY keymap.xkb. This setting overridesxkb_layout,xkb_model,xkb_options,xkb_rules, andxkb_variantsettings. it's giving full override energy.input <identifier> xkb_layout <layout_name>β Sets the layout of the keyboard likeusorde. Multiple layouts can be specified by separating them with commas.input <identifier> xkb_model <model_name>β Sets the model of the keyboard. This has an influence for some extra keys your keyboard might have.input <identifier> xkb_options <options>β Sets extra xkb configuration options for the keyboard. Multiple options can be specified by separating them with commas.input <identifier> xkb_rules <rules>β Sets files of rules to be used for keyboard mapping composition.input <identifier> xkb_switch_layout <index>|next|prevβ Changes the active keyboard layout to<index>counting from zero or to next or previous layout on the list. If there is no next or previous layout, this command hops to the other end of the list. This can be used when multiple layouts are configured withxkb_layout. A list of layouts you can switch between can be obtained withswaymsg -t get_inputs. πinput <identifier> xkb_variant <variant>β Sets the variant of the keyboard likedvorakorcolemak.
The following commands may only be used in the configuration file. π
input <identifier> xkb_capslock enabled|disabledβ Initially enables or disables CapsLock on startup, the default isdisabled.input <identifier> xkb_numlock enabled|disabledβ Initially enables or disables NumLock on startup, the default isdisabled.
β¨ TABLET CONFIGURATION β¨
input <identifier> tool_mode <tool> <absolute|relative>β Sets whether movement of a tablet tool should be treated as absolute or relative; the default isabsolute. Valid values for<tool>are currently"pen","eraser","brush","pencil","airbrush", and the wildcard*, which matches all tools. Mouse and lens tools ignore this setting and are always treated as relative. ποΈ
πΊοΈ MAPPING CONFIGURATION πΊοΈ
input <identifier> map_to_output <identifier>β Maps inputs from this device to the specified output. Only meaningful if the device is a pointer, touch, or drawing tablet device. The wildcard*can be used to map the input device to the whole desktop layout.input <identifier> map_to_region <X> <Y> <width> <height>β Maps inputs from this device to the specified region of the global output layout. Only meaningful if the device is a pointer, touch, or drawing tablet device.input <identifier> map_from_region <X1xY1> <X2xY2>β Ignores inputs from this device that do not occur within the specified region. Can be in millimeters (e.g.10x20mm 20x40mm) or the fraction of the full available space in terms of0..1(e.g.0.5x0.5 0.7x0.7). Not all devices support millimeters. Only meaningful if the device is not a keyboard and provides events in absolute terms (such as a drawing tablet or touch screen - most pointers provide events relative to the previous frame). Commonly used to maintain the aspect ratio of the input device and screen. Cropping a16:10input region to match a16:9display can use0x0 1x0.9as the argument. π¦
π±οΈ LIBINPUT CONFIGURATION π±οΈ
input <identifier> accel_profile adaptive|flatβ Sets the pointer acceleration profile for the specified input device.input <identifier> calibration_matrix <6 space-separated floating point values>β Sets the calibration matrix.input <identifier> click_method none|button_areas|clickfingerβ Changes the click method for the specified device.input <identifier> clickfinger_button_map lrm|lmrβ Specifies which button mapping to use for clickfinger.lrmtreats 1 finger as left click, 2 fingers as right click, and 3 fingers as middle click.lmrtreats 1 finger as left click, 2 fingers as middle click, and 3 fingers as right click.input <identifier> drag enabled|disabledβ Enables or disables tap-and-drag for the specified input device.input <identifier> drag_lock enabled|disabled|enabled_stickyβ Enables or disables drag lock for the specified input device. The default isenabled_sticky.input <identifier> dwt enabled|disabledβ Enables or disables disable-while-typing for the specified input device.input <identifier> dwtp enabled|disabledβ Enables or disables disable-while-trackpointing for the specified input device.input <identifier> events enabled|disabled|disabled_on_external_mouse|toggle [<toggle-modes>]β Enables or disablessend_eventsfor the specified input device. Disablingsend_eventsdisables the input device. Thetoggleoption cannot be used in the config. If no toggle modes are listed, all supported modes for the device will be toggled through in the order:enabled,disabled_on_external_mouse,disabled, (loop back). If toggle modes are listed, they will be cycled through, defaulting to the first mode listed if the current mode is not in the list. They will also not be checked to see if they are supported for the device and may fail. β οΈinput <identifier> left_handed enabled|disabledβ Enables or disables left handed mode for the specified input device.input <identifier> middle_emulation enabled|disabledβ Enables or disables middle click emulation.input <identifier> natural_scroll enabled|disabledβ Enables or disables natural (inverted) scrolling for the specified input device.input <identifier> pointer_accel [<-1|1>]β Changes the pointer acceleration for the specified input device.input <identifier> rotation_angle <angle>β Sets the rotation angle of the device to the given clockwise angle in degrees. The angle must be between0.0(inclusive) and360.0(exclusive).input <identifier> scroll_button disable|button[1-3,8,9]|<event-code-or-name>β Sets the button used forscroll_method on_button_down. The button can be given as an event name or code, which can be obtained fromlibinput debug-events, or as a x11 mouse button (button[1-3,8,9]). If set todisable, it disables thescroll_method on_button_down.input <identifier> scroll_button_lock enabled|disabledβ Enables or disables scroll button lock for the specified input device.input <identifier> scroll_factor <floating point value>β Changes the scroll factor for the specified input device. Scroll speed will be scaled by the given value, which must be non-negative.input <identifier> scroll_method none|two_finger|edge|on_button_downβ Changes the scroll method for the specified input device.input <identifier> tap enabled|disabledβ Enables or disables tap for the specified input device.input <identifier> tap_button_map lrm|lmrβ Specifies which button mapping to use for tapping.lrmtreats 1 finger as left click, 2 fingers as right click, and 3 fingers as middle click.lmrtreats 1 finger as left click, 2 fingers as middle click, and 3 fingers as right click.
πͺ SEAT CONFIGURATION πͺ
Configure options for multiseat mode.
A seat is a collection of input devices that act independently of each other. Seats are identified by name and the default seat is seat0 if no seats are configured. While sway is running, - (hyphen) can be used as an alias for the current seat. Each seat has an independent keyboard focus and a separate cursor that is controlled by the pointer devices of the seat. This is useful for multiple people using the desktop at the same time with their own devices (each sitting in their own "seat"). The wildcard character, *, can also be used in place of <identifier> to change settings for all seats. π
Tip: If the configuration settings do not appear to be taking effect, you could try using*instead of<identifier>. If it works with the wildcard, try using a different identifier fromswaymsg -t get_seatsuntil you find the correct seat. π«Ά
seat <name> attach <input_identifier>β Attach an input device to this seat by its input identifier. A special value of"*"will attach all devices to the seat.seat <seat> cursor move|set <x> <y>β Move specified seat's cursor relative to current position or wrap to absolute coordinates (with respect to the global coordinate space). Specifying either value as0will not update that coordinate. Deprecated: use the virtual-pointer Wayland protocol instead. πseat <seat> cursor press|release button[1-9]|<event-name-or-code>β okay so this one simulates pressing (or releasing) the specified mouse button on the specified seat. The button can either be provided as a button event name or event code, which you can get fromlibinput debug-events, or as an x11 mouse button (button[1-9]). If youβre usingbutton[4-7], which map to axes, an axis event will be simulated, howeverpressandreleasewill be ignored and both will occur.
β οΈ Deprecated: use the virtual-pointer Wayland protocol instead.
seat <name> fallback true|falseβ set this seat as the fallback seat. A fallback seat will attach any device not explicitly attached to another seat (similar to a"default"seat). Itβs giving default-seat energy, iykyk πseat <name> hide_cursor <timeout>|when-typing [enable|disable]β hides the cursor image after the specified event occurred. If timeout is specified, then the cursor will be hidden after timeout (in milliseconds) has elapsed with no activity on the cursor. A timeout of0(default) disables hiding the cursor. The minimal timeout is100, and any value less than that (aside from0) will be increased to100. Ifwhen-typingis enabled, then the cursor will be hidden whenever a key is pressed.
β οΈ Be aware that this setting can interfere with input handling in games and certain types of software (Gimp, Blender etc) that rely on simultaneous input from mouse and keyboard. So maybe donβt enable it and then act surprised, bestie π
seat <name> idle_inhibit <sources...>β sets the set of input event sources which can prevent the seat from becoming idle, as a space separated list of source names. Valid names are"keyboard","pointer","touchpad","touch","tablet_pad","tablet_tool", and"switch". The default behavior is to prevent idle on any event. Default vibe: literally any event keeps the seat awake β¨seat <name> keyboard_grouping none|smartβ set how the keyboards in the seat are grouped together. Currently, there are two options.nonewill disable all keyboard grouping. This will make it so each keyboard device has its own isolated state.smartwill group the keyboards in the seat by their keymap and repeat info. This is useful for when the keyboard appears as multiple separate input devices. In this mode, the effective layout is synced between the keyboards in the group. The default issmart. To restore the behavior of older versions of sway, usenone. Main-character default:smart, no cap πseat <name> pointer_constraint enable|disable|escapeβ enables or disables the ability for clients to capture the cursor (enabled by default) for the seat. This is primarily useful for video games. Theescapecommand can be used at runtime to escape from a captured client. Escape hatch at runtime? Obsessed π¦seat <name> shortcuts_inhibitor enable|disable|activate|deactivate|toggleβ enables or disables the ability of clients to inhibit keyboard shortcuts for the seat. This is primarily useful for virtualization and remote desktop software. Subcommandsenableanddisableaffect whether future inhibitors are honoured by default, i.e. activated automatically, the default beingenable. When used at runtime,disablealso disables any currently active inhibitors.activate,deactivate, andtoggleare only usable at runtime and change the state of a potentially existing inhibitor on the currently focused window. This can be used with the current seat alias (-) to affect only the currently focused window of the current seat. Subcommanddeactivateis particularly useful in an--inhibitedbindsymto escape a state where shortcuts are inhibited and the client becomes uncooperative. It is worth noting that whether disabled or deactivated inhibitors are removed is entirely up to the client. Depending on the client it may therefore be possible to (re-)activate them later. Any visual indication that an inhibitor is present is currently left to the client as well. fr fr, this oneβs a whole saga β runtime plot twists included πseat <name> xcursor_theme <theme> [<size>]β override the system default XCursor theme. The default seatβs (seat0) theme is also used as the default cursor theme in XWayland, and exported through theXCURSOR_THEMEandXCURSOR_SIZEenvironment variables. Cursor glow-up unlocked β¨π
π SEE ALSO π
β¨ Thatβs the sway-input(5) manual page β source/version sway-input(5), dated 2026-04-26. Go make your input setup iconic, bestie. Periodt π
π¦
π¦ where this page comes from
- alpine 3.24: sway-doc 1.12_rc3-r0 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms