You are on page 1of 29

SYNOPSIS

sway [options] [command]


OPTIONS

-h, --help

Show help message and quit.

-c, --config <config>

Specifies a config file.

-C, --validate

Check the validity of the config file, then exit.

-d, --debug

Enables full logging, including debug information.

-v, --version

Show the version number and quit.

-V, --verbose

Enables more verbose logging.

--get-socketpath

Gets the IPC socket path and prints it, then exits.

DESCRIPTION

sway was created to fill the need of an i3-like window manager for Wayland. The
upstream i3 developers have no intention of porting i3 to Wayland, and projects
proposed by others ended up as vaporware. Many thanks to the i3 folks for providing
such a great piece of software, so good that your users would rather write an
entirely new window manager from scratch that behaved exactly like i3 rather than
switch to something else.

Launch sway directly from a tty or via your favorite Wayland-compatible login
manager.

COMMANDS

If sway is currently running, you may run sway [command] to send command to the
running instance of sway. The same commands you would use in the config file are
valid here (see sway(5)). For compatibility reasons, you may also issue commands with
swaymsg(1) or i3-msg(1) (or even with i3(1), probably).
CONFIGURATION

The path to a config file can be given via the -c parameter, else sway searches for
it in the following locations: - ~/.sway/config - $XDG_CONFIG_HOME/sway/config
(suggested location) - ~/.i3/config - $XDG_CONFIG_HOME/i3/config (XDG_HOME ) -
/etc/sway/config - /etc/i3/config

In /etc/sway/config the standard config file is installed. An error is raised when no


config file is found.

To write your own configuration, it’s suggested that you copy the default config file
to the location of your choosing and start there.

For information on the config file format, see sway(5).

ENVIRONMENT

The following environment variables have an effect on sway:

SWAY_CURSOR_THEME

Specifies the name of the cursor theme to use.

SWAY_CURSOR_SIZE

Specifies the size of the cursor to use.

SWAYSOCK

Specifies the path to the sway IPC socket.

WLC_DRM_DEVICE

Specifies the device to use in DRM mode.

WLC_SHM

Set 1 to force EGL clients to use shared memory.

WLC_OUTPUTS

Number of fake outputs to use when running in X11 mode.

WLC_XWAYLAND

Set to 0 to disable Xwayland support.

WLC_LIBINPUT

Set to 1 to force libinput (even in X11 mode).


WLC_REPEAT_DELAY

Configures the keyboard repeat delay.

WLC_REPEAT_RATE

Configures the keyboard repeat rate.

XKB_DEFAULT_RULES, XKB_DEFAULT_MODEL, XKB_DEFAULT_LAYOUT, XKB_DEFAULT_VARIANT,


XKB_DEFAULT_OPTIONS

Configures the xkb keyboard settings. See xkeyboard-config(7).

NAME

swaygrab - Grab image data from the current sway session.

SYNOPSIS

swaygrab [options] [file]


Grabs pixels from an output and writes them to file. The image will be passed to
ImageMagick convert for processing.

OPTIONS

-h, --help

Show help message and quit.

-c, --capture

Captures multiple frames as video and passes them into ffmpeg. Continues until you
send SIGTERM (ctrl+c) to swaygrab.

-o, --output <output>

Use the specified output. If no output is defined the currently focused output in
sway will be used.

-v, --version

Print the version (of swaymsg) and quit.

-s, --socket <path>

Use the specified socket path. Otherwise, swaymsg will ask sway where the socket is
(which is the value of $SWAYSOCK, then of $I3SOCK).

-R, --rate <rate>

Specify a framerate (in frames per second). Used in combination with -c. Default is
30. Must be an integer.
-r, --raw

Instead of invoking ImageMagick or ffmpeg, dump raw rgba data to stdout.

-f, --focused

Capture only the currently focused container.

ENVIRONMENT VARIABLES

swaygrab reads the following environment variables.

SWAYGRAB_FFMPEG_OPTS

Pass additional arguments to FFmpeg when starting a capture.

EXAMPLES

swaygrab output.png

Grab the contents of currently focused output and write to output.png.

swaygrab -c -o HDMI-A-1 output.webm

Capture a webm of HDMI-A-1.

SWAYGRAB_FFMPEG_OPTS="-f alsa -i pulse" swaygrab -c

Capture the focused output and encode audio from the default recording device.

NAME

