PekWM

mlclm

2008-01-23

Много всяких WM существует.

Всегда сидел в KDE, но также всегда доставала скорость работы и загрузки как самого DE, так и программ (хоть Арч и самый быстрый, имхо). Начал выбирать WM для себя, т.к. DE слишком громоздко.

Итак, DE отпадает. WM - fluxbox - панель - привык переключать приложения и рабочие столы клавишами, поэтому надобность в панели отпадает. OpenBox - не нравятся конфиги xml. Как то всё запутанно. Опять же, не люблю чтобы окна перекрывались, решил глянуть на wmii, ion, dwm. dwm - конфиги на С, имхо, не то, что нужно, я не программист, а юзер. Да ещё говорят, что после каждого изменения конфига надо пересобирать, извините, но это ваащщее. ion - lua мне не знаком, и знакомиться не собираюсь, опять же не программер. Wmii, говорят, что уже устарел, и опять же запутанные конфиги. В общем, многие могут подумать, что я просто сильно придираюсь, и настроить можно всё, и выучить тоже не проблема. Так и говорю, в pekwm влюбился сразу. Странно, что на русском языке про него что-то найти проблематично. На официальной странице есть довольно подробное руководство, но на английском. С горем пополам, разобрался, но ещё не полностью. В общем, буду потихоньку рассказывать, что же я узнал, может кому-нибудь ещё приглянётся.

После скачивания, установки и первого запуска последней версии pekwm, в домашнем каталоге пользователя появляется папка с конфигами - .pekwm.
autoproperties - здесь прописываются “автосвойства” приложений (окон)
config - основной конфиг
keys - настройки “горячих” клавиш
menu - меню
mouse - действия на разные действия с мышей (товтология какая-то:) )
start - запуск приложения при старте WM
themes - папка с темами
vars - переменные, которые могут понадобиться как в menu, так и в keys, mouse.

  1. Итак, будем шагать от самого важного - config Files - описывается, где лежат конфиги.
    MoveResize - параметры изменения размеров и позиции окон.
    Screen - количество рабочих столов и что должно показываться
    при листании окон. положение окон по умолчанию в секции Placement.
    UniqueNames - не понял зачем нужно, меня и так всё устраивает:)
    Viewports - как я понял используется для расположения рабочих столов, т.е. как они будут располагаться, сколько колонок и строк.
  2. Menu - действия при нахождении в меню. Здесь я поменял только Enter = “ButtonPress” на Enter = “Motion”, т.е. в меню заход на уровень ниже при наведении как этот “подпункт”, а не клика на нём. Тут уже кому как удобнее.
    Harbour - так называемая “гавань”, сделана специально для wm-dockapp’ов. Где располагаются и какой размер. Я ей не пользуюсь, поэтому, что к чему с ней - сказать не могу. Config вроде немного описал,
  3. дальше vars:

    Тут мы просто задаём переменные, чтобы потом каждый раз не писать длинные переменные в других файлах, например:
    $VT = “urxvt -fade 30 +sb -fn -*-terminus-medium-*-*-*-16-*-*-*-*-*-iso10646-* -bg black -fg white”

    теперь вместо этой длинючей команды в конфигах можно просто прописать $VT, но убедиться что в начале конфига прописано INCLUDE=”vars”. Меню - чтобы вручную всё не вбивать, можно воспользоваться утилитой menumaker, которая есть в репозитариях арча, команда типа

    mmaker pekwm -t rxvt 
    Возможно, ещё потребуется опция -f, если потребуется перезаписать файл с меню. Синтаксис файла меню простой:
    INCLUDE=”vars” #чтобы не писать длинные команды, вводим переменные, об этом я говорил ранее
    Rootmenu = “Pekwm” { #название корневого раздела меню
    Entry = “Run…” { Actions = “ShowCmdDialog” } #показать диалог запуска типа “Выполнить…”
    Entry = “Terminal” { Actions = “Exec $VT &” } #запустить терминал
    SubMenu = “Wallpapers” { #открываем подменю
    Entry = “” { Actions = “Dynamic /home/malc/.pekwm/scripts/ws” } #что у нас находится в подменю
    }
    }
    Separator {} #разделение с помощью сепаратора
    WindowMenu = “” {} # меню, которое показывается при клике правой клавишей на заголовке окна
    Самое интересное здесь, это использование динамических меню, которые изменяются от содержания каталогов. Стандартные скрипты, для примера находятся в /usr/share/pekwm/scripts/. Я использую один скрипт для обзора каталога с wallpaper’ами и установки в качестве фона рабочего стола, выглядит от так:
    #!/bin/bash
    output=`ls /home/malc/fff/`
    echo “Dynamic {”;
    for name in $output;
    do
    echo ” Entry = \”$name\” { Actions = \”Exec fbsetbg /home/malc/fff/$name\” }”
    done
    echo “}”
    Здесь в папке /home/malc/fff/ находятся wallpaper’ы. Команда, при клике на пункте меню “Exec fbsetbg /home/malc/fff/$name\” - т.е. просто ставится фон рабочего стола. Скрипты можно писать на bash и perl, кому что ближе. Так же в меню таким же образом можно выводить разные данные из вывода команд каких-либо (ping, заряд батареи…). Наверное я допустил ошибку, но пробелы в названиях файлов меню (а может и скрипт) обрабатывает как новый файл.
  4. Синтаксис .pekwm/keys:
    INCLUDE = “vars” #включаем сюда переменные
    Global { #основные клавиши
    KeyPress = “Mod1 T” { Actions = “Exec $VT &” } #по Alt + T запустить терминал из переменной $VT
    KeyPress = “#233? { Actions = “GoToWorkspace Next” } #при нажатии на
    клавишу с keycode #233 Перейти на следующий рабочий стол. keycode можно
    получить из вывода программы xev
    KeyPress = “Mod1 R” { Actions = “MoveResize” } #при нажатии Alt+R активировать меню MoveResize
    }
    MoveResize {
    KeyPress = “Left” { Actions = “MoveHorizontal -10? }
    #после Alt+R при нажатии на “влево” окно подвинется на 10 пикселей
    влево.
    ….
    }
    CmdDialog { #реакция на клавиши в диалоге “Выполнить”
    KeyPress = “Left” { Actions = “CursPrev” } # “влево” - передвинуть курсор на предыдущую позицию
    …..
    }
    Menu { #реакция на нажатия клавиш в меню
    KeyPress = “Down” { Actions = “NextItem” } # “вниз” - передвинуть курсор на следующий пункт меню.
    …..
    }
  5. Mouse - ну здесь я так думаю тоже ничего страшного нет. Всё вполне понятно:
    DoubleClick - двойной щелчок,
    ButtonPress - нажатие на кнопку,
    ButtonRelease - “отжатие” кнопки,
    Motion - движение, ну и так далее,
    думаю по логике разобраться можно, тем более настройки по умолчанию мыши, имхо, самые подходящие.

    Я рекомендую часть про menu и cmddialog оставить в keys, а остальное переделать так, как вам хочется, потому что команд там дохрена, все не запомнишь, легче дописать своё, чтобы не путаться, как привык, так и работаешь. в .pekwm/start просто записываем команды, которые должны выполняться при старте wm,например

    opera &
    amarok & 
    Ну и так далее, ничего сложного. Единственное, он должен быть “исполняемым”, чтобы всё запустилось.
  6. Autoproperties: Здесь мы задаём параметры при старте определённых приложений, например: Действия происходят при различных событиях приложения. Реакция по WM_STRING из вывода команды xprop. Разработчики предлагают такой скрипт
    #!/bin/bash
    {
    echo -n ‘Property ‘
    xprop WM_CLASS | sed ’s/.*”\(.*\)”, “\(.*\)”.*/= “\1,\2? {/g’
    echo ‘}’
    } 
    сохраняем, делаем его исполняемым, и запускаем. Нажимаем на любое окно получаем примерно следующее: Property = “main,psi” { } Это вставляем в autoproperties, получаем примерно такое:
    Property = “main,psi” {
    ApplyOn = “Start New” #реагировать на старт проги.
    Sticky = “True” # закрепить ко всем рабочим столам
    Layer = “OnTop” # повесить выше всех
    FrameGeometry = “144?400+880+18? # местонахождение и размер при старте, 144х400 - размер, 800+18 - положение, можно только положение обозначать “+800+18? например.
    Border = “False”; Titlebar = “False” #стартовать без бордюров и заголовка.
    }
