sway-ipc(7) Miscellaneous Information Manual sway-ipc(7)

sway-ipc - IPC protocol for sway

This details the interprocess communication (IPC) protocol for sway(1). This IPC protocol can be used to control or obtain information from a sway process.

The IPC protocol uses a UNIX socket as the method of communication. The path to the socket is stored in the environment variable SWAYSOCK and, for backwards compatibility with i3, I3SOCK. You can also retrieve the socket path by calling sway --get-socketpath.

The format for messages and replies is:

<magic-string> <payload-length> <payload-type> <payload>
Where
<magic-string> is i3-ipc, for compatibility with i3
<payload-length> is a 32-bit integer in native byte order
<payload-type> is a 32-bit integer in native byte order

For example, sending the exit command would look like the following hexdump:

00000000 | 69 33 2d 69 70 63 04 00 00 00 00 00 00 00 65 78 |i3-ipc........ex|
00000010 | 69 74                                           |it              |

The payload for replies will be a valid serialized JSON data structure.

The following message types and their corresponding reply types are currently supported. For all replies, any properties not listed are subject to removal.

TYPE NUMBER MESSAGE NAME PURPOSE
0 RUN_COMMAND Runs the payload as sway commands
1 GET_WORKSPACES Get the list of current workspaces
2 SUBSCRIBE Subscribe the IPC connection to the events listed in the payload
3 GET_OUTPUTS Get the list of current outputs
4 GET_TREE Get the node layout tree
5 GET_MARKS Get the names of all the marks currently set
6 GET_BAR_CONFIG Get the specified bar config or a list of bar config names
7 GET_VERSION Get the version of sway that owns the IPC socket
8 GET_BINDING_MODES Get the list of binding mode names
9 GET_CONFIG Returns the config that was last loaded
10 SEND_TICK Sends a tick event with the specified payload
11 SYNC Replies failure object for i3 compatibility
12 GET_BINDING_STATE Request the current binding state, e.g. the currently active binding mode name.
100 GET_INPUTS Get the list of input devices
101 GET_SEATS Get the list of seats

MESSAGE
Parses and runs the payload as sway commands

REPLY
An array of objects corresponding to each command that was parsed. Each object has the property success, which is a boolean indicating whether the command was successful. The object may also contain the properties error and parse_error. The error property is a human readable error message while parse_error is a boolean indicating whether the reason the command failed was because the command was unknown or not able to be parsed.

Example Reply:

[
	{
		"success": true
	},
	{
		"success": false,
		"parse_error": true,
		"error": "Invalid/unknown command"
	}
]

MESSAGE
Retrieves the list of workspaces.

REPLY
The reply is an array of objects corresponding to each workspace. Each object has the following properties:

PROPERTY DATA TYPE DESCRIPTION
num integer The workspace number or -1 for workspaces that do not start with a number
name string The name of the workspace
visible boolean Whether the workspace is currently visible on any output
focused boolean Whether the workspace is currently focused by the default seat (seat0)
urgent boolean Whether a view on the workspace has the urgent flag set
rect object The bounds of the workspace. It consists of x, y, width, and height
output string The name of the output that the workspace is on

Example Reply:

[
	{
		"num": 1,
		"name": "1",
		"visible": true,
		"focused": true,
		"rect": {
			"x": 0,
			"y": 23,
			"width": 1920,
			"height": 1057
		},
		"output": "eDP-1"
	},
]

MESSAGE
Subscribe this IPC connection to the event types specified in the message payload. The payload should be a valid JSON array of events. See the EVENTS section for the list of supported events.

REPLY
A single object that contains the property success, which is a boolean value indicating whether the subscription was successful or not.

Example Reply:

{
	"success": true
}

MESSAGE
Retrieve the list of outputs

REPLY
An array of objects corresponding to each output. Each object has the following properties:

PROPERTY DATA TYPE DESCRIPTION
name string The name of the output. On DRM, this is the connector
make string The make of the output
model string The model of the output
serial string The output's serial number as a hexadecimal string
active boolean Whether this output is active/enabled
dpms boolean (Deprecated, use power instead) Whether this output is on/off (via DPMS)
power boolean Whether this output is on/off
primary boolean For i3 compatibility, this will be false. It does not make sense in Wayland
scale float The scale currently in use on the output or -1 for disabled outputs
subpixel_hinting string The subpixel hinting current in use on the output. This can be rgb, bgr, vrgb, vbgr, or none
transform string The transform currently in use for the output. This can be normal, 90, 180, 270, flipped-90, flipped-180, or flipped-270
current_workspace string The workspace currently visible on the output or null for disabled outputs
modes array An array of supported mode objects. Each object contains width, height, and refresh
current_mode object An object representing the current mode containing width, height, and refresh
rect object The bounds for the output consisting of x, y, width, and height

