Date: 2024-04-07 15:31:07
From: rpt@desudoli.cz
Subject: Void Linux GUI
To: dalnopis@desudoli.cz
Tags: technologie
Desc: Po delší době staronový ponor do tech světa.

Void Linux GUI

Buduju pracovní a nikoliv experimentální stanici. Nechci věci komplikovat, ale zároveň se nechci omezovat ve výběru nástrojů. Poté, co jsme úspěšně zprovoznili operační systém, zabydleli se v konzoli, instalace grafického prostředí je další logický krok.

Xorg

Mnozí říkají (např. Brodie Robertson), že Xorg je minulost a že Wayland je lepší v mnoha ohledech. Zatím jsem problém nestudoval nijak do hloubky a Wayland jsem dosud nezkusil, ale na první dobrou říkám, že to asi bude pravda. Xorg vznikl v dobách, kdy se na univerzitách všichni připojovali do jednoho velkého sálového počítače z mnoha externích terminálů. Odtud jeho základní schéma Xorgu server-klient. Cloud computing nás do této éry opět tak trochu vrací, ale osobní počítač nám dosud nikdo nezakázal. Zdá se, že Wayland je budován s ohledem na tento a další fakta týkající se např. bezpečnosti. I vývojáři OpenBSD už hledají cesty, jak importovat Wayland na tuto platformu BSD.

Na druhou stranu je nutné říci, že ani Wayland není bez problému. Lidé od BSD si hodně stěžují na linux-centrismus Waylandu. To je směr, který se mi nelíbí. Žádný produkt, zejména ne tak potenciálně univerzální jako Wayland, by neměl být vázaný na platformu. Měl by být portovatelný, jinak se z Linuxu stanou další Windows či MacOS. Systemd byl také krokem tímto směrem a úplně chápu vývojáře, co nechtěli dopustit, aby se Linux unifikoval pod jediným init systémem, bez ohledu na jeho technické přednosti a navzdory jeho nedostatkům. Doufám, že BSD dostanou vývojáře Waylandu trochu pod tlak, aby alespoň budovali svůj produkt s ohledem na BSD.

Ale dosti rozjímání o budoucnosti grafického prostředí. Instalujme obvyklé podezřelé.

# xbps-install -S xorg xterm cwm dk sxhkd

Cwm instaluju, protože ho znám jako své boty a pro začátek začnu pracovat v něm, než nastavím dk podle svých potřeb. Poslouží mi také jako záloha, když mě tiling omrzí nebo budu potřebovat stacking WM z jiných důvodů. Prozatím neinstalujeme xdm, ani žádný jiný display (session) manager.

Konfigurace grafického prostředí se provádí v souboru ~/.xinitrc, odkud se spouští i window manager, případně DE. Jde vlastně o skript, kde spouštíme všechno, co se má spustit, když startuje grafické prostředí. Obvykle se zde nastavuje locale, spouští lokální dbus (viz dále), pipewire (audio, viz dále), mpd (music daemon), načtení Xresources pro xterm (viz dále), redshift (noční barvy), numlockx (číselná klávesnice, pokud správně nefunguje) a samozřejmě window manager (nebo DE). Ten by se měl spouštět jako poslední, nadále běžící proces v popředí, tedy bez znaku ampersand „&“ na konci řádku. Chceme přece v našem window manageru pracovat. Všechny předešlé příkazy by naopak měly spouštěné procesy oddělit od hlavního procesu a vykonávat je samostatně na pozadí. Proto mají ampersand na konci řádky.

Tento skript se vykoná, když voláme Xorg s pomocí příkazu startx z konzole. Používáme-li xdm nebo jiný display manager, je potřeba ke stejnému účelu použít soubor ~/.xsession. V mém systému to bývá symlink ke ~/.xinitrc.

$ ln -s ~/.xinitrc ~/.xsession

A ukázka ~/.xinitrc na závěr. Jeho obsah bude vysvětlen v následujících sekcích.

export LANG=en_US.UTF-8
xset b off
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
eval $(dbus-launch --auto-syntax --exit-with-session)
fi
pipewire &
~/.local/bin/bar.sh &
exec /usr/bin/dk
# EOF

Externí zařízení

Mám na mysli klávesnici, myš, monitor a podobné věci. Jejich chování v Xorgu lze nastavit tím, že adresář /etc/X11/xorg.conf.d/ zaplníme konfiguračními soubory pro jednotlivá zařízení.

Zde lze také nastavit rozložení klávesnice, případně jejich přepínání, používáme-li více layoutů. Obyčejně přepínám mezi českým QWERTY a anglickým layoutem. Preferuju nastavit to tady, pak to platí plošně pro všechny programy spouštěné pod Xorg. Druhá možnost je již probíraný ~/.xinitrc.

Section "InputClass"
Identifier "KeyboardDefaults"
MatchIsKeyboard "on"
Option "XkbLayout" "us,cz"
Option "XkbVariant" ",qwerty"
Option "XkbOptions" "terminate:ctrl_alt_bksp,caps:escape_shifted_capslock,grp:switch"
EndSection

Za užitečnou považuju také možnost restartovat Xorg, když se nějaká aplikace zachová nezdvořile a žádný standardní způsob, jak ji shodit, nefunguje. Z nějakého důvodu tato možnost nebývá defaultně povolena. V xorg.conf.d je třeba vytvořit soubor flags.conf s následujícím obsahem.

Section "ServerFlags"
Option "DontZap" "off"
EndSection

Xterm

V moderních Unixech je k dispozici mnoho terminálových emulátorů. Zaznamenal jsem, že mezi oblíbené patří st z repertoáru suckless nástrojů a poslední dobou také alacritty. Oba jsou velmi rychlé: st díky své jednoduchosti a alacritty zase využívá GPU. Navzdory tomu, že obzvláště Alacritty má mnoho zajímavých vlastností (na druhou stranu je stále beta verze), zůstávám u ověřeného xtermu.

Xterm se konfiguruje pomocí souboru ~/.Xresources. Ten je pak třeba načíst pomocí příkazu xrdb -merge ~/.Xresources. Na netu je spousta informací ohledně nastavení Xtermu a samozřejmě je tu také manuálová stránka. Pilný student rychle zjistí, že xterm je velice sofistikovaný program.

Fonty

Solidní nastavení terminálu, nástroje, ve kterém trávím moře času, ať už doma či v práci, se neobejde bez vhodného fontu. Co je vhodný font? Především čitelný font, což obnáší správnou znakovou sadu a přehledné grafické provedení. Není jednoduché vytvořit dobrý font a není ani jednoduché vytvořit dobrý terminálový font, jehož hlavním rysem je jednotná šířka znaků, tzv. monospace. Velcí hráči, jako Adobe, Google nebo Mozilla, jsou na tom v tomto ohledu lépe: mohou si najmout profesionální písmaře.

Při konfiguraci TTY jsme se bavili o bitmapových fontech. Ve skutečnosti je problematika fontů v Linuxu docela o něco složitější. Existuje původní, core font system a novější xft font system, který se od původního liší v tom, že se renderování fontů provádí na klientské straně a navíc používá anti-aliasing, který změkčuje „hranatost“ či „pixelovitost“ písma. Na druhou stranu jsou tyto fonty špatně čitelné v malých velikostech. U malých velikostí je lépe sáhnout po bitmapovém fontu. Dávám přednost xft, když instaluju fonty. Více informací zde.

Fonty je možné instalovat z oficiálních repozitářů, ale není to nutné. Dávám přednost stažení fontů z netu a jejich „ruční instalaci“ či spíše načtení systémem. Většinou sáhnu po písmové sadě na stránkách Nerd Fonts. Jsou zde klasická terminálová písma, navíc obohacená o další znaky a ikony.