Поддерживает регулярные выражения, т.е. ^main будет обозначаться что строка должна начинаться с main, .* - обозначать будет любые символы. Честно говоря я плохо знаю регулярки, знаю только нужные:) Полный список всех опций лучше возьмите в документации, он слишком длинный, там есть старт на нужном раб. столе, в нужном месте, максимизация приложения, подмена заголовка, группировка окон, имхо, всё, что душе угодно. Я себе не ставил цель перевести документацию, так что тем, кто хочет попробывать, придётся самим разбираться с каждой опцией:) Ну и я, конечно же, обещаю помогать чем смогу. Итак, с этим WM я достиг того, что хотел от WM.

Conky выводит всю нужную информацию в полоске сверху, он “Always On Top”, все приложения стартуют без заголовка, т.к. имхо, только мешает, всё управление окнами - горячими клавишами. Стартуют как раз под conky, “за” conky ничего не залезает, psi стартует без заголовка и без оформления справа, остальные окна за него не залезают, т.к. вместо просто максимизации окна используется Maxfill, типа “занять всё свободное пространство”, горячие клавиши настроены так, как я хочу.

P.S. разобрался с Group, группировка приложений по типу. Очень удобно, например браузеры: Опера и Файрфокс, забубенить их в одну группу, оба расположены на одном рабочем столе и развёрнуты на весь экран. При помощи горячих клавиш приложения в группе пеерключаются. ИМХО, очень удобно.