sway-ipc - Man Page

IPC protocol for sway

Description

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.

Message and Reply Format

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.

Messages and Replies

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

TYPE NUMBERMESSAGE NAMEPURPOSE
0RUN_COMMANDRuns the payload as sway commands
1GET_WORKSPACESGet the list of current workspaces
2SUBSCRIBESubscribe the IPC connection to the events listed in the payload
3GET_OUTPUTSGet the list of current outputs
4GET_TREEGet the node layout tree
5GET_MARKSGet the names of all the marks currently set
6GET_BAR_CONFIGGet the specified bar config or a list of bar config names
7GET_VERSIONGet the version of sway that owns the IPC socket
8GET_BINDING_MODESGet the list of binding mode names
9GET_CONFIGReturns the config that was last loaded
10SEND_TICKSends a tick event with the specified payload
11SYNCReplies failure object for i3 compatibility
12GET_BINDING_STATERequest the current binding state, e.g. the currently active binding mode name.
100GET_INPUTSGet the list of input devices
101GET_SEATSGet the list of seats

0. Run_command

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"
  	}
  ]

1. Get_workspaces

MESSAGE
Retrieves the list of workspaces.

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

PROPERTYDATA TYPEDescription
numintegerThe workspace number or -1 for workspaces that do not start with a number
namestringThe name of the workspace
visiblebooleanWhether the workspace is currently visible on any output
focusedbooleanWhether the workspace is currently focused by the default seat (seat0)
urgentbooleanWhether a view on the workspace has the urgent flag set
rectobjectThe bounds of the workspace. It consists of x, y, width, and height
outputstringThe 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"
  	},
  ]

2. Subscribe

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
  }

3. Get_outputs

MESSAGE
Retrieve the list of outputs

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

PROPERTYDATA TYPEDescription
namestringThe name of the output. On DRM, this is the connector
makestringThe make of the output
modelstringThe model of the output
serialstringThe output's serial number as a hexadecimal string
activebooleanWhether this output is active/enabled
dpmsboolean(Deprecated, use power instead) Whether this output is on/off (via DPMS)
powerbooleanWhether this output is on/off
primarybooleanFor i3 compatibility, this will be false. It does not make sense in Wayland
scalefloatThe scale currently in use on the output or -1 for disabled outputs
subpixel_hintingstringThe subpixel hinting current in use on the output. This can be rgb, bgr, vrgb, vbgr, or none
transformstringThe transform currently in use for the output. This can be normal, 90, 180, 270, flipped-90, flipped-180, or flipped-270
current_workspacestringThe workspace currently visible on the output or null for disabled outputs
modesarrayAn array of supported mode objects. Each object contains width, height, and refresh
current_modeobjectAn object representing the current mode containing width, height, and refresh
rectobjectThe 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
  		}
  	}
  ]

4. Get_tree

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:

PROPERTYDATA TYPEDescription
idintegerThe internal unique ID for this node
namestringThe name of the node such as the output name or window title. For the scratchpad, this will be __i3_scratch for compatibility with i3.
typestringThe node type. It can be root, output, workspace, con, or floating_con
borderstringThe border style for the node. It can be normal, none, pixel, or csd
current_border_widthintegerNumber of pixels used for the border width
layoutstringThe node's layout. It can either be splith, splitv, stacked, tabbed, or output
orientationstringThe node's orientation. It can be vertical, horizontal, or none
percentfloatThe percentage of the node's parent that it takes up or null for the root and other special nodes such as the scratchpad
rectobjectThe absolute geometry of the node. The window decorations are excluded from this, but borders are included.
window_rectobjectThe 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_rectobjectThe geometry of the decorations for the node relative to the parent node
geometryobjectThe natural geometry of the contents if it were to size itself
urgentbooleanWhether the node or any of its descendants has the urgent hint set. Note: This may not exist when compiled without xwayland support
stickybooleanWhether the node is sticky (shows on all workspaces)
marksarrayList of marks assigned to the node
focusedbooleanWhether the node is currently focused by the default seat (seat0)
focusarrayArray of child node IDs in the current focus order
nodesarrayThe tiling children nodes for the node
floating_nodesarrayThe floating children nodes for the node
representationstring(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_modeinteger(Only containers and views) The fullscreen mode of the node. 0 means none, 1 means full workspace, and 2 means global fullscreen
app_idstring(Only views) For an xdg-shell view, the name of the application, if set. Otherwise, null
pidinteger(Only views) The PID of the application that owns the view
visibleboolean(Only views) Whether the node is visible
shellstring(Only views) The shell of the view, such as xdg_shell or xwayland
inhibit_idleboolean(Only views) Whether the view is inhibiting the idle state
idle_inhibitorsobject(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.
windowinteger(Only xwayland views) The X11 window ID for the xwayland view
window_propertiesobject(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": [
  							]
  						}
  					]
  				}
  			]
  		}
  	]
  }

5. Get_marks

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"
  ]

6. Get_bar_config (Without a Payload)

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"
  ]

6. Get_bar_config (with a Payload)

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):

PROPERTYDATA TYPEDescription
idstringThe bar ID
modestringThe mode for the bar. It can be dock, hide, or invisible
positionstringThe bar's position. It can currently either be bottom or top
status_commandstringThe command which should be run to generate the status line
fontstringThe font to use for the text on the bar
workspace_buttonsbooleanWhether to display the workspace buttons on the bar
workspace_min_widthintegerMinimum width in px for the workspace buttons on the bar
binding_mode_indicatorbooleanWhether to display the current binding mode on the bar
verbosebooleanFor i3 compatibility, this will be the boolean value false.
colorsobjectAn object containing the #RRGGBBAA colors to use for the bar. See below for more information
gapsobjectAn object representing the gaps for the bar consisting of top, right, bottom, and left.
bar_heightintegerThe absolute height to use for the bar or 0 to automatically size based on the font
status_paddingintegerThe vertical padding to use for the status line
status_edge_paddingintegerThe 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:

PROPERTYDescription
backgroundThe color to use for the bar background on unfocused outputs
statuslineThe color to use for the status line text on unfocused outputs
separatorThe color to use for the separator text on unfocused outputs
focused_backgroundThe color to use for the background of the bar on the focused output
focused_statuslineThe color to use for the status line text on the focused output
focused_separatorThe color to use for the separator text on the focused output
focused_workspace_textThe color to use for the text of the focused workspace button
focused_workspace_bgThe color to use for the background of the focused workspace button
focused_workspace_borderThe color to use for the border of the focused workspace button
active_workspace_textThe color to use for the text of the workspace buttons for the visible workspaces on unfocused outputs
active_workspace_bgThe color to use for the background of the workspace buttons for the visible workspaces on unfocused outputs
active_workspace_borderThe color to use for the border of the workspace buttons for the visible workspaces on unfocused outputs
inactive_workspace_textThe color to use for the text of the workspace buttons for workspaces that are not visible
inactive_workspace_bgThe color to use for the background of the workspace buttons for workspaces that are not visible
inactive_workspace_borderThe color to use for the border of the workspace buttons for workspaces that are not visible
urgent_workspace_textThe color to use for the text of the workspace buttons for workspaces that contain an urgent view
urgent_workspace_bgThe color to use for the background of the workspace buttons for workspaces that contain an urgent view
urgent_workspace_borderThe color to use for the border of the workspace buttons for workspaces that contain an urgent view
binding_mode_textThe color to use for the text of the binding mode indicator
binding_mode_bgThe color to use for the background of the binding mode indicator
binding_mode_borderThe 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"
  	},
  }

7. Get_version

MESSAGE
Retrieve version information about the sway process

REPLY
An object containing the following properties:

PROPERTYDATA TYPEDescription
majorintegerThe major version of the sway process
minorintegerThe minor version of the sway process
patchintegerThe patch version of the sway process
human_readablestringA human readable version string that will likely contain more useful information such as the git commit short hash and git branch
loaded_config_file_namestringThe 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"
  }

8. Get_binding_modes

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",
  ]

9. Get_config

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 Mod4nbindsym $mod+q exitn"
  }

10. Send_tick

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
  }

11. Sync

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
  }

12. Get_binding_state

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"
  }

100. Get_inputs

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:

PROPERTYDATA TYPEDescription
identifierstringThe identifier for the input device
namestringThe human readable name for the device
vendorintegerThe vendor code for the input device
productintegerThe product code for the input device
typestringThe device type. Currently this can be keyboard, pointer, touch, tablet_tool, tablet_pad, or switch
xkb_active_layout_namestring(Only keyboards) The name of the active keyboard layout in use
xkb_layout_namesarray(Only keyboards) A list a layout names configured for the keyboard
xkb_active_layout_indexinteger(Only keyboards) The index of the active keyboard layout in use
scroll_factorfloating(Only pointers) Multiplier applied on scroll event values.
libinputobject(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:

PROPERTYDATA TYPEDescription
send_eventsstringWhether events are being sent by the device. It can be enabled, disabled, or disabled_on_external_mouse
tapstringWhether tap to click is enabled. It can be enabled or disabled
tap_button_mapstringThe finger to button mapping in use. It can be lmr or lrm
tap_dragstringWhether tap-and-drag is enabled. It can be enabled or disabled
tap_drag_lockstringWhether drag-lock is enabled. It can be enabled or disabled
accel_speeddoubleThe pointer-acceleration in use
accel_profilestringThe acceleration profile in use. It can be none, flat, or adaptive
natural_scrollstringWhether natural scrolling is enabled. It can be enabled or disabled
left_handedstringWhether left-handed mode is enabled. It can be enabled or disabled
click_methodstringThe click method in use. It can be none, button_areas, or clickfinger
middle_emulationstringWhether middle emulation is enabled. It can be enabled or disabled
scroll_methodstringThe scroll method in use. It can be none, two_finger, edge, or on_button_down
scroll_buttonintThe scroll button to use when scroll_method is on_button_down. This will be given as an input event code
scroll_button_lockstringWhether scroll button lock is enabled. It can be enabled or disabled
dwtstringWhether disable-while-typing is enabled. It can be enabled or disabled
dwtpstringWhether disable-while-trackpointing is enabled. It can be enabled or_disabled_
calibration_matrixarrayAn 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"
  		}
  	}
  ]

