Portál AbcLinuxu, 3. května 2025 16:11

i3 - improved tiling wm

29. 9. 2011 | Radek Tříška
Články - i3 - improved tiling wm  

i3 je dlaždicový „tiling“ window manager, který je primárně určen pro pokročilé uživatele a vývojáře. Projekt vznikl v únoru 2009 a je šířen pod BSD licencí. Cílové platformy jsou GNU/Linux, BSD a Mac OS X (pomocí X11). Pro implementaci byl zvolen programovací jazyk C využívající v maximální možné míře knihovnu XCB.

Obsah

i3 WM i3 WM

Projekt i3 je velice otevřený a díky dobře navrženému modelu i pohodlný pro koncové uživatele. Tvůrce projektu Michael Stapelberg odvádí dobrou práci, ochotně přijímá patche nebo poradí s problematikou. Automatické testování pomocí skriptů je také součástí vývoje.

Verze 4 vznikla jako velký refactoring celého projektu, který probíhal pod kódovým označením „tree“ díky implementaci stromové struktury pro ukládání dat. Za zhruba jeden rok vzniklo 736 commitů v gitu a proběhlo úporné testování. Přechod z verze 3 je bezproblémový díky konverznímu skriptu pro konfigurační soubory i3-migrate-config-to-v4.pl Kompletní seznam změn je dostupný v oznámení o vydání na adrese http://i3wm.org/downloads/RELEASE-NOTES-4.0.1.txt

Popis základních vlastností i3

link

Každé okno je obaleno neviditelným kontejnerem, který můžeme rozdělit horizontálně nebo vertikálně. Okna se dají přesouvat, měnit jejich velikost a mód (default „tiled“, floating, tabbed, stacked, fullscreen).

Dva terminály Diagram pro dva terminály

Vertikálně rozdělený terminál Diagram pro vertikálně rozdělený terminál

Tabbed a Stacked mód funguje jako záložky a dá se efektivně kombinovat s rozdělováním kontejnerů.

tabbed a stacked mód

Funguje i podpora pro plovoucí okna a můžeme nadefinovat, jaké aplikace budou plovoucí po spuštění. i3 není určen pro práci jako plnohodnotný floating manager, proto není implementována funkce pro minimalizaci okna do taskbaru (seznamu oken). Při kombinování tiled a floating módu jsou plovoucí okna vždy nad tiled okny.

Standardní je i možnost využívat více ploch. Jednotlivé plochy můžeme pojmenovávat nebo jim přiřadit výstup na požadovaný monitor.

Podpora více monitorů pomocí xrandr je vynikající. Jelikož binární nvidia ovladače nepodporují xrandr, tak je implementována i možnost použít spouštěcí parametr i3 --force-xinerama.

Jako výchozí panel je použit nový i3bar, který dokáže zobrazit plochy a výstup nástrojů jako i3status, conky, nebo vlastních skriptů. Implementovaná je i podpora pro konfiguraci barev pomocí spouštěcích parametrů. Integrace do konfiguračního souboru i3 se teprve připravuje. i3bar byl původně vyvíjen odděleně a po dohodě těsně před vydáním nové verze Axel Wagner souhlasil se začleněním do zdrojových kódů i3. Připravovaná verze 4.1 již obsahuje funkční tray.

Pro spouštění aplikací se využívá dmenu, ale je možné použít i alternativní root menu aplikace (například mygtkmenu) a přiřadit jim klávesové zkratky.

Zobrazení okna na všech plochách „sticky“ není ve verzi 4.0 implementováno a jeho podpora se stále připravuje http://bugs.i3wm.org/ticket/11

Další příjemná vlastnost je možnost automatického otevírání vybraných programů na požadovanou plochu.

Barvy dekorace oken jsou pomocí konfiguračního soubor snadno nastavitelné.

i3 obsahuje mnoho dalších zajímavých vlastností (inplace restart a reload, mark/goto, konfigurovatelné dekorace oken, ...). Kompletní přehled vlastností najdeme v uživatelské příručce. Do budoucna se plánuje nadále vylepšovat a obohacovat jak window manager, tak i pomocné aplikace pro řadu dalších užitečných funkcí.

Konfigurační soubory

link

Pomocí konfiguračních souborů můžeme rozsáhle modifikovat nastavení celého window manageru.

Výchozí cesta ke konfiguračnímu souboru je ~/.i3/config. Pokud konfigurační soubor neexistuje, tak bude při prvním spuštění vytvořen.

Proměnné a komentáře:

Konfigurační soubor umožňuje jednoduché definování proměnných pomocí set. Proměnné jsou přímo nahrazeny při zpracovávání souboru pomocí parseru. Komentáře jsou definované pomocí #.

 
# definice proměnné
set $promenna hodnota

Nastavení fontů:

I3 používá X core fonty (ne Xft). Pro nalezení správného fontu můžeme použít program xfontsel. Pro Unicode podporu vyberte font v kódování ISO-10646. Pro ruční načtení fontů do X serveru můžeme použít příkaz xset fp+ /usr/share/fonts/local

font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1

Plovoucí modifikátor:

Plovoucí modifikátor slouží k přesunu a změně velikosti oken pomocí myši.

floating_modifier Mod1

Orientace nových pracovních ploch:

Výchozí orientace oken na pracovní ploše je horizontální. Všechna otevřená okna se budou řadit zleva doprava, což je výhodné pro širokoúhlé monitory. Parametry jsou horizontal, vertical a auto.

default_orientation vertical

Nastavení módu nových kontejnerů:

Definice workspace_layout říká, jaký mód budou mít nově vytvořené kontejnery na úrovni pracovní plochy. Parametry jsou default, stacking a tabbed.

workspace_layout default

Zaměření oken pomocí myši:

Výchozí chování i3 je že při najetí myši nad požadované okno dojde k jeho automatickému zaměření „fokus“. Zakázáním tohoto chování docílíme klasického zaměření až po stisku levého tl. myši. Parametry jsou yes a no.

focus_follows_mouse no

Dekorace oken:

Zobrazování dekorace tiled a floating oken je konfigurovatelné. Parametry jsou normal, 1pixel, none.

 
new_window 1pixel
new_float 1pixel

Klávesové zkratky:

Díky klávesovým zkratkám můžeme spouštět zadané příkazy. Do konfiguračního souboru zadáváme kód nebo symbol klávesy. Symboly a kódy kláves zjistíme pomocí xmodmap -pke a xev.

 
bindsym Mod1+f fullscreen
bindcode 214 exec ~/toggle_beamer.sh

Klientská pravidla:

Pomocí pravidel můžeme spouštět příkazy na vybrané aplikace. Tato funkce je užitečná například pro nastavení plovoucího módu, stylu okraje nebo možnosti automaticky přesunout program na zadanou plochu. Třídu nebo instanci aplikace můžeme zjistit pomocí příkazu xprop | grep WM_CLASS.

   
for_window [class="urxvt"] border 1pixel
for_window [class="qjackctl"] floating enable
assign [class="Gajim.py"] 3

Automatické spouštění aplikací:

Pro automatické spouštění programů jsou implementovány volby exec a exec_always. Volbu exec můžeme použít v kombinaci s klávesovou zratkou a volba exec_always se vykonává i při restartu i3.

 
exec nitrogen --restore
exec_always ~/.i3/scripts/dual_monitor.sh

Kompletní rozbor všech voleb je nad rámec tohoto článku a je dostupný ve výborné uživatelské příručce.

Výchozí konfigurační soubor verze 4.0.2:

 
# i3 config file (v4)
#
# Please see http://i3wm.org/docs/userguide.html for a complete reference!
#
# This config file uses keycodes (bindsym) and was written for the QWERTY
# layout.
#
# To get a config file with the same key positions, but for your current
# layout, use the i3-config-wizard
#
 
# font for window titles. ISO 10646 = Unicode
font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
 
# use Mouse+Mod1 to drag floating windows to their wanted position
floating_modifier Mod1
 
# start a terminal
bindsym Mod1+Return exec urxvt
 
# kill focused window
bindsym Mod1+Shift+q kill
 
# start dmenu (a program launcher)
bindsym Mod1+d exec dmenu_run
 
# change focus
bindsym Mod1+j focus left
bindsym Mod1+k focus down
bindsym Mod1+l focus up
bindsym Mod1+semicolon focus right
 
# alternatively, you can use the cursor keys:
bindsym Mod1+Left focus left
bindsym Mod1+Down focus down
bindsym Mod1+Up focus up
bindsym Mod1+Right focus right
 
# move focused window
bindsym Mod1+Shift+j move left
bindsym Mod1+Shift+k move down
bindsym Mod1+Shift+l move up
bindsym Mod1+Shift+semicolon move right
 
# alternatively, you can use the cursor keys:
bindsym Mod1+Shift+Left move left
bindsym Mod1+Shift+Down move down
bindsym Mod1+Shift+Up move up
bindsym Mod1+Shift+Right move right
 
# split in horizontal orientation
bindsym Mod1+h split h
 
# split in vertical orientation
bindsym Mod1+v split v
 
# enter fullscreen mode for the focused container
bindsym Mod1+f fullscreen
 
# change container layout (stacked, tabbed, default)
bindsym Mod1+s layout stacking
bindsym Mod1+w layout tabbed
bindsym Mod1+e layout default
 
# toggle tiling / floating
bindsym Mod1+Shift+space floating toggle
 
# change focus between tiling / floating windows
bindsym Mod1+space focus mode_toggle
 
# focus the parent container
bindsym Mod1+a focus parent
 
# focus the child container
#bindsym Mod1+d focus child
 
# switch to workspace
bindsym Mod1+1 workspace 1
bindsym Mod1+2 workspace 2
bindsym Mod1+3 workspace 3
bindsym Mod1+4 workspace 4
bindsym Mod1+5 workspace 5
bindsym Mod1+6 workspace 6
bindsym Mod1+7 workspace 7
bindsym Mod1+8 workspace 8
bindsym Mod1+9 workspace 9
bindsym Mod1+0 workspace 10
 
# move focused container to workspace
bindsym Mod1+Shift+1 move workspace 1
bindsym Mod1+Shift+2 move workspace 2
bindsym Mod1+Shift+3 move workspace 3
bindsym Mod1+Shift+4 move workspace 4
bindsym Mod1+Shift+5 move workspace 5
bindsym Mod1+Shift+6 move workspace 6
bindsym Mod1+Shift+7 move workspace 7
bindsym Mod1+Shift+8 move workspace 8
bindsym Mod1+Shift+9 move workspace 9
bindsym Mod1+Shift+0 move workspace 10
 
# reload the configuration file
bindsym Mod1+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym Mod1+Shift+r restart
# exit i3 (logs you out of your X session)
bindsym Mod1+Shift+e exit
 
# resize window (you can also use the mouse for that)
mode "resize" {
        # These bindings trigger as soon as you enter the resize mode
 
        # They resize the border in the direction you pressed, e.g.
        # when pressing left, the window is resized so that it has
        # more space on its left
 
        bindsym j               resize shrink left 10 px or 10 ppt
        bindsym Shift+j         resize grow   left 10 px or 10 ppt
 
        bindsym k               resize shrink down 10 px or 10 ppt
        bindsym Shift+k         resize grow   down 10 px or 10 ppt
 
        bindsym l               resize shrink up 10 px or 10 ppt
        bindsym Shift+l         resize grow   up 10 px or 10 ppt
 
        bindsym semicolon       resize shrink right 10 px or 10 ppt
        bindsym Shift+semicolon resize grow   right 10 px or 10 ppt
 
        # same bindings, but for the arrow keys
        bindsym Left        resize shrink left 10 px or 10 ppt
        bindsym Shift+Left  resize grow   left 10 px or 10 ppt
 
        bindsym Down        resize shrink down 10 px or 10 ppt
        bindsym Shift+Down  resize grow   down 10 px or 10 ppt
 
        bindsym Up          resize shrink up 10 px or 10 ppt
        bindsym Shift+Up    resize grow   up 10 px or 10 ppt
 
        bindsym Right       resize shrink right 10 px or 10 ppt
        bindsym Shift+Right resize grow   right 10 px or 10 ppt
 
        # back to normal: Enter or Escape
        bindsym Return mode "default"
        bindsym Escape mode "default"
}
 
bindsym Mod1+r mode "resize"
 
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
exec i3status | i3bar -d
 
#######################################################################
# automatically start i3-config-wizard to offer the user to create a
# keysym-based config which used his favorite modifier (alt or windows)
#
# i3-config-wizard will not launch if there already is a config file
# in ~/.i3/config.
#
# Please remove the following exec line:
#######################################################################
exec i3-config-wizard

Upravený konfigurační soubor připravované verze 4.1 (bude se ještě měnit):

 
#### Configuration file for i3 window manager (4.x) - next branch
### http://i3wm.org/
## Modified by mseed - http://www.fastlinux.eu
# Please see http://i3wm.org/docs/userguide.html for a complete reference!
 
###################
# GENERAL OPTIONS #
###################
 
## variables
set $mod Mod4
 
## font for window titles. ISO 10646 = Unicode
#font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
#font -xos4-terminus-*-*-*-*-17-*-*-*-*-*-iso10646-1
font -misc-fixed-bold-r-normal-*-15-140-75-75-c-90-iso10646-1
 
## use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
 
## orientation for new workspaces <horizontal|vertical|auto> 
default_orientation horizontal
 
## workspace Layout <default|stacking|tabbed> 
workspace_layout default
 
## focus follows mouse <yes|no> 
focus_follows_mouse no
 
## border style for new windows <normal|1pixel|none> 
new_window 1pixel
 
## border style for for floating windows <normal|1pixel|none> 
new_float 1pixel
 
##################
# WM KEYBINDINGS #
##################
 
## reload the configuration file
bindsym $mod+Shift+C reload
## restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+R restart
## exit i3 (logs you out of your X session)
bindsym $mod+Shift+E exit
 
###################
# APP KEYBINDINGS #
###################
 
## start a terminal
bindsym $mod+Return exec urxvt
 
## start dmenu (a program launcher)
bindsym $mod+d exec dmenu_run -nb '#000000' -nf '#ffffff' -sb '#000000' -sf '#1793d0' -p  'Run: ' -fn '-misc-fixed-bold-r-normal-*-15-140-75-75-c-90-iso10646-1'
bindsym $mod+x exec dmenu_run -nb '#000000' -nf '#ffffff' -sb '#000000' -sf '#1793d0' -p  'Run: ' -fn '-xos4-terminus-*-*-*-*-20-*-*-*-*-*-iso10646-1'
 
## start myGtkMenu
#bindsym Mod1+a exec mygtkmenu ~/.i3/configs/menu
 
## start session menu
#bindsym $mod+q exec ~/.i3/scripts/dmenu_session.sh
 
## toggle i3bar
#bindsym $mod+b exec ~/.i3/scripts/i3bar_toggle.sh
 
## take screenshot
#bindsym Print exec ~/.i3/scripts/screenshot.sh
 
## OpenVPN connect
#bindsym $mod+o exec urxvt -e ~/.i3/scripts/openvpn_start.sh
 
## open clipbord in editor
#bindsym Mod1+e exec ~/.i3/scripts/clipper.sh
 
## volume control
#bindsym XF86AudioLowerVolume exec amixer -q set Master 2- unmute
#bindsym XF86AudioRaiseVolume exec amixer -q set Master 2+ unmute
#bindsym Mod4+XF86AudioLowerVolume exec amixer -q set PCM 2- unmute
#bindsym Mod4+XF86AudioRaiseVolume exec amixer -q set PCM 2+ unmute
 
######################################
# WORKSPACE KEYBINDINGS AND SETTINGS #
######################################
 
## automatically putting workspaces on specific screens
#workspace 1 output VGA1
#workspace 2 output VGA1
#workspace 3 output VGA1
#workspace 4 output LVDS1
#workspace 10 output LVDS1
 
## switch to workspace
bindsym $mod+1 workspace 1:work
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10:dwn
 
## move focused container to workspace
bindsym $mod+Shift+exclam move workspace 1:work
bindsym $mod+Shift+at move workspace 2
bindsym $mod+Shift+numbersign move workspace 3
bindsym $mod+Shift+dollar move workspace 4
bindsym $mod+Shift+percent move workspace 5
bindsym $mod+Shift+asciicircum move workspace 6
bindsym $mod+Shift+ampersand move workspace 7
bindsym $mod+Shift+asterisk move workspace 8
bindsym $mod+Shift+parenleft move workspace 9
bindsym $mod+Shift+parenright move workspace 10:dwn
 
## switch to next/prev workspace
#bindsym Mod1+Right workspace next
#bindsym Mod1+Left workspace prev
 
######################
# CLIENT KEYBINDINGS #
######################
 
## kill focused window
bindsym $mod+Shift+Q kill
bindsym $mod+c kill
 
## change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+semicolon focus right
 
## alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
 
## move focused window
bindsym $mod+Shift+J move left
bindsym $mod+Shift+K move down
bindsym $mod+Shift+L move up
bindsym $mod+Shift+colon move right
 
## alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
 
## split in horizontal orientation
bindsym $mod+h split horizontal
 
## split in vertical orientation
bindsym $mod+v split vertical
 
## enter fullscreen mode for the focused container
bindsym $mod+f fullscreen
 
## change container layout (stacked, tabbed, default)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout default
 
## toggle tiling / floating
bindsym $mod+Shift+space floating toggle
 
## change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
 
## focus the parent container
bindsym $mod+a focus parent
 
## focus the child container
#bindcode $mod+d focus child
 
