Qtile is a full-featured, hackable tiling window manager written in Python.
Начнем с азов, или почему я люблю Gentoo Linux?
В последнее время с выходом "гладкошерстной" убунты, и прочих дистрибутивов заточенных, грубо говоря под мелкомягких, сеть переполнена людьми, которые установив в "три тычка" какой либо дистрибутив - гордо именуют себя не иначе как "Линуксоидами". При этом, понятия не имея как работает система и где настраивается мышка, и любой мелкий баг в случае если не работают окошки, превращается в нерешаемую проблему и обсуждение на форуме в cтопиццотый раз одного и того же вопроса не менее чем 50 постов...
То ли дело "Гента". Установка сложна и этот природный барьер отсеивает как раз вышеописанную категорию юзеров. Поэтому факи и хелпы по генте по сравнению с другими дистрами настолько хороши и подробны. Большинство пользователей Gentoo это категория людей, которые хорошо разбираются в *nix системах и которых достали тяжеловесные, глючные и попросту ненужные в работе окошки, няшки, рамки, красивые нештяки и прочая поебень включая таких гигантов как гном, кеды или крыса...
Вот как раз эти люди, ставят чистую систему и сугубо под себя настраивают маленькие, функциональные и очень шустрые и стабильные графические оболочки такие как IceWM, FVWM, OpenBOX и так далее. Для сравнения - гномы, кеды, крысы и так далее это всего лишь табуретка, с какой стороны не сядь - все равно жопе не удобно. Да, для настройки перечисленных мелких ВМ необходимо время что бы разобраться с конфигами, но на выходе вы получаете удобное кресло со спикой и подлокотниками....
Но все выше перечисленное имеет все же, на мой взгляд, один дефект - много лишних графических обьектов на экране, которые расчитаны делать работу за ПК более приятной, но на самом деле - просто отвлекающих пользователя. И тут, для самых требовательных задротов (пример Автор), приходят на помощь Тайловые менеджеры. Читать
На данный момент выбор достаточно широк и существует как минимум несколько стабильных продуктов обладающих своими плюсами и минусами. Основные продукты это DWM, Xmonad, wmii, Ion3, awesome - из которых можно выделить лишь последних
два, как достаточно юзабельных. В свое время окончательно устав от всей этой лишней шушеры я принял решение перейти на тайловый ВМ и перепробовал их все, остановив в конце концов свой выбор на awesome. Он не был идеален, но количество моментов которые запросто могу повесить компьютер пентагона своей логикой значительно меньше по сравнению с конкурентами.
Поработав некоторое время напильником, я привел его к желаемому виду, с нужными мне виджетами, хоткеями и так далее. И реально работать за ПК стало действительно приятно и удобно. На экране всегда тольно нужная вам информация, в нужном вам месте, в нужное время и в нужном виде. Все управление и перемещение осуществляется посредством клавиатурных комбинаций, по сему дебильная мышка нужна в редких случаях - а следоватьльно обе ваши руки постоянно находятся на клавиатуре, что опять же облегчает набор текста и так далее... Но великий Awesome обладал, на мой взгляд, весьма
ощутимым недостатком. Его конфиг написан на Lua. В целом - конечно не очень страшно если вам нужно парочка написанных кем-то виджетов, но для того что бы максимально натсроить все как вам хоетлось бы - нужно таки его учить. И тут у меня встал вопрос. По сути я занимаюсь системным администрированием, и у меня даже было время заняться изучением языка, но размышления в направлении "Учить язык программирования для того что бы настроить конфиг тайлового ВМ и все?" навели меня на мысль положить на рагульный Луа сильно и навеки... Ведь по сути, применения LUa для администрирования гибридной сети (windaus, *nix, Mac) я не нашел, и потому забил. И тут,
блуждая необьятными просторами нашей вселенной я наткнулся на Qtile - тайловый ВМ написанный на Python и имеющий конфиг на нем же. И о чудо - питон идеально подходит для системного администрирования. Ну что же засучим рукава и посмотрим на что способен этот зверь...
Описывать установку Qtile я не буду, потому как данное рукодство можно найти как на сайте Home Page
так и на его форуме Forum
Предположим что установка прошла успешно. Так что нам по сути осталось отредактировать дефолтный конфиг что бы получить сразу немного удобств. Так как у каждого задачи и взгляды свои я попытаюсь сделать универсальный конфиг, который подойдет большинству для старта. Сосбственно после установки нам необходимо создать папку qtile и скопировать в нее конфиг из примеров что мы и делаем командой
mkdir -p ~/.config/qtile[/code]
далее, скопируем конфиг из папки которую мы стянул с гита для установки
cp build/lib/libqtile/resources/default_config.py ~/.config/qtile/config.py
Далее, я приведу свой конфиг и постараюсь максимально прокомментировать его.
(Те кто не знаком с питоном - пробелы и табуляции необходмо сохранять)
-> cat .config/qtile/config.py
#Импортируем необходимые нам компоненты
from libqtile.manager import Key, Screen, Group, Drag, Click
from libqtile.command import lazy
from libqtile import layout, bar, widget
#Для того что бы сделать конфиг более читабельным, внесем переменные, которые
#позже будем использовать
#(по умолчнию WinKey = mod4, Alt = mod1)
mod = "mod4"
alt = "mod1"
# Для того что бы указать везде ваш любимый шрифт, не всписывая каждый раз все переменные
#сделаем это через функцию. Которая возвращает нам параметры и размер шрифта который вы указали
def dFont(fs):
def_font = dict(font='Terminus', fontsize=fs, padding=3,)
return def_font
#Обозначим хоткеи для смены лайоутов - думаю тут комментарии излишни, если не совсем понятно что и
#зачем, потом просто пробуете и смотрите что меняется
#Layouts Keys
keys = [
Key(
[mod], "k",
lazy.layout.down()
),
Key(
[mod], "j",
lazy.layout.up()
),
Key(
[mod, "control"], "k",
lazy.layout.shuffle_down()
),
Key(
[mod, "control"], "j",
lazy.layout.shuffle_up()
),
Key(
[mod], "space",
lazy.layout.next()
),
Key(
[mod, "shift"], "space",
lazy.layout.rotate()
),
Key(
[mod, "shift"], "Return",
lazy.layout.toggle_split()
),
Key([mod], "h", lazy.to_screen(1)),
Key([mod], "l", lazy.to_screen(0)),
Key([alt], "Tab", lazy.nextlayout()),
#Запуск приложений
#Открыть терминал
Key([mod], "Return", lazy.spawn("urxvt")),
#Открыть браузер
Key([mod], "w", lazy.spawn("google-chrome")),
#Открыть терминал в котором запустить приложение
Key([mod], "i", lazy.spawn("urxvt -e ekg2")),
# Application Launcher
# Это утилита dmenu - открывается панелька внизу екрана через которую можно
#быстро запустить нужное вам приложение (необходимо установить dmenu)
Key(
[alt], "r",
lazy.spawn(
"dmenu_run -b -fn 'Terminus:size=14' -nb '#000000' -nf '#fefefe'")
),
# Change the volume if our keyboard has keys
# Если по каким то причинам у вас автоматом не работают клавиши управления зауком на буке
#пропишем их тут
Key(
[], "XF86AudioRaiseVolume",
lazy.spawn("amixer -c 0 -q set Master 2dB+")
),
Key(
[], "XF86AudioLowerVolume",
lazy.spawn("amixer -c 0 -q set Master 2dB-")
),
Key(
[], "XF86AudioMute",
lazy.spawn("amixer -c 0 -q set Master toggle")
),
#Suspend Mode
# если клавиша усыпить не работает пропишем действие на нее (не требует рута - но необходимо установить upower)
Key(
[], "XF86Sleep",
lazy.spawn("dbus-send --system --dest=org.freedesktop.UPower --type=method_call --print-reply /org/freedesktop/UPower org.freedesktop.UPower.Hibernate")
),
#Restart Qtile
#Закрыть окно
Key([mod], "c", lazy.window.kill()),
#Рестартонуть кутиль, при этом все открытые приложения остаются (перечитывается конфиг)
Key([alt, "control"], "r", lazy.restart()),
]
#Тут проще самому попробовать чем обьяснить.
mouse = [
Drag([alt], "Button1", lazy.window.set_position_floating(),
start=lazy.window.get_position()),
Drag([alt], "Button3", lazy.window.set_size_floating(),
start=lazy.window.get_size()),
Click([alt], "Button2", lazy.window.bring_to_front())
]
#Добавим список наших рабочих столов (произвольное количество)
groups = [
Group("Term"),
Group("WwW"),
Group("IM"),
Group("IDE"),
]
#Переключение между столами по mod+порядковый номер
for index, grp in enumerate(groups):
keys.extend([
Key([mod], str(index + 1), lazy.group[grp.name].toscreen()),
Key([mod, alt], str(index + 1), lazy.window.togroup(grp.name))
])
#Лайоуты по умолчанию (откройте 2 окна и поклацайте alt+tab что бы было понятно)
layouts = [
layout.Max(),
layout.Stack(stacks=2),
layout.Tile(ratio=0.25),
]
#Настройка скрина и панели с виджетами, так же можно настроить и на несколько монитров
screens = [
Screen(
top=bar.Bar(
[
#Вот как раз пользуемся нашим шрифтом по умолчанию
#в целом я тут постарался перечислить основные парамеры для виджетов
#так что экспеременитируйте (если редактировать кофиг каким нить ИДЕ то получите автокомплит и.т.д.)
widget.GroupBox(**dFont(16)),
widget.CPUGraph(),
widget.MemoryGraph(),
widget.WindowName(**dFont(20)),
widget.Systray(),
widget.NetGraph(interface='eth1'),
widget.Clock('%H:%M %a %d/%m', **dFont(20)),
widget.Volume(foreground="70ff70", **dFont(20)),
widget.Battery(**dFont(20)),
],
30,
),
),
]
#ну тут тоже все прозрачно
main = None
follow_mouse_focus = False
cursor_warp = False
floating_layout = layout.Floating()
mouse = ()
#А дальше все ограничено только вашей фантазией, как это все выглядит видно на картинке
Если честно, пока что не могу выделить какие-то заслуги Qtile среди остальных ВМ. Но учитывая мой опыт, результат и затраты труда по его настройке - безусловно он чемпион...
Вот в общем то и все ! Пользуйтесь на здоровье.
Home Page
Forum