Za nejčitelnější považuju:

Ale je to do značné míry věc osobního vkusu a velikosti a rozlišení monitoru. Jeden ze způsobů jak nastavit velikost a správnou „vyhlazenost“ fontu je dpi.

Jak instalovat externí font? Nejprve stáhneme zvolený font, rozbalíme ho a uložíme do adresáře ~/.local/share/fonts/. Následně vyčistíme a regenerujeme font cache a verifikujeme instalaci.

$ mkdir ~/.local/share/fonts
$ mv ttf/RobotoMono* ~/.local/share/fonts
$ fc-cache -f -v
$ fc-list | grep "Roboto"

Odinstalace probíhá obráceně. Nejprve smažeme fontové soubory z adresáře ~/.local/share/fonts/ a následně regenerujeme cache.

Tiling vzat na milost

Konečně se můžeme pustit do konfigurace DK tiling WM. Jednodušší už to být ani nemůže. Stačí zkopírovat konfigurační soubory dkrc a sxhkdrc.

$ cp /usr/share/doc/dk/dkrc ~/.config/dk/
$ cp /usr/share/doc/dk/sxhkdrc ~/.config/dk/

Není to bezpodmínečně nutné, neboť defaultní nastavení je vcelku rozumné, ale lze přizpůsobit chování DK vlastním potřebám. Už jsem zmiňoval, že se raději učím defaultní nastavení, neboť vývojář ho tvoří s nějakou myšlenkou, kterou stojí zato prozkoumat. To zajisté nevylučuje drobné úpravy. V souboru dkrc lze nastavit počet ploch, chování oken a konkrétních programů, např. aby se Firefox vždy otevíral na ploše 2 apod. Z dkrc lze také spouštět programy při startu podobně jako z xinitrc. V sxhkdrc se nastavuje ovládání window manageru, tedy klávesové zkratky.

Byl jsem zvědav, jak se mi bude pracovat v čistokrevném tilingu po tak dlouhé době, ale musím říci, že docela dobře. Na OpenBSD používám cwm(1), ve Void Linuxu DK, na FreeBSD NsCDE, neboť mám jistou slabost pro brutalistický vzhled starého CDE (Common Desktop Environtment) a fvwm(1) je geniální window manager. Silně zvažuju, že se na OpenBSD vrátím k dwm v kombinaci s cwm. Nyní mám v xenodm(1) nastaveno přepínání mezi BareGUI, sdorfehs a cwm a v podstatě nic jiného než cwm nepoužívám.

Mysteriózní Dbus

Spousta lidí říká, že dbus nemají spuštěný a nemá to žádný vliv na jejich práci ve window manageru. Já se už setkal s tím, že mi některé věci nefungovaly a příručka Void Linux spouštění této služby jednoznačně doporučuje. Když pro nic jiného, tak alespoň pro správnou funkci audia, chceme-li instalovat moderní pipewire (což v tomto tutoriálu uděláme).

Dbus zprostředkovává komunikaci mezi programy a většina DE tuto službu vyžaduje. Dbus je nutné spouštět jako systémovou službu a zároveň jako proces pod lokálním uživatelem, např. v souboru ~/.xinitrc. Nejsem si jist, proč tomu tak je, ale doporučuje se to.

# ln -s /etc/sv/dbus /ver/service  # systémová služba
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
eval $(dbus-launch --auto-syntax --exit-wiht-session)
fi                                 # lokální proces

Audio

Ve Void Linuxu se o audio stará ALSA, Pulseaudio nebo Pipewire. Volím Pipewire. Prý je to novinka, která má nahradit Pulseaudio. Proč nevyzkoušet?

Nejprve nainstalujeme pipewire a wireplumber, což je cosi jako session manager pro audio zařízení. Vytvoříme adresář /etc/pipewire/pipewire.conf.d/ a nalinkujeme tam konfigurační soubory pro wireplumber a pipewire pulseaudio rozhraní. Mnoho aplikací prý očekává pulseaudio, takže pipewire simuluje jeho rozhraní.