## resize window (you can also use the mouse for that)
mode "resize" {
        # These bindings trigger as soon as you enter the resize mode
 
        # They resize the border in the direction you pressed, e.g.
        # when pressing left, the window is resized so that it has
        # more space on its left
 
bindsym j resize shrink left 10 px or 10 ppt
bindsym Shift+J resize grow   left 10 px or 10 ppt
 
bindsym k resize shrink down 10 px or 10 ppt
bindsym Shift+K resize grow   down 10 px or 10 ppt
 
bindsym l resize shrink up 10 px or 10 ppt
bindsym Shift+L resize grow   up 10 px or 10 ppt
 
bindsym semicolon resize shrink right 10 px or 10 ppt
bindsym Shift+colon resize grow   right 10 px or 10 ppt
 
        # same bindings, but for the arrow keys
bindsym Left resize shrink left 10 px or 10 ppt
bindsym Shift+Left resize grow   left 10 px or 10 ppt
 
bindsym Down resize shrink down 10 px or 10 ppt
bindsym Shift+Down resize grow   down 10 px or 10 ppt
 
bindsym Up resize shrink up 10 px or 10 ppt
bindsym Shift+Up resize grow   up 10 px or 10 ppt
 
bindsym Right resize shrink right 10 px or 10 ppt
bindsym Shift+Right resize grow   right 10 px or 10 ppt
 
        # back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
 
bindsym $mod+r mode "resize"
 
## client border switching
bindsym Mod1+t border normal
bindsym Mod1+y border 1pixel
bindsym Mod1+u border none
bindsym Mod1+b border toggle
 
#########
# RULES #
#########
 
## obxprop | grep WM_CLASS
 
#assign [class="Gajim.py"] 3
 
for_window [class="Gcolor2"] floating enable
for_window [class="qjackctl"] floating enable
for_window [class="qsynth"] floating enable
for_window [class="lxappearance"] floating enable
for_window [class="Audacious"] floating enable
 
#############
# WM COLORS #
#############
 
## class                 border  backgr. text
 
## orange 
#client.focused          #DA6F00 #DA6F00 #000000
#client.focused_inactive #333333 #333333 #999999
#client.unfocused        #333333 #333333 #999999
#client.urgent           #FF0000 #8C5665 #999999
 
## archlinux colors 
#client.focused          #1793D1 #1793D1 #FFFFFF
#client.focused_inactive #666666 #666666 #FFFFFF
#client.unfocused        #333333 #333333 #FFFFFF
#client.urgent           #D11931 #D11931 #FFFFFF
 
## gentoo colors
#client.focused          #7A5ADA #7A5ADA #FFFFFF
#client.focused_inactive #45347B #45347B #FFFFFF
#client.unfocused        #333333 #333333 #FFFFFF
#client.urgent           #D11931 #D11931 #FFFFFF
 
## red/maroon
#client.focused          #990000 #990000 #FFFFFF
#client.focused_inactive #660000 #660000 #AAAAAA
#client.unfocused        #110000 #110000 #666666
#client.urgent           #FFFF00 #FFFF00 #FF0000
 
## freebsd colors
#client.focused          #990000 #990000 #FFFFFF
#client.focused_inactive #666666 #666666 #FFFFFF
#client.unfocused        #333333 #333333 #FFFFFF
#client.urgent           #D11931 #D11931 #FFFFFF
 
#############
# AUTOSTART #
#############
 
## autostart file support
#exec ~/.i3/startup
 
## Dual monitor support
#exec ~/.i3/scripts/dual_monitor.sh
 
## Start i3bar to display a workspace bar 
exec i3status -c ~/.i3/configs/i3status | i3bar -dtop -f '-misc-fixed-bold-r-normal-*-15-140-75-75-c-90-iso10646-1'
#exec i3bar -c 'conky -c ~/.i3/configs/conkyrc' -dtop -f '-xos4-terminus-*-*-*-*-20-*-*-*-*-*-iso10646-1'
 
## Background wallpaper
#exec nitrogen --restore

Ovládání

link

i3 můžeme ovládat klávesnicí i myší, klávesové zkratky se volají pomocí takzvaného modifikátoru, nejpoužívanější modifikátory jsou Mod1 (levý alt) a Mod4 (win tlačítko). Podpora pro kompletní ovládání pomocí klávesnice je téměř hotova, jediná nehotová (ale plánovaná) funkce je přesouvání plovoucího „floating“ okna pomocí klávesnice.

keyboard-layer
keyboard-layer

IPC rozhraní dává možnost ovládat i3 pomocí jiného procesu. Na ovládání slouží i3-msg a i3-input, které využívají standardní unix socket. Existuje i několik externích knihoven (Python, Perl, Ruby) pro komunikaci s i3.

Celkově je ovládání pomocí klávesových zkratek, dělení kontejnerů, přesunu oken a změn módů velice pohodlné a návykové. Například oproti Awesome WM, kde jsou předdefinované jednotlivé matice rozložení oken, je tento způsob sice odlišný, ale po krátké době používání velice efektivní.

Dokumentace a vývoj

link

Vyčerpávající dokumentaci najdete na adrese http://i3wm.org/docs/.

Pro nahlášení nalezených chyb slouží adresa http://bugs.i3wm.org. Velice se cení i pokus o případnou hlubší analýzu problému http://i3wm.org/docs/debugging.html. Pokud se chcete na cokoliv zeptat, tak je tu dobře fungující IRC kanál #i3 na serveru irc.twice-irc.de

Chcete-li pomoci s vývojem, pak nejlepší startovací bod najdete na adrese http://i3wm.org/docs/hacking-howto.html. Před opravou chyb, nebo implementací nových funkcí, je dobré se zeptat na IRC, jestli někdo již neřeší stejnou věc nebo pro správné nasměrování do problematiky.

Vývoj nových verzí probíhá v gitu na adrese http://code.i3wm.org/, kde pro připravované verze slouží next branch.

Závěr

link

Po mnohaletém používání operačního systému GNU/Linux jsem prošel velkou řadou různých pracovních prostředí. Od klasických KDE 1,2,3 přes xfce, lxde, fluxbox, e17, pekwm, openbox, awesome, wmfs až po i3wm. Srovnánat jednotlivé projekty je příliš složité a je to věc velice individuální, každý z nich měl co nabídnout. i3 jde cestou, která mi nejvíce vyhovuje, a díky možnosti podílet se na projektu je pro mě práce zábavou. Doufám, že nejen díky tomuto článku se najdou další spokojení uživatelé a vývojáři tohoto výborného window manageru.

Další články z této rubriky

Týden na ScienceMag.cz: Hubbleovo napětí by mohl vyřešit pomalu rotující vesmír
Týden na ITBiz: Halucinace balíčků při programování AI
Týden na ScienceMag.cz: Kvantová elektronika v křemíku a diamantu
Týden na ITBiz: DeepSeek nic nemění, umělá inteligence vyžaduje obrovské investice do cloudové infrastruktury
Týden na ScienceMag.cz: Komplexní modely AI prý zpochybňují Occamovu břitvu

Diskuse k tomuto článku

29.9.2011 08:43 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Odpovědět | Sbalit | Link | Blokovat | Admin

V dlaždicovém správci to bude znít jako rouhání, ale je možné nechat nová okna zaplňovat prostor nejen vodorovně, ale i svisle? Například xterm si nese svoji představu o velikosti okna a na plochu se mi pohodlně vejdou čtyři v rozložení dva na dva. Takže když spouštím jeden xterm za druhým, tak první je vlevo nahoře, druhý napravo od něj, třetí se otevře dole a čtvrtý vpravo dole. Z vašeho popisu mám dojem, že se mi všechny čtyři naskládají vedle sebe, a to buď vodorovně nebo svisle. Samozřejmě bych mohl v i3 po otevření třetího jej ručně přesunout dolů, ale proč to dělat ručně, když by to mohlo fungovat automaticky?

Druhý dotaz je na přepínaní mezi okny. Existuje v i3 možnost přepnout klávesnicí se předchozí okno? (Jako mají klasičtí správci obvykle na Meta-Tab.) Nikoliv, abych musel na něj ručně doskákat po sousedech.

29.9.2011 16:15 mseed | skóre: 21 | blog: FastLinux
Rozbalit Rozbalit vše Re: i3 - improved tilling wm

Prvni funkce bude implementována pomocí "stack-limit".

[[stack-limit]]

///////////////////////////////////////////////////////////////////////////////
TODO: not yet implemented
=== Changing the stack-limit of a container

If you have a single container with a lot of windows inside it (say, more than
10), the default layout of a stacking container can get a little unhandy.
Depending on your screen’s size, you might end up with only half of the title
lines being actually used, wasting a lot of screen space.

Using the +stack-limit+ command, you can limit the number of rows or columns
in a stacking container. i3 will create columns or rows (depending on what
you limited) automatically as needed.

*Syntax*:
--------------------------------
stack-limit cols/rows value
--------------------------------

*Examples*:
-------------------
# I always want to have two window titles in one line
stack-limit cols 2

# Not more than 5 rows in this stacking container
stack-limit rows 5
-------------------

Přepínání oken (obdoba alt+tab) není implementováno. Jako workaround může být použita funkce mark/goto.

29.9.2011 09:49 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Odpovědět | Sbalit | Link | Blokovat | Admin
Nejsem si jistý, že používat dlaždicového správce oken na hromady emulátorů terminálu je ten nejlepší příklad. Takový tmux dělá to samé a navíc přináší výhody typu historie, kopírování a vkládání pomocí klávesnice, podpora uživatelských relací a takovou celkovou nezávislost na X. Naopak v článku nevidím, zda a jak je tento přístup použitelný i pro běžné grafické aplikace - prohlížeč webu, obrázků, gimp, libre office, nějaký IM kecálek - o čemž nejsem moc přesvědčen (i když to může být tím, že pořád používám klasické 4:3 displeje).
When your hammer is C++, everything begins to look like a thumb.
yac avatar 29.9.2011 10:15 yac | skóre: 8 | blog: srckbin | Ostrava
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Správce oken je na správu oken lepší, než tmux. Emulace WM v terminálu zavání.
srck! Linux smrdí. Méně.
29.9.2011 16:32 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Správce oken je na správu oken lepší, než tmux.
Já ale tvrdím, že je terminal multiplexer na správu terminálů (což byl jediný příklad použití i3 v článku) prostě lepší, než libovolný správce oken může kdy nabídnout. Což je axiom.
Emulace WM v terminálu zavání.
Sranda je ta, že hlavním účelem těchto programů není emulovat WM. Ale v případě tmuxu, který má splitování na extrémně použitelné úrovni je to takový malý bonus navíc.
When your hammer is C++, everything begins to look like a thumb.
29.9.2011 16:43 mseed | skóre: 21 | blog: FastLinux
Rozbalit Rozbalit vše Re: i3 - improved tilling wm

i3 používám pro běžnou práci, nejen jako terminal multiplexer. Na terminálech se snáze demonstruje možnost rozdělování oken a změna módů. Článek nebyl pouze o práci v terminálech, ale obecné představení i3 http://www.abclinuxu.cz/images/clanky/triska/i3screen_02.png

29.9.2011 10:16 none
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Jiste, pracuji s beznymi nastroji - prohlizec, psi, konzole, oo a dalsi. Jak si na to jednou zvyknete, nechcete jinak. Vysoce navykove!
yac avatar 29.9.2011 10:26 yac | skóre: 8 | blog: srckbin | Ostrava
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Odpovědět | Sbalit | Link | Blokovat | Admin
Díky za hezké shrnutí, rozhodně otestuju, neboť (nejen) taby v xmonadu fungují v kombinovaných layoutech velmi špatně a vývoj utichnul. V awesome jsem o nich nenašel ani zmínku. Chvíli jsem se na i3 nedíval a už je z něho velký kluk, zdá se :)
srck! Linux smrdí. Méně.
29.9.2011 15:44 SPM | skóre: 28
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
taby v awesome byly, ale jelikož jejich tvůrce už je pak nějak neaktulizoval, tak šly zase pryč...
29.9.2011 15:46 SPM | skóre: 28
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Odpovědět | Sbalit | Link | Blokovat | Admin
i3 jsem při posledním záchvatu s výměnou window managerů zkoušel. Hodně se mi líbil, nicméně kvůli jedné konkrétní věci musel jít pryč - ten force xinerama mód má takovou drobnou vadu - ve chvíli, kdy se monitory mění za běhu, tak je to problém. A jelikož notebook používám jako workstation a doma k němu připojuju druhý monitor, tak to znamenalo s každým příchodem domů restarnout Xka, což moc komfortní není. Nakonec jsem skončil u notion - konfigurace mi příliš nevoní (přecijen konfigurák i3 byl krásně jednoduchý, což se o těch lua skriptech úplně říct nedá), ale zatím to dělá to co má :)
29.9.2011 16:24 mseed | skóre: 21 | blog: FastLinux
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
29.9.2011 17:09 SPM | skóre: 28
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Tu dokumentaci jsem samozřejmě četl, chápu, že bez podpory randr je to dosti nahouby, nicméně to nemění nic na tom, že to pro mě není použitelné :/ Bohužel, jinak se mi i3 vážně líbil. Nouveau jsem zkoušel - tam to připojování a odpojování monitorů funguje pěkně, ale zase blbne suspend2ram (tak v 50% případů se buď neuspí nebo neprobudí) a výkon je žalostný (nezahrál jsem si ani tuxracera...) Jinak ještě náhledem do té dokumentace - v poslední větě je zmíněno, že u bin. driverů nejde konfigurace displayů měnit za běhu - což už docela dlouho není pravda. Kdyby se jim povedlo implementovat nějaký inplace restart, který při té příležitosti znovu načte displaye, tak by to ten problém vyřešilo - ostatně takhle stejně to řeší notion - jen se po změně restartne.
29.9.2011 18:22 mseed | skóre: 21 | blog: FastLinux
Rozbalit Rozbalit vše Re: i3 - improved tilling wm

