Sway on Laptop: Difference between revisions

From Alpine Linux
(sway)
(Redirected page to Sway)
Tag: New redirect
 
(12 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Install and configure Sway
#redirect[[Sway]]
 
== Install Graphics Drivers ==
 
Graphics drivers:
 
* [[Intel Video]]
* [[Radeon Video]]
* [[Nvidia Video]]
 
== Add a normal user ==
 
Use <code>setup-user</code> 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 greetd requires it to be running
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 [[Wayland#XDG_RUNTIME_DIR|XDG_RUNTIME_DIR]] and properly configure seat:
 
apk add greetd greetd-gtkgreet cage greetd-openrc
rc-update add greetd
adduser greetd seat
 
In <code>/etc/greetd/config.toml</code>, set
 
<pre>
[default_session]
 
command = "cage -s -- gtkgreet"
</pre>
 
In <code>/etc/greetd/environments</code>, set
<pre>
# Launch Sway with a D-Bus server available, use:
dbus-run-session -- sway
</pre>
 
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 <code>/etc/doas.conf</code>, 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 <code>/bin/loginctl suspend</code> (use full path to executable) and brightness can be adjusted by running <code>/usr/bin/brightnessctl set 100</code>.
 
== 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
 
== Sway configuration ==
 
Copy default sway configuration to <code>~/.config</code>:
 
# 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

Latest revision as of 23:51, 23 February 2024

Redirect to: