Date: 2022-11-11 20:00:00
From: rpt@desudoli.cz
Subject: BareGUI revisited
To: dalnopis@desudoli.cz
Tags: technologie OpenBSD desktop
Desc: Jak jsem distroskočil do FreeBSD.

BareGUI revisited

Na úvod několik poznámek. Ne, neopustil jsem OpenBSD, které nadále zůstává na mém notebooku i serverech. Naopak se v tomto nikoliv krátkém textu chystám porovnávat obě BSD, nakolik mé chabé znalosti dovolí. Dovolil jsem si přidat i malé zamyšlení nad window managery. Každopádně tento text téma ani zdaleka nevyčerpává a případné opravy a doplnění jsou vítány.

Důvodem k dalšímu distroskoku byla jistá nespokojenost s Artixem i s LARBS. Lukovo minidistro prostě není my thingy.

Přestala fungovat aplikace Telegram, Artix si nechtěl povídat se zvukovkou a navíc tiling sucks (pouhý nerdovský slang, nic podstatného). Už se schylovalo k přeinstalaci, ale zvědavost mě táhla zpátky k (Free)BSD. Jenže jsem potřeboval fungovat rychle, takže jsem přistoupil k instantnímu řešení jménem…

GhostBSD

GhostBSD už na mých počítačích běželo. Za uplynulá léta ale jaksi zeštíhlelo a přiblížilo se vanilla FreeBSD s MATE desktopem navrch a pouze základním výběrem softwaru. Zmizelo OpenRC a pravděpodobně i další věci. To vše je mi sympatické.

Instalátor je grafický, instalace samotná jednoduchá, takže za pár minut běží na vašem počítači jednoduché, ale relativně vychytané distro.

Musím říci, že dieta GhostBSD prospěla. Setkal jsem se minimem problémů, zejména se zlepšil update. Pamatuju si, že to bývala velká bolest, neboť update dokázal pohřbít celou instalaci. Nainstaloval jsem GhostBSD na několik domácích počítačů, provedl už několik updatů a pouze jediný zanechal počítač v nekonzistentním stavu. To byla navíc moje chyba, neboť jsem nechal vybít baterii notebooku. Naštěstí řešení bylo velice jednoduché, nový vynucený upgrade přes terminál.

# pkg upgrade -f

Nicméně jeden čtenář tohoto blogu usoudil, že FreeBSD s pár programy značky Ghost navrch je pod úroveň tohoto bloggera. Výzva, kterou nelze neuposlechnout.

Vanilla FreeBSD

Při instalaci FreeBSD jsem vycházel ze dvou zdrojů:

Vermaden je blogující sysadmin z Polska, jenž přispívá na různá fóra o BSD, např. daemonforums.org. Jeho blog doporučuju, je plný užitečných informací. Mimochodem, není velkým příznivcem OpenBSD.

Instalace

Narozdíl od OpenBSD instalace probíhá v TUI prostředí, což je předchůdce GUI. Pro srovnání: OpenBSD instalátor je CLI, GhostBSD má GUI instalátor (jen další nerdovský slang).

Nic složitého, navíc Vermaden má na svém blogu screenshoty snad všech kroků, včetně doporučovaného nastavení BIOSu (předchází samotné instalaci).

Xorg

Další velký rozdíl ve srovnání s OpenBSD. Základní instalace FreeBSD neobsahuje X window GUI systém, zatímco Xenocara, upravený Xorg, je součástí základní instalace OpenBSD.

Handbook a Vermadenovy poznámky zde přišly velmi vhod. Bez příslušného modulu s ovladači pro grafické karty by totiž Xorg nefungoval správně nebo vůbec. Proto bylo nutné doinstalovat balíček drm-kmod a spustit ho při bootování systému, což obnáší přidání řádky do /etc/rc.conf:

kld_list="amdgpu" # i915kms | radeon

Případně příkazem:

# sysrc kld_list="amdgpu"

Po něm následuje restart.