Ok, poptam Michaela co se s tim da delat.

29.9.2011 21:10 mseed | skóre: 21 | blog: FastLinux
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
inplace restart reads the list of workspaces via xinerama

Můžeš to otestovat s verzi 4.0.2 prosím? (bindsym $mod+Shift+R restart), Můžeme to probrat i na IRC.

29.9.2011 21:46 SPM | skóre: 28
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
připadá mi, že to dělá to samé (nebo něco hodně podobného), co na 4.0.1, co jsem zkoušel. Zapnu to s jedním displayem, přihodím druhý a restartnu - vše ok. i3bar se zobrazí na každém monitoru, každý monitor má svou plochu. A teď velký display zase vypnu a restartnu a teď už je to horší - i3bary mám dva nad sebou, každý zobrazuje to co předtím (tedy jakoby patřil tomu druhému neexistujícímu monitoru) a zobrazuje i ty své plochy - sranda je teď ta, že vidím plochy jenom z toho primárního monitoru a ty, co byly na sekundárním, se už na ně nepřepnu (teda asi přepnu, ale nic nevidím). IRC je to na německé doméně, co je na stránkách? Rád to pomůžu zdebugovat.
29.9.2011 21:52 mseed | skóre: 21 | blog: FastLinux
Rozbalit Rozbalit vše Re: i3 - improved tilling wm