Example Reply:

[
	{
		"name": "HDMI-A-2",
		"make": "Unknown",
		"model": "NS-19E310A13",
		"serial": "0x00000001",
		"active": true,
		"primary": false,
		"scale": 1.0,
		"subpixel_hinting": "rgb",
		"transform": "normal",
		"current_workspace": "1",
		"modes": [
			{
				"width": 640,
				"height": 480,
				"refresh": 59940
			},
			{
				"width": 800,
				"height": 600,
				"refresh": 60317
			},
			{
				"width": 1024,
				"height": 768,
				"refresh": 60004
			},
			{
				"width": 1920,
				"height": 1080,
				"refresh": 60000
			}
		],
		"current_mode": {
			"width": 1920,
			"height": 1080,
			"refresh": 60000
		}
	}
]

MESSAGE
Retrieve a JSON representation of the tree

REPLY
An array of objects that represent the current tree. Each object represents one node and will have the following properties:

PROPERTY DATA TYPE DESCRIPTION
id integer The internal unique ID for this node
name string The name of the node such as the output name or window title. For the scratchpad, this will be __i3_scratch for compatibility with i3.
type string The node type. It can be root, output, workspace, con, or floating_con
border string The border style for the node. It can be normal, none, pixel, or csd
current_border_width integer Number of pixels used for the border width
layout string The node's layout. It can either be splith, splitv, stacked, tabbed, or output
orientation string The node's orientation. It can be vertical, horizontal, or none
percent float The percentage of the node's parent that it takes up or null for the root and other special nodes such as the scratchpad
rect object The absolute geometry of the node. The window decorations are excluded from this, but borders are included.
window_rect object The geometry of the content inside the node. These coordinates are relative to the node itself. Window decorations and borders are outside the window_rect
deco_rect object The geometry of the decorations for the node relative to the parent node
geometry object The natural geometry of the contents if it were to size itself
urgent boolean Whether the node or any of its descendants has the urgent hint set. Note: This may not exist when compiled without xwayland support
sticky boolean Whether the node is sticky (shows on all workspaces)
marks array List of marks assigned to the node
focused boolean Whether the node is currently focused by the default seat (seat0)
focus array Array of child node IDs in the current focus order
nodes array The tiling children nodes for the node
floating_nodes array The floating children nodes for the node
representation string (Only workspaces) A string representation of the layout of the workspace that can be used as an aid in submitting reproduction steps for bug reports
fullscreen_mode integer (Only containers and views) The fullscreen mode of the node. 0 means none, 1 means full workspace, and 2 means global fullscreen
floating string Floating state of container. Can be either "auto_off" or "user_on"
scratchpad_state string Whether the window is in the scratchpad. Can be either "none" or "fresh"
app_id string (Only views) For an xdg-shell view, the name of the application, if set. Otherwise, null
pid integer (Only views) The PID of the application that owns the view
visible boolean (Only views) Whether the node is visible
shell string (Only views) The shell of the view, such as xdg_shell or xwayland
inhibit_idle boolean (Only views) Whether the view is inhibiting the idle state
idle_inhibitors object (Only views) An object containing the state of the application and user idle inhibitors. application can be enabled or none. user can be focus, fullscreen, open, visible or none.
window integer (Only xwayland views) The X11 window ID for the xwayland view
window_properties object (Only xwayland views) An object containing the title, class, instance, window_role, window_type, and transient_for for the view

Example Reply:

{
	"id": 1,
	"name": "root",
	"rect": {
		"x": 0,
		"y": 0,
		"width": 1920,
		"height": 1080
	},
	"focused": false,
	"focus": [
		3
	],
	"border": "none",
	"current_border_width": 0,
	"layout": "splith",
	"orientation": "horizontal",
	"percent": null,
	"window_rect": {
		"x": 0,
		"y": 0,
		"width": 0,
		"height": 0
	},
	"deco_rect": {
		"x": 0,
		"y": 0,
		"width": 0,
		"height": 0
	},
	"geometry": {
		"x": 0,
		"y": 0,
		"width": 0,
		"height": 0
	},
	"window": null,
	"urgent": false,
	"floating_nodes": [
	],
	"sticky": false,
	"type": "root",
	"nodes": [
		{
			"id": 2147483647,
			"name": "__i3",
			"rect": {
				"x": 0,
				"y": 0,
				"width": 1920,
				"height": 1080
			},
			"focused": false,
			"focus": [
				2147483646
			],
			"border": "none",
			"current_border_width": 0,
			"layout": "output",
			"orientation": "horizontal",
			"percent": null,
			"window_rect": {
				"x": 0,
				"y": 0,
				"width": 0,
				"height": 0
			},
			"deco_rect": {
				"x": 0,
				"y": 0,
				"width": 0,
				"height": 0
			},
			"geometry": {
				"x": 0,
				"y": 0,
				"width": 0,
				"height": 0
			},
			"window": null,
			"urgent": false,
			"floating_nodes": [
			],
			"sticky": false,
			"type": "output",
			"nodes": [
				{
					"id": 2147483646,
					"name": "__i3_scratch",
					"rect": {
						"x": 0,
						"y": 0,
						"width": 1920,
						"height": 1080
					},
					"focused": false,
					"focus": [
					],
					"border": "none",
					"current_border_width": 0,
					"layout": "splith",
					"orientation": "horizontal",
					"percent": null,
					"window_rect": {
						"x": 0,
						"y": 0,
						"width": 0,
						"height": 0
					},
					"deco_rect": {
						"x": 0,
						"y": 0,
						"width": 0,
						"height": 0
					},
					"geometry": {
						"x": 0,
						"y": 0,
						"width": 0,
						"height": 0
					},
					"window": null,
					"urgent": false,
					"floating_nodes": [
					],
					"sticky": false,
					"type": "workspace"
				}
			]
		},
		{
			"id": 3,
			"name": "eDP-1",
			"rect": {
				"x": 0,
				"y": 0,
				"width": 1920,
				"height": 1080
			},
			"focused": false,
			"focus": [
				4
			],
			"border": "none",
			"current_border_width": 0,
			"layout": "output",
			"orientation": "none",
			"percent": 1.0,
			"window_rect": {
				"x": 0,
				"y": 0,
				"width": 0,
				"height": 0
			},
			"deco_rect": {
				"x": 0,
				"y": 0,
				"width": 0,
				"height": 0
			},
			"geometry": {
				"x": 0,
				"y": 0,
				"width": 0,
				"height": 0
			},
			"window": null,
			"urgent": false,
			"floating_nodes": [
			],
			"sticky": false,
			"type": "output",
			"active": true,
			"primary": false,
			"make": "Unknown",
			"model": "0x38ED",
			"serial": "0x00000000",
			"scale": 1.0,
			"transform": "normal",
			"current_workspace": "1",
			"modes": [
				{
					"width": 1920,
					"height": 1080,
					"refresh": 60052
				}
			],
			"current_mode": {
				"width": 1920,
				"height": 1080,
				"refresh": 60052
			},
			"nodes": [
				{
					"id": 4,
					"name": "1",
					"rect": {
						"x": 0,
						"y": 23,
						"width": 1920,
						"height": 1057
					},
					"focused": false,
					"focus": [
						6,
						5
					],
					"border": "none",
					"current_border_width": 0,
					"layout": "splith",
					"orientation": "horizontal",
					"percent": null,
					"window_rect": {
						"x": 0,
						"y": 0,
						"width": 0,
						"height": 0
					},
					"deco_rect": {
						"x": 0,
						"y": 0,
						"width": 0,
						"height": 0
					},
					"geometry": {
						"x": 0,
						"y": 0,
						"width": 0,
						"height": 0
					},
					"window": null,
					"urgent": false,
					"floating_nodes": [
					],
					"sticky": false,
					"num": 1,
					"output": "eDP-1",
					"type": "workspace",
					"representation": "H[URxvt termite]",
					"nodes": [
						{
							"id": 5,
							"name": "urxvt",
							"rect": {
								"x": 0,
								"y": 23,
								"width": 960,
								"height": 1057
							},
							"focused": false,
							"focus": [
							],
							"border": "normal",
							"current_border_width": 2,
							"layout": "none",
							"orientation": "none",
							"percent": 0.5,
							"window_rect": {
								"x": 2,
								"y": 0,
								"width": 956,
								"height": 1030
							},
							"deco_rect": {
								"x": 0,
								"y": 0,
								"width": 960,
								"height": 25
							},
							"geometry": {
								"x": 0,
								"y": 0,
								"width": 1124,
								"height": 422
							},
							"window": 4194313,
							"urgent": false,
							"floating_nodes": [
							],
							"sticky": false,
							"type": "con",
							"fullscreen_mode": 0,
							"pid": 23959,
							"app_id": null,
							"visible": true,
							"shell": "xwayland",
							"inhibit_idle": true,
							"idle_inhibitors": {
								"application": "none",
								"user": "visible",
							},
							"window_properties": {
								"class": "URxvt",
								"instance": "urxvt",
								"title": "urxvt",
								"transient_for": null
							},
							"nodes": [
							]
						},
						{
							"id": 6,
							"name": "",
							"rect": {
								"x": 960,
								"y": 23,
								"width": 960,
								"height": 1057
							},
							"focused": true,
							"focus": [
							],
							"border": "normal",
							"current_border_width": 2,
							"layout": "none",
							"orientation": "none",
							"percent": 0.5,
							"window_rect": {
								"x": 2,
								"y": 0,
								"width": 956,
								"height": 1030
							},
							"deco_rect": {
								"x": 0,
								"y": 0,
								"width": 960,
								"height": 25
							},
							"geometry": {
								"x": 0,
								"y": 0,
								"width": 817,
								"height": 458
							},
							"window": null,
							"urgent": false,
							"floating_nodes": [
							],
							"sticky": false,
							"type": "con",
							"fullscreen_mode": 0,
							"pid": 25370,
							"app_id": "termite",
							"visible": true,
							"shell": "xdg_shell",
							"inhibit_idle": false,
							"idle_inhibitors": {
								"application": "none",
								"user": "fullscreen",
							},
							"nodes": [
							]
						}
					]
				}
			]
		}
	]
}

MESSAGE
Retrieve the currently set marks

REPLY
An array of marks current set. Since each mark can only be set for one container, this is a set so each value is unique and the order is undefined.

Example Reply:

[
	"one",
	"test"
]

MESSAGE
When sending without a payload, this retrieves the list of configured bar IDs

REPLY
An array of bar IDs, which are strings

Example Reply:

[
	"bar-0",
	"bar-1"
]

MESSAGE
When sent with a bar ID as the payload, this retrieves the config associated with the specified by the bar ID in the payload. This is used by swaybar, but could also be used for third party bars

REPLY
An object that represents the configuration for the bar with the bar ID sent as the payload. The following properties exists and more information about what their value mean can be found in sway-bar(5):

PROPERTY DATA TYPE DESCRIPTION
id string The bar ID
mode string The mode for the bar. It can be dock, hide, or invisible
position string The bar's position. It can currently either be bottom or top
status_command string The command which should be run to generate the status line
font string The font to use for the text on the bar
workspace_buttons boolean Whether to display the workspace buttons on the bar
workspace_min_width integer Minimum width in px for the workspace buttons on the bar
binding_mode_indicator boolean Whether to display the current binding mode on the bar
verbose boolean For i3 compatibility, this will be the boolean value false.
colors object An object containing the #RRGGBBAA colors to use for the bar. See below for more information
gaps object An object representing the gaps for the bar consisting of top, right, bottom, and left.
bar_height integer The absolute height to use for the bar or 0 to automatically size based on the font
status_padding integer The vertical padding to use for the status line
status_edge_padding integer The horizontal padding to use for the status line when at the end of an output

The colors object contains the following properties, which are all strings containing the #RRGGBBAA representation of the color:

PROPERTY DESCRIPTION
background The color to use for the bar background on unfocused outputs
statusline The color to use for the status line text on unfocused outputs
separator The color to use for the separator text on unfocused outputs
focused_background The color to use for the background of the bar on the focused output
focused_statusline The color to use for the status line text on the focused output
focused_separator The color to use for the separator text on the focused output
focused_workspace_text The color to use for the text of the focused workspace button
focused_workspace_bg The color to use for the background of the focused workspace button
focused_workspace_border The color to use for the border of the focused workspace button
active_workspace_text The color to use for the text of the workspace buttons for the visible workspaces on unfocused outputs
active_workspace_bg The color to use for the background of the workspace buttons for the visible workspaces on unfocused outputs
active_workspace_border The color to use for the border of the workspace buttons for the visible workspaces on unfocused outputs
inactive_workspace_text The color to use for the text of the workspace buttons for workspaces that are not visible
inactive_workspace_bg The color to use for the background of the workspace buttons for workspaces that are not visible
inactive_workspace_border The color to use for the border of the workspace buttons for workspaces that are not visible
urgent_workspace_text The color to use for the text of the workspace buttons for workspaces that contain an urgent view
urgent_workspace_bg The color to use for the background of the workspace buttons for workspaces that contain an urgent view
urgent_workspace_border The color to use for the border of the workspace buttons for workspaces that contain an urgent view
binding_mode_text The color to use for the text of the binding mode indicator
binding_mode_bg The color to use for the background of the binding mode indicator
binding_mode_border The color to use for the border of the binding mode indicator

Example Reply:

{
	"id": "bar-0",
	"mode": "dock",
	"position": "top",
	"status_command": "while date +'%Y-%m-%d %l:%M:%S %p'; do sleep 1; done",
	"font": "monospace 10",
	"gaps": {
		"top": 0,
		"right": 0,
		"bottom": 0,
		"left": 0
	},
	"bar_height": 0,
	"status_padding": 1,
	"status_edge_padding": 3,
	"workspace_buttons": true,
	"workspace_min_width": 0,
	"binding_mode_indicator": true,
	"verbose": false,
	"pango_markup": false,
	"colors": {
		"background": "#323232ff",
		"statusline": "#ffffffff",
		"separator": "#666666ff",
		"focused_background": "#323232ff",
		"focused_statusline": "#ffffffff",
		"focused_separator": "#666666ff",
		"focused_workspace_border": "#4c7899ff",
		"focused_workspace_bg": "#285577ff",
		"focused_workspace_text": "#ffffffff",
		"inactive_workspace_border": "#32323200",
		"inactive_workspace_bg": "#32323200",
		"inactive_workspace_text": "#5c5c5cff",
		"active_workspace_border": "#333333ff",
		"active_workspace_bg": "#5f676aff",
		"active_workspace_text": "#ffffffff",
		"urgent_workspace_border": "#2f343aff",
		"urgent_workspace_bg": "#900000ff",
		"urgent_workspace_text": "#ffffffff",
		"binding_mode_border": "#2f343aff",
		"binding_mode_bg": "#900000ff",
		"binding_mode_text": "#ffffffff"
	},
}

MESSAGE
Retrieve version information about the sway process

REPLY
An object containing the following properties:

PROPERTY DATA TYPE DESCRIPTION
major integer The major version of the sway process
minor integer The minor version of the sway process
patch integer The patch version of the sway process
human_readable string A human readable version string that will likely contain more useful information such as the git commit short hash and git branch
loaded_config_file_name string The path to the loaded config file

Example Reply:

{
	"human_readable": "1.0-rc1-117-g2f7247e0 (Feb 24 2019, branch 'master')",
	"major": 1,
	"minor": 0,
	"patch": 0,
	"loaded_config_file_name": "/home/redsoxfan/.config/sway/config"
}

MESSAGE
Retrieve the list of binding modes that currently configured

REPLY
An array of strings, with each string being the name of a binding mode. This will always contain at least one mode (currently default), which is the default binding mode

Example Reply:

[
	"default",
	"resize",
]

MESSAGE
Retrieve the contents of the config that was last loaded

REPLY
An object with a single string property containing the contents of the config

Example Reply:

{
	"config": "set $mod Mod4\nbindsym $mod+q exit\n"
}

MESSAGE
Issues a TICK event to all clients subscribing to the event to ensure that all events prior to the tick were received. If a payload is given, it will be included in the TICK event

REPLY
A single object contains the property success, which is a boolean value indicating whether the TICK event was sent.

Example Reply:

{
	"success": true
}

MESSAGE
For i3 compatibility, this command will just return a failure object since it does not make sense to implement in sway due to the X11 nature of the command. If you are curious about what this IPC command does in i3, refer to the i3 documentation.

REPLY
A single object that contains the property success, which is set to the boolean value false.

Exact Reply:

{
	"success": false
}

MESSAGE
Returns the currently active binding mode.

REPLY
A single object that contains the property name, which is set to the currently active binding mode as a string.

Exact Reply:

{
	"name": "default"
}

MESSAGE
Retrieve a list of the input devices currently available

REPLY
An array of objects corresponding to each input device. Each object has the following properties:

PROPERTY DATA TYPE DESCRIPTION
identifier string The identifier for the input device
name string The human readable name for the device
vendor integer The vendor code for the input device
product integer The product code for the input device
type string The device type. Currently this can be keyboard, pointer, touch, tablet_tool, tablet_pad, or switch
xkb_active_layout_name string (Only keyboards) The name of the active keyboard layout in use
xkb_layout_names array (Only keyboards) A list a layout names configured for the keyboard
xkb_active_layout_index integer (Only keyboards) The index of the active keyboard layout in use
scroll_factor floating (Only pointers) Multiplier applied on scroll event values.
libinput object (Only libinput devices) An object describing the current device settings. See below for more information

The libinput object describes the device configuration for libinput devices. Only properties that are supported for the device will be added to the object. In addition to the possible options listed, all string properties may also be unknown, in the case that a new option is added to libinput. See sway-input(5) for information on the meaning of the possible values. The following properties will be included for devices that support them:

PROPERTY DATA TYPE DESCRIPTION
send_events string Whether events are being sent by the device. It can be enabled, disabled, or disabled_on_external_mouse
tap string Whether tap to click is enabled. It can be enabled or disabled
tap_button_map string The finger to button mapping in use for tapping. It can be lmr or lrm
tap_drag string Whether tap-and-drag is enabled. It can be enabled or disabled
tap_drag_lock string Whether drag-lock is enabled. It can be enabled or disabled
accel_speed double The pointer-acceleration in use
accel_profile string The acceleration profile in use. It can be none, flat, or adaptive
natural_scroll string Whether natural scrolling is enabled. It can be enabled or disabled
left_handed string Whether left-handed mode is enabled. It can be enabled or disabled
click_method string The click method in use. It can be none, button_areas, or clickfinger
click_button_map string The finger to button mapping in use for clickfinger. It can be lmr or lrm
middle_emulation string Whether middle emulation is enabled. It can be enabled or disabled
scroll_method string The scroll method in use. It can be none, two_finger, edge, or on_button_down
scroll_button int The scroll button to use when scroll_method is on_button_down. This will be given as an input event code
scroll_button_lock string Whether scroll button lock is enabled. It can be enabled or disabled
dwt string Whether disable-while-typing is enabled. It can be enabled or disabled
dwtp string Whether disable-while-trackpointing is enabled. It can be enabled or_disabled_
calibration_matrix array An array of 6 floats representing the calibration matrix for absolute devices such as touchscreens

Example Reply:

[
	{
		"identifier": "1:1:AT_Translated_Set_2_keyboard",
		"name": "AT Translated Set 2 keyboard",
		"vendor": 1,
		"product": 1,
		"type": "keyboard",
		"xkb_active_layout_name": "English (US)",
		"libinput": {
			"send_events": "enabled"
		}
	},
	{
		"identifier": "1267:5:Elan_Touchpad",
		"name": "Elan Touchpad",
		"vendor": 1267,
		"product": 5,
		"type": "pointer",
		"libinput": {
			"send_events": "enabled",
			"tap": "enabled",
			"tap_button_map": "lmr",
			"tap_drag": "enabled",
			"tap_drag_lock": "disabled",
			"accel_speed": 0.0,
			"accel_profile": "none",
			"natural_scroll", "disabled",
			"left_handed": "disabled",
			"click_method": "button_areas",
			"middle_emulation": "disabled",
			"scroll_method": "edge",
			"dwt": "enabled",
			"dwtp": "enabled"
		}
	},
	{
		"identifier": "3034:22494:USB2.0_VGA_UVC_WebCam:_USB2.0_V",
		"name": "USB2.0 VGA UVC WebCam: USB2.0 V",
		"vendor": 3034,
		"product": 22494,
		"type": "keyboard",
		"xkb_active_layout_name": "English (US)",
		"libinput": {
			"send_events": "enabled"
		}
	},
	{
		"identifier": "0:3:Sleep_Button",
		"name": "Sleep Button",
		"vendor": 0,
		"product": 3,
		"type": "keyboard",
		"xkb_active_layout_name": "English (US)",
		"libinput": {
			"send_events": "enabled"
		}
	},
	{
		"identifier": "0:5:Lid_Switch",
		"name": "Lid Switch",
		"vendor": 0,
		"product": 5,
		"type": "switch",
		"libinput": {
			"send_events": "enabled"
		}
	},
	{
		"identifier": "0:6:Video_Bus",
		"name": "Video Bus",
		"vendor": 0,
		"product": 6,
		"type": "keyboard",
		"xkb_active_layout_name": "English (US)",
		"libinput": {
			"send_events": "enabled"
		}
	},
	{
		"identifier": "0:1:Power_Button",
		"name": "Power Button",
		"vendor": 0,
		"product": 1,
		"type": "keyboard",
		"xkb_active_layout_name": "English (US)",
		"libinput": {
			"send_events": "enabled"
		}
	}
]

MESSAGE
Retrieve a list of the seats currently configured

REPLY
An array of objects corresponding to each seat. There will always be at least one seat. Each object has the following properties:

PROPERTY DATA TYPE DESCRIPTION
name string The unique name for the seat
capabilities integer The number of capabilities that the seat has
focus integer The id of the node currently focused by the seat or 0 when the seat is not currently focused by a node (i.e. a surface layer or xwayland unmanaged has focus)
devices array An array of input devices that are attached to the seat. Currently, this is an array of objects that are identical to those returned by GET_INPUTS

Example Reply:

[
	{
		"name": "seat0",
		"capabilities": 3,
		"focus": 7,
		"devices": [
			{
				"identifier": "1:1:AT_Translated_Set_2_keyboard",
				"name": "AT Translated Set 2 keyboard",
				"vendor": 1,
				"product": 1,
				"type": "keyboard",
				"xkb_active_layout_name": "English (US)",
				"libinput": {
					"send_events": "enabled"
				}
			},
			{
				"identifier": "1267:5:Elan_Touchpad",
				"name": "Elan Touchpad",
				"vendor": 1267,
				"product": 5,
				"type": "pointer",
				"libinput": {
					"send_events": "enabled",
					"tap": "enabled",
					"tap_button_map": "lmr",
					"tap_drag": "enabled",
					"tap_drag_lock": "disabled",
					"accel_speed": 0.0,
					"accel_profile": "none",
					"natural_scroll", "disabled",
					"left_handed": "disabled",
					"click_method": "button_areas",
					"middle_emulation": "disabled",
					"scroll_method": "edge",
					"dwt": "enabled",
					"dwtp": "enabled"
				}
			},
			{
				"identifier": "3034:22494:USB2.0_VGA_UVC_WebCam:_USB2.0_V",
				"name": "USB2.0 VGA UVC WebCam: USB2.0 V",
				"vendor": 3034,
				"product": 22494,
				"type": "keyboard",
				"xkb_active_layout_name": "English (US)",
				"libinput": {
					"send_events": "enabled"
				}
			},
			{
				"identifier": "0:3:Sleep_Button",
				"name": "Sleep Button",
				"vendor": 0,
				"product": 3,
				"type": "keyboard",
				"xkb_active_layout_name": "English (US)",
				"libinput": {
					"send_events": "enabled"
				}
			},
			{
				"identifier": "0:5:Lid_Switch",
				"name": "Lid Switch",
				"vendor": 0,
				"product": 5,
				"type": "switch",
				"libinput": {
					"send_events": "enabled"
				}
			},
			{
				"identifier": "0:6:Video_Bus",
				"name": "Video Bus",
				"vendor": 0,
				"product": 6,
				"type": "keyboard",
				"xkb_active_layout_name": "English (US)",
				"libinput": {
					"send_events": "enabled"
				}
			},
			{
				"identifier": "0:1:Power_Button",
				"name": "Power Button",
				"vendor": 0,
				"product": 1,
				"type": "keyboard",
				"xkb_active_layout_name": "English (US)",
				"libinput": {
					"send_events": "enabled"
				}
			}
		]
	}
]

Events are a way for client to get notified of changes to sway. A client can subscribe to any events it wants to be notified of changes for. The event is sent in the same format as a reply. The following events are currently available:

EVENT TYPE NAME DESCRIPTION
0x80000000 workspace Sent whenever an event involving a workspace occurs such as initialization of a new workspace or a different workspace gains focus
0x80000001 output Sent when outputs are updated
0x80000002 mode Sent whenever the binding mode changes
0x80000003 window Sent whenever an event involving a view occurs such as being reparented, focused, or closed
0x80000004 barconfig_update Sent whenever a bar config changes
0x80000005 binding Sent when a configured binding is executed
0x80000006 shutdown Sent when the ipc shuts down because sway is exiting
0x80000007 tick Sent when an ipc client sends a SEND_TICK message
0x80000014 bar_state_update Send when the visibility of a bar should change due to a modifier
0x80000015 input Sent when something related to input devices changes

Sent whenever a change involving a workspace occurs. The event consists of a single object with the following properties:

PROPERTY DATA TYPE DESCRIPTION
change string The type of change that occurred. See below for more information
current object An object representing the workspace effected or null for reload changes
old object For a focus change, this is will be an object representing the workspace being switched from. Otherwise, it is null

The following change types are currently available:

TYPE DESCRIPTION
init The workspace was created
empty The workspace is empty and is being destroyed since it is not visible
focus The workspace was focused. See the old property for the previous focus
move The workspace was moved to a different output
rename The workspace was renamed
urgent A view on the workspace has had their urgency hint set or all urgency hints for views on the workspace have been cleared
reload The configuration file has been reloaded

Example Event:

{
	"change": "init",
	"old": null,
	"current": {
		"id": 10,
		"name": "2",
		"rect": {
			"x": 0,
			"y": 0,
			"width": 0,
			"height": 0
		},
		"focused": false,
		"focus": [
		],
		"border": "none",
		"current_border_width": 0,
		"layout": "splith",
		"percent": null,
		"window_rect": {
			"x": 0,
			"y": 0,
			"width": 0,
			"height": 0
		},
		"deco_rect": {
			"x": 0,
			"y": 0,
			"width": 0,
			"height": 0
		},
		"geometry": {
			"x": 0,
			"y": 0,
			"width": 0,
			"height": 0
		},
		"window": null,
		"urgent": false,
		"floating_nodes": [
		],
		"num": 2,
		"output": "eDP-1",
		"type": "workspace",
		"representation": null,
		"nodes": [
		]
	}
}

Sent whenever an output is added, removed, or its configuration is changed. The event is a single object with the property change, which is a string containing the reason for the change. Currently, the only value for change is unspecified.

Example Event:

{
	"change": "unspecified"
}

Sent whenever the binding mode changes. The event consists of a single object with the following properties:

PROPERTY DATA TYPE DESCRIPTION
change string The binding mode that became active
pango_markup boolean Whether the mode should be parsed as pango markup

