Sway
Sway is a tiling Wayland compositor. It's a drop-in replacement for the i3 window manager.
Installation
eudev:
# apk add eudev # setup-udev
Graphics drivers:
Add user to the input and video groups:
# adduser $USER input # adduser $USER video
Install some TTF fonts:
# apk add ttf-dejavu
seatd daemon:
# apk add seatd # rc-update add seatd # rc-service seatd start # adduser $USER seat
elogind, optional for suspend on lid close support.
Install sway:
# apk add sway sway-doc # apk add \ # Install optional dependencies: xwayland \ # recommended for compatibility reasons foot \ # default terminal emulator bemenu \ # wayland menu swaylock swaylockd \ # lockscreen tool swaybg \ # wallpaper daemon swayidle # idle management (DPMS) daemon
Configure XDG_RUNTIME_DIR. Add the following to shell init scripts, for the default ash shell it is ~/.profile:
if test -z "${XDG_RUNTIME_DIR}"; then export XDG_RUNTIME_DIR=/tmp/$(id -u)-runtime-dir if ! test -d "${XDG_RUNTIME_DIR}"; then mkdir "${XDG_RUNTIME_DIR}" chmod 0700 "${XDG_RUNTIME_DIR}" fi fi
For inter-program communication and functionality such as screensharing, install and enable dbus and PipeWire, see PipeWire.
Re-login or reboot to allow above modifications to take effect.
Launch Sway with dbus support:
dbus-launch --exit-with-session sway
Configuration
An example config is provided at /etc/sway/config
. Copy it to ~/.config/sway/config
and read through it to learn the default keybindings.
For additional information, start at man 5 sway
and read the upstream wiki.
Firefox screensharing
For some programs, additional configuration is needed to launch them natively under Wayland and to support special features such as screen sharing.
To launch Firefox natively under Wayland and to enable support for screensharing, you need:
- Install and configure PipeWire
- Install xdg-desktop-portal and xdg-desktop-portal-wlr package
- Install wofi for screen selection
- Launch support programs on sway startup:
exec pipewire #pipewire must be launched first exec /usr/libexec/xdg-desktop-portal-wlr
- Export the following variables:
export MOZ_ENABLE_WAYLAND="1" export XDG_CURRENT_DESKTOP=sway export XDG_SESSION_TYPE=wayland export QT_QPA_PLATFORM="wayland-egl"
Scaling for high resolution screens
Without further configuration, program interfaces might be too small to use on high resolution screens.
Via sway
Sway supports the per-display configuration of
- fractional (e.g., 1.5x), and
- integer scaling (e.g., 2x)
However, fractional scaling is discouraged due to both the performance impact and the blurry output it produces. In this case, where 1x scaling is too small and 2x scaling is too large, program-specific GTK/QT based scaling is recommended. See below.
To enable Sway scaling, the user can first preview different scaling factors with wdisplays
package. Note the output name (eDP-1, LVDS-1) and try apply scaling factors such as 1 and 2. To make changes permanent, add
output <name> scale <factor>
to ~/.config/sway/config.
Via GTK/Qt
# for GTK-based programs such as firefox and emacs: export GDK_DPI_SCALE=2 # for QT-based programs export QT_WAYLAND_FORCE_DPI="physical" # or if still too small, use a custom DPI export QT_WAYLAND_FORCE_DPI=192 # 2x scaling export QT_QPA_PLATFORM="wayland-egl"
Make clipboard content persistent
By default the clipboard content does not persist after terminating the program: you copy some text from Firefox and then exit Firefox, the copied text is also lost.
Install clipman from test repo and add the following to sway config:
exec wl-paste --type text/plain --watch clipman store --histpath="~/.local/state/clipman-primary.json" bindsym $mod+h exec clipman pick --tool wofi --histpath="~/.local/state/clipman-primary.json"