101. Get_seats

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:

PROPERTYDATA TYPEDescription
namestringThe unique name for the seat
capabilitiesintegerThe number of capabilities that the seat has
focusintegerThe 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)
devicesarrayAn 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

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 TYPENAMEDescription
0x80000000workspaceSent whenever an event involving a workspace occurs such as initialization of a new workspace or a different workspace gains focus
0x80000001outputSent when outputs are updated
0x80000002modeSent whenever the binding mode changes
0x80000003windowSent whenever an event involving a view occurs such as being reparented, focused, or closed
0x80000004barconfig_updateSent whenever a bar config changes
0x80000005bindingSent when a configured binding is executed
0x80000006shutdownSent when the ipc shuts down because sway is exiting
0x80000007tickSent when an ipc client sends a SEND_TICK message
0x80000014bar_state_updateSend when the visibility of a bar should change due to a modifier
0x80000015inputSent when something related to input devices changes

0x80000000. WORKSPACE

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

PROPERTYDATA TYPEDescription
changestringThe type of change that occurred. See below for more information
currentobjectAn object representing the workspace effected or null for reload changes
oldobjectFor 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:

TYPEDescription
initThe workspace was created
emptyThe workspace is empty and is being destroyed since it is not visible
focusThe workspace was focused. See the old property for the previous focus
moveThe workspace was moved to a different output
renameThe workspace was renamed
urgentA view on the workspace has had their urgency hint set or all urgency hints for views on the workspace have been cleared
reloadThe 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": [
  		]
  	}
  }

0x80000001. OUTPUT

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"
  }

0x80000002. MODE

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

PROPERTYDATA TYPEDescription
changestringThe binding mode that became active
pango_markupbooleanWhether the mode should be parsed as pango markup

Example Event:

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

0x80000003. WINDOW

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

PROPERTYDATA TYPEDescription
changestringThe type of change that occurred. See below for more information
containerobjectAn object representing the view effected

The following change types are currently available:

TYPEDescription
newThe view was created
closeThe view was closed
focusThe view was focused
titleThe view's title has changed
fullscreen_modeThe view's fullscreen mode has changed
moveThe view has been reparented in the tree
floatingThe view has become floating or is no longer floating
urgentThe view's urgency hint has changed status
markA 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": [
  		]
  	}
  }

0x80000004. BARCONFIG_UPDATE

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.

0x80000005. BINDING

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

PROPERTYDATA TYPEDescription
changestringThe change that occurred for the binding. Currently this will only be run
commandstringThe command associated with the binding
event_state_maskarrayAn array of strings that correspond to each modifier key for the binding
input_codeintegerFor 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.
symbolstringFor keyboard bindsyms, this is the bindsym for the binding. Otherwise, this will be null
input_typestringThe 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"
  	}
  }

0x80000006. SHUTDOWN

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"
  }

0x80000007. TICK

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

PROPERTYDATA TYPEDescription
firstbooleanWhether this event was triggered by subscribing to the tick events
payloadstringThe payload given with a SEND_TICK message, if any. Otherwise, an empty string

Example Event:

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

0x80000014. BAR_STATE_UPDATE

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

PROPERTYDATA TYPEDescription
idstringThe bar ID effected
visible_by_modifierbooleanWhether the bar should be made visible due to a modifier being pressed

Example Event:

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

0x80000015. INPUT

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

PROPERTYDATA TYPEDescription
changestringWhat has changed
inputobjectAn object representing the input that is identical the ones GET_INPUTS gives

The following change types are currently available:

TYPEDescription
addedThe input device became available
removedThe 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"
  		}
  	}
  }

See Also

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

Referenced By

sway(1), sway(5), swaymsg(1).

2024-02-24