Na tomto místě je třeba zmínit, že FreeBSD má trochu jinou organizaci základní adresářové struktury než OpenBSD. Standardní /home je symlink na /usr/home, což je skutečný HOME. Narozdíl od OpenBSD adresář /etc slouží výhradně ke konfiguraci základního systému (base). Konfiguraci uživatelem instalovaných programů řeší adresář /usr/local/etc, který pod OpenBSD vůbec neexistuje.

Při prvním spuštění Xorg se objeví twm(1), prastarý window manager. Je dobré prověřit /var/log/Xorg.log, zda Xorg zbytečně neřeší nějakou chybu a zda skutečně využívá instalované ovladače. Při jedné instalaci jsem zjistil, že načítá defaultní ovladač Vesa a některé věci nefungují, jak by měly.

Dále jsem instaloval xdm(1) a xterm(1), tedy display čili login manager a terminál. Defaultní login je z vizuálního hlediska příšerný, takže vermadenův update přišel vhod. Soubor /etc/rc.conf funguje na FreeBSD jako /etc/rc.conf.local na OpenBSD. Display manager se systémově spouští také tam.

xdm_enable="YES"
# service xdm start

Velmi se mi líbilo, že konfigurační soubory v /usr/local/etc/X11/xdm/ jsou ve dvojím provedení, jednou jako sample, takže je lze bez ostychu přepsat, aniž by člověk musel dělat zálohy. Je zde také adresář xorg.conf.d, kam lze uložit konfigurační soubory různých vstupních a výstupních zařízení jako myš, klávesnice či displej. Využil jsem tohoto privilegia a sestavil jsem keyboard.conf s preferovaným nastavením klávesnice. Pokud jde o konfigy pro Xorg, je lépe následovat rady z Handbook než vermadenovy rady.

Window manager (WM)

Minule jsem tady probíral desktopová prostředí. Nyní bych rád ztratil pár slov o manažerech oken čili window managers čili WM.

Jako hledač jednoduchosti a minimalismu jsem samozřejmě musel vyzkoušet tiling WM. Všichni známe stacking WM, mezi které patří mimo jiné i nejhorší virus, který může napadnout váš počítač čili Windows. Okna se zde pohybují v hypotetickém trojrozměrném světě. Jinými slovy lze okna skládat na sebe, překrývat je či úplně zakrýt. Naopak tiling WM žijou ve dvourozměrném světě, kde jsou okna v jedné rovině, takže se mohou pouze dotýkat hranami, ale nemohou ležet přes sebe. Takto vytvářejí na displeji dlaždice stejných či různých velikostí a struktur.

Poctivě jsem vyzkoušel několik známých tiling WM. V podstatě existují 2 druhy podle chování při otevření nového okna:

Ani s jedním konceptem jsem se přes přiměřenou snahu nesžil. Za praktičtější považuju dwm(1), kde se člověk mezi okny pohybuje rychleji a přirozeněji než u ratpoison(1). Ten funguje spíš jako Emacs nebo tmux(1) a člověk musí stisknout mnoho kláves, než se dostane tam, kam chce. Abych přilil ohně do oleje svaté války mezi příznivci editorů Vim a Emacs, kde jednoznačně stojím na straně Vimu, dwm je spíš jako Vim a má i stejné ovládání.

Ze stacking WM jsem nejdéle používal cwm(1) a openbox(1).

Cwm(1) je jeden z defaultních WM v základní instalaci OpenBSD. Záliba v minimalismu mě táhne k cwm(1). Jde o nejčistší desktopovou zkušenost dokonce i ve srovnání s tzv. tiling window managers. Tu z mého pohledu kazí i přidání lišty s výstupem skriptu, sledujícího zatížení procesoru, sítě, paměti atd., na což už byly napsáno hromady skriptů. Jediný snesitelný objekt je podle mě xclock(1), analogové hodiny. Čistá desktopová zkušenost je esteticky nedostižná, ale tak trochu nepraktická. Někdy prostě informace chybí. Lze to vyřešit např. lištou tint2(1) s nastaveným automatickým skrýváním, ale pořád je požadovaná informace 1 pohyb nebo 1-2 údery do kláves vzdálená. Pro líného člověka aktivita navíc.