swaymsg - Send messages to a running instance of sway over the IPC socket.

SYNOPSIS

swaymsg [options] [message]


OPTIONS

-h, --help

Show help message and quit.

-q, --quiet

Sends the IPC message but does not print the response from sway.

-r, --raw

Use raw output even if using a tty.

-s, --socket <path>


Use the specified socket path. Otherwise, swaymsg will ask sway where the socket is
(which is the value of $SWAYSOCK, then of $I3SOCK).

-t, --type <type>

Specify the type of IPC message. See below.

-v, --version

Print the version (of swaymsg) and quit.

IPC MESSAGE TYPES

<command>

The message is a sway command (the same commands you can bind to keybindings in your
sway config file). It will be executed immediately.

See sway(5) for a list of commands.

get_workspaces

Gets a JSON-encoded list of workspaces and their status.

get_inputs

Gets a JSON-encoded list of current inputs.

get_outputs

Gets a JSON-encoded list of current outputs.

get_tree

Gets a JSON-encoded layout tree of all open windows, containers, outputs, workspaces,
and so on.

get_marks

Get a JSON-encoded list of marks.

get_bar_config

Get a JSON-encoded configuration for swaybar.

get_version

Get JSON-encoded version information for the running instance of sway.

get_clipboard

Get JSON-encoded information about the clipboard. Returns the current clipboard mime-
types if called without arguments, otherwise returns the clipboard data in the
requested formats. Encodes the data using base64 for non-text mime types.
NAME

sway - configuration file and commands

DESCRIPTION

A sway configuration file is a list of sway commands that are executed by sway on
startup. These commands usually consist of setting your preferences and setting key
bindings. An example config is likely present in /etc/sway/config for you to check
out.

Lines in the configuration file might be extended through multiple lines by adding a
\ character at the end of line. e.g.:

bindsym Shift+XF86AudioRaiseVolume exec pactl set-sink-volume \

$(pactl list sinks | grep -B 1 RUNNING | sed '1q;d' | sed 's/[^0-9]\+//g')


+5%

These commands can be executed in your config file, via swaymsg(1), or via the
bindsym command.

COMMANDS

The following commands may only be used in the configuration file.

bar <block of commands>

Append { to this command, the following lines will be commands that configure
swaybar, and } on its own line to close the block.

See sway-bar(5) for details.

default_orientation <horizontal|vertical|auto>

Sets the default container layout for tiled containers.

set <name> <value>

Sets variable $name to value. You can use the new variable in the arguments of future
commands.

The following commands cannot be used directly in the configuration file. They are
expected to be used with bindsym or at runtime through swaymsg(1).

border <normal|pixel> [<n>]


Set border style for focused window. normal includes a border of thickness n and a
title bar. pixel is a border without title bar n pixels thick. Default is normal with
border thickness 2.

border <none|toggle>

Set border style for focused window to none or toggle between the available border
styles: normal, pixel, none.

clipboard <content>

Store content in the system clipboard, with a MIME type of "text/plain"

exit

Exit sway and end your Wayland session.

floating <enable|disable|toggle>

Make focused view floating, non-floating, or the opposite of what it is now.

focus <direction>

Direction may be one of up, down, left, right, next, prev, parent, or child. The
directional focus commands will move the focus in that direction. The next and prev
directions will focus the next, respectively previous, element in the current
container. The parent focus command will change the focus to the parent of the
currently focused container, which is useful, for example, to open a sibling of the
parent container, or to move the entire container around.

focus output <direction|name>

Direction may be one of up, down, left, right. The directional focus commands will
move the focus to the output in that direction. When name is given, the focus is
changed to the output with that name.

focus mode_toggle

Toggles focus between floating view and tiled view.

fullscreen

Toggles fullscreen status for the focused view.

layout <mode>

Sets the layout mode of the focused container. mode can be one of splith, splitv,
toggle split, stacking, tabbed.
layout auto <mode>

Sets layout to one of the auto modes, i.e. one of left, right, top, or bottom.

layout auto <next|prev>


Cycles between available auto layouts.

layout auto [master|ncol] [inc|set] <n>

Modify the number of master elements, respectively slave columns, in the focused
container. <n> can be a positive or negative integer. These commands only have an
effect if the focused container uses one of the "auto" layouts.

layout toggle split

Cycles between available split layouts.

move <left|right|up|down> <[px]>

Moves the focused container left, right, up, or down. If the window is floating it
moves it px in that direction, defaulting to 10. Tiled containers are moved the same
regardless of the px argument.

move <next|prev|first>

Moving to prev or next swaps the container with its sibling in the same container.
Move first exchanges the focused element in an auto layout with the first element,
i.e. promotes the focused element to master position.

move <container|window> to workspace <name>

Moves the focused container to the workspace identified by name. name may be a
special workspace name. See workspace.

move <container|window|workspace> to output <name|direction>

Moves the focused container or workspace to the output identified by name or


direction. direction may be one of up, down, left, right.
move [to] scratchpad

Moves the focused window to the scratchpad.

reload

Reloads the sway config file without restarting sway.

resize <shrink|grow> <width|height> [<amount>] [px|ppt]

Resizes the currently focused container or view by amount. amount is optional: the
default value is 10 (either px or ppt depending on the view type). The [px|ppt]
parameter is optional. px specifies that amount refers to pixels; ppt specifies that
amount refers to percentage points of the current dimension. Floating views use px
dimensions by default (but can use ppt if specified); tiled views use ppt dimensions
by default (but can use px if specified).

resize set <width> [px] <height> [px]


Sets the width and height of the currently focused container to width pixels and
height pixels. The [px] parameters are optional and have no effect. This command only
accepts pixel dimensions.

resize set <width|height> <amount> [px] [<width|height> <amount> [px]]

Sets the width and/or height of the currently focused container to amount. The [px]
parameters are optional and have no effect. This command only accepts pixel
dimensions.

scratchpad show

Shows a window from the scratchpad. Repeatedly using this command will cycle through
the windows in the scratchpad.

split <vertical|v|horizontal|h|toggle|t>

Splits the current container, vertically or horizontally. If toggled, then the


current container is split opposite to the parent container.

splith

Equivalent to split horizontal.

splitv

Equivalent to split vertical.

splitt

Equivalent to split toggle.

sticky <enable|disable|toggle>

"Sticks" a floating window to the current output so that it shows up on all


workspaces.

The following commands may be used either in the configuration file or triggered at
runtime.

assign <criteria> [→] <workspace>

Assigns views matching criteria (see Criteria section below) to workspace. The →
(U+2192) is optional and purely for aesthetics. This command is exactly equivalent to
"for_window <criteria> move container to workspace <workspace>".

bindsym <key combo> <command>

Binds key combo to execute command when pressed. You may use XKB key names here (
xev(1) is a good tool for discovering them). An example bindsym command would be
bindsym Mod1+Shift+f exec firefox, which would execute Firefox if the alt, shift, and
F keys are pressed together. Any valid sway command is eligible to be bound to a key
combo.
bindcode <code> <command> is also available for binding with key codes instead of key
names.

client.<color_class> <border> <background> <text> <indicator> <child_border>

The client commands control the colors of the view borders and title bars. All client
commands require five color values. (The one exception is client.background which
requires one color value.) If you only want to specify a subset, supply default
colors for all the others. Colors must be defined in hex. i.e. #rrggbb or #rrggbbaa,
when including the alpha channel.

The command tokens are:

color_class

Specifies the view to which the colors apply.

client.background

The color a view will be painted, underneath the client itself. This will only be
visible if a client does not fully cover its allocated view space. This command only
requires one color. Note: This is not currently implemented.

client.focused

The view that has focus.

client.focused_inactive

A view that has focus within its container, but the container is not focused.

client.placeholder

Used when drawing placeholder view contents. Only background and text colors are
used. Note: This is not currently implemented.

client.unfocused

A view that does not have focus.

client.urgent

A view with an urgency hint. Note: This is not currently implemented.

border

The border around the title bar.

background

The background of the title bar.


text

The text color of the title bar.

indicator

The color used to indicate where a new view will open. In a tiled container, this
would paint the right border of the current view if a new view would be opened to the
right.

child_border

The border around the view itself.

The default colors are:

color_class border background text indicator child_border

background n/a #ffffff n/a n/a n/a

focused #4c7899 #285577 #ffffff #2e9ef4 #285577

focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a

unfocused #333333 #222222 #888888 #292d2e #222222

urgent #2f343a #900000 #ffffff #900000 #900000

placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c

debuglog <on|off|toggle>

Enables, disables or toggles debug logging. The toggle argument cannot be used in the
configuration file.

default_border <normal|none|pixel> [<n>]

