Příručka pro přizpůsobení Linuxového desktopu


Linux desktop má výhodu v tom, že je velice modularizovatelný. Tím míním, že lze jednotlivé komponenty nahrazovat příslušnými alternativami a tím si skutečně přizpůsobit a odladit prostředí tak, jak člověk skutečně chce. Pokud je však člověk nováček, může to být velice atypické a silně netriviální se vůbec zorientovat a uchopit to za správný konec.

V tomto článku se pokusím podat zevrubný přehled komponent, které se do linuxového desktopu skládají, jejich příklady, a jak vůbec začít.

Pozor: Řada konceptů a principů v tomto článku je zjednodušena za účelem přehlednosti.

Distribuce a desktopová prostředí

Nejzákladnějším rozdělením různých instancí Linuxu jsou tzv. distribuce (distributions/distros). Striktně řečeno je Linux pouze jádro daného operačního systému. K němu jsou přiloženy jen velice nezbytné GNU nástroje. Toto kombo se často označuje jako GNU+Linux.

To je ovšem stále málo, takovýto systém nedokáže moc z toho, co od moderního počítačového systému očekáváme. Zde nastupují na scénu distribuce. Distribuce jsou, vágně řečeno, balíčky softwaru, které jsou k GNU+Linux připojeny a vytvoří se tak kompletní a funkční Linuxový desktop.

Obrázek 1: Anatomie Linuxové distribuce

Rozsáhlý přehled distribucí a jejich vývoje lze najít zde. Mezi nejpopulárnější patří:

Často se ale může stát, že byste od pohledu jednotlivé distribuce na první pohled nerozeznali. Narážíme zde na pojem desktopové prostředí (DE – desktop environment). To je sám o sobě balíček softwaru souvisejícího (hlavně) se vzhledem OS. Tyto balíčky jsou naprosto nezávislé na jednotlivých distribucí. Současně existují nějaká ustálená „balení“, a často si tvůrci jednotlivých distribucí usnadní práci s výběrem a přifaří k distribuci právě některý ze známějších DE. Mezi ně patří např.:

Softwareová komponenta, kterou se ale distribuce často liší jsou package managemeners (správci balíčků). Na Linuxu preferabilně nestahujeme aplikace tak, že si nějaký program nudně najdeme na internetu, stáhneme jakýsi installer a proklikáme se mermomocí k jeho instalaci (i když to samozřejmě lze). Vše probíhá z pohodlí příkazového řádku, či nějaké grafické aplikace. Jednodušše si lze napsat sudo apt-get install firefox – a voilà – už se vám stahuje Firefox. Tyto systémy však většinou nelze obměňovat, jsou úzce spjaty s nainstalovaným systémem. Například zmíněné distribuce používají následující package managery:

Nastartování

Nyní se na věc podíváme z trochu jiného úhlu. Přesněji se zaměříme na to, co se děje, když spustíme Linuxový systém.

Nejprve se spustí BIOS (Basic Input Output System). Ten provede různé kontroly. Následně se podívá do MBR (Master Boot Record) – 1. sektor na bootovatelném disku. Tam najde informace o bootloaderu a spustí ho. Bootloader je program, který spustí příslušný systém. Jde o to, že na jednom stroji může být více systémů (více Linuxových distribucí, či dokonce různých operačních systémů). V bootloaderu si uživatel vybere systém, který chce spustit. Nejpoužívanějším (a v podstatě jediným rozumným) bootloaderem je GRUB.

Booatloader po vybrání zavede příslušné jádro (kernel) do operační paměti. To provede nějaké nepodstatné věci a spustí tzv. init proces. Tento init proces následně spouští jednotlivé skripty pro systém a vloží některé kernelové moduly (tj. řadiče zařízení).

Nejrošířenější init systém je v současnosti systemd. Ačkoliv proti němu všichni něco mají, nemá v současné době reálného rivala.

systemd je onen klasický výpis, který každá linuxář vidí při spuštění své mašiny:

Obrázek 2: Příklad výpisu systemd při spouštění systému

systemd spustí různé procesy (dají se lehce přidat či upravit prostřednictvím tzv. service file). Ten nakonec nastartuje; za předpokladu, že nějaké v systému je; GUI...

Koncepce GUI

Nyní se zaměříme na to, jak vůbec vznikají grafické prvky. To není samozřejmé; Linuxové stanice vůbec grafické rozhraní nepotřebují! ...Mohou být zkrátka ovládány terminálem.

V součastnosti existují 2 reálně používané systémy umožňující GUI. Jedná se o X (též X11) a Wayland. X je prehistorický systém s počátky v 80. letech minulého století a v důsledku toho má určité problémy a limitace. Wayland vznikl jako moderní alternativa pro X. Někteří by však mohli říci, že Wayland není ještě připraven se postu X zmocnit. Status quo je takové, že většina Linuxových stanic dnes stále používá X, Wayland je prozatím marginální; spíše pro nadšence.