# mkdir -p /etc/pipewire/pipewire.conf.d
# ln -s /usr/share/examples/wireplumber/10-wireplumber.conf /etc/pipewire/pipewire.conf.d
# ln -s /usr/share/examples/wireplumber/20-pipwire-pulse.conf /etc/pipewire/pipewire.conf.d

Nyní vyzkoušíme.

$ pipewire      # spustí službu
$ wpctl status  # testuje wireplumber
$ pactl info    # testuje pulseaudio přes pipewire

Jinak proces spouštíme při startu Xorg v ~/.xinitrc nebo ~/.config/dk/dkrc.

Network Manager

NetworkManager je služba, která se stará o připojení k síti přes ethernet i wifi. Defaultně se o ethernetové přípojení stará služba dhcpcd a o wifi zase wpa_supplicant. Výhodou NetworkManageru je, že se, zaprvé, postará o obě tyto služby, a za druhé, že exitují GUI nadstavby do traye ukazující stav připojení k internetu.

Před spuštěním služby je nutné vypnout dhcpcd i wpa_supplicant.

# rm /var/service/dhcpcd
# rm /var/service/wpa_supplicant
# ln -s /etc/sv/NetworkManager /var/service

NM má i CLI interface, obsluhovaný příkazem nmcli. Několik příkladů:

nmcli c  # ukáže existující připojení
nmcli d  # ukáže existující rozhraní
nmcli m  # monitoruje připojení
nmcli n  # status NetworkManageru
nmcli g  # obecný stav

Služba tedy dokáže vracet aktuální informace o připojení v CLI, což se dá využít v lištách typu lemonbar.

Power Management

Void Linux nepoužívá systemd. Protože některé programy mohou být závislé na systemd, je možné instalovat elogind, samostatnou jednotku simulujcí systemd všude, kde je třeba. Součástí elogind je loginctl. Ten má na starosti uživatelské sessions a power management.

$ loginctl list-sessions
$ loginctl session-status
$ loginctl suspend

Elogind koliduje s acpid, což je další služba, která se stará o baterii, uspávání do paměti atd., jinými slovy powermanagement. Používám tuto službu, nikoliv elogind. Má také CLI rozhraní, přes které je možno ji ovládat a zároveň odesílat informace o baterii do lišty.

Bar

DK přichází i s jednoduchým skriptem, který zobrazuje lištu s pomocí lemonbaru. Nachází se v adresáři /usr/share/doc/dk/scripts/bar.sh. Kopíruju do ~/.local/bin/.

Nejde o nijak složitý skript a funguje out-of-the-box. S pomocí výše uvedených nástrojů je možné ho rozšířit, ale zatím jsem neměl tu potřebu.

Je samozřejmě možné provést mnohem komplexnější nastavení v Polybaru, ale kdo rád píše skripty, použije lemonbar. Lemonbar je mnohem primitivnější (=program dělá jednu věc…). V podstatě jenom zobrazuje text v liště, který do něj pošleme skrze rouru (pipe). Nic víc a nic míň. Umí zobrazit text v nakonfigurovaném fontu a barvě a dokonce zvládá jednoduchá tlačítka. Polybar vznikl jako wrapper, který měl zjednodušit nastavování výstupu do lemnobaru.

Závěr

Nechci text déle natahovat. Je ještě pár aplikací, které časem doinstaluju, např. tray či notifikačního daemona. Není špatné, když počítač vrací informace o důležitých věcech, ale pouze o těch, o kterých skutečně chceme vědět. Právě proto používáme Linux, že? Možná o nich napíšu později.

Jak už to tak bývá, tento tutoriál je malinko víc než pouhý popis instalace Void Linuxu. Letmo se dotýká mnoha témat. Doufám, že se podaří napsat o některých víc do hloubky.

EOF