Set default border style for new windows. This command was previously called
new_window. While new_window still works, it is considered deprecated and support for
it will be removed in the future.

default_floating_border <normal|none|pixel> [<n>]

Set default border style for new floating windows. This only applies to windows that
are spawned in floating mode, not windows that become floating after the fact. This
command was previously called new_float. While new_float still works, it is
considered deprecated and support for it will be removed in the future.

exec <shell command>


Executes shell command with sh.

exec_always <shell command>

Like exec, but the shell command will be executed again after reload or restart is
executed.

floating_maximum_size <width> x <height>

Specifies the maximum dimensions of floating windows. Uses the container dimensions
as default. -1 x -1 will remove any restriction on dimensions. 0 x 0 has the same
behavior as not setting any value. If in conflict, this option has precedence over
floating_minimum_size.

floating_minimum_size <width> x <height>

Specifies the minimum dimensions of floating windows. Default parameters are 75 x 50.
-1 and 0 are invalid parameters, default will be used instead.

floating_modifier <modifier> [normal|inverse]

When the modifier key is held down, you may hold left click to move floating windows,
and right click to resize them. Unlike i3, this modifier may also be used to resize
and move windows that are tiled. With the inverse mode enabled, left click is used
for resizing and right click for dragging. The mode parameter is optional and
defaults to normal if it isn’t defined.

floating_scroll <up|down|left|right> [command]

Sets a command to be executed when the mouse wheel is scrolled in the specified
direction while holding the floating modifier. Resets the command, when given no
arguments.

focus_follows_mouse <yes|no>

If set to yes, moving your mouse over a window will focus that window.

font <font>

Sets font for use in title bars. Generally the format is something like "Name Style
Size" e.g. "Deja Vu Sans Book 12". You can also use Pango font descriptions with
"pango:font".

for_window <criteria> <command>

Whenever a window that matches criteria appears, run list of commands. See Criteria
section below.

gaps edge_gaps <on|off|toggle>

Whether or not to add gaps between views and workspace edges if amount of inner gap
is not zero. When off, no gap is added where the view is aligned to the workspace
edge, effectively creating gaps only between views. The toggle argument cannot be
used in the configuration file.
gaps <amount>

Sets default amount pixels as the gap between each view, and around each workspace.

gaps <inner|outer> <amount>

Sets default amount pixels as the inner or outer gap, where the former affects
spacing between views and the latter affects the space around each workspace.

gaps <inner|outer> <all|workspace|current> <set|plus|minus> <amount>

Changes the gaps for the inner or outer gap. all changes the gaps for all views or
workspace, workspace changes gaps for all views in current workspace (or current
workspace), and current changes gaps for the current view or workspace.

hide_edge_borders <none|vertical|horizontal|both|smart>

Hide window borders adjacent to the screen edges. Default is none.

input <input device> <block of commands>

Append { to this command, the following lines will be commands to configure the named
input device, and } on its own line will close the block.

input * <block of commands> may be used to match all input devices.

See sway-input(5) for details.

kill

Kills (force-closes) the currently-focused container and all of its children.

smart_gaps <on|off>

If smart_gaps are on then gaps will only be enabled if a workspace has more than one
child container.

mark <--add|--replace> <--toggle> <identifier>

Marks are arbitrary labels that can be used to identify certain windows and then jump
to them at a later time. By default, the mark command sets identifier as the only
mark on a window. By specifying --add, mark will add identifier to the list of
current marks. If --toggle is specified mark will remove identifier if it is already
a label. Marks may be found by using a criteria. See the Criteria section below.

mode <mode_name>

Switches to the given mode_name. The default mode is simply default. To create a new
mode append { to this command, the following lines will be keybindings for that mode,
and } on its own line to close the block.
mouse_warping <output|none>

When output: place mouse at center of newly focused window when changing output. When
none: don’t move mouse.
no_focus <criteria>

Prevents windows matching <criteria> from being focused automatically when they’re
created. This does not apply to the first window in a workspace.

output <name> <resolution|res> <WIDTHxHEIGHT>

Configures the specified output to use the given resolution.

Note: sway does not currently support setting the output mode. Your output’s native
resolution will be used and the screen will be scaled from the resolution specified
to your native resolution.

output <name> <position|pos> <X,Y>

Configures the specified output to be arranged at the given position.

output <name> scale <I>

Configures the specified output to be scaled up by the specified integer scaling


