Date: 2024-04-07 15:31:07 Tags: technologie Desc: Po delsi dobe staronovy ponor do tech sveta. # Void Linux GUI Buduju pracovni a nikoliv experimentalni stanici. Nechci veci komplikovat, ale zaroven se nechci omezovat ve vyberu nastroju. Pote, co jsme uspesne zprovoznili operacni system, zabydleli se v konzoli, instalace grafickeho prostredi je dalsi logicky krok. ## Xorg Mnozi rikaji (napr. Brodie Robertson), ze Xorg je minulost a ze Wayland je lepsi v mnoha ohledech. Zatim jsem problem nestudoval nijak do hloubky a Wayland jsem dosud nezkusil, ale na prvni dobrou rikam, ze to asi bude pravda. Xorg vznikl v dobach, kdy se na univerzitach vsichni pripojovali do jednoho velkeho saloveho pocitace z mnoha externich terminalu. Odtud jeho zakladni schema Xorgu server-klient. Cloud computing nas do teto ery opet tak trochu vraci, ale osobni pocitac nam dosud nikdo nezakazal. Zda se, ze Wayland je budovan s ohledem na tento a dalsi fakta tykajici se napr. bezpecnosti. I vyvojari OpenBSD uz hledaji cesty, jak importovat Wayland na tuto platformu BSD. Na druhou stranu je nutne rici, ze ani Wayland neni bez problemu. Lide od BSD si hodne stezuji na linux-centrismus Waylandu. To je smer, ktery se mi nelibi. Zadny produkt, zejmena ne tak potencialne univerzalni jako Wayland, by nemel byt vazany na platformu. Mel by byt portovatelny, jinak se z Linuxu stanou dalsi Windows ci MacOS. Systemd byl take krokem timto smerem a uplne chapu vyvojare, co nechteli dopustit, aby se Linux unifikoval pod jedinym init systemem, bez ohledu na jeho technicke prednosti a navzdory jeho nedostatkum. Doufam, ze BSD dostanou vyvojare Waylandu trochu pod tlak, aby alespon budovali svuj produkt s ohledem na BSD. Ale dosti rozjimani o budoucnosti grafickeho prostredi. Instalujme obvykle podezrele. # xbps-install -S xorg xterm cwm dk sxhkd Cwm instaluju, protoze ho znam jako sve boty a pro zacatek zacnu pracovat v nem, nez nastavim dk podle svych potreb. Poslouzi mi take jako zaloha, kdyz me tiling omrzi nebo budu potrebovat stacking WM z jinych duvodu. Prozatim neinstalujeme xdm, ani zadny jiny display (session) manager. Konfigurace grafickeho prostredi se provadi v souboru `~/.xinitrc`, odkud se spousti i window manager, pripadne DE. Jde vlastne o skript, kde spoustime vsechno, co se ma spustit, kdyz startuje graficke prostredi. Obvykle se zde nastavuje locale, spousti lokalni dbus (viz dale), pipewire (audio, viz dale), mpd (music daemon), nacteni Xresources pro xterm (viz dale), redshift (nocni barvy), numlockx (ciselna klavesnice, pokud spravne nefunguje) a samozrejme window manager (nebo DE). Ten by se mel spoustet jako posledni, nadale bezici proces v popredi, tedy bez znaku ampersand "&" na konci radku. Chceme prece v nasem window manageru pracovat. Vsechny predesle prikazy by naopak mely spoustene procesy oddelit od hlavniho procesu a vykonavat je samostatne na pozadi. Proto maji ampersand na konci radky. *) V Unixu je vse textovy soubor a v nem zakladni jednotkou radka. Spousteny proces by mel byt na jedne radce a ampersand by mel byt na jejim konci. System chape radky zobrazene v dokumentu a ukoncene zpetnym lomitkem "" jako jednu radku. Je-li prikaz moc dlouhy, lze ho rozdelit na vice radek v dokumentu tim, ze radku ukoncime zpetnym lomitkem. Graficke prostredi v Unixu neni nic jineho nez dalsi terminalovy proces a ridi se stejnou logikou: bezici proces zamestnava aktualni terminal a tedy se "neforkuje" do vlastniho terminalu. Nekdo povolanejsi me muze opravit, ale mam dojem, ze Plan9, jako nastupce Unixu, uz tohle resi jinak. Tento skript se vykona, kdyz volame Xorg s pomoci prikazu `startx` z konzole. Pouzivame-li xdm nebo jiny display manager, je potreba ke stejnemu ucelu pouzit soubor `~/.xsession`. V mem systemu to byva symlink ke `~/.xinitrc`. $ ln -s ~/.xinitrc ~/.xsession A ukazka `~/.xinitrc` na zaver. Jeho obsah bude vysvetlen v nasledujicich sekcich. 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 ## Externi zarizeni Mam na mysli klavesnici, mys, monitor a podobne veci. Jejich chovani v Xorgu lze nastavit tim, ze adresar `/etc/X11/xorg.conf.d/` zaplnime konfiguracnimi soubory pro jednotliva zarizeni. Zde lze take nastavit rozlozeni klavesnice, pripadne jejich prepinani, pouzivame-li vice layoutu. Obycejne prepinam mezi ceskym QWERTY a anglickym layoutem. Preferuju nastavit to tady, pak to plati plosne pro vsechny programy spoustene pod Xorg. Druha moznost je jiz probirany `~/.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 uzitecnou povazuju take moznost restartovat Xorg, kdyz se nejaka aplikace zachova nezdvorile a zadny standardni zpusob, jak ji shodit, nefunguje. Z nejakeho duvodu tato moznost nebyva defaultne povolena. V xorg.conf.d je treba vytvorit soubor `flags.conf` s nasledujicim obsahem. Section "ServerFlags" Option "DontZap" "off" EndSection ## Xterm V modernich Unixech je k dispozici mnoho terminalovych emulatoru. Zaznamenal jsem, ze mezi oblibene patri st z repertoaru suckless nastroju a posledni dobou take alacritty. Oba jsou velmi rychle: st diky sve jednoduchosti a alacritty zase vyuziva GPU. Navzdory tomu, ze obzvlaste Alacritty ma mnoho zajimavych vlastnosti (na druhou stranu je stale beta verze), zustavam u overeneho xtermu. Xterm se konfiguruje pomoci souboru `~/.Xresources`. Ten je pak treba nacist pomoci prikazu `xrdb -merge ~/.Xresources`. Na netu je spousta informaci ohledne nastaveni Xtermu a samozrejme je tu take manualova stranka. Pilny student rychle zjisti, ze xterm je velice sofistikovany program. ## Fonty Solidni nastaveni terminalu, nastroje, ve kterem travim more casu, at uz doma ci v praci, se neobejde bez vhodneho fontu. Co je vhodny font? Predevsim citelny font, coz obnasi spravnou znakovou sadu a prehledne graficke provedeni. Neni jednoduche vytvorit dobry font a neni ani jednoduche vytvorit dobry terminalovy font, jehoz hlavnim rysem je jednotna sirka znaku, tzv. monospace. Velci hraci, jako Adobe, Google nebo Mozilla, jsou na tom v tomto ohledu lepe: mohou si najmout profesionalni pismare. Pri konfiguraci TTY jsme se bavili o bitmapovych fontech. Ve skutecnosti je problematika fontu v Linuxu docela o neco slozitejsi. Existuje puvodni, core font system a novejsi xft font system, ktery se od puvodniho lisi v tom, ze se renderovani fontu provadi na klientske strane a navic pouziva anti-aliasing, ktery zmekcuje "hranatost" ci "pixelovitost" pisma. Na druhou stranu jsou tyto fonty spatne citelne v malych velikostech. U malych velikosti je lepe sahnout po bitmapovem fontu. Davam prednost xft, kdyz instaluju fonty. Vice informaci zde. Fonty je mozne instalovat z oficialnich repozitaru, ale neni to nutne. Davam prednost stazeni fontu z netu a jejich "rucni instalaci" ci spise nacteni systemem. Vetsinou sahnu po pismove sade na strankach Nerd Fonts. Jsou zde klasicka terminalova pisma, navic obohacena o dalsi znaky a ikony. Za nejcitelnejsi povazuju: - SouceCodePro (v originale SourceCodePro od Adobe) - CaskaydiaCove (original od Microsoftu) - Roboto (v originale SourceCodePro od Adobe) Ale je to do znacne miry vec osobniho vkusu a velikosti a rozliseni monitoru. Jeden ze zpusobu jak nastavit velikost a spravnou "vyhlazenost" fontu je dpi. Jak instalovat externi font? Nejprve stahneme zvoleny font, rozbalime ho a ulozime do adresare `~/.local/share/fonts/`. Nasledne vycistime 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 probiha obracene. Nejprve smazeme fontove soubory z adresare `~/.local/share/fonts/` a nasledne regenerujeme cache. ## Tiling vzat na milost Konecne se muzeme pustit do konfigurace DK tiling WM. Jednodussi uz to byt ani nemuze. Staci zkopirovat konfiguracni soubory `dkrc` a `sxhkdrc`. $ cp /usr/share/doc/dk/dkrc ~/.config/dk/ $ cp /usr/share/doc/dk/sxhkdrc ~/.config/dk/ Neni to bezpodminecne nutne, nebot defaultni nastaveni je vcelku rozumne, ale lze prizpusobit chovani DK vlastnim potrebam. Uz jsem zminoval, ze se radeji ucim defaultni nastaveni, nebot vyvojar ho tvori s nejakou myslenkou, kterou stoji zato prozkoumat. To zajiste nevylucuje drobne upravy. V souboru dkrc lze nastavit pocet ploch, chovani oken a konkretnich programu, napr. aby se Firefox vzdy oteviral na plose 2 apod. Z dkrc lze take spoustet programy pri startu podobne jako z xinitrc. V sxhkdrc se nastavuje ovladani window manageru, tedy klavesove zkratky. Byl jsem zvedav, jak se mi bude pracovat v cistokrevnem tilingu po tak dlouhe dobe, ale musim rici, ze docela dobre. Na OpenBSD pouzivam cwm(1), ve Void Linuxu DK, na FreeBSD NsCDE, nebot mam jistou slabost pro brutalisticky vzhled stareho CDE (Common Desktop Environtment) a fvwm(1) je genialni window manager. Silne zvazuju, ze se na OpenBSD vratim k dwm v kombinaci s cwm. Nyni mam v xenodm(1) nastaveno prepinani mezi BareGUI, sdorfehs a cwm a v podstate nic jineho nez cwm nepouzivam. ## Mysteriozni Dbus Spousta lidi rika, ze dbus nemaji spusteny a nema to zadny vliv na jejich praci ve window manageru. Ja se uz setkal s tim, ze mi nektere veci nefungovaly a prirucka Void Linux spousteni teto sluzby jednoznacne doporucuje. Kdyz pro nic jineho, tak alespon pro spravnou funkci audia, chceme-li instalovat moderni pipewire (coz v tomto tutorialu udelame). Dbus zprostredkovava komunikaci mezi programy a vetsina DE tuto sluzbu vyzaduje. Dbus je nutne spoustet jako systemovou sluzbu a zaroven jako proces pod lokalnim uzivatelem, napr. v souboru `~/.xinitrc`. Nejsem si jist, proc tomu tak je, ale doporucuje se to. # ln -s /etc/sv/dbus /ver/service # systemova sluzba if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then eval $(dbus-launch --auto-syntax --exit-wiht-session) fi # lokalni proces ## Audio Ve Void Linuxu se o audio stara ALSA, Pulseaudio nebo Pipewire. Volim Pipewire. Pry je to novinka, ktera ma nahradit Pulseaudio. Proc nevyzkouset? Nejprve nainstalujeme pipewire a wireplumber, coz je cosi jako session manager pro audio zarizeni. Vytvorime adresar `/etc/pipewire/pipewire.conf.d/` a nalinkujeme tam konfiguracni soubory pro wireplumber a pipewire pulseaudio rozhrani. Mnoho aplikaci pry ocekava pulseaudio, takze pipewire simuluje jeho rozhrani. # 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 Nyni vyzkousime. $ pipewire # spusti sluzbu $ wpctl status # testuje wireplumber $ pactl info # testuje pulseaudio pres pipewire Jinak proces spoustime pri startu Xorg v `~/.xinitrc` nebo `~/.config/dk/dkrc`. ## Network Manager NetworkManager je sluzba, ktera se stara o pripojeni k siti pres ethernet i wifi. Defaultne se o ethernetove pripojeni stara sluzba `dhcpcd` a o wifi zase `wpa_supplicant`. Vyhodou NetworkManageru je, ze se, zaprve, postara o obe tyto sluzby, a za druhe, ze exituji GUI nadstavby do traye ukazujici stav pripojeni k internetu. Pred spustenim sluzby je nutne vypnout dhcpcd i wpa_supplicant. # rm /var/service/dhcpcd # rm /var/service/wpa_supplicant # ln -s /etc/sv/NetworkManager /var/service NM ma i CLI interface, obsluhovany prikazem `nmcli`. Nekolik prikladu: nmcli c # ukaze existujici pripojeni nmcli d # ukaze existujici rozhrani nmcli m # monitoruje pripojeni nmcli n # status NetworkManageru nmcli g # obecny stav Sluzba tedy dokaze vracet aktualni informace o pripojeni v CLI, coz se da vyuzit v listach typu lemonbar. ## Power Management Void Linux nepouziva systemd. Protoze nektere programy mohou byt zavisle na systemd, je mozne instalovat elogind, samostatnou jednotku simulujci systemd vsude, kde je treba. Soucasti elogind je `loginctl`. Ten ma na starosti uzivatelske sessions a power management. $ loginctl list-sessions $ loginctl session-status $ loginctl suspend Elogind koliduje s `acpid`, coz je dalsi sluzba, ktera se stara o baterii, uspavani do pameti atd., jinymi slovy powermanagement. Pouzivam tuto sluzbu, nikoliv elogind. Ma take CLI rozhrani, pres ktere je mozno ji ovladat a zaroven odesilat informace o baterii do listy. ## Bar DK prichazi i s jednoduchym skriptem, ktery zobrazuje listu s pomoci lemonbaru. Nachazi se v adresari `/usr/share/doc/dk/scripts/bar.sh`. Kopiruju do `~/.local/bin/`. Nejde o nijak slozity skript a funguje out-of-the-box. S pomoci vyse uvedenych nastroju je mozne ho rozsirit, ale zatim jsem nemel tu potrebu. Je samozrejme mozne provest mnohem komplexnejsi nastaveni v Polybaru, ale kdo rad pise skripty, pouzije lemonbar. Lemonbar je mnohem primitivnejsi (=program dela jednu vec...). V podstate jenom zobrazuje text v liste, ktery do nej posleme skrze rouru (pipe). Nic vic a nic min. Umi zobrazit text v nakonfigurovanem fontu a barve a dokonce zvlada jednoducha tlacitka. Polybar vznikl jako wrapper, ktery mel zjednodusit nastavovani vystupu do lemnobaru. ## Zaver Nechci text dele natahovat. Je jeste par aplikaci, ktere casem doinstaluju, napr. tray ci notifikacniho daemona. Neni spatne, kdyz pocitac vraci informace o dulezitych vecech, ale pouze o tech, o kterych skutecne chceme vedet. Prave proto pouzivame Linux, ze? Mozna o nich napisu pozdeji. Jak uz to tak byva, tento tutorial je malinko vic nez pouhy popis instalace Void Linuxu. Letmo se dotyka mnoha temat. Doufam, ze se podari napsat o nekterych vic do hloubky. => https://wiki.archlinux.org/title/Xterm [Arch Linux Wiki] => https://lukas.zapletalovi.com/posts/2013/hidden-gems-of-xterm/ [Hidden gems of xterm] => https://unixdigest.com/tutorials/how-to-setup-freebsd-with-a-riced-desktop-part-3-i3.html#xterm [Unixsheikhuv Riced FreeBSD Desktop] => https://twiserandom.com/unix/x11-fonts-a-tutorial/index.html [X11 fonts a tutorial] => https://venam.net/blog/unix/2017/06/04/fonts-on-unix.html [Fonts on Unix] => https://www.nerdfonts.com/ [Nerd Fonts]