Example Event:

{
	"change": "default",
	"pango_markup": false
}

Sent whenever a change involving a view occurs. The event consists of a single object with the following properties:

PROPERTY DATA TYPE DESCRIPTION
change string The type of change that occurred. See below for more information
container object An object representing the view effected

The following change types are currently available:

TYPE DESCRIPTION
new The view was created
close The view was closed
focus The view was focused
title The view's title has changed
fullscreen_mode The view's fullscreen mode has changed
move The view has been reparented in the tree
floating The view has become floating or is no longer floating
urgent The view's urgency hint has changed status
mark A mark has been added or removed from the view

Example Event:

{
	"change": "new",
	"container": {
		"id": 12,
		"name": null,
		"rect": {
			"x": 0,
			"y": 0,
			"width": 0,
			"height": 0
		},
		"focused": false,
		"focus": [
		],
		"border": "none",
		"current_border_width": 0,
		"layout": "none",
		"percent": 0.0,
		"window_rect": {
			"x": 0,
			"y": 0,
			"width": 0,
			"height": 0
		},
		"deco_rect": {
			"x": 0,
			"y": 0,
			"width": 0,
			"height": 0
		},
		"geometry": {
			"x": 0,
			"y": 0,
			"width": 1124,
			"height": 422
		},
		"window": 4194313,
		"urgent": false,
		"floating_nodes": [
		],
		"type": "con",
		"pid": 19787,
		"app_id": null,
		"window_properties": {
			"class": "URxvt",
			"instance": "urxvt",
			"transient_for": null
		},
		"nodes": [
		]
	}
}

Sent whenever a config for a bar changes. The event is identical to that of GET_BAR_CONFIG when a bar ID is given as a payload. See 6. GET_BAR_CONFIG (WITH A PAYLOAD) above for more information.

Sent whenever a binding is executed. The event is a single object with the following properties:

PROPERTY DATA TYPE DESCRIPTION
change string The change that occurred for the binding. Currently this will only be run
command string The command associated with the binding
event_state_mask array An array of strings that correspond to each modifier key for the binding
input_code integer For keyboard bindcodes, this is the key code for the binding. For mouse bindings, this is the X11 button number, if there is an equivalent. In all other cases, this will be 0.
symbol string For keyboard bindsyms, this is the bindsym for the binding. Otherwise, this will be null
input_type string The input type that triggered the binding. This is either keyboard or mouse

Example Event:

{
	"change": "run",
	"binding": {
		"command": "workspace 2",
		"event_state_mask": [
			"Mod4"
		],
		"input_code": 0,
		"symbol": "2",
		"input_type": "keyboard"
	}
}

Sent whenever the IPC is shutting down. The event is a single object with the property change, which is a string containing the reason for the shutdown. Currently, the only value for change is exit, which is issued when sway is exiting.

Example Event:

{
	"change": "exit"
}

Sent when first subscribing to tick events or by a SEND_TICK message. The event is a single object with the following properties:

PROPERTY DATA TYPE DESCRIPTION
first boolean Whether this event was triggered by subscribing to the tick events
payload string The payload given with a SEND_TICK message, if any. Otherwise, an empty string

Example Event:

{
	"first": true
	"payload": ""
}

Sent when the visibility of a bar changes due to a modifier being pressed. The event is a single object with the following properties:

PROPERTY DATA TYPE DESCRIPTION
id string The bar ID effected
visible_by_modifier boolean Whether the bar should be made visible due to a modifier being pressed

Example Event:

{
	"id": "bar-0",
	"visible_by_modifier": true
}

Sent when something related to the input devices changes. The event is a single object with the following properties:

PROPERTY DATA TYPE DESCRIPTION
change string What has changed
input object An object representing the input that is identical the ones GET_INPUTS gives

The following change types are currently available:

TYPE DESCRIPTION
added The input device became available
removed The input device is no longer available
xkb_keymap (Keyboards only) The keymap for the keyboard has changed
xkb_layout (Keyboards only) The effective layout in the keymap has changed
libinput_config (libinput device only) A libinput config option for the device changed

Example Event:

{
	"change": "xkb_layout",
	"input": {
		"identifier": "1:1:AT_Translated_Set_2_keyboard",
		"name": "AT Translated Set 2 keyboard",
		"vendor": 1,
		"product": 1,
		"type": "keyboard",
		"xkb_layout_names": [
			"English (US)",
			"English (Dvorak)"
		],
		"xkb_active_layout_index": 1,
		"xkb_active_layout_name": "English (Dvorak)",
		"libinput": {
			"send_events": "enabled"
		}
	}
}

sway(1) sway(5) sway-bar(5) swaymsg(1) sway-input(5) sway-output(5)

2024-10-28