Comparison of tiling window managers (Русский)
Эта статья предусматривает объективное сравнение наиболее популярных тайловых оконных менеджеров (в отличие от плавающих оконных менеджеров).
Contents
Таблица сравнения
Для краткого обзора в таблице перечислены наиболее популярные тайловые оконные менеджеры, с примечательными особенностями.
Оконный менеджер (WM) | Написан на | Настраивается с помощью | Стиль управления | Поддержка системного трея | Перезагрузка на лету | Информационный бар | Композитность | Слои по умолчанию | Pixel usage | Внешнее управление | Библиотека | Многомониторный (n) режим | ICCCM/EWMH Совместимый | Состояние |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
alopex | C | C (recompile) | Гибридный | Нет | Нет | Встроенный; Вызов сценария / программы в качестве первого аргумента | внешний | max, h-stack, v-stack, h-tab | Variable borders; titles in-statusbar | Xlib | шесть меток, два вида, доступные по умолчанию | Активный | ||
Awesome | C | Lua | Динамический | Встроенный | Да | Встроенный, изображения и текст | внешний | max, nh-stack (and invert), nv-stack (and invert), free | variable borders, optional h-tab titles | dbus (если включен) | XCB | n-tags (рабочие пространства). По-умолчанию включено 9. Example | Да | Активный |
bspwm | C | Anything | Гибридный | Нет | Да | Can write internal state to a FIFO | внешний | v-split, h-split | Variable borders | via bspc | XCB | Рабочие столы привязаны к мониторам | Да | Активный |
dswm | Lisp | Lisp | Ручной | Нет | Да | Да | Нет | Активный | ||||||
dwm | C | C (recompile) | Динамический | Дополнительный патч | Optional [ссылка недействительна: раздел не найден] | Built-in, reads from root window name | внешний | v-stack, max | Xlib | n regions, 9 workspaces fixed to each region | Активный | |||
echinus | C | Text | Динамический | Нет | Да | ourico AUR | внешний | v-stack, b-stack, max | Variable borders & optional titles | Xlib | Да | Неизвестно | ||
euclid-wm | C | Text | Гибридный | Нет | Да | внешний(dzen) | строки, столбцы | 1-pix borders | Xlib | Бездействующий | ||||
FrankenWM | C | C (recompile) | Динамический | Нет | Нет | No, outputs information to stdout, which can easily be parsed and displayed by an внешний monitor or panel (dzen2, conky, etc) | внешний | v-stack (and invert), h-stack (and invert), dual-v/h-stack, grid, fibonacci (vh-stack), строки, столбцы, max, free | Variable borders | XCB | Активный | |||
herbstluftwm | C | Text | Ручной | Нет | Да | строки, столбцы | 1-pix borders | commands via herbstclient | Xlib and Glib | n regions, 9 workspaces visible in any region | Активный | |||
i3 | C | Text | Динамический | i3bar | Да(Layout is preserved) | text piped to i3bar ( i3status / conky and others can be used) | внешний | tree, v-split, h-split, stacked, tabbed, max, can be nested infinitely | none, 1-pix or 2-pix, optional titlebars, can hide edge borders | commands via ipc (or i3-msg, which uses ipc) | XCB | n regions | Да | Активный |
Ion3 | C | Lua | Ручной | trayion | Да | configurable | ? | h-tab, max | Заброшенный | |||||
monsterwm | C | C (recompile) | Динамический | Нет | Optional, but windows are lost | No, outputs information to stdout, which can easily be parsed and displayed by an внешнийmonitor or panel ( dzen2 , conky , etc) | внешний | h-stack, v-stack, grid, max | supports _NET_Активный_WINDOW , so внешнийcontrol can be supplied by xdotool and similar tools | Xlib primary and XCB fork [ссылка недействительна: раздел не найден] | n workspaces per monitor | Активный | ||
Musca | C | Text, own command set, C(recompile) | Ручной | Нет | No, but allows running of musca commands on the fly | Нет | Нет | h-split, v-split, max | commands, hooks | Xlib | Заброшенный | |||
Notion | C, Lua | Lua, compatible with Ion3 configs | Ручной | trayion, stalonetray | Да | configurable | ? | h-tab, max | Configurable borders and titlebars/tabs | EWMH, arbitrary Lua scripts which have access to the rich internal API | Xlib | n workspaces on each monitor. Supports on-the-fly changes in topology | Активный | |
qtile | Python | Python | Динамический | Да | Да | Да | внешний | tree, v-split, h-split, stacked, tabbed, max | Нетborders, although customizable | Hooks, Server mode | XCB | Активный | ||
Ratpoison | C | Text | Ручной | Нет | Да | Да | внешний | max | Нет | Активный | ||||
Snapwm | C | Reloadable Text | Динамический | Нет | Да | Built-in, reads from root window name | внешний | nVertical, Fullscreen, nHorizontal, Grid, Center Stacking | variable borders, Нетtitles | Xlib | Number of desktops distributed evenly between monitors | Активный | ||
Spectrwm | C | Text | Динамический | Нет | Да | Built-in, reads from user script | Нет | nv-stack, nh-stack, max | 1-pix borders, Нетtitles | XCB | n regions, 10 workspaces visible in any region | Да | Активный | |
Stumpwm | Lisp | Lisp | Ручной | Нет | Да | Да | Нет | Нет | Активный | |||||
subtle | C | Ruby | Ручной | Built-in | Да | Built-in (Ruby), внешнийcan be used as well | внешний | Variable grid | Variable borders, Нетtitles | Hooks (Ruby), subtler (CLI), subtlext (Ruby extension) | Xlib | One workspace (view) per monitor (screen), placement on views via tags and per runtime | Да | Активный |
Wingo | Go | Text | Динамический | Нет | Да | Нет | внешний | floating, nv-stack, nh-stack, max | title bars in floating, skinny borders in tiling | via wingo-cmd or UNIX sockets in any programming language | X Go Binding | n regions, workspaces visible in any region | Да | Активный |
WMFS | C | Text | Динамический | Built-in | Да | Built-in, set with command, color text, images | внешний | nh-stack (and invert), nv-stack (and invert), mirror-v, mirror-h, grid, free, max | variable borders, titles or Нетtitles | commands | Xlib | Up to 36 tags(workspaces) per screen | Да | Активный |
xmonad | Haskell | Haskell | Динамический | Нет | Да | Нет | Да, с xmonad-contrib и внешним менеджером | nv-stack, nh-stack, max | variable borders, Нетtitles | via XMonad-Hooks-ServerMode | Xlib | n regions, 9 workspaces visible in any region | Да/ ? | Активный |
Оконный менеджер (WM) | Написан на | Настраивается с помощью | Стиль управления | Поддержка системного трея | Перезагрузка на лету | Информационный бар | Композитность | Слои по умолчанию | Pixel usage | Внешнее управление | Библиотека | Многомониторный (n) режим | ICCCM/EWMH compliant | Состояние |
Стиль управления
Динамическое управление выделяет лёгкость и скорость автоматического управления оконных слоёв. Ручное управление выделяет ручную регулировку расположения и размера окна. Более точный контроль, и большую трату времени на перемещение и изменение размеров окна.
Ряд общих типов компоновки доступен в нескольких тайловых WM, хотя терминология может несколько меняться.
- max: Показать одно коно во весь экран (с или без статус баром, заголовком и границами). Также: monocle(dwm, monsterwm).
- h-stack: Основная область в верхней половине, другие окна располагаются горизонтально в нижней половине.
Основная область может быть изменяемого размера. Может быть инвертирована вверх-вниз (wmfs). Также: bottom stack (dwm), bstack(monsterwm).
- v-stack: Основная область в левой половине, другие окна располагаются вертикально в правой половине. Основная область может быть изменяемого размера. Может быть инвертирована влево-вправо(wmfs). Aka: tile (dwm, monsterwm).
- nh-stack: h-stack позволяет >=1 окно(а) в мастер-области. Также: nbstack (dwm).
- nv-stack: v-stack позволяет >=1 окно(а) в мастер-области. Также: ntile (dwm).
- mirror-h: nh-stack со стеками выше и ниже главной области.
- mirror-v: nv-stack со стеками слева и справа от главной области.
- h-tab: одно окно показано на весь экран, со всеми названиями окон, указанными по горизонтали (как вкладки браузера).
- v-tab: одно окно показано на весь экран, со всеми названиями окон, указанными по вертикали. Также: stack (wmii).
- h-split: назначенным сочетанием клавиш разбивается окно по горизонтали, создавая пространство для другого.
- v-split: назначенным сочетанием клавиш разбивается окно по вертикали, создавая пространство для другого.
- columns: ручной стиль слоёв, который воспринимает окна как столбцы по вертикали.
- rows: ручной стиль слоёв, который воспринимает окна как горизонтальные ряды.
- grid: размеры и позиции окон, основанные на регулярной сетке NxM. Может быть автоматическим (как в wmfs, monsterwm) или ручным (как в Subtle).
Назначение клавиш
Тайловые оконные менеджеры ориентированы, как правило, на использование исключительно с клавиатурой или с клавиатурой и мышкой. Для быстроты и простоты использования оконного менеджера, используются горячие клавиши (мышкой результат будет достигнут медленней). Разумные назначения горячих клавиш делают работу быстрой и эффективной. Некоторые сочетания клавиш по умолчанию хороши, но их можно изменить под свои нужды.
Comparison of tiling window managers
This article provides an unbiased comparison of the most popular tiling window managers (as opposed to floating window managers).
Contents
Comparison table
The following table lists the most popular tiling window managers alongside notable features, providing readers with a quick overview.
Window Manager | Written in | Configured with | Management style | System tray support | On-the-fly reload | Information bars | Compositing | Default layouts | Pixel usage | External control | Library | Multiple (n) monitor behavior | ICCCM/EWMH compliant | Maintenance |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
alopex | C | C (recompile) | Hybrid | None | No | Built-in; call script/program as first argument | External | max, h-stack, v-stack, h-tab | Variable borders, titles in-statusbar | Xlib | six tags, two views available by default | Abandoned | ||
Awesome | C | Lua | Dynamic | Built-in | Yes | Built-in, images and text | External | max, nh-stack (and invert), nv-stack (and invert), free | Variable borders, optional h-tab titles | dbus (if enabled) | XCB | n-tags (workspaces). Per default 9 are enabled. Example | Yes | Active |
bspwm | C | Anything | Hybrid | None | Yes | Can write internal state to a FIFO | External | v-split, h-split | Variable borders | via bspc | XCB | Monitors hold Desktops | Yes | Active |
dwm | C | C (recompile) | Dynamic | Optional Patch | Optional | Built-in, reads from root window name | External | v-stack, max | via dwmfifo | Xlib | n regions, 9 workspaces fixed to each region | Active | ||
echinus | C | Text | Dynamic | None | Yes | ourico AUR | External | v-stack, b-stack, max | Variable borders, optional titles | Xlib | Yes | Abandoned | ||
euclid-wm | C | Text | Hybrid | None | Yes | External (dzen) | rows, columns | 1-pix borders | Xlib | Dormant | ||||
FrankenWM | C | C (recompile) | Dynamic | None | No | No, outputs information to stdout, which can easily be parsed and displayed by an external monitor or panel (dzen2, conky, etc) | External | v-stack (and invert), h-stack (and invert), dual-v/h-stack, grid, fibonacci (vh-stack), rows, columns, max, free | Variable borders | XCB | Active | |||
herbstluftwm | C++ | Text | Manual | None | Yes | rows, columns | 1-pix borders | commands via herbstclient | Xlib | n regions, 9 workspaces visible in any region | Active | |||
i3 | C | Text | Dynamic | i3bar | Yes (Layout is preserved) | text piped to i3bar ( i3status / conky and others can be used) | External | tree, v-split, h-split, stacked, tabbed, max, can be nested infinitely | None, 1-pix or 2-pix, optional titlebars, can hide edge borders | commands via ipc (or i3-msg, which uses ipc) | XCB | n regions | Yes | Active |
LeftWM | Rust | toml (user settings) / Anything (themes) | Dynamic | None | Yes | Yes, many options through theme system | External | v-stack, columns, rows | Variable based on theme | supports _NET_ACTIVE_WINDOW and sending commands to a named pipe | Xlib | Workspaces and monitors are not tide. Many workspaces for monitor or many monitors for workspace | Yes | Active |
Notion | C, Lua | Lua, compatible with Ion3 configs | Manual | trayion, stalonetray | Yes | configurable | ? | h-tab, max | Configurable borders and titlebars/tabs | EWMH, arbitrary Lua scripts which have access to the rich internal API | Xlib | n workspaces on each monitor. Supports on-the-fly changes in topology | Active | |
qtile | Python | Python | Dynamic | Yes | Yes | Yes | External | tree, v-split, h-split, stacked, tabbed, max | No borders, although customizable | Hooks, Server mode | XCB | Active | ||
Ratpoison | C | Text | Manual | None | Yes | Yes | External | max | No | Active | ||||
Snapwm | C | Reloadable Text | Dynamic | None | Yes | Built-in, reads from root window name | External | nVertical, Fullscreen, nHorizontal, Grid, Center Stacking | Variable borders, no titles | Xlib | Number of desktops distributed evenly between monitors | Active | ||
Spectrwm | C | Text | Dynamic | None | Yes | Built-in, reads from user script | No | nv-stack, nh-stack, max | 1-pix borders, no titles | XCB | n regions, 10 workspaces visible in any region | Yes | Active | |
Stumpwm | Lisp | Lisp | Manual | None | Yes | Yes | No | Xlib | No | Active | ||||
subtle | C | Ruby | Manual | Built-in | Yes | Built-in (Ruby), external can be used as well | External | Variable grid | Variable borders, no titles | Hooks (Ruby), subtler (CLI), subtlext (Ruby extension) | Xlib | One workspace (view) per monitor (screen), placement on views via tags and per runtime | Yes | Active |
Wingo | Go | Text | Dynamic | None | Yes | No | External | floating, nv-stack, nh-stack, max | title bars in floating, skinny borders in tiling | via wingo-cmd or UNIX sockets in any programming language | X Go Binding | n regions, workspaces visible in any region | Yes | Dormant |
WMFS | C | Text | Dynamic | Built-in | Yes | Built-in, set with command, color text, images | External | nh-stack (and invert), nv-stack (and invert), mirror-v, mirror-h, grid, free, max | Variable borders, titles or no titles | commands | Xlib | Up to 36 tags(workspaces) per screen | Yes | Active |
xmonad | Haskell | Haskell | Dynamic | None | Yes | No | Yes, with xmonad-contrib and an external manager | nv-stack, nh-stack, max | Variable borders, no titles | via XMonad-Hooks-ServerMode | Xlib | n regions, 9 workspaces visible in any region | Yes / ? | Active |
Window Manager | Written in | Configured with | Management style | System tray support | On-the-fly reload | Information bars | Compositing | Default layouts | Pixel usage | External control | Library | Multiple (n) monitor behavior | ICCCM/EWMH compliant | Maintenance |
Management style
Dynamic management emphasizes automatic management of window layouts for speed and simplicity. Manual management emphasizes manual adjustment of layout and sizing with potentially more precise control, at the cost of more time spent moving and sizing windows.
Layouts
A number of common layout types appear in several tiling WMs, although the terminology varies somewhat.
- max: one window shown fullscreen (with or without a status bar, title and borders). Aka: monocle (dwm, monsterwm).
- h-stack: master area in top half, other windows stack up horizontally in the bottom half. The master area may be resizable. May be inverted top-bottom (wmfs). Aka: bottom stack (dwm), bstack(monsterwm).
- v-stack: master area in left half, other windows stack up vertically in the right half. The master area may be resizable. May be inverted left-right (wmfs). Aka: tile (dwm, monsterwm).
- nh-stack: h-stack allowing >=1 windows in master area. Aka: nbstack (dwm)
- nv-stack: v-stack allowing >=1 windows in master area. Aka: ntile (dwm)
- mirror-h: nh-stack with stacks above and below the master area
- mirror-v: nv-stack with stacks to the left and right of the master area
- h-tab: one window shown fullscreen with all window titles shown horizontally (like browser tabs)
- v-tab: one window shown fullscreen with all window titles shown vertically. Aka: stack (wmii).
- h-split: a keybinding splits the current window horizontally creating space for another
- v-split: a keybinding splits the current window vertically creating space for another
- columns: manual layout style which treats windows as belonging to vertical columns
- rows: manual layout style which treats windows as belonging to horizontal rows
- grid: window positions and sizes based on a regular NxM grid. May be automatic (like wmfs, monsterwm) or manual (like Subtle).
Key bindings
Tiling window managers are usually designed to be used entirely with the keyboard or with keyboard & mouse. This is for speed (reaching for and moving a mouse is slow) and ease of use. Sensible key bindings are crucial to making workflow fast and efficient. Some default sets are better than others, but generally the keys can be rebound as desired by the user.