Server: irc.twice-irc.de kanál: #i3 (anglicky)

30.9.2011 14:37 SPM | skóre: 28
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Tak jsem se dnes dokopal vyměnit na počítači v práci polorozpadlé unity, které mě už vážně nebavilo... za i3. Oproti notionu mi to ovládání a konfigurace přijde výrazně jednodušší (byť notion teda fungoval také dost hezky)... asi to kopnu i zase na notebook - po včerejšku na irc ten dualhead problém umím alespoň nějak řešit :)) díky za článek, jinak bych se asi nedokopal :)
29.9.2011 16:26 mseed | skóre: 21 | blog: FastLinux
Rozbalit Rozbalit vše Re: i3 - improved tilling wm

Jako workaround lze použít nouveau ovladače.

29.9.2011 16:43 wosambo | skóre: 5
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Odpovědět | Sbalit | Link | Blokovat | Admin
ze by koncept tiling wm prevzal Microsoft do novych Windows 8? :-)
30.9.2011 09:46 cronin | skóre: 49
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Odpovědět | Sbalit | Link | Blokovat | Admin
Chvíľu som tiling wm používal, ale upustil som od neho. Príde mi ako veľmi vhodný a zaujímavý, ale iba pre určitý modus operandi. Ako administrátor, ktorý väčšinu času pracuje v termináloch, číta manuály, browsuje, chatuje a popri tom všetkom počúva hudbu, by som si život s tiling wm vedel veľmi dobre predstaviť.

