Hlavní navigace

Správce oken i3: pořádek na všech plochách

30. 1. 2014
Doba čtení: 10 minut

Sdílet

Kde je ten terminál, ve kterém jsem připojený na serveru? Tenhle to není, tenhle taky ne, asi bude pod prohlížečem. Ne! Tak kde jsem ho nechal? Že by byl minimalizovaný na třetí ploše? Pokud tohle znáte a nenávidíte, je čas na velkou změnu. Tou by mohl být třeba tiling (dlaždicový) správce oken i3.

Prolog: proč používat takovou věc?

Považuji za nutné na začátku článku vysvětlit, proč jsem se dostal k používání tiling (dlaždicového) správce oken. Tím vám zároveň vysvětlím, proč byste se takovou „šíleností“ měli zabývat vy a jaký to má celé smysl.

Za ta léta u Linuxu jsem vyzkoušel mnoho různých správců oken, v posledních mnoha letech jsem ale používal Xfce. To prostředí mi vyhovovalo, ačkoliv jsem ho používal velmi nestandardním způsobem. Ale na jednom displeji jsem ten nepořádek mezi okny ještě nějak zvládal a prostředí pro mě nebylo nijak omezující.

Celkem nedávno jsem si ale pořídil nový notebook a k němu i druhý displej. Vidina ohromné pracovní plochy a vysoké efektivity dostala povážlivé trhliny, protože jsem se začal v oknech ztrácet. Dva monitory, každý s jiným rozlišením, několik ploch přepínaných přes oba displeje, překrývající se okna. Jakmile jsem otevřel víc než deset oken na třech plochách (tedy šesti displejích celkem), dostal jsem se do fáze „chaos třetího stupně“. Trávil jsem nezanedbatelný čas tím, že jsem hledal okna.

Začal jsem tedy hledat řešení a zakotvil jsem u správce oken i3. Ten jako mávnutím proutku problémy vyřešil, udělal ve všem pořádek a systém. Ve zbytku článku si popíšeme, co to přesně je, jak se to přesně chová, jak se to ovládá a konfiguruje.

Mimochodem: válí se mi tu ještě třetí displej. Už jsem si říkal, že teď bych si ho s i3 klidně i připojil…

Dlaždice, všude dlaždice!

Tradiční (současný) přístup k desktopu je takový, že máte po ploše rozházena plovoucí okna. Ta se mohou překrývat, některá se mohou schovat (minimalizovat), občas zarolovat do titulku a samozřejmě maximalizovat. Tenhle přístup známe všichni.

Tiling (dlaždicový) správce oken ale funguje jinak. Okna se v něm nepřekrývají, ale naopak různě vyplňují vždy celou dostupnou plochu. Já vím, takhle to vypadá skutečně divně, ale je to velmi praktické.

Vychází se z toho, že nemá smysl mít volnou plochu, stejně jako mít volnou RAM. Obojí se dá využít: RAM na cache a plochu na okno. K tomu jsou určeny. Jak říká klasik: S volnou plochou se můžeš akorát tak vyfotit.

On to není vůbec nový přístup, naopak je to ten starší přístup k práci s okny. Počítačový „desktop“ totiž v původním smyslu skutečně měl nahrazovat pracovní stůl.

I laikovi je na první pohled nápadné, že celá plocha stolu je využita beze zbytku.
Autor: Miroslav Zajíc, nikoliv Miloslav

I laikovi je na první pohled nápadné, že celá plocha stolu je využita beze zbytku.

Systém Xerox Star z roku 1981 skládal okna vedle sebe, správce oken projektu Andrew z roku 1983 také, než ho nahradily X11 a například Windows 1.0 (1985) skládala také okna vedle sebe a i následující verze tuhle variantu umožňovaly.

Windows 1.0: okna vedle sebe, dialog je překryvný

Windows 1.0: okna vedle sebe, dialog je překryvný

Přestože na to už dnes nejsme zvyklí, existuje stále celá řada správců oken, které tento přístup umožňují. Na Wikipedii je jich celý seznam. My se v článku budeme zabývat konkrétně projektem i3, protože to je správce oken, který autor používá.

Krátce o i3

Správce oken i3 (i3wm.org) byl napsán na zelené louce a jeho zdrojový kód tedy nevychází z jiného projektu. Jde ovšem o poměrně mladý projekt, takže měl řadu vzorů a mohl se poučit z chyb ostatních, autor zmiňuje zejména projekt wmii.

i3 je napsán v C, uvolněn pod licencí BSD a podle autora Michaela Stapelberga bylo cílem napsat čistý a dobře dokumentovaný kód správce oken, který bude podporovat provoz více monitorů, bude se jednoduše konfigurovat, umožní uživateli okny pohybovat a bude plně implementovat UTF-8. Řekl bych, že se to povedlo.

Dlaždice na dvou monitorech, vlevo pracujete, vpravo děti koukají na pohádku

Z uživatelského hlediska považuji za zásadní výbornou dokumentaci a jednoduchou konfiguraci celého prostředí. Vše se nastavuje v jediném souboru ~/.i3/config, který je navíc dobře dokumentovaný a velmi přehledný. i3 ho umí na povel kdykoliv znovu zpracovat bez restartu, takže se změny dějí okamžitě.

Ohmatáváme aneb praktický pohled

Než jsem začal používat i3, vlastně jsem si neuměl dost dobře představit, jak se tiling správci oken používají. Přečetl jsem si o nich v průběhu let hodně článků, ale nějak mi celý koncept pořád nebyl jasný. Pokud jste na tom stejně, pokusím se vám práci v tomto prostředí popsat.

Na začátku si představíme situaci: dva monitory, ten vlevo je 1920×1080 a ten vpravo 1366×768. Konfigurační soubor je nastaven tak, že jako ovládací klávesu používám Win klávesu. Při prvním spuštění i3 (pokud neexistuje konfigurační soubor) na vás vyskočí textový průvodce, který se vás na klávesu zeptá.

Prostor po spuštění, dva monitory (ten vpravo má menší rozlišení)

Při spuštění na vás vyskočí prázdná plocha s úzkým panelem na spodní hraně obou displejů. Na něm jsou vidět čísla ploch a stavové informace. Tento panel se jmenuje i3bar a je součástí prostředí. Konfiguruje se ve stejném souboru jako zbytek i3. Na začátku zobrazuje výstup programu i3status, který je konfigurovatelný v ~/.i3status.conf. Umí ukazovat IP adresy, využití procesoru, místo na disku a podobně. Samozřejmě si do i3baru můžete nechat vypisovat i výstup vlastního chytrého skriptu nebo si panel vypnout či si naopak nastavit třeba tři. Panel mimochodem obsahuje i tray, takže zobrazuje ikonky aplikací jako Network Manager či Pidgin.

Plochy se vytváří a ztrácí samy tím, že je otevřeme a vytvoříme na nich nějaké okno. Jakmile všechna okna pozavíráme a z prázdné plochy odejdeme, sama zmizí. Po zapnutí máme na každém monitoru jednu plochu (označenou jako 1 a 2). Plochy spolu nijak neinteragují a na každém monitoru si je přepínáme nezávisle, což považuji za velkou výhodu.

Zkusíme první praktický krok: na jedné ploše si otevřeme terminál. Stane se to na té ploše, na které máme kurzor myši. Ve výchozím stavu se otevírá pomocí Win+Enter. Otevřené okno vyplní celou obrazovku. „Cože? To mám pracovat s terminálem na celou obrazovku?“ Nemusíte, asi nemáte běžně při práci otevřené jen jedno okno.

Jedno okno se roztáhlo na celou plochu

Když budeme chtít otevřít další okno, podělí se s ním to první o prostor na obrazovce. Jak budou okna „naaranžovaná“ závisí na aktuálním režimu. Režimy jsou celkem čtyři:

  • horizontální (Win+h)
  • vertikální (Win+v)
    • (přepíná se mezi nimi Win+e)
  • štosovací (Win+s)
  • záložkový (Win+w)

Nemusíte se samozřejmě předem rozhodnout, který režim použijete. Prostě spustíte další aplikaci a až pak režimy přepínáte tak, až vám vyhovují. Vertikální a horizontální rozdělení je vám asi jasné, štosovací (stacking) a záložkový (tabbed) režim je takový, kdy je z několika oken vidět jen titulkový proužek (buď nad sebou ve štosovacím nebo vedle sebe v záložkovém) a vyjíždí vždy jen jedno z oken. Takhle si můžete třeba seřadit víc terminálů. Funguje to pak podobně jako panely u prohlížeče.

Otevřeme si druhé okno: prohlížeč. Správce i3 má v doporučených balíčcích i balík suckless-tools (viz seriál Suckless project), jehož součástí je jednoduchý spouštěč dmenu. Vyvoláte ho pomocí Win+d a objeví se jako proužek na horní straně obrazovky (lze konfigurovat). Do něj vepíšete třeba příkaz chrome. Spustí se prohlížeč. Na širokoúhlých monitorech je jako výchozí horizontální režim, takže se Chrome spustí vedle terminálu a oba mají svou polovinu obrazovky.

Máme dvě okna, o prostor se dělí

Já mám raději prohlížeč trochu větší, takže si upravíme jeho velikost. Buď můžeme chytit myší okraj a táhnout nebo stiskneme Win+r (jako resize) a šipkami měníme poměr obou oken. Nakonec stiskneme Enter a režim změny velikosti ukončíme.

Prohlížeč dostal víc prostoru

Okna se aktivují podobně jako plochy, tedy najetím myši. Mně to tak vyhovuje, ale pokud raději na okno klikáte, dá se to nastavit. Přepínat mezi okny je možné také pomocí klávesnice, což je často rychlejší. Jednoduše mačkáte Win+šipky. Pokud jsou okna ve štosovacím nebo záložkovém režimu, automaticky vyjíždí to aktivované.

Šikovná je také možnost otevřít jedno z oken na celou obrazovku. K tomu slouží klávesová zkratka Win+f. Okno se roztáhne na celou dostupnou plochu a zmizí i jeho okraje. Můžete se pak soustředit na jednu činnost. Stejnou zkratkou z celoobrazovkového režimu vyskočíte.

Podle toho, které okno je aktivní, se pak u něj budou otevírat další okna. Řekněme, že si u našeho terminálu budeme chtít otevřít ještě jeden. Najedeme na něj myší, přepneme do štosovacího režimu (Win+s) a otevřeme další terminál (Win+Enter). Režimy můžeme samozřejmě měnit dodatečně, okna se budou přeskupovat.

Vlevo víc terminálu v jednom štosu

Když tedy teď budeme chtít jeden z terminálů dostat do prostoru pod prohlížečem, najedeme na něj, stiskneme Win+Shift+doprava a on skočí do prostoru k Chrome. Pokud se umístil vedle Chrome a my ho chceme raději pod, stačí to napravit stiskem Win+v a přepnout do vertikálního rozdělení.

Otevřeli jsme další terminál a na druhém monitoru kancelářský balík

Takto postupně další okna ubírají prostor některému (některým) z předchozích. Samozřejmě máte vždy možnost dodatečně libovolné okno přesunout do prostoru obsazeného jiným oknem, stačí mačkat Win+Shift+šipky. Pokud odskáčete „mimo ostatní okna“ k okraji obrazovky, okno osamostatníte a všechna ostatní mu uhnou rovnoměrně. Mimochodem: stejně tak můžete naprosto přirozeně oknem doskákat až na vedlejší obrazovku.

Poznámka k plovoucím oknům