Další problém spočívá v tom, že okno bez lišty nelze manipulovat jednou rukou, neboť druhá musí držet ALT, aby systém věděl, že chceme oknem pohybovat nebo měnit jeho velikost. To možná vypadá jako neproblém, ale stalo se mi mnohokrát a z mnoha důvodů, že jsem levou ruku prostě neměl volnou. Obzvlášť děti dokážou v tomto ohledu člověka zaměstnat tak, že jsou mu i obě ruce málo. V tu chvíli možnost ovládat počítač pouze myší nabývá na ceně.

Když jsem tedy nainstaloval shepův BareGUI, jehož základ tvoří openbox(1), ubylo mi v jistém ohledu práce a přitom si můžu užívat okenního chaosu na ploše, který mi u tiling WM chyběl. Proto zcela rozumím tomu, proč je openbox(1) nejoblíbenější WM posledních 10 a více let. Nedávno jsem navíc objevil, že mohu na liště tint2(1) vidět obsah všech virtuálních ploch. To je skvělá věc, když si člověk nepamatuje, kde má jaké okno, což je přesně můj případ.

Jednou z alternativ openboxu je fvwm(1), jenž je součástí základní instalace OpenBSD. Má neskutečné možnosti konfigurace a umožňuje vše, o čem jsem mluvil výše. Jeho spartánský a prastarý vzhled zapadá do mé minimalistické filozofie. Proč ho tedy nepoužívám? Musím konstatovat, že prostě nejsem zcela věrný a důsledný, pokud jde o mnou protěžovanou filozofii. Možná v tom hrajou roli návyky z práce, kde používám Windows, ale hlavním důvodem je patrně moje lenost.

BareGUI

Další instalované programy sledují filozofii BareGUI, kterou už jsem popisoval. Zmíním tedy jenom několik dalších rozdílů oproti OpenBSD.

Firewall

Pod FreeBSD funguje Packet Filter, pf(4) základní firewall na OpenBSD. Balíček pro FreeBSD se prý trochu liší, ale to není podstatné. Pro mé relativně jednoduché potřeby se konfigurace příliš neliší. Odhaduju, že syntax obou verzí je stejný.

Zvuk

Na OpenBSD funguje zvuk out of the box. Ne tak na FreeBSD. Systém si samozřejmě osahá všechna zvuková výstupní zařízení, mezi která ovšem patří kupodivu i HDMI výstup do monitoru. Zvlášť bývá i výstup na sluchátka a zadní výstup zvukovky. Je nutné určit, který výstup bude defaultní.

Instaloval jsem gtk-mixer, kde lze zařízení přepínat graficky, je však lepší toto nastavit na úrovni systému.

$ cat /dev/sndstat # vypíše zařízení
# sysctl hw.snd.default_unit=1 # určí defaultní výstup

Soubor /etc/sysctl.conf by měl obsahovat poslední definici, pokud chceme uchovat informaci o defaultním výstupu i po vypnutí počítače. U některých strojů toto nestačí a je třeba ještě přidat tuto řádku:

dev.hdac.0.polling=1

Dosavadní zkušenost s řízením audio výstupů je smíšená. Na jednom počítači jsem po počátečním nastavení nenarazil na problém. Na dalším přepnutí pollingu nefunguje, výstup se musí nastavit ručně a poté odhlásit a znovu přihlásit, ale pouze u Linuxové vrstvy. Toto budu muset ještě trochu prozkoumat.

Linuxová vrstva

Toto je další velký rozdíl proti OpenBSD, které z bezpečnostních důvodů věci, jako je Linuxová vrstva neumožňuje. K čemu je to dobré? Především Netflix a jemu podobní, chránění drm.

MPD

