|
|
|
---
|
|
|
|
gitea: none
|
|
|
|
include_toc: true
|
|
|
|
---
|
|
|
|
|
|
|
|
# linux-on-desktop
|
|
|
|
|
|
|
|
My journey to get Alpine + Wayland + River to work on ThinkPad T14 G3 AMD (21CF004PGE)
|
|
|
|
|
|
|
|
## Preparing hardware
|
|
|
|
|
|
|
|
Disable secure boot and fn-lock in bios (so that F-keys work as F-keys by default and require Fn for their secondary multimedia functions).
|
|
|
|
|
|
|
|
## Installing Alpine
|
|
|
|
|
|
|
|
Follow https://wiki.alpinelinux.org/wiki/Installation
|
|
|
|
|
|
|
|
Note that you will need to use Rufus; Ventoy does not work on this laptop (hangs after choosing the image).
|
|
|
|
|
|
|
|
## Postinstall
|
|
|
|
|
|
|
|
In `/etc/apk/repositories`, comment out 3.16, uncomment edge (main, community, testing),
|
|
|
|
since some of the packages we're going to install (river, element-desktop)
|
|
|
|
only exist in testing.
|
|
|
|
|
|
|
|
Then
|
|
|
|
```
|
|
|
|
doas apk update
|
|
|
|
doas apk upgrade
|
|
|
|
```
|
|
|
|
|
|
|
|
## Installing river
|
|
|
|
|
|
|
|
```
|
|
|
|
doas apk add eudev
|
|
|
|
doas setup-udev
|
|
|
|
doas apk add mesa-dri-gallium mesa-va-gallium
|
|
|
|
doas apk add river river-doc mandoc
|
|
|
|
doas apk add adwaita-icon-theme foot ttf-dejavu
|
|
|
|
doas rc-update add seatd
|
|
|
|
doas rc-service seatd start
|
|
|
|
doas addgroup YOURUSER audio
|
|
|
|
doas addgroup YOURUSER input
|
|
|
|
doas addgroup YOURUSER seat
|
|
|
|
doas addgroup YOURUSER video
|
|
|
|
doas addgroup YOURUSER wheel
|
|
|
|
install -Dm0755 /usr/share/doc/river/examples/init -t ~/.config/river
|
|
|
|
```
|
|
|
|
|
|
|
|
Also:
|
|
|
|
```
|
|
|
|
doas apk add xwayland
|
|
|
|
```
|
|
|
|
because the latest river in testing is built in a way that requires xwayland.
|
|
|
|
|
|
|
|
Try to run with
|
|
|
|
```
|
|
|
|
XDG_RUNTIME_DIR=/tmp river
|
|
|
|
```
|
|
|
|
|
|
|
|
You should see the blue screen of river. Try to open terminal with Win+Shift+Enter. Try to exit with Win+Shift+E.
|
|
|
|
|
|
|
|
### Login manager
|
|
|
|
|
|
|
|
To enter username/password in GUI, get to river after that, and get back to logon screen after exiting river:
|
|
|
|
|
|
|
|
```
|
|
|
|
doas apk add elogind polkit-elogind
|
|
|
|
doas rc-update add elogind
|
|
|
|
doas rc-service elogind start
|
|
|
|
doas apk add greetd greetd-gtkgreet cage
|
|
|
|
doas addgroup greetd video
|
|
|
|
doas rc-update add greetd
|
|
|
|
```
|
|
|
|
|
|
|
|
change `/etc/greetd/config.toml`
|
|
|
|
|
|
|
|
```
|
|
|
|
command = "cage -s -- gtkgreet"
|
|
|
|
```
|
|
|
|
|
|
|
|
and create `/etc/greetd/environments` with a single line `river`
|
|
|
|
|
|
|
|
and reboot.
|
|
|
|
|
|
|
|
I didn't find a way to make cage+gtkgreet handle HiDPI, the text is very tiny.
|
|
|
|
|
|
|
|
An alternative is agreety, but for some reason it seems that both greeter and standard linux login prompt
|
|
|
|
run at the same time on the same terminal, making it impossible to actually login.
|
|
|
|
|
|
|
|
### Installing Waybar
|
|
|
|
|
|
|
|
```
|
|
|
|
doas apk add waybar
|
|
|
|
```
|
|
|
|
|
|
|
|
and add startup section at the end of river init file (`~/.config/river/init`):
|
|
|
|
|
|
|
|
```
|
|
|
|
# startup
|
|
|
|
riverctl spawn "waybar"
|
|
|
|
```
|
|
|
|
|
|
|
|
### HiDPI
|
|
|
|
|
|
|
|
```
|
|
|
|
doas apk add kanshi
|
|
|
|
mkdir .config/kanshi
|
|
|
|
```
|
|
|
|
|
|
|
|
and create `.config/kanshi/config` with the following:
|
|
|
|
```
|
|
|
|
profile {
|
|
|
|
output eDP-1 enable scale 2.5
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
(`eDP-1` identifier was obtained by installing sway, running sway (by adding it to `/etc/greetd/environments`,
|
|
|
|
and in terminal inside sway executing `swaymsg -t get_outputs`).
|
|
|
|
|
|
|
|
#### HiDPI - cursors
|
|
|
|
|
|
|
|
And in order to have decently sized mouse cursors instead of the tiniest ones, add the following line to the top of `.config/river/init`:
|
|
|
|
|
|
|
|
```
|
|
|
|
riverctl xcursor-theme Adwaita 24
|
|
|
|
```
|
|
|
|
|
|
|
|
This will only affect river itself, the cursor will stay tiny in waybar and firefox and maybe other applications. To solve this:
|
|
|
|
```
|
|
|
|
doas apk add gsettings-desktop-schemas
|
|
|
|
gsettings set org.gnome.desktop.interface cursor-theme 'Adwaita'
|
|
|
|
```
|
|
|
|
|
|
|
|
### Environment
|
|
|
|
|
|
|
|
In order to not have to create wrapper scripts for all apps:
|
|
|
|
|
|
|
|
Create `/usr/local/bin/inga-river` (and later `chmod +x /usr/local/bin/inga-river`) with the following (found in google):
|
|
|
|
|
|
|
|
```
|
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
export GDK_BACKEND=wayland,x11
|
|
|
|
export MOZ_ENABLE_WAYLAND=1
|
|
|
|
export CLUTTER_BACKEND=wayland
|
|
|
|
export QT_QPA_PLATFORM=wayland-egl
|
|
|
|
export ECORE_EVAS_ENGINE=wayland-egl
|
|
|
|
export ELM_ENGINE=wayland_egl
|
|
|
|
export SDL_VIDEODRIVER=wayland
|
|
|
|
export _JAVA_AWT_WM_NONREPARENTING=1
|
|
|
|
export NO_AT_BRIDGE=1
|
|
|
|
export BEMENU_BACKEND=wayland
|
|
|
|
|
|
|
|
river $@
|
|
|
|
```
|
|
|
|
|
|
|
|
and replace `river` with `inga-river` in `/etc/greetd/environments`.
|
|
|
|
|
|
|
|
### Launcher
|
|
|
|
|
|
|
|
`doas apk add bemenu`, and then add this line into your river config:
|
|
|
|
|
|
|
|
```
|
|
|
|
riverctl map normal Super R spawn 'bemenu-run -i -n'
|
|
|
|
```
|
|
|
|
|
|
|
|
## Other software
|
|
|
|
|
|
|
|
### Clipboard?
|
|
|
|
|
|
|
|
### Firefox
|
|
|
|
|
|
|
|
```
|
|
|
|
doas apk add firefox
|
|
|
|
firefox
|
|
|
|
```
|
|
|
|
go to `about:support` and make sure that Window Protocol is wayland, not xwayland.
|
|
|
|
(it should be wayland because MOZ_ENABLE_WAYLAND is set to 1 by inga-river)
|
|
|
|
|
|
|
|
## Hardware
|
|
|
|
|
|
|
|
### Sleep
|
|
|
|
|
|
|
|
Laptop goes to sleep after some idle period. When it wakes up, the root fs is readonly, meaning that I have to restart the laptop.
|
|
|
|
|
|
|
|
### WiFi
|
|
|
|
|
|
|
|
At the moment Linux kernel does not support Qualcomm NFA725.
|
|
|
|
|
|
|
|
Otherwise, alpine wiki describes how to configure WiFi using `iwd`.
|
|
|
|
|
|
|
|
### Backlight
|
|
|
|
|
|
|
|
```
|
|
|
|
doas apk add light
|
|
|
|
doas nano /etc/udev/rules.d/backlight.rules
|
|
|
|
```
|
|
|
|
add the following lines into backlight.rules to make it possible for all users in video group (not just superusers) to control backlight:
|
|
|
|
```
|
|
|
|
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="amdgpu_bl0", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness"
|
|
|
|
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="amdgpu_bl0", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
|
|
|
|
```
|
|
|
|
and then
|
|
|
|
```
|
|
|
|
doas rc-service udev restart
|
|
|
|
```
|
|
|
|
Backlight control with Fn+F5/F6 should work now.
|
|
|
|
|
|
|
|
(`amdgpu_bl0` is specific for this laptop; value for others can be obtained from `/sys/class/backlight/`)
|
|
|
|
|
|
|
|
### Trackpoint
|
|
|
|
|
|
|
|
```
|
|
|
|
find /sys/devices/platform/i8042/ -name name | xargs grep -Fl TrackPoint
|
|
|
|
```
|
|
|
|
to find which serio corresponds to trackpoint, then
|
|
|
|
```
|
|
|
|
echo 70 | doas tee /sys/devices/platform/i8042/serio1/sensitivity
|
|
|
|
```
|
|
|
|
for reasonably low sensitivity (does not persist).
|
|
|
|
|
|
|
|
TODO
|
|
|
|
|
|
|
|
### Sound
|
|
|
|
|
|
|
|
Based on https://wiki.alpinelinux.org/wiki/PipeWire
|
|
|
|
|
|
|
|
```
|
|
|
|
doas apk add dbus dbus-openrc
|
|
|
|
doas rc-service dbus start
|
|
|
|
doas apk add pipewire wireplumber rtkit alsa-utils pipewire-alsa
|
|
|
|
doas addgroup YOURUSER rtkit
|
|
|
|
doas addgroup root audio
|
|
|
|
alsamixer
|
|
|
|
```
|
|
|
|
|
|
|
|
In alsamixer, use F6 to find the target sound card (most likely 0 is HDMI and 1 is ordinary).
|
|
|
|
Remember its number, and in `/usr/share/alsa/alsa.conf`,
|
|
|
|
replace `defaults.ctl.card` and `defaults.pcm.card` with the target number.
|
|
|
|
|
|
|
|
In `/usr/local/bin/inga-river`, replace `river $@` with `dbus-run-session -- river $@`,
|
|
|
|
relogin (Ctrl+Shift+E).
|
|
|
|
|
|
|
|
Then
|
|
|
|
```
|
|
|
|
doas rc-service alsa start
|
|
|
|
doas rc-update add alsa
|
|
|
|
/usr/libexec/pipewire-launcher
|
|
|
|
```
|
|
|
|
|
|
|
|
Make sure that everything works (with `wpctl status`, `pw-cat -p YOURFILE.flac`
|
|
|
|
or just opening YouTube in FF).
|
|
|
|
|
|
|
|
Then make pipewire start automatically: in river config, add another startup line:
|
|
|
|
```
|
|
|
|
riverctl spawn "/usr/libexec/pipewire-launcher"
|
|
|
|
```
|
|
|
|
|
|
|
|
Control microphone and volume with `alsamixer`.
|
|
|
|
|
|
|
|
Note that the internal microphone does not work and is not detected by pipewire.
|
|
|
|
Only external microphones work.
|
|
|
|
|
|
|
|
Mic in browser didn't work, but then it started to work at some point,
|
|
|
|
without me seemingly changing anything.
|
|
|
|
|
|
|
|
### Webcam
|
|
|
|
|
|
|
|
Should work after following the steps for "Audio".
|
|
|
|
|
|
|
|
Can be tested in https://webrtc.github.io/test-pages
|
|
|
|
|
|
|
|
## Additional
|
|
|
|
|
|
|
|
### Prevent firefox sharing indicator from taking the entire tile
|
|
|
|
|
|
|
|
Add the following lines to river config (before the last `exec` line):
|
|
|
|
|
|
|
|
```
|
|
|
|
riverctl float-filter-add title "Firefox — Sharing Indicator"
|
|
|
|
riverctl float-filter-add title 'Firefox — Sharing Indicator'
|
|
|
|
```
|
|
|
|
|
|
|
|
(TODO: check which kind of quotes works)
|
|
|
|
|