factor (usually 2 for HiDPI screens).

output <name> <background|bg> <file> <mode>

Sets the wallpaper for the given output to the specified file, using the given
scaling mode (one of "stretch", "fill", "fit", "center", "tile").

output <name> <background|bg> <color> solid_color

Sets the background of the given output to the specified color. color should be
specified as an #rrggbb (no alpha) color.

output <name> disable

Disables the specified output.

NOTES FOR THE OUTPUT COMMAND

You may combine output commands into one, like so:

output HDMI-A-1 res 1920x1080 pos 1920,0 bg ~/wallpaper.png stretch

You can get a list of output names like so:


swaymsg -t get_outputs

You may also match any output by using the output name "*". Be sure to add this
output config after the others, or it will be matched instead of the others.

seamless_mouse <on|off>

Change output seamlessly when pointer touches edge of output. Outputs need to be
configured with perfectly aligned adjacent positions for this option to have any
effect.

show_marks <on|off>

If show_marks is on then marks will be showed in the window decoration. However, any
mark that starts with an underscore will not be drawn even if the option is on. The
default option is on.

unmark <identifier>

Unmark will remove identifier from the list of current marks on a window. If no
identifier is specified, then unmark will remove all marks.
workspace [number] <name>

Switches to the specified workspace. The string "number" is optional. The workspace
name, if unquoted, may not contain the string "output", as sway will assume that the
command is moving a workspace to an output, as described below.

workspace <prev|next>

Switches to the next workspace on the current output or on the next output if
currently on the last workspace.

workspace <prev_on_output|next_on_output>

Switches to the next workspace on the current output.

workspace <name> output <output>

Specifies that the workspace named name should appear on the specified output.

workspace_auto_back_and_forth <yes|no>

When yes, repeating a workspace switch command will switch back to the prior
workspace. For example, if you are currently on workspace 1, switch to workspace 2,
then invoke the "workspace 2" command again, you will be returned to workspace 1.
Defaults to no.

workspace_layout <default|stacking|tabbed|auto|auto left|auto right|auto top|auto


bottom>:: Specifies the start layout for new workspaces.
include <path>

Includes a sub config file by path. path can be either a full path or a path relative
to the parent config.

CRITERIA

A criteria is a string in the form of e.g.:

[class="[Rr]egex.*" title="some title"]

The string contains one or more (space separated) attribute/value pairs. They are
used by some commands to choose which views to execute actions on. All attributes
must match for the criteria to match.

Criteria may be used with either the for_window or assign commands to specify
operations to perform on new views. A criteria may also be used to perform specific
commands (ones that normally act upon one window) on all views that match that
criteria. For example:

Focus on a window with the mark "IRC": [con_mark="IRC"] focus

Kill all windows with the title "Emacs": [class="Emacs"] kill

Mark all Firefox windows with "Browser": [class="Firefox"] mark Browser

Currently supported attributes:

class

Compare value against the window class. Can be a regular expression. If value is
focused, then the window class must be the same as that of the currently focused
window.

con_id

Compare against the internal container ID, which you can find via IPC.

con_mark

Compare against the window marks. Can be a regular expression.


floating

Matches against floating windows.

id

Compare value against the app id. Can be a regular expression.

title

Compare against the window title. Can be a regular expression. If value is focused
then the window title must be the same as that of the currently focused window.

tiling

Matches against tiling windows.

workspace

Compare against the workspace name for this view. Can be a regular expression. If the
value is focused, then all the views on the currently focused workspace matches.

NAME

sway-input - input configuration file and commands

DESCRIPTION

Sway allows for configuration of libinput devices within the sway configuration file.
sway-input commands must be used inside an input { } block in the config. To obtain a
list of available device identifiers, run swaymsg -t get_inputs.

COMMANDS

input <identifier> accel_profile <adaptive|flat>

Sets the pointer acceleration profile for the specified input device.

input <identifier> click_method <none|button_areas|clickfinger>

Changes the click method for the specified device.

input <identifier> drag_lock <enabled|disabled>

Enables or disables drag lock for specified input device.

input <identifier> dwt <enabled|disabled>

Enables or disables disable-while-typing for the specified input device.

input <identifier> events <enabled|disabled|disabled_on_external_mouse>

Enables or disables send_events for specified input device. (Disabling send_events


disables the input device)

input <identifier> left_handed <enabled|disabled>