Některá okna by už z principu takto fungovat neměla. Typickým příkladem jsou třeba dialogy nebo různé vyskakovací notifikační bubliny. Asi by se vám nelíbilo, kdyby se notifikace „přišla nová pošta“ roztáhla přes čtvrtinu vaší FullHD obrazovky. Tato okna ovšem obvykle správci oken nahlásí, že jsou dialogová a on je nechá plavat (doslova).

Kalkulačka plavající v prostoru nad ostatními okny

Ne vždy to tak je a občas si chceme vytrhnout některé z oken z dlaždicového schématu a volně si s ním jezdit po obrazovce. Můžeme tak učinit pomocí klávesové zkratky Win+Shift+mezerník. Stejnou zkratkou okno zase přilepíme.

Pokud si přejete, aby konkrétní okno bylo vždy plovoucí, můžete to zařídit v konfiguračním souboru. Mně se třeba špatně choval výstup notifikačního démona z Xfce. Stačilo přidat následující řádek:

for_window [class="Xfce4-notifyd"] floating enable; border none; focus mode_toggle

Plochy

Správa ploch v i3 si zaslouží samostatný podnadpis i prostor. Zatím jsme si o nich nic moc neřekli. Po spuštění se nám na každé obrazovce objeví jedna plocha, obvykle jsou označené jednoduše jako „1“ a „2“. Přejíždíme mezi nimi myší.

Pokud chceme na kterém monitoru prázdnou plochu, stačí stisknout třeba Win+3 a jsme tam. Automaticky nám také přibude do panelu. Důležité je, že tato plocha je svázaná s daným monitorem a bude se objevovat jen na něm. Pokud jsme tedy zrovna na druhém monitoru a chceme vidět třetí plochu, po stisku zmíněné klávesové zkratky se přepne plocha na správném monitoru a kurzor nám na ni sám skočí. To je dokonalá funkce, protože pokud víte, že prohlížeč je na první ploše, stačí stisknout Win+1 a jste nad prohlížečem, i kdyby byl o dva monitory vedle.

Není problém si plochy prohodit mezi monitory, okna se okamžitě přizpůsobí jinému rozlišení

Plochy je možné samozřejmě přehazovat i mezi monitory. Nadefinoval jsem si na to v konfiguračním souboru klávesové zkratky:

bindsym $mod+Ctrl+Left move workspace to output left
bindsym $mod+Ctrl+Right move workspace to output right

V případě použití více displejů je tu ještě jedna fantastická věc: pokud jeden z monitorů vypnete, všechny jeho plochy se vám sesypou na funkční prostor. Vůbec nevadí, že se třeba změnilo rozlišení, okna se samozřejmě přizpůsobí novému rozložení. Pokud naopak monitor připojíte, přeházíte si na něj zvolené plochy, které se roztáhnou na nové rozlišení a jede se dál.

Odpojil jsem externí monitor, plochy se sesypaly na ten menší, oznamovací oblast taky

Tohle je věc, která ohromně usnadňuje práci a na klasickém správci oken nemůže nikdy tak dobře fungovat. Většinou se při odpojení displeje dějí nepříjemné věci, jako že okna zůstávají za rohem, jsou příliš malá/velká a podobně. Tady se z principu nic takového nemůže stát a vy máte i na cestách svá okna na těch místech, jako doma na velkém displeji. Jen se na ně prostě vejde méně informací.

CS24_early

Dlaždice nejsou pro každého

Uznávám, že tenhle systém nemusí vyhovovat každému. Někdo si vymyslí pohodlný způsob, jak se rychle orientovat mezi hromadou ploch a hlavně mezi různými okny, které tam volně plavou. Jeden kamarád mi třeba popisoval, jak vždycky dbá na to, aby z každého okna byl na ploše vidět alespoň kousek a aby byl dostupný na kliknutí.

Pokud je přesně tohle věc, kterou nechcete ručně řešit, zkuste zvážit automatické rozkládání oken do dlaždic. Mně ohromně pomohlo udělat si pořádek na všech plochách a monitorech.

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.