V souvislosti s poskytovateli GUI jsou také často zmiňovány kompozitory (compositors). Kompozitory poskytují různé rozšiřující grafické prvky jako průhlednost oken, stíny, přechody, atd. Příkladem kompozitoru pro X může být picom. U Waylandu hovořit o kompozitorech postrádá smyslu; „kompozitor“ je integrální součástí jeho architektury.

První grafický program, který se spustí je tzv. display manager (DM). To je program, ve kterém se uživatel přihlásí a vybere WM (o těch později). Nejčastěji používanými display managers jsou např.:

Celé si to lze shrnout následovně:

Obrázek 3: Zjednodušený proces spuštění desktopu

Manipulace oken a desktopové programy

Když už chceme spustit několik grafických programů a interagovat s nimi konkurentně, je nutný systém pro zacházení s nimi. Toto je role tzv. window managers (WMs). Z těch se rozlišují 2 typy: floating WMs a tiling WMs.

Floating WMs jsou ten profláklý způsob, nímž se klasicky ovládají okna ve Windows či Mac OS. Zkrátka za okno zatáhnete kurzorem myši a ono se pohne. Tento typ je rozšířenější. Tyto WM však nejsou většinou používány a vyměňovány samostatně. Nejpoužívanější floating WMs jsou totiž spjaty s desktop environments, které tyto WMs používají. Např.:

Nejpoužívanější floating WM, která není přímo vázána na nějaký desktop enviroment je Openbox.

Tiling WMs mají výhodu, že okna v nich se dají ovládat bez myši. Okna se tradičně nepřekrývají (i když některé WM to také dokážé), ale rozdělují si plochu na „území“. Některé okno je vždy vybráno, s tím lze interagovat pomocí nějakých speciálních klávesových zkratek. Když se toto okno zavře, zbylá okna toto místo nějakým způsobem zaberou pro sebe. A opačně když se nějaké okno přidá, ubere se nějakým způsobem území již otevřeným oknům. Mezi nejpoužívanější tiling window manages patří:

Pro lepší představu jak tiling vypadá v praxi, doporučuji si pustit kousek tohoto videa: https://youtu.be/GKviflL9XeI?t=185.

U display managerů bylo zmíněno, že se při přihlašování vybírá window manager. Těch na systému může být libovolný počet, třeba i tiling a floating zároveň.

Příkladem okna, které mají někteří uživatelé neustále otevřené je tzv. panel či bar (též status bar či dock). Jedná se o onu klasickou lištu, která je třeba ve Windows ve výchozí poloze na spodku obrazovky a zobrazuje např. ikony programů, které jsou současně spuštěny. Existuje široká řada těchto barů. Často jsou opět svázány s příslušnými desktop enviromnets (např. XFCE → xfce-panel), Ale existuje celá řada různých panelů, které jsou nezávislé. Nejpopulárnější z nich jsou např.:

Obrázek 4: Příklad vysoce přizpůsobeného polybaru

Další programy a systémy

Tím byly představeny všechny grafické typy programů v tomto článku. Zde bych však chtěl ještě zmínit některé další typy, které lze volit v tomto modulárním stroji, jímž jsou moderní linuxové desktopy.

Co se týče audia v Linuxu, existují 2 audiové systémy. PulseAudio a PipeWire. Přitom PipeWire je novější alternativa PulseAudia. Funguje lépe a je více podporován ze softwarového hlediska. Na většině systémů však přetrvává PulseAudio do dnes.

Dalším často obměňovaným komponentem linuxového desktopu je průzkumník souborů (file explorer/manager). Zde se také propisuje posedlost linuxářů přenést všechno do terminálu. Existují totiž dva typy: grafické průzkumníky a terminálové průzkumníky. Mezi ty nejpoužívanější grafické patří:

Mezi ty terminolvé patří např.:

Když už byly nakousnuty terminálové průzkumníky souborů, je třeba už konečně zmínit terminálové emulátory samotné. Ty se liší zejména vzhledem a přizpůsobitelností. Nejpopulárnějšími jsou:

Skuteční fajnšmekeři používají více terminálů otevřených najednou. To lze udělat pomocí window managerů, ale existují možnosti, jak tohoto dosáhnout přímo na úrovni terminálu – mít otevřeno jedno terminálové okno a v něm přepínat mezi „záložkami“ terminálů, které uchovávají svůj stav. Implementace se různí. Nejznámější je tmux (od Terminal MUltipleXer). Ten lze použít v jakémkoliv terminálovém emulátoru. U některých terminálových emulátorů je správa „záložek“ zabudovaná přímo do nich, třeba jako u zmíněného WezTermu.

