Это старая версия документа.
Содержание
FVWM - оконный менеджер, предоставляющий пользователю возможность самостоятельно настроить все возможные аспекты управления окнами в соответствии со своими представлениями об удобстве. В fvwm можно реализовать такие вещи, как открытие окон с произвольными размерами и координатами на определённом рабочем столе, большое количество чувствительных к контексту сочетаний клавиш для любых операций, до десяти кнопок в заголовке окна, которым можно назначить произвольные действия, меню, в том числе динамически генерируемые меню, меню, генерируемые с помощью скриптов (как pipe-menu в openbox) и tear-off меню, разные обои на разных рабочих столах, группировка окон со вкладками в заголовке окна, помещение окон в произвольные слои, заголовок окна на любой из сторон окна, стили оформления окон, возможность добавления своих элемнтов интерфейса с помощью модуля FvwmButtons. Приложение очень «лёгкое», файл конфигурации достаточно легко читается, особенно по сравнению с xml или кодом на lua или haskel.
Перевод FVWM Beginners Guide
Пролог
Feeble Virtual Window Manager (Слабый вирутальный окнонный менеджер) это чрезвычайно гибкий менеджер окон для X Window System. Слово «слабый» в названии может ввести в заблуждение. Дело в том, что FVWM является форком TWM, и сделан как его слабая замена, но к сегодняшнему дню FVWM вырос из слабого и скромного в самый гибкий в настройке оконный менеджер. От FVWM вы можете добиться всего, что хотите от подобной программы и даже больше. Поскольку название «слабый» больше не подходит к FVWM, то строят разные легенды по поводу того, что же эта F в названии значит. Чаще всего в F не раскрывают и пишут F? Virtual Window Manager.
Несмотря на то, что FVWM очень гибок в настройке, многие стараются не использовать его потому, что нет визуальных инструментов для управления параметрами FVWM. Предпринимались попытки создать для настройки FVWM подобные вещи, такие как fvwm-themes
, однако, такое огромное количество опций и настроек не так-то просто перевести в графический интерфейс, так что лучший способ настроить FVWM — написать свой конфигурационный файл. В этом вам поможет сие руководство, здесь вы ознакомитесь с синтаксисом конфигурационных файлов FVWM и основными командами. Первая часть руководства расскажет вам шаг за шагом, как создать простой конфигурационный файл FVWM. Несмотря на то, что это руководство, информация предоставляется в таком виде, что вы просто можете скопировать настройки и вставить их в конфигурационный файл. После того, как вы создадите базовую конфигурацию, мы с вами углубимся в некоторые темы и настройки и вы сможете позабавиться с ними на вашем рабочем столе. Я надеюсь, что к концу этого руководства вы достаточно ознакомитесь с настройкой FVWM и сможете создать такую конфигурацию, какая вам необходима.
Я попытаюсь достаточно хорошо объяснить все настройки, которые я вам представил, но в манах FVWM всё достаточно чётко написано. Маны довольно длинные, но они полны ключевых слов, ищите по ним, чтобы узнать, что делает та или иная опция. О некоторых опциях я говорю мало и не полно, и надеюсь, что вы воспользуйтесь манами, чтобы узнать те детали, которые я опустил. Так что если вы от меня что-то не узнали, то маны являются для вас ценным ресурсом.
Это руководство было написано к нестабильному релизу, fvwm-2.5.10 на тот момент. Я не тестировал конфигурацию на стабильном релизе и не уверен в его работе на нём. Рекомендую использовать версию 2.5.10. Несмотря на то, что этот релиз не стабильный, стандартные функции работают нормально и я не заметил никаких проблем с ним. Я также использую патч для прозрачности.
Всё в FVWM можно настроить в одном единственном файле. В стандартной сборке из репозиториев он лежит в ~/.fvwm/config
. Ещё возможны варианты типа ~/.fvwm/.fvwm2rc
и ~/.fvwm2rc
. Однако, имеется команда Read
, позволяющая обрабатывать содержимое других файлов. С её помощью можно разделить один большой конфиг на несколько малых. Но в целях просто обучиться настройке FVWM, мы будем записывать все настройки в один файл. Так что для начала создайте в домашнем каталоге папку .fvwm
и в ней простой текстовый файл config
. Если вы уже запустили FVWM, не настроив его, не ужасайтесь — стандартная конфигурация FVWM очень уродлива, ведь FVWM требует тонкой настройки.
Откройте наш ~/.fvwm/config
в своём любимом текстовом редакторе. Этот файл перечитывается FVWM при каждом запуске и определяет вид и поведение нашего нового оконного менеджера. Комментарии должны начинаться символом “#
”.
Общие настройки
Первое, что мы должны сделать - это задать переменные окружения и сделать базовую настройку рабочего стола. В FVWM переменные окружения нужны в основном для задания расположения разных файлов (например, иконок), которые используются в конфиге. Но не стоит засорять среду переменными и использовать переменные для чего ни попадя: не нужно обозначать переменными то, что меняется раз в год. Вот пример задания переменных:
# Задание переменных SetEnv fvwm_img /usr/share/images SetEnv fvwm_icon /usr/share/fvwm/icons SetEnv fvwm_scrpt /usr/share/fvwm/scripts SetEnv fvwm_wallpapers $[FVWM_USERDIR]/wallpaper SetEnv fvwm_webbrowser /usr/bin/opera SetEnv fvwm_video_player /usr/bin/mplayer
Теперь зададим ImagePath
:
# ImagePath ImagePath $[fvwm_icon]:$[fvwm_icon];.png:$[fvwm_wallpapers]:+
Это значит, что все иконки берутся из папки, указанной в переменной $[fvwm_icon]
. .png
означает, что иконки в формате ПНГ. Так же могут использоваться икс-пи-эм-иконки по умолчанию. Можно легко добавить больше директорий в ImagePath
, если, например, есть глобальные иконки для всех пользователей в /usr/share/images
и личные для отдельного пользователя в ~/fvwm/icons
.
Теперь настроим виртуальные рабочие столы. FVWM позволяет иметь сколько угодно рабочих столов, да ещё каждый из них может состоять из множества страниц. Зададим три рабочих стола, каждый из которых состоит из четырёх страниц в конфигурации 2×2:
# Настройки виртуальных рабочих столов DesktopSize 2x2 DesktopName 0 Главный DesktopName 1 Работа DesktopName 2 Игры EdgeScroll 100 100 EdgeResistance 150 150 EdgeThickness 1
Переменная DesktopSize
определяет количество страниц на рабочем столе. Затем, с помощью переменных DesktopName
мы задаём рабочие столы и их названия. Параметр EdgeScroll
определяет, на сколько процентов сдвигается рабочий стол при подведении курсора к краю экрана. EdgeScroll 100 100
говорит, что при заезде указателя на край экрана страница будет прокручиваться на 100%, то есть целиком. EdgeResistance
определяет время, через которое должно произойти перемещение, после движения курсора. EdgeThicknes
определяет толщину края экрана. То есть ту область вокруг экрана, в которую необходимо попасть, чтобы переместиться. Если вам не нужно такое перемещение, можете задать EdgeThickness 0
или EdgeScroll 0 0
.
Теперь назначим поведение мыши и фокус.
# Настройки мыши и фокус ClickTime 350 MoveThreshold 3 Style * SloppyFocus, MouseFocusClickRaises
Параметр ClickTime
определяет время в милисекундах между нажатием мыши и тем моментом, который FVWM считает за клик. Если нажатие длиться дольше, чем указанное время, то FVWM определяет это, как удержание мыши. MoveThreshold
это такое количество пикселей, на которе нужно сместить мышь, чтобы это было воспринято, как движение.
Функции
Функции могут быть использованы для настройки самых разнообразных вещей в FVWM. Мы рассмотрим только базовый синтаксис и несколько элементарных функций. Для начала поглядим на скелет функции. Он закомментирован для того, чтобы вы могли скопировать его себе в конфиг, как напоминание.
# Конспект функции FVWM # # DestroyFunc FuncName # AddToFunc FuncName # + I (Действие происходит немедленно) # + C (Действие происходит по клику) # + D (Действие происходит по двойному клику) # + H (Действие происходит при задержке мыши) # + M (Действие происходит при движении мыши)
Таким образом, первое, что нужно сделать — это очистить функцию командой DestroyFunc
, это освободит функцию от всего, что могло случайно попасть в неё раньше. Затем командой AddToFunc
вы добавляете действия, которые должны происходить при вызове функции, и, как вы могли заметить выше, эти действия выполняются при определённом событии, совершаемом мышью. Когда вы вызываете функцию в FVWM, вы можете передать ей различные параметры. Например, вы можете вызвать вышеозначенную функцию так: FuncName $0 $1 $2 $3 $4
, где $0-$4 — это параметры, передаваемые функции, и они
могут определять вывод этой функции. Теперь давайте рассмотрим следующий список базовых функций.
##### # Базовые функции ########### DestroyFunc FvwmDeleteOrDestroy AddToFunc FvwmDeleteOrDestroy + H Nop + M Nop + C Delete + D Destroy DestroyFunc FvwmIconifyOrShade AddToFunc FvwmIconifyOrShade + C Iconify + D WindowShade DestroyFunc FvwmMaximize AddToFunc FvwmMaximize + H Nop + M Nop + C Maximize $0 $1 DestroyFunc FvwmMoveOrIconify AddToFunc FvwmMoveOrIconify + M Move + D Iconify DestroyFunc FvwmWindowShade AddToFunc FvwmWindowShade + D WindowShade $0
Первая функция FvwmDeleteOrDestroy
не делает ничего, если мышь задержена при наведении или двигает. На одиночный клик эта функция закроет окно обычным образом, а на двойной удалит, даже если оно будет сопротивляться. Вторая функция FvwmIconifyOrShade
на одиночный клик свернёт окно на панель задач, а на двойной — свернёт в заголовок. Функция FvwmMaximized
примет два параметра, определяющие, как развернуть окно. Например, вы можете вызвать функцию FvwmMaximized 100 100
, и тогда окно развернётся на 100% по горизонтали и вертикали. Если же вы вызовете её как FvwmMaximize 100 0
, то окно растянется во всю ширину окна, но сохранит свою высоту. Функция FvwmMoveOrIconify
позволит перетаскивать окно, когда вы двигаете его мышью, и свернёт его на панель задач при двойном клике. А функция FvwmWindowShade
свернёт окно в заголовок, если ей передан параметр true (FvwmWindowShade True
), и развернёт его из заголовка, если ей передан параметр false. Если она вызвана без параметров, то она развернёт свёрнутое окно и свернёт развёрнутое.
Теперь напишем несколько функций запуска приложений, чтобы потом просто вызывать эти функции. Эти функции очень просты, но они вносят немного организованности:
##### # Функции для запуска программ ########### DestroyFunc FvwmXTerm AddToFunc FvwmXTerm + I Exec exec xterm DestroyFunc FvwmATerm AddToFunc FvwmATerm + I Exec exec aterm DestroyFunc FvwmGVim AddToFunc FvwmGVim + I Exec exec gvim DestroyFunc FvwmGimp AddToFunc FvwmGimp + I Exec exec gimp-2.0 DestroyFunc FvwmFireFox AddToFunc FvwmFireFox + I Exec exec firefox DestroyFunc FvwmIrssi AddToFunc FvwmIrssi + I Exec exec aterm -e irssi DestroyFunc FvwmXmms AddToFunc FvwmXmms + I Exec exec xmms DestroyFunc FvwmViewManPage AddToFunc FvwmViewManPage + I Exec exec xterm -fg White -bg DarkBlue -g 80x40 -fn 7x14 -fb 7x14bold \ -n "Manual Page - $0" -T "Manual Page - $0" -e man "$0"
Первые функции должны быть понятны, а вот последнюю стоит объяснить. Она принимает в качестве аргумента man-страницу. Например, если вы выполните FvwmViewManPage fvwm
, то отобразится страница man fvwm в терминале xterm. Также обратите внимание на синтаксис последних строк. Вторая строка снизу оканчивается на обратный слэш (\
), это означает, что следующая строка должна восприниматься как продолжение текущей. То есть последние две строки интерпретируются как одна, благодаря бэкслэшу.
Теперь взглянем на три специальные функции: StartFunction
, InitFunction
и RestartFunction
. Функция StartFunction
выполняется при запуске FVWM, в то время как InitFunction
выполняется после StartFunction
, когда инициализируется FVWM. Функция RestartFunction
выполняется после StartFunction
при перезапуске FVWM.
##### # Функции запуска ########### DestroyFunc StartFunction AddToFunc StartFunction + I Module FvwmTaskBar + I Module FvwmPager 0 2 + I Module FvwmButtons MyButtons DestroyFunc InitFunction AddToFunc InitFunction + I Exec exec xscreensaver + I Exec exec fvwm-root -r $[fvwm_wallpapers]/background.png + I FvwmXmms + I FvwmATerm DestroyFunc RestartFunction AddToFunc RestartFunction + I Nop
Во время запуска FVWM подгружает три модуля: FvwmTaskBar, FvwmPages и FvwmButtons. После запуска FVWM включает скринсейвер, задаёт фоновое изображение, запускает XMMS и ATerm. При перезапуске он ничего не делает (кроме StartFunction
).
Функции могут быть достаточно подробными, добавить много функциональности вашему окружению. Функции могут иметь любое число параметров ($1, $2, $3 и т.д.) и сочетать в себе любое количество действий мыши. Функции могут иметь любое имя, кроме зарезервированных для FVWM, таких как Nop, Delete, Destroy, Restart и пр.
Вот ещё немного примеров разных функций:
##### # Screenshot Functions (uses ImageMagick) ########### DestroyFunc FvwmWindowScreenshot AddToFunc FvwmWindowScreenshot + I ThisWindow (!Shaded !Iconic Iconifiable) \ Exec import -window $[w.id] -quality 100 -silent \ "$[fvwm_home]/screenshot/screenshot-`date +%F[%R]`.$[w.id].jpg" DestroyFunc FvwmDesktopScreenshot AddToFunc FvwmDesktopScreenshot + I Exec sleep $0; import -window root -quality 100 -silent \ "$[fvwm_home]/screenshot/screenshot-`date +%F[%R]`.jpg" ##### # XRoach Invasion ########### DestroyFunc XRoachInvasion AddToFunc XRoachInvasion + I Exec exec xroach -roaches 5 -rc Cyan -speed 17 + I Exec exec xroach -roaches 3 -rc Red -speed 15 + I Exec exec xroach -roaches 7 -rc Green -speed 10 + I Exec exec xroach -roaches 3 -rc Blue -speed 20 + I Exec exec xroach -roaches 1 -rc Black -speed 30 + I Exec exec xroach -roaches 1 -rc White -speed 40 DestroyFunc XRoachExterminate AddToFunc XRoachExterminate + I Exec killall xroach
Первая пара функций делает скриншот одного окна или всего рабочего стола с помощью ImageMagick'а. Чтобы сделать скриншот одного окна, вызовите первую функцию как Pick (Circulate Hit) FvwmWindowScreenshot
. После чего сменится курсор. Выберите им то окно, снимок которого хотите получить. Вторая функция сделает скриншот рабочего стола после паузы, длительность которой передаётся параметром $0 в секундах. FvwmDesktopScreenshot 5
сделает снимок рабочего стола через пять секунд после вызова. Это хороший путь для того, например, чтобы снять меню. Вторая группа функций запускает древнюю игрушку X.org'а - тараканов, ползающих по вашему экрану. Для этого у вас должен быть установлен xroach.
Сочетания клавиш
Всего существует два типа биндингов: к мыши и к клавиатуре. Чтобы лучше понять, как это работает, давайте взглянем на типичный экран с одним развёрнутым окном и двумя свёрнутыми. Из следующей схемы ясно, что экран разделён на следующие области: R — рабочий стол, I — иконки, в которые свёрнуты окна, F — углы рамок окон, S — стороны рамок окон, T — заголовок окна, W — клиентская область приложения, 0—9 — кнопки заголовка окна. Запомните, что A означает везде, то есть не важно, где расположен курсор.
Задавать биндинги вы можете по нижеследующему образцу. Все клавиатурные биндинги записываются как Key X Контекст Модификатор Действие
, а мышинные как Mouse X Контекст Модификатор Действие
. Здесь X — это клавиша или кнопка мыши, контекст — область, в которой была нажата клавиша или кнопка, модификатор — это модификатор клавиатуры (типа Капс-Лока, Контрола, шифта и пр.), и действие — то, что нужно совершить по данному событию. Модфификаторы кодируются как A — любой (any), C — Control, S — Shif, M — Meta, N — никакой (nothing), или числами 1—5, что повторяет X-Модификаторы (man xmodmap).
##### # Базовые биндинги ########### Key F1 A M Menu MenuFvwmRoot Key Tab A M WindowList Root c c NoDeskSort, SelectOnRelease Meta_L Key Super_L A A FvwmATerm Mouse 1 R A Menu FvwmRootMenu Mouse 3 R A Menu FvwmWindowOpsMenu Mouse 1 1 A FvwmDeleteOrDestroy Mouse 1 3 A FvwmIconifyOrShade Mouse 1 5 A FvwmMaximize 100 100 Mouse 2 5 A FvwmMaximize 0 100 Mouse 3 5 A FvwmMaximize 100 0 Mouse 1 W M FvwmMoveOrIconify Mouse 1 I A FvwmMoveOrIconify Mouse 4 T A FvwmWindowShade True Mouse 5 T A FvwmWindowShade False
Это можно описать как:
- По нажатию Alt+F1 независимо от фокуса и положения курсора открывает главное меню FVWM.
- Позволяет переключать окна по Alt+Tab
- Запускает ATerm по нажатию левой командной клавиши.
- Открывает главное меню по клику левой кнопкой мыши на рабочем столе.
- Открывает WindowOpsMenu по клику правой кнопкой мыши на рабочем столе.
- Закрывает или удаляет окно по клику или двойному клику по кнопке №1.
- Сворачивает окно в иконку или в заголовок по клику или двойному клику на кнопке №3 .
- Разворачивает окно на полный экран, когда первая кнопка мыши (левая) нажимает на кнопку №5.
- Растягивает окно по вертикали, когда вы кликаете второй кнопкой мыши на кнопку №5.
- Растягивает окно по вертикали, когда вы кликаете третьей кнопкой мыши на кнопку №5.
- Перемещает окно, если мы тащим его мышью с зажатым Alt и сворачивает в иконку по двойному клику.
- Binds the FvwmMoveOrIconify function to work on 'Icons' so they can be moved and UnIconified.
- Сворачивает окно в заголовок, когда вы крутите колёсиком вверх хотя бы два раза.
- Разворачивает активное окно из заголовка, когда вы крутите колёсиком вниз хотя бы два раза.
Внешний вид окон
В FVWM вы можете задавать внешний вид окон через цветовые схемы и изображения. В качестве первого примера рассмотрим простой дизайн окон без картинок. Для начала зададим колорсеты, определяющие базовые цвета, которые мы будем использовать. Колорсеты могут быть использованы для задания цветов всего, чего угодно, в FVWM. Следующий кусок конфига задаёт три простых колорсета:
##### # Window Colorsets ########### Colorset 3 fg #101060, bg #e6e7d7 Colorset 4 fg Black, bg #a6a797 Colorset 5 fg White, bg Black
Это задаёт три колорсета с номерами 3, 4 и 5, которые имеют цвет текста (foreground, fg) и цвет фона (background, bg). Цвета могут быть заданы в hex-нотации или псевдонимами X, записанными в /etc/X11/rgb.txt
.
Настройка
Клавиатура и мышь
Сочетание клавиш для fvwm - это заданное пользователем действие, выполняемое при нажатии клавиши (или кнопки мыши) в определённом контексте, с определённым модификатором, несколькими модификаторами или без модификаторов и в зависимости от имени окна.
Поддержка контекста для хоткеев и кнопок мыши - важная и удобная черта любого wm, именно благодаря ей правый клик по содержимому окна отличается от правого клика по его заголовку или по рабочему столу, а сочетания клавиш wm не конфликтуют с сочетаниями клавиш в приложениях.
fvwm понимает следующие контексты:
R
- рабочий стол
I
- иконка
F
- углы декорации окна
S
- стороны декорации окна
T
- заголовок окна
W
- окно приложения
0-9
- кнопки
M
- меню
A
- любое место на десктопе
Контексты можно комбинировать между собой: FSTW
, WT
, FS
.
Модификаторами могут служить клавиши Ctrl, Shift, Super и т.д.
Модификаторы, понимаемые fvwm и их обозначения в конфигурационном файле:
Ctrl - С
Super - 4
Alt - 1
Shift - S
Caps Lock - L
Num Lock - 2
Модификаторов может быть несколько: C1
, CS
, C4
.
Поскольку клавиши Caps Lock и Num Lock являются модификаторами, при включении цифровой клавиатуры или верхнего регистра они считаются fvwm нажатыми, что приводит к некорректной работе (сбросу настроек клавиатуры, мыши и политики фокуса на дефолтные). Для того, чтобы этого избежать, нужно добавить в конфигурационный файл строку
IgnoreModifiers 2L
Кроме всего перечисленного, fvwm может принимать во внимание название активного окна, оно указывается в скобках после Key
или Mouse
, можно использовать wildcards (*).
В качестве действия можно указывать любую команду fvwm - Exec
, Function
, PipeRead
, Restart
и т.д.
Таким образом, сочетания клавиш задаются так:
Key/Mouse (Окно) Клавиша/Кнопка Контекст Модификатор Действие
Несколько примеров:
Список окон по Alt+Tab
Key Tab A 1 WindowList Root NoGeometry
Закрытие окна по левому клику на крайней правой кнопке декорации
#Функция DestroyFunc DeleteWin AddToFunc DeleteWin + I Delete #Вызов функции Mouse 1 2 N DeleteWin
Меню по правому клику на рабочем столе
Mouse 3 R N Menu MainMenu
При активном окне браузера вызвать gmrun по Ctrl+Alt+Z
Key (*Namoro*) Z A C1 Exec exec gmrun
Практические советы
Несколько советов по настройке fvwm, которые могут помочь в настройке, улучшить читаемость и переносимость конфигурационного файла, задействовать полезные функции fvwm.
- Удобно разнести настройки, отвечающие за разные аспекты поведения wm по разным конфигурационным файлам и объединить их с помощью функции
Read
- это облегчит чтение конфигурационных файлов, внесение в них изменений по ходу работы и обмен интересными вариантами настройки. В последствии можно будет создать меню настроек fvwm, где каждый пункт будет ссылаться на соответствующий конфигурационный файл. - В процессе настройки полезно добавить горячие клавиши для
FvwmIdent
иFvwmConsole
- первая функция позволяет вызвать информацию об окне - слой, геометрия, тип и т.д., а вторая - вводить команды fvwm в специальной консоли. - Если вы хотите использовать в своей конфигурации fvwm скрипты в меню, подобные pipe-scripts в openbox, такие меню имеет смысл делать динамически генерируемыми. Синтаксис такого меню:
#Создаём меню и объявляем его динамически воссоздаваемым функцией MakeBasicMenu AddToMenu Basic Basic title + DynamicPopupAction Function MakeBasicMenu #Добавляем пункты меню AddToFunc MakeBasicMenu + I DestroyMenu recreate Basic + I AddToMenu Basic "Gedit" Exec exec gedit + I AddToMenu Basic "Firefox" Exec exec firefox
- В репозитариях Ubuntu нет неофициального пакета fvwm-patched - fvwm 2.5.28 с набором патчей, но исходники без проблем компилируются.
- Для того, чтобы нажатие NumLock не приводило к сбросу ваших настроек, добавьте в свой конфигурационный файл строку, заставляющую fvwm не считать NumLock модификатором:
IgnoreModifiers 2
Полезные ссылки
- http://box-look.org/content/show.php/fvwm+starter%27s+kit?content=123415&PHPSESSID=49d0b327436a6d785575d6f123ad55e5 - вариант конфигурационного файла fvwm, совмещённого с кратким руководством по настройке горячих клавиш, автозапуска и меню, имеется вариант на русском языке
- http://www.zensites.net/fvwm/guide/ - пособие по настройке fvwm, старое, но актуальное. На английском языке.
- http://fvwm.org/ - официальная страница fvwm.
- http://box-look.org/index.php?xcontentmode=7314&PHPSESSID=49d0b327436a6d785575d6f123ad55e5 - конфигурации fwvm на box-look.org
- Стилистика этой статьи не соответствует рекомендуемому минимуму.
- Содержание этой статьи не соответствует рекомендуемому минимуму.
- Структура статьи меняется по мере написания.
- Вероятно, стоит перевести FVWM Beginners Guide до конца, добавить ссылок на оригинал и более детально объяснить это вообще такое, FVWM.
- Дополнительно было бы неплохо приложить к статье несколько скриншотов и соответствующих им примеров конфигураций.