Sway is an i3-compatible Wayland compositor. It is designed to be a drop-in replacement for i3 window manager, but works under Wayland environment.
Installation
Fedora now has a Sway Spin that comes with sway preinstalled and configured.
Alternatively, it could be installed on Fedora Workstation and other spins.
sudo dnf install "@Sway Desktop"
sudo dnf insatll "@Sway Window Manager (supplemental packages)" --allowerasing
Spin Bundled Components
Fedora Sway Spin comes with multiple components, including:
swaylock
: Simple screen locker.waybar
: Highly customizable Wayland bar for Sway and Wlroots based compositors.rofi
: Highly-configurable and lightweight notification daemon.dunst
: Highly-configurable and lightweight notification daemon.kanshi
: A Dynamic display configuration tool.
Sway Window Manager
The default Sway configuration is at /etc/sway/config
. On Fedora Sway Spin, it reads additional configurations from 3 locations:
/usr/share/sawy/config.d
/etc/sway/config.d
~/.config/sway/config.d
($XDG_CONFIG_HOME/sway/config.d
to be precise)
Kanshi
Fedora Sway Spin bundles kanshi
, which is a dynamic display configuration tool.
Its configuration file is placed at ~/.config/kanshi/config
. Multiple profiles could be defined in the configuration, one of which will be enabled if all of the listed outputs are connected.
Adding the first profile could be very straight forward. List all outputs recognized by sway:
swaymsg -t get_outputs
Take mine as an example, I have eDP-1
which is the laptop internal display, along with DP-1
and DP-2
which are connected to my dock.
I am going disable the internal display and set the 2 external ones to side by side with scale:
profile {
output eDP-1 enable scale 1.5
}
profile {
output eDP-1 disable
output DP-1 enable mode 3840x2160@60 position 0,0 scale 2.0
output DP-2 enable mode 3840x2160@60 position 1920,0 scale 2.0
}
Note that I am using 2X scaling (scale 2.0
), so the position should be 3840 / 2 = 1920
.
Finally let Kanshi start with Sway.
Add a Sway configuration segment to ~/.config/sway/config.d/10-kanshi.conf
:
exec_always {
pkill kanshi
kanshi &
}
Tweaks and Customization
Override Default Terminal Emulator
I personally perfer Terminator
over the default foot
. So I added a new segmented configuration file at ~/.config/sway/config.d/10-preferred-applications.conf
:
set $term terminator
bindsym --no-warn $mod+Return exec $term
Map Caps Lock to Control
I personally more adopted to Unix keyboard layout, especially no Caps Lock but a left control.
Add a new configuration to ~/.config/sway/config.d/10-input-keyboard.conf
:
input "type:keyboard" {
xkb_options caps:ctrl_modifier
}
Touchpad Tweaks
By default, there is no natural scrolling and tap to click. Add a new configuration to ~/.config/sway/config.d/10-input-touchpad.conf
:
input "type:touchpad" {
dwt enabled
tap enabled
natural_scroll enabled
middle_emulation enabled
}
Software Integration
Most of the software work under Wayland or XWayland out of the box. But some of them still need fine-tuning.
Chromium
Chromium defaults to auto-select platform backend, which might lead to falling back to X. Visit chrome://flags
and select Wayland
for #ozone-platform-hint
to indicate Chromium to use Wayland.
Electron in Flatpak
Some Flatpaks come with Wayland disabled by default because it might cause issues on non-HiDPI displays. When using a HiDPI monitor with scaling, however, this results in blurred user interface. To fix this, expose wayland
socket to the application:
flatpak override --socket=wayland <APP_ID>
Alternatively, this could also be done in a GUI way via Featseal.