Enables or disables left handed mode for specified input device.

input <identifier> middle_emulation <enabled|disabled>

Enables or disables middle click emulation.

input <identifier> natural_scroll <enabled|disabled>

Enables or disables natural (inverted) scrolling for the specified input device.

input <identifier> pointer_accel <[-1,1]>

Changes the pointer acceleration for the specified input device.

input <identifier> scroll_method <none|two_finger|edge|on_button_down>

Changes the scroll method for the specified input device.

input <identifier> tap <enabled|disabled>

Enables or disables tap for specified input device.

NAME

sway-bar - bar configuration file and commands

DESCRIPTION

Sway allows configuring swaybar in the sway configuration file. Swaybar commands must
be used inside a bar { } block in the config file.

COMMANDS

status_command <status command>

Executes the bar status command with sh -c. Each line of text printed to stdout from
this command will be displayed in the status area of the bar. You may also use the
i3bar JSON protocol:

https://i3wm.org/docs/i3bar-protocol.html

pango_markup <enabled|disabled>

Enables or disables pango markup for status lines. This has no effect on status lines
using the i3bar JSON protocol.

id <bar_id>

Sets the ID of the bar.

position <top|bottom>

Sets position of the bar. Default is bottom.


output <output>

Restrict the bar to a certain output, can be specified multiple times. If the output
command is omitted, the bar will be displayed on all outputs.

swaybar_command <command>

Executes custom bar command, default is swaybar.

font <font>

Specifies the font to be used in the bar.

separator_symbol <symbol>

Specifies the separator symbol to separate blocks on the bar.

wrap_scroll <yes|no>

Enables or disables wrapping when scrolling through workspaces with the scroll wheel.
Default is no.

workspace_buttons <yes|no>

Enables or disables workspace buttons on the bar. Default is yes.

strip_workspace_numbers <yes|no>

If set to yes, then workspace numbers will be omitted from the workspace button and
only the custom name will be shown. Default is no.

binding_mode_indicator <yes|no>

Enable or disable binding mode indicator. Default is yes.

height <height>

Sets the height of the bar. Default height will match the font size.

TRAY

Swaybar provides a system tray where programs such as NetworkManager, VLC, Pidgin,
etc. can place little icons. The following commands configure interaction with the
tray or individual icons. The button argument in all following commands is a Linux
input event code as defined in linux/input-event-codes.h. This is because wayland
defines button codes in this manner.

activate_button <button>

Sets the button to be used for the activate (primary click) tray item event. The
default is BTN_LEFT (0x110).

context_button <button>

Sets the button to be used for the context menu (right click) tray item event. The
default is BTN_RIGHT (0x111).
secondary_button <button>

Sets the button to be used for the secondary (middle click) tray item event. The
default is BTN_MIDDLE (0x112).

tray_output none|all|<name>

Sets the output that the tray will appear on or none. Unlike i3bar, swaybar should be
able to show icons on any number of bars and outputs without races. Because of this,
the default value for this is all.

tray_padding <px> [px]

Sets the pixel padding of the system tray. This padding will surround the tray on all
sides and between each item. The default value for px is 2.

icon_theme <name>

Sets the icon theme that sway will look for item icons in. This option has no default
value, because sway will always default to the fallback theme, hicolor.

COLORS

Colors are defined within a colors { } block inside a bar { } block. Colors must be
defined in hex. i.e. #rrggbb or #rrggbbaa when including the alpha channel.

background <color>

Background color of the bar.

statusline <color>

Text color to be used for the statusline.

separator <color>

Text color to be used for the separator.

focused_background <color>

Background color of the bar on the currently focused monitor output. If not used, the
color will be taken from background.

focused_statusline <color>

Text color to be used for the statusline on the currently focused monitor output. If
not used, the color will be taken from statusline.

focused_separator <color>

Text color to be used for the separator on the currently focused monitor output. If
not used, the color will be taken from separator.

focused_workspace <border> <background> <text>


Border, background and text color for a workspace button when the workspace has
focus.

active_workspace <border> <background> <text>

Border, background and text color for a workspace button when the workspace is active
(visible) on some output, but the focus is on another one. You can only tell this
apart from the focused workspace when you are using multiple monitors.

inactive_workspace <border> <background> <text>

Border, background and text color for a workspace button when the workspace does not
have focus and is not active (visible) on any output. This will be the case for most
workspaces.

urgent_workspace <border> <background> <text>

Border, background and text color for a workspace button when the workspace contains
a window with the urgency hint set.

binding_mode <border> <background> <text>

Border, background and text color for the binding mode indicator. If not used, the
colors will be taken from urgent_workspace.

NAME

swaylock - Screen locker for sway

SYNOPSIS

swaylock [options]

Lock the current sway session.

OPTIONS

-h, --help

Show help message and quit.

-c, --color <rrggbb[aa]>

Turn the screen into the given color. If -i is used, this sets the background of the
image to the given color. Defaults to white (ffffff), or transparent (00000000) if an
image is in use.

-f, --daemonize

Fork into the background after spawning. Note: this is the default behavior of
i3lock.

-i, --image [<output>:]<path>


Display the given image, optionally only on the given output. Use -c to set a
background color.

--scaling

Scaling mode for images: stretch, fill, fit, center, or tile.

-t, --tiling

Same as --scaling=tile.

-u, --no-unlock-indicator

Disable the unlock indicator.

-v, --version

Show the version number and quit.

--socket <path>

Use the specified socket path. Otherwise, swaymsg will ask sway where the socket is
(which is the value of $SWAYSOCK, then of $I3SOCK).

APPEARANCE

--bshlcolor <rrggbb[aa]>

Sets the color of backspace highlight segments.

--font <font>

Sets the font of the text inside the indicator.

--insidecolor <rrggbb[aa]>

Sets the color of the inside of the indicator when typing or idle.

--insidevercolor <rrggbb[aa]>

Sets the color of the inside of the indicator when verifying.

--insidewrongcolor <rrggbb[aa]>

Sets the color of the inside of the indicator when invalid.

--keyhlcolor <rrggbb[aa]>

Sets the color of keypress highlight segments.

--linecolor <rrggbb[aa]>

Sets the color of the lines that separate the inside and outside of the indicator.

-s, --line-uses-inside
Use the color of the inside of the indicator for the line separating the inside and
outside of the indicator.

-r, --line-uses-ring

Use the outer ring’s color for the line separating the inside and outside of the
indicator.

--ringcolor <rrggbb[aa]>

Sets the color of the outside of the indicator when typing or idle.

--ringvercolor <rrggbb[aa]>

Sets the color of the outside of the indicator when verifying.

--ringwrongcolor <rrggbb[aa]>

Sets the color of the outside of the indicator when invalid.

--separatorcolor <rrggbb[aa]>

Sets the color of the lines that seperate highlight segments.

--textcolor <rrggbb[aa]>

Sets the color of the text inside the indicator.

--indicator-radius <radius>

Sets the radius of the indicator to radius pixels. The default value is 50.

--indicator-thickness <thickness>

Sets the thickness of the indicator to thickness pixels. The default value is 10.

NAME

sway-security - Guidelines for securing your sway install

SECURITY OVERVIEW

Sway is NOT secure. We are working on it but do not trust that we have it all figured
out yet. The following man page is provisional.

Securing sway requires careful configuration of your environment, the sort that’s
usually best suited to a distribution maintainer who wants to ship a secure sway
environment in their distribution. Sway provides a number of means of securing it but
you must make a few changes external to sway first.

Configuration of security features is limited to files in the security directory


(this is likely /etc/sway/security.d/*, but depends on your installation prefix).
Files in this directory must be owned by root:root and chmod 644 or 444. The default
security configuration is installed to /etc/sway/security.d/00-defaults, and should
not be modified - it will be updated with the latest recommended security defaults
between releases. To override the defaults, you should add more files to this
directory.

ENVIRONMENT SECURITY

LD_PRELOAD is a mechanism designed to ruin the security of your system. There are a
number of strategies for dealing with this, but they all suck a little. In order of
most practical to least practical:

1.Only run important programs via exec. Sway’s exec command will ensure that
LD_PRELOAD is unset when running programs.

2.Remove LD_PRELOAD support from your dynamic loader (requires patching libc). This
may break programs that rely on LD_PRELOAD for legitimate functionality, but this is
the most effective solution.

3.Use static linking for important programs. Of course statically linked programs are
unaffected by the dynamic linking security dumpster fire.

Note that should you choose method 1, you MUST ensure that sway itself isn’t
compromised by LD_PRELOAD. It probably isn’t, but you can be sure by setting
/usr/bin/sway to a+s (setuid), which will instruct the dynamic linker not to permit
LD_PRELOAD for it (and will also run it as root, which sway will shortly drop). You
could also statically link sway itself.

Note that LD_LIBRARY_PATH has all of these problems, and the same solutions.

READ YOUR LOG

Sway does sanity checks and prints big red warnings to stderr if they fail. Read
them.

FEATURE POLICIES

Certain sway features are security sensitive and may be configured with security
policies. These features are:

background

Permission for a program to become the background.

fullscreen
Permission to become fullscreen. Note that users can always make a window fullscreen
themselves with the fullscreen command.

ipc

Permission to connect to sway’s IPC socket.

keyboard

Permission to receive keyboard events (only while they are focused).

lock

Permission for a program to act as a screen locker. This involves becoming fullscreen
(on all outputs) and receiving all keyboard and mouse input for the duration of the
process.

mouse

Permission to receive mouse events (only while the mouse is over them).

panel

Permission for a program to stick its windows to the sides of the screen.

screenshot

Permission to take screenshots or record the screen.

By default, no permissions are granted (though saner defaults are provided in


/etc/sway/security.d/00-defaults). You can use the following configuration options to
control a program’s access:

permit <executable> <features...>

Permits <executable> to use <features> (each feature separated by a space).


<executable> may be * to affect the default policy, or the full path to the
executable file.

reject <executable> <features...>

Disallows <executable> from using <features> (each feature separated by a space).


<executable> may be * to affect the default policy, or the full path to the
executable file.

Note that policy enforcement requires procfs to be mounted at /proc and the sway
process to be able to access /proc/[pid]/exe (see procfs(5) for details on this
access - setcap cap_sys_ptrace=eip /usr/bin/sway should do the trick). If sway is
unable to read /proc/[pid]/exe, it will apply the default policy.
To work correctly, sway’s own programs require the following permissions:

•swaybg: background

•swaylock: lock, keyboard

•swaybar: panel, mouse, ipc

•swaygrab: screenshot, ipc

When you first declare a policy for an executable, it will inherit the default
policy. Further changes to the default policy will not retroactively affect which
permissions an earlier policy inherits. You must explicitly reject any features from
the default policy that you do not want an executable to receive permission for.

COMMAND POLICIES

You can also control the context from which a command may execute. The different
contexts you can control are:

config

Can be run from your config file.

binding

Can be run from bindsym or bindcode commands.

ipc

Can be run by IPC clients.

criteria

Can be run when evaluating window criteria.

all

Shorthand for granting permission in all contexts.

By default a command is allowed to execute in any context. To configure this, open a


commands block and fill it with policies:
commands {

<name> <contexts...>

...

For example, you could do this to limit the use of the focus command to just binding
and criteria:

commands {

focus binding criteria

Setting a command policy overwrites any previous policy that was in place.

IPC POLICIES

Disabling IPC access via swaymsg is encouraged if you intend to secure the IPC
socket, because any program that can execute swaymsg could circumvent its own
security policy by simply invoking swaymsg.

You can configure which features of IPC are available for particular clients:

ipc <executable> {

...

You may use * for <executable> to configure the default policy for all clients.
Configuring IPC policies for specific executables is not supported on FreeBSD, and
the default policy will be applied to all IPC connections.

The following commands are available within this block:

bar-config <enabled|disabled>

Controls GET_BAR_CONFIG (required for swaybar to work at all).


command <enabled|disabled>

Controls executing sway commands via IPC.

inputs <enabled|disabled>

Controls GET_INPUTS (input device information).

marks <enabled|disabled>

Controls GET_MARKS.

outputs <enabled|disabled>

Controls GET_OUTPUTS.

tree <enabled|disabled>

Controls GET_TREE.

workspaces <enabled|disabled>

Controls GET_WORKSPACES.

You can also control which IPC events can be raised with an events block:

ipc <executable> {

events {

...

The following commands are valid within an IPC events block:

binding <enabled|disabled>

Controls keybinding notifications (disabled by default).

input <enabled|disabled>

Controls input device hotplugging notifications.

mode <enabled|disabled>

Controls output hotplugging notifications.

output <enabled|disabled>
Controls output hotplugging notifications.

window <enabled|disabled>

Controls window event notifications.

workspace <enabled|disabled>

Controls workspace notifications.

In each of these blocks, you may use * (as in "* enabled" or "* disabled") to control
access to every feature at once.