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]