$ cd ../articles/

Cel

Niniejszy dokument to zbiór praktycznych notatek z konfiguracji Gentoo Linux na Lenovo Legion Go — konfiguracja jądra, sterowniki AMD, optymalizacje pod gry i pracę developerską. Legion Go to nie tylko handheld do gier — z Gentoo staje się kompaktową stacją roboczą AMD, gdzie każdy pakiet, opcja jądra i optymalizacja ma swoje uzasadnienie.

Specyfikacja sprzętu

KomponentModel
CPUAMD Ryzen Z1 Extreme (8C/16T, Zen 4, 4nm)
GPUAMD Radeon 780M (RDNA 3, 12 CU)
RAM16 GB LPDDR5X-7500
Storage512 GB NVMe PCIe 4.0
Display8.8" IPS, 2560×1600, 144 Hz, 500 nit
WiFiMediaTek MT7922 (WiFi 6E)
ControllersWbudowane pady (XInput), detachable
Battery49.2 Wh

Konfiguracja i ustawienia

1. Przygotowanie nośnika

Pobierz minimal installation CD dla amd64 z gentoo.org. Wypal na USB przez dd:

# dd if=install-amd64-minimal.iso of=/dev/sdX bs=4M status=progress

2. Konfiguracja jądra

Kluczowe opcje dla Legion Go — wszystko wbudowane (nie moduły), zero initramfs:

# AMD Ryzen Z1 Extreme / Phoenix
CONFIG_X86_AMD_PLATFORM_DEVICE=y
CONFIG_AMD_NB=y
CONFIG_AMD_PMC=y
CONFIG_SENSORS_K10TEMP=y

# GPU — AMDGPU + RDNA 3 firmware
CONFIG_DRM_AMDGPU=y
CONFIG_DRM_AMDGPU_SI=n
CONFIG_DRM_AMDGPU_CIK=n
CONFIG_EXTRA_FIRMWARE="amdgpu/gc_11_0_1_mes_2.bin amdgpu/psp_14_0_0.bin ..."

# Input — wbudowane kontrolery (Xbox 360/XInput)
CONFIG_HID_XINMO=n
CONFIG_JOYSTICK_XPAD=y
CONFIG_JOYSTICK_XPAD_FF=y

# WiFi — MediaTek MT7922
CONFIG_MT76x2E=m
CONFIG_MT7921E=m

# Display — 2560×1600 @ 144Hz przez eDP
CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FB_EFI=y

2b. Wersje jądra — co działa

Sprawdzone wersje na Legion Go:

  • 6.18.x — działa stabilnie, wszystko OK
  • 7.0.13 — ostatnie znane działające jądro. Wszystko sprawne, shutdown poprawny
  • 7.0.14+ — zwiecha. Po poweroff nie gasną diody, system nie wyłącza się poprawnie

3. Kompilacja

Z1 Extreme ma 16 wątków, ale Gentoo potrafi się udławić bez swapu. 8-10 wątków — zależnie od kompilowanego pakietu:

# echo 'MAKEOPTS="-j10 -l8"' >> /etc/portage/make.conf  # -j8 dla ciężkich pakietów (GCC, LLVM)
# echo 'EMERGE_DEFAULT_OPTS="--jobs=4 --load-average=8"' >> /etc/portage/make.conf

USE flags dla handhelda gamingowego:

USE="X vulkan pipewire pulseaudio udev dbus
     elogind -wayland -systemd -gnome -kde -qt5 -qt6
     gaming joystick steamruntime
     amdgpu radeonsi llvm lto pgo"

4. X11 + dwm / bandw-wm — własny window manager na handheld

Żaden Wayland — tylko sprawdzone X11. Dwa window managery w rotacji:

  • dwm — minimalistyczny fallback, patchowany pod handheld (brak bara, klawisze pod pady)
  • bandw-wm — autorski, deterministyczny tiling WM napisany pod stary sprzęt. Działa poprawnie ze Steamem. Wkrótce duży update (obecnie stara wersja na repo). Używany na przemian z dwm.

Oba kompilowane ze źródła, zero zależności poza Xlib:

# ~/src/dwm/config.h
static const unsigned int borderpx  = 1;
static const unsigned int gappx     = 4;
static const int showbar            = 0;   # brak bara — pełny ekran pod gry

# Klawisze pod pady: Super + klawisze
{ MODKEY, XK_g, spawn, {.v = gamescope_cmd } },
{ MODKEY, XK_Return, spawn, {.v = term_cmd } },
{ MODKEY, XK_w,       spawn, {.v = bandw_wm_cmd } },  # przełącz na bandw-wm

5. Gaming: Steam + Proton

Steam na Gentoo przez overlay steam-overlay:

# emerge --ask games-util/steam-launcher
# emerge --ask app-emulation/proton-ge-custom

Gamescope do zarządzania oknem gry:

# emerge --ask games-util/gamescope
$ gamescope -W 1920 -H 1200 -r 144 -- %command%

Swap — obowiązkowy

Bez swapu Gentoo na Legion Go potrafi się zawiesić przy kompilacji większych pakietów (GCC, LLVM, WebKit). 8 GB swap na NVMe:

# dd if=/dev/zero of=/swapfile bs=1M count=8192
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile
# echo "/swapfile none swap sw 0 0" >> /etc/fstab

Optymalizacje wydajności

CPU governor — performance vs powersave

# Tryb gaming: pełna moc
# cpupower frequency-set -g performance
# Tryb bateria: oszczędzanie
# cpupower frequency-set -g powersave

GPU — AMDGPU tuning

# Wymuś wysoki clock GPU podczas gamingu
# echo "high" > /sys/class/drm/card0/device/power_dpm_force_performance_level
# Wyłącz panel self refresh (PSR) — eliminuje tearing
# echo 0 > /sys/kernel/debug/dri/0/amdgpu_dm_psr

ZRAM — więcej RAMu wirtualnie

# emerge --ask sys-block/zram-init
# echo 'zram0) size=8192' >> /etc/conf.d/zram-init

Znane problemy i rozwiązania

ProblemRozwiązanie
Brak dźwięku po suspendmodprobe -r snd_hda_intel && modprobe snd_hda_intel
Kontrolery nie działają w SteamDodaj użytkownika do grupy input, przeładuj udev
GPU crash na Vulkan (RADV)Aktualizuj mesa do >=24.1, firmware linux-firmware do latest
WiFi znika po suspendecho "options mt7921e disable_aspm=1" > /etc/modprobe.d/mt7921e.conf
Ekran 2560×1600 za mały (skalowanie)xrandr --output eDP-1 --mode 1920x1200 lub gamescope -W 1920 -H 1200

Podsumowanie

Gentoo na Legion Go to nie eksperyment — to codzienny driver. Kompilacja wszystkiego ze źródła na Z1 Extreme trwa akceptowalnie krótko (kernel ~8 minut, tygodniowa aktualizacja @world ~30 min do 1h). System jest absolutnie minimalny, nie ma w nim niczego zbędnego. Każda flaga USE, każda opcja jądra jest świadomym wyborem.

Lenovo Legion Go z Gentoo to prawdopodobnie jedyna taka konfiguracja na świecie — kompaktowa stacja robocza AMD z Linuksem zbudowanym od zera pod konkretny sprzęt.

Ciekawostka: Na tym samym sprzęcie stał również FreeBSD -CURRENT. Dźwięk działał, przeglądarka internetowa działała. Czyli się da — tylko po co, skoro jest Gentoo.

❯ cd ../articles/