Ako vývojár, ktorý 90% času potrebuje mať IDE na celej obrazovke, a pri práci v jednom až štyroch termináloch nepotrebuje IDE vidieť, je pre mňa ďaleko praktickejšie smart umiestňovanie okien a'la KDE/XFCE. Oddelenie jednotlivých úloh ako "komunikácia", "vývoj" a pod. riešia uspokojivo virtuálne plochy.

Tak mi napadlo: existuje nejaký "tiling wm" pre okná vo firefoxe?
30.9.2011 11:51 mseed | skóre: 21 | blog: FastLinux
Rozbalit Rozbalit vše Re: i3 - improved tilling wm

Každý má jiné preference při používání desktopu a je skoro nemožné vytvořit window manager, který bude vyhovovat všem.

Používám i3 zcela bez problému a pohodlně jako administrátor, vývojář i běžný uživatel.

3.10.2011 08:12 cronin | skóre: 49
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
S tým samozrejme súhlasím. V žiadnom prípade som nechcel povedať, že tilinng WM je zlý len preto, lebo nevyhovuje mne, ani nepožadujem, aby jeden WM vyhovoval všetkým - to je doména iných operačných systémov. :-)
Fluttershy, yay! avatar 30.9.2011 13:10 Fluttershy, yay! | skóre: 93 | blog:
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
3.10.2011 08:12 cronin | skóre: 49
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Ďakujem, vyskúšam.
Josef Kufner avatar 4.10.2011 20:54 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
Když jsem kdysi s tiling managerama experimentoval, došel jsem k tomu, že by to chtělo jen vylepšit klasický window manager o tiling funkce. Například přidělat podporu pravítek a při manipulaci s okny se na ně lepit, pak při pohybu s přilepeným oknem hýbat i pravítkem a všemi ostatními přilepenými okny. (Nechcete to někdo udělat?)
Hello world ! Segmentation fault (core dumped)
6.10.2011 10:28 ernierasta
Rozbalit Rozbalit vše Re: i3 - improved tilling wm
KDE 4.5 a výše tuto funkci (částečně) má. A teprve s tím experimentuji, ale zdá se to být velmi pěkný kompromis mezi tiling wm a funkcemi klasických wm (systray, menu, pěkné notifikace, ...). Jen je třeba modifikovat klávesové zkratky (u mně byl i3 vzorem).
30.9.2011 10:18 12
Rozbalit Rozbalit vše Chyba?
Odpovědět | Sbalit | Link | Blokovat | Admin
Nemá být v nadpisu jen jedno L? Nevím, třeba se mýlím. Ale takhle (tilling) mi to opravdu nesedí...
30.9.2011 21:57 mseed | skóre: 21 | blog: FastLinux
Rozbalit Rozbalit vše Re: Chyba?
Souhlas, pěkné přehlédnutí díky.
David Watzke avatar 30.9.2011 23:14 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Chyba?
Díky, opraveno.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Shadow avatar 1.10.2011 20:41 Shadow | skóre: 25 | blog: Brainstorm
Rozbalit Rozbalit vše Re: i3 - improved tiling wm
Odpovědět | Sbalit | Link | Blokovat | Admin
Díky za moc pěkný článek. i3 se mi moc líbí, akorát zatím stále používám Awesome. Po i3 ale stále pokukuju a jestli ve 4.1 bude systray, tak na něj snad už konečně přejdu.
If we do not believe in freedom of speech for those we despise we do not believe in it at all.
6.10.2011 17:43 Janick
Rozbalit Rozbalit vše Re: i3 - improved tiling wm
Odpovědět | Sbalit | Link | Blokovat | Admin
i3 je celkem fajn, ale totálně mě odradilo nepochopilně odlišné výchozí Vim-like rozložení klávesnice (h/j/k/l vs. j/k/l/; apod.), které například wmii nebo xmonad dodržují. Je to zbytečně matoucí a nepřirozené. Jasně že to lze předefinovat, ale je to práce navíc a nesystémové řešení.
6.10.2011 17:50 SPM | skóre: 28
Rozbalit Rozbalit vše Re: i3 - improved tiling wm
No, jsou to 4 řádky v konfiguráku, kterej u takovýho wm stejně bude potřeba upravovat... (a od ion3 je tohle ještě docela logický :)) ). nicméně důvod byl snad ten, aby splitování kontejnerů bylo namapováno na mod+h pro horizontální split...

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.