Music Player Daemon má na FreeBSD jednu zvláštnost, jmenuje se musicpd(1). Jinak je nastavení v podstatě stejné jako na OpenBSD. Tzn. že daemona nespouštíme na úrovni systému, nýbrž uživatele. Přehrávanou hudbu pak zprostředkovává socket, což je třeba říci všem frontendům na přehrávání zvuku. Osobně volím ncmpc(1) v terminálu a xfmpc(1) jako GTK (GUI) aplikaci.

Jednoduchý tiling

O kousek výše jsem haněl tiling WM. To neznamená, že tiling zavrhuju jako koncept. Naopak, považuju ho za užitečný, ale jenom za určitých okolností. Tiling WM často umožují také stacking, ale připadá mi přirozenější spíš používat tiling u stacking WM, které toto většinou také umožňují. Koneckonců tato funkcionalita je i u Windows.

V instalaci BareGUI na OpenBSD jsem se spolehl pouze na funkce openbox(1) a tiling nastavil v konfiguračním souboru. Na FreeBSD jsem si dovolil trochu větší luxus a využil služeb programu wmctrl(1), který mezi porty OpenBSD chybí. Používám vermadenův skript, který lze nalézt v sekci Aerosnap.

Koš ve filemanageru

Koš v PCManFM(1) a dalších filemanagerech je sofistikovanější záležitost, než by člověk čekal. Vyžaduje instalaci programu gvfs, jenž v sobě nese soubor funkcí užitečných pro připojení ke vzdáleným systémům prostřednictvím nejrůznějších protokolů jako FTP nebo SSH (SFTP). K nim patří mimo jiné i funkce koše.

Snad se příliš nepletu, nemám to úplně ověřené, ale dále je třeba spustit službu (daemona) dbus. Tu spouštím na úrovni celého systému.

dbus_enable="YES" # do /etc/rc.conf
# service dbus start

A také jako uživatel v ~/.xinitrc (xsession je symlink na xinitrc).

if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
	eval $(dbus-launch --sh-syntax --exit-with-session)
fi

Jde o zvyk z OpenBSD a nejsem si zcela jist, že je to nutné. Dbus vykonává funkce důležité pro desktopová prostředí. Obecně řečeno zprosředkovává komunikaci mezi programy. Kritici ho považují za linuxismus. Někteří tvrdí, že ani nezpozorovali, že nějaký dbus potřebují, jiným bez něj nefunguje celá řada funkcí. Moje vlastní zkušenost je spíš druhého typu, takže ho poctivě spouštím.

Externí disky

FreeBSD má šikovný program na spouštění programu, pokud kernel zpozoruje nějakou událost, např. připojení externího disku. Jmenuje se devd(8). Spadá do stejné kategorie jako hotplug(8) na OpenBSD.

Vermaden napsal skript automount, který využívá funkcionality devd(8). Je v portech, takže lze standardně instalovat. Konfigurační soubor je /usr/local/etc/automount.conf, kde lze mimo jiné nastavit filemanager, ve kterém se externí úložné zařízení zobrazí.

Čas

Jako poslední věc zmíním čas, neboť jsem narazil na následující problém. Počítač ukazoval o hodinu posunutý čas. Usoudil jsem, že jsem při instalaci zadal nepřesnou informaci o času v BIOSu počítače.

Nevadí, řešení je velice jednoduché. Pokud existuje prázdný soubor /etc/wallcmosclock, znamená to, že CMOS je nastavený na lokální čas. Není-li tam, CMOS je nastavený na UTC, což je i můj případ. Po smazání souboru se čas spravil.

Závěr uzávěr

Jsem se svou instalací zatím velice spokojen. Většina věcí funguje bez problému. Nikterak výkonný stroj reaguje velice svižně, což je proti poněkud línému OpenBSD příjemná změna. Připojení do práce funguje podle očekávání. A po instalaci linuxové vrstvy může manželka pohodlně sledovat oblíbený brak na Netflixu.

BareGUI na FreeBSD

EOF