Sway on Laptop: Difference between revisions
Line 18: | Line 18: | ||
apk add seatd | apk add seatd | ||
# add seatd to boot run-level, because | |||
# add seatd to boot run-level, because it must be running before greetd | |||
rc-update add seatd boot | rc-update add seatd boot | ||
rc-service seatd start | rc-service seatd start | ||
adduser $USER seat | adduser $USER seat |
Revision as of 22:56, 19 February 2024
Install and configure Sway
Install Graphics Drivers
Graphics drivers:
Add a normal user
Use setup-user
to add a non-system normal user for running Sway.
Install seatd
Install seatd, a minimal seat management daemon. This grants the required permissions to the user running sway:
apk add seatd
# add seatd to boot run-level, because it must be running before greetd rc-update add seatd boot
rc-service seatd start adduser $USER seat
Install elogind (optional)
elogind is used to enable suspend-to-RAM with swayidle:
apk add elogind rc-update add elogind rc-service elogind start
Set up eudev
eudev is recommended and required for the greeter. Or else it will not be able to find any input device (libinput failure).
setup-devd udev
Install greetd (optional)
greetd is used to set XDG_RUNTIME_DIR and properly configure seat:
apk add greetd greetd-gtkgreet cage greetd-openrc rc-update add greetd adduser greetd seat
In /etc/greetd/config.toml
, set
[default_session] command = "cage -s -- gtkgreet"
In /etc/greetd/environments
, set
# Launch Sway with a D-Bus server available, use: dbus-run-session -- sway
Running sway with DBus is needed for PipeWire and screen sharing.
Install doas
Doas is used to grant permissions for suspend-to-RAM and brightness control with brightnessctl:
apk add doas brightnessctl # optionally, allow $USER root access with password adduser $USER wheel
In /etc/doas.conf
, set
permit :wheel permit nopass $USER as root cmd /bin/loginctl permit nopass $USER as root cmd /usr/bin/brightnessctl
After setting the above, suspend-to-RAM can be triggered by running /bin/loginctl suspend
(use full path to executable) and brightness can be adjusted by running /usr/bin/brightnessctl set 100
.
Install fonts
Install DejaVu fonts, which has good Unicode coverage:
apk add font-dejavu
Install PipeWire, WirePlumber and XDG portals
For a reasonable desktop experience with support for audio and screensharing, install pipewire, wireplumber and xdg portals:
apk add pipewire pipewire-pulse pipewire-tools apk add wireplumber apk add xdg-desktop-portal xdg-desktop-portal-wlr
Later, we need to launch PipeWire with Sway and configure several environment variables.
Install Sway
apk add sway \ xwayland \ # if you need xserver foot \ # default terminal emulator. Modify $term in config for a different one. bemenu \ # wayland native menu for choosing program and screensharing monitor swaylock swaylockd \ # lockscreen tool grim \ # screenshot tool wl-clipboard \ # clipboard management i3status \ # simple status bar swayidle # idle management (DPMS) daemon
For complimentary software alternatives, see for example this list at Gentoo Wiki.
Sway configuration
Copy default sway configuration to ~/.config
:
# as normal user mkdir -p ~/.config/sway cp /etc/sway/config ~/.config/sway/
Launch PipeWire with Sway, add the following to sway config:
exec /usr/libexec/pipewire-launcher
You also need to set DBus variables for the portal and screensharing features to work:
exec dbus-update-activation-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
Replace dmenu (depends on X server) with bemenu (Wayland native):
set $menu dmenu_path | bemenu | xargs swaymsg exec --
Set a mouse cursor, using GNOME Adwaita theme:
seat "*" xcursor_theme Adwaita 16
Set screen lock and suspend-to-RAM:
exec swayidle -w \ timeout 300 'swaylock --daemonize' \ timeout 330 'doas /bin/loginctl suspend' \ before-sleep 'swaylock --daemonize'
Do not lock the screen if program is running in full screen:
for_window [app_id="^.*"] inhibit_idle fullscreen