1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
|
sway-input(5)
# NAME
sway-input - input configuration file and commands
# DESCRIPTION
Sway allows for configuration of devices within the sway configuration file.
To obtain 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, the settings
can be applied to a type of device, by using _type:\<input_type\>_ in place
of _\<identifier\>_.
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 from *swaymsg -t get_inputs* until you find the
correct input device.
Current available input types are:
- touchpad
- pointer
- keyboard
- touch
- tablet_tool
- tablet_pad
- switch
Note: The type configurations are applied as the devices appear and get applied
on top of the existing device configurations.
# INPUT COMMANDS
## KEYBOARD CONFIGURATION
*input* <identifier> repeat_delay <n>
Sets the delay before repeating a held-down key, in milliseconds.
*input* <identifier> repeat_rate <n>
Sets the key repeat rate in number of keypresses per second.
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 .xkb file. This file can be
dumped from _xkbcomp $DISPLAY keymap.xkb_. This setting overrides
xkb_layout, xkb_model, xkb_options, xkb_rules, and xkb_variant settings.
*input* <identifier> xkb_layout <layout_name>
Sets the layout of the keyboard like _us_ or _de_.
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>
Changes the active keyboard layout index. This can be used when multiple
layouts are configured with *xkb_layout*. A list of layouts you can switch
between can be obtained with *swaymsg -t get_inputs*.
*input* <identifier> xkb_variant <variant>
Sets the variant of the keyboard like _dvorak_ or _colemak_.
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 is disabled.
*input* <identifier> xkb_numlock enabled|disabled
Initially enables or disables NumLock on startup, the default is disabled.
## 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.
*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 in terms of 0..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).
## 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 calibtration matrix.
*input* <identifier> click_method none|button_areas|clickfinger
Changes the click method for the specified device.
*input* <identifier> drag enabled|disabled
Enables or disables tap-and-drag for specified input device.
*input* <identifier> drag_lock enabled|disabled
Enables or disables drag lock for specified input device.
*input* <identifier> dwt enabled|disabled
Enables or disables disable-while-typing for the specified input device.
*input* <identifier> events enabled|disabled|disabled_on_external_mouse|toggle [<toggle-modes>]
Enables or disables send_events for specified input device. Disabling
send_events disables the input device.
The _toggle_ option 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 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> 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 the repeat_delay has passed.
*input* <identifier> scroll_button disable|button[1-3,8,9]|<event-code-or-name>
Sets the button used for scroll_method on_button_down. The button can
be given as an event name or code, which can be obtained from *libinput
debug-events*, or as a x11 mouse button (button[1-3,8,9]). If set to
_disable_, it disables the scroll_method on_button_down.
*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 specified input device.
*input* <identifier> tap_button_map lrm|lmr
Specifies which button mapping to use for tapping. _lrm_ treats 1 finger as
left click, 2 fingers as right click, and 3 fingers as middle click. _lmr_
treats 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 from *swaymsg -t get_seats* until 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 as 0 will not update that coordinate.
*seat* <seat> cursor press|release button[1-9]|<event-name-or-code>
Simulate 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 can be obtained from *libinput debug-events*, or as an x11
mouse button (button[1-9]). If using button[4-7], which map to axes, an axis
event will be simulated, however _press_ and _release_ will be ignored and
both will occur.
*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).
*seat* <name> hide_cursor <timeout>
Hides the cursor image after the specified _timeout_ (in milliseconds)
has elapsed with no activity on that cursor. A timeout of 0 (default)
disables hiding the cursor. The minimal timeout is 100 and any value less
than that (aside from 0), will be increased to 100.
*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.
*seat* <name> idle_wake <sources...>
Sets the set of input event sources which can wake the seat from
its idle state, 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 wake from idle on any event.
*seat* <name> keyboard_grouping none|smart
Set how the keyboards in the seat are grouped together. Currently, there
are two options. _none_ will disable all keyboard grouping. This will make
it so each keyboard device has its own isolated state. _smart_ will
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 is _smart_. To restore the behavior of older versions
of sway, use _none_.
*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. The
"escape" command can be used at runtime to escape from a captured client.
*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 the _XCURSOR_THEME_ and
_XCURSOR_SIZE_ environment variables.
# SEE ALSO
*sway*(5) *sway-output*(5) *xkeyboard-config*(7)
|