Další zmíněníhodnou kategorií programů jsou tzv. application launchers. Tento název je avšak zavádějící, nemusí jen spouštět aplikace, ale cokoliv. Většinou si je člověk nabinduje na nějakou klávesovou zkratku. Po jejich spuštění se zobrazí nějaký seznam. Povětšinou to bývá seznam spustitelných souborů (které jsou v $PATH). V tomto seznamu lze také vyhledávat. Je to tedy takové start menu. Ve skutečnosti jde použít i k jiným věcem – seznam lze libovolně přizpůsobit. Například jeden z dalších populárních použití je udělat ze seznamu „emoji toolbar“. Dva nejpopulárnější jsou:

Obrázek 5: Rofi použitý jako application launcher a emoji toolbar

Další funkci, kterou používá často řádný power-user je screenshotování. Často chce člověk screenshoty rychle upravit a někam odeslat; třeba rovnou na imgur. Některé z nich jsou:

Dalším modularizovatelnou součástí jsou shelly. Shell je program, jenž interpretuje kód psaný do terminálu. Na drtivé většině systému je defaultně bash. Je tak populární, že shell a bash se někdy používá vzájemně zaměnitelně. Existují i další volby. Jedním takovým „general-purpose“ shellem je zsh. Ten je atraktivní tím, že toho dokáže mnohem víc. Toho dosahuje hlavně díky snadné rozšířitelnosti pomocí komunitních plug-inů. Například nabízí našeptávání a syntax highlighting (přímo v shellu). Dalším podobným je fish shell. Současně se také objevují různé shelly, které jsou zaměřené přímo na nějakou specifickou věc. Jedním z nich je nushell, který je zaměřen na zpracovávání dat.

Nutno ještě podotknout, že shellů může být na systému třeba desítky a je velice jednoduché mezi nimi přepínat. Tedy to není „jeden nebo nic“. Každý shell má také speciální konfigurační soubor, který se spustí vždy, když nastartuje daný shell. Tento konfigurák často končí na rc. Třeba bash má .bashrc a zsh má .zshrc.

Abychom dorazili ty terminály – prompty. Prompt je v terminálu text, který se zobrazí na řádku (či řádcích) předtím, než uživatel zapíše nějaký příkaz. Často zobrazuje název uživatele, název stroje a současný adresář:

Obrázek 6: Můj osobní prompt

Klasicky si lze jednodušše prompt nakonfigurovat nastavením speciální proměnné $PS1 v konfiguračním souboru používaného shellu. Lze použít různé nástroje pro vygenerování tohoto nastavení, třeba tento.

Jiný způsob je použít pro prompt externí program jako třeba starship. V něm lze nakonfigurovat šiřší škálu funkcionalit, třeba zobrazovat současnou git branch.

Dotfiles

Pokud se vydáte na cestu si přizpůsobit svůj systém na maximum, bylo by velice nešťastné replikovat konfiguraci na jiném stroji. To může trvat velice – velice dlouho. Nejčastější způsob, jak se s tímto vypořádat, je pomocí tzv. dotfiles. Dotfiles je, volně řečeno, kolekce konfiguračních souborů, skriptů, a dalších podpůrných souborů pro programy na daném systému. (Tyto soubory často začínají tečkou, odtud „dotfiles“). Tuto kolekci si člověk následně synchronizuje přes git a hostuje třeba na GitHubu. Příklad takového repozitáře lze najít zde.

Pak lze dosáhnout situace, kde by byl proces přízpůsobení nového stroje následující:

  1. Na systému se nainstaluje chtěná Linux distribuce,
  2. Naklonuje se repozitář s dotfiles,
  3. Spustí se skript z repozitáře, který stáhne chtěné programy a vykoná další konfigurace systému,
  4. systém je připraven k plnému použití.

Tento celý proces může trvat třeba jen 15 minut.

Bonus 1: suckless

Pokud spadnete opravdu hluboko do zaječí díry přízpůsobování Linuxu narazíte často na pojmy jako bloat („nabobtnalý“). Toto je slovíčko s negativní konotací označující software, který se danému člověku zdá zbytečně přehnaný. Je naplněn různým odpadem, který člověk přece nemůže potřebovat a jenom mu to hyzdí jeho perfektní minimální Linuxovou instalaci. Lidé, kteří toto slovíčko házejí jako vidlema seno často odkazují, jako na modlu, na suckless software. To je software od suckless.org. Jedná se o minimalistické implementace některých zde zmíněných kategorií softwaru.

Bonus 2: unixp*rn

Pokud vyšperkujete svůj desktop na maximum, můžete vzhled svého desktopu sdílet na subredditu unixp*rn. Najednou se ze stínů vydrápe tlupa glorifikovaných obyvatelů suterénů, kteří vaší konfiguraci označí za bloat.