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.
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:
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:
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:
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):
The colors object contains the following properties, which are all strings containing the #RRGGBBAA representation of the color:
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:
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 Mod4nbindsym $mod+q exitn" |
}
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:
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:
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:
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:
Sent whenever a change involving a workspace occurs. The event consists of a single object with the following properties:
The following change types are currently available:
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 the binding mode changes. The event consists of a single object with the following properties:
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:
The following change types are currently available:
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:
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:
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:
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:
The following change types are currently available:
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)