Пользователь
0,0
рейтинг
22 августа 2012 в 01:49

Администрирование → Классный оконный менеджер — Awesome WM

imageЗдравствуйте! Прочитав недавно статью про оконные менеджеры в Linux, мне захотелось рассказать всем о менеджере, который был там упомянут — «awesome».
Это тайлинговый windows manager для unix (linux, freebsd, openbsd, netbsd).

Описание


Awesome WM — тайлинговый wm, с возможностями быть и композитным. Это одна из его особенностей, часто пользователям требуется компактность (тайлинговая сторона этого WM), но и иногда можно и поработать в обычном режиме (композитном). Он очень легок, не нагружает процессор, и пространство экрана используется очень размерено и пустых пространств не остается (в тайлинговом режиме).
Настраивается он при помощи конфигурационного файла, на скриптовом языке Lua. Есть поддержка плагинов, которые тоже, в свою очередь, написаны на Lua.

Установка


Установить его очень просто, например на Arch Linux просто напишите
sudo pacman -S awesome vicious

Или на Debian based
sudo apt-get install awesome awesome-extra

Пакет «vicious» содержит в себе базовые плагины, которые Вы в дальнейшем можете использовать.

Далее требуется прописать его загрузки при загрузке X Window System. Это прописывается в файле, находящемся в домашнем каталоге, ".xinitrc".
#!/bin/sh

exec awesome

Перезагружаемся и появляется это wm.

Первое знакомство



Вот так выглядит ваша сессия при первом включении. Казалось бы, как в этом работать и что тут делать? На самом деле все просто, когда поймешь ее систему. Все действия с окнами выполняются с помощью хоткеев. По умолчанию они таковы (все это можно прочитать в «man awesome», сам текст взят с gentoo wiki):

super + number переход на другой тэг, где тэг это номер клавиши, точнее его положение (проводя аналогию с другими wm, тэг = вирт. рабочий стол).
super + shift + number перенести текущее окно на другой тэг.
super + j, super+k переход между окнами.
super + shift + j или super + shift + k поменять местами два окна.
super + Space изменение отображения окон. (В awesome очень много видов отображений — тайлинговые: вертикально, горизонтально; композитные — можно мышкой таскать; приложение в фокусе на весь экран и пр.)
super + Enter запустить терминал.
super + r запуск программы.
super+shift+c закрыть окно.
super+shift+r перезапустить awesome.
super+shift+q выйти из awesome.

Несомненно кому-то они не удобны. Но ведь мы можем все изменить! Поэтому переходим к конфигурационному файлу.

Конфигурационный файл


Предупреждение, для редактирования его нужны хотя бы небольшие навыки в программировании или написании скриптов.
Глобальный конфиг файл находится в системе в "/etc/xdg/awesome/rc.lua", но его лучше не изменять, тк если он не правильный, то wm не запустится. Поэтому сделаем свой.
mkdir ~/.config/awesome
cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua

И будем изменять уже непосредственно его.
Прежде всего хотелось бы изменить некоторые клавиши.
Хоткеи находятся в секции
" — {{{ Key bindings "
Изменять все просто.
modkey — это наша клавиша super (с логотипом windows на клавиатуре).
Например:
awful.key({ modkey, "Shift"   }, "q", awesome.quit),

Это строчка говорит, что super + Shift + q заставит awesome закрыться.
Допустим, мы хотим оставить тоже самое, но без shift, тогда будет
 awful.key({ modkey,  }, "q", awesome.quit),
Или например просто по клавише Esc (Это лишь пример!)
 awful.key({}, "Esc", awesome.quit),
Думаю, логика понятна.
Так, с клавишами разобрались. Теперь стоит настроить глобальные переменные.
Эта секция находится в начале. (Далее мои собственные настройки, которые вы можете, конечно же, изменить)
terminal = "terminal"
browser  = "chromium-dev"
editor = os.getenv("vim") or "vim"
editor_cmd = terminal .. " -e " .. editor

Думаю с «внутренностями» мы разобрались, пора браться за внешний вид.

Еще чуть-чуть про настройку


Все так же продолжаем работать в конфигурационном файле.
Сперва, вместо просто цифр хотелось бы переименовать наши тэги. Это находится в секции
"--- {{{ Tags"
Вместо цифр просто напишите имена.
Например у меня:
tags[s] = awful.tag({ "All", "IM", "Work", "Etc", "Media"}, s, layouts[1])

Вообще про конфигурацию я написать хорошо не сумею, ведь это дело персональное. Лучше всего про это прочитать на awesome wiki. Вообще, дописав конфиг, Вы ощутите новую легкость работы с окнами. Большое количество плюшек можно найти здесь.

Вместо заключения


Хочу отметить, что данный wm идеально подойдет людям, которые часто держат в фокусе несколько окон. Так же он подойдет для слабых машин и легковесных систем, и машин с небольшими экранами (ноутбуки)
Заучив (по началу), а потом по наитию нажимая хоткеи, Вы уже не будете думать над тем, как, куда, что сделать с окном, как его разместить.
Например в awesome в одном тэге можно держать определенные окна. Например у меня в тэге IM находятся Skype и Pidgin.
Но что слова! Скриншоты!





Полноразмерный последний скриншот
Мои обои, по просьбам трудящихся.
А так же видео, демонстрирующее работу WM.

Так же прилагаю архив со своим конфигом + плагины.

Надеюсь, я заинтересовал Вас этим классным (от англ. awesome) WM, и Вы попробуете его в деле! И готов с радостью ответить и помочь в комментариях.

UPD. Всех, кто хочет поделится своей конфигурацией или посмотреть чужие, ждут на соответствующей странице вики.
ɐƃɐɾɐƃɐɾ @JagaJaga
карма
20,5
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (79)

  • +1
    Пробовал когда-то. Не осилил. Сейчас еще попробую, спасибо что напомнили.
    • +6
      Я тоже думал не осилю, но собравшись идин вечерок, взял и осилил :) Пишите в лс, чем смогу — помогу.
      • 0
        Вроде осилил. Как говорится, с миру по нитке, с конфига по строчке :)
        keedhost.livejournal.com/115598.html
        • 0
          А что за шрифт в MC на скрине?
          • 0
            terminus же
  • +11
    Одно время тоже работал в нем. Но затем вернулся в гном.
    Всетаки большую часть времени использую приложения развернутыми на весь экран, а при этом весь смысл тайловости пропадает.

    Мне кажется в статье не хватает информации по виджетам.
    Потому как с конфигом по умолчанию не будет работать даже смена раскладки клавиатуры.
    • 0
      Я писал скорее ознакомительную статью, тк «внутренняя» информации все же на вики лучше меня написана. А насчет раскладки — я даже не задумывался, тк у меня ее изменении организовано с помощью X.org
    • +6
      Смену раскладки можно и отдельно высталять примерно такой командой:
      setxkbmap -layout 'us,ru' -option 'grp:alt_shift_toggle
      
    • +1
      Всетаки большую часть времени использую приложения развернутыми на весь экран, а при этом весь смысл тайловости пропадает.

      Можно использовать, например, что-то вроде этого
      awful.tag("www",1,awful.layout.suit.max)
      
      тогда все окна будут растянуты на весь экран.
    • +3
      После того, как поработал в awesome, вернуться назад в gnome\kde не смог.
      Точно так же люблю, когда приложение открыто на весь экран, смысл от тайловости как бы пропадает, но зато пропадает необходимость каждый раз разворачивать окна (они сами раскрываются) и + хоткеи. А если от гнома не нужно большего — то зачем он?
  • 0
    Народ, а кто работает с двумя мониторами, возможно сможете подсказать как бы это научиться в awesome переключаться между мониторами:)
    Если такое возможно, конечно.
    • 0
      На вики есть статья, если я конечно правильно понял, о чем Вы.
    • +2
      У меня 2 монитора в TwinView. Все заработало из коробки.
      По умолчанию, если я правильно помню, то Mod4 + o переносит окно на другой монитор.
      А Mod4 + Shift + j (k) переключает между окнами.
      • –1
        У меня два монитора, не TwinView. Ничего не заработало из коробки. Правильное разрешение не определилось, мониторы видит зеркально. Получилось выставить разрешение на одном из мониторов, второй вдруг стал просто неактивным. Помогите, оно меня побеждает!
        • +2
          Через xrandr можно. Например:

          xrandr --output DVI-I-1 --mode 1920x1200 --left-of HDMI-1
          • 0
            Да, через него и выставлял, правда не с первого раза удачно. Мониторы настроены. До первого логина, потом все сбрасывается. Можно это дело как-то зафиксировать?
            • +2
              Разумеется, сбрасывается :) Например, можно в .xinitrc вписать.
    • 0
      Можно. Таже очень просто настраивается количество слоёв на каждом мониторе и положение окон при запуске (на каком мониторе и слое запускать приложение).
    • +1
      С двумя мониторами я думаю он просто не нужен. У меня 30" + 24" и я искренне не понимаю зачем мне тайлинговый режим )

      а вот на лаптопе очень удобно, да.
      • +3
        После того как я начал работать в awesome я искренне не понимаю, как можно работать вне тайлинга ( независимо от количества мониторов ) (:
      • +1
        хм, а я вот наоборот с появлением больших мониторов поглядываю на тайловые wm — на них наконец можно распологать несколько приложений так чтобы они не были микроскопическими
    • +1
      У меня это сделано, примерно, так (куски из конфига):
      -- Table of layouts to cover with awful.layout.inc, order matters.
      layouts =
      {
        awful.layout.suit.tile,
        awful.layout.suit.tile.left,
        awful.layout.suit.tile.bottom,
        awful.layout.suit.tile.top,
        awful.layout.suit.fair,
        awful.layout.suit.fair.horizontal,
        awful.layout.suit.spiral,
        awful.layout.suit.spiral.dwindle,
        awful.layout.suit.max,
        awful.layout.suit.max.fullscreen,
        awful.layout.suit.magnifier,
        awful.layout.suit.floating
      }
      -- }}}
      
      -- {{{ Tags
      -- Define a tag table which hold all screen tags.
      tags = {}
      for s = 1, screen.count() do
        -- Each screen has its own tag table.
        tags[s] = awful.tag(
          {
            -- tag names
            1,  2,  3,  4,  5
          }, s, {
            -- tag layouts
            layouts[9], layouts[1], layouts[1], layouts[9], layouts[9]
          }
        )
      end
      -- }}}
      
      -- {{{ Key bindings
      -- ... тут идут другие биндинги ... --
      
      for i = 1, keynumber do
          globalkeys = awful.util.table.join(globalkeys,
              awful.key({ modkey }, "F" .. i,
                        function ()
                              local screen = mouse.screen
                              if tags[screen][i] then
                                  awful.tag.viewonly(tags[screen][i])
                              end
                        end),
              awful.key({ modkey, "Control" }, "F" .. i,
                        function ()
                            local screen = mouse.screen
                            if tags[screen][i] then
                                awful.tag.viewtoggle(tags[screen][i])
                            end
                        end),
              awful.key({ modkey, "Shift" }, "F" .. i,
                        function ()
                            if client.focus and tags[client.focus.screen][i] then
                                awful.client.movetotag(tags[client.focus.screen][i])
                            end
                        end),
              awful.key({ modkey, "Control", "Shift" }, "F" .. i,
                        function ()
                            if client.focus and tags[client.focus.screen][i] then
                                awful.client.toggletag(tags[client.focus.screen][i])
                            end
                        end))
      end
      -- }}}
      
      
      Вроде ничего не забыл…

      Немного пояснений: при запуске awesome, он смотрит сколько экранов есть и создает по 5 тегов на каждый экран. Экран (монитор) выбирается в зависимости от того, на каком из них находится указатель мыши.
      modkey+F{1..5} — переключение между тегами
      modkey+Shift+F{1..5} — переместить активное окно из текущего тега в выбранный тег
      modkey+Control+F{1..5} — отображать вместе окна из текущего тега и из выбранного тега(тегов)
      modkey+Control+Shift+F{1..5} — вкл/выкл отображения активного окна на указанном теге(тегах)
      • 0
        Хм, а язык Lua вроде и не такой страшный, как я представлял. Правда уверен, всё равно будет трудно изучать не_программисту. Из-за, вероятно, малой распространенности -> малого кол-ва информации+форумов на русском.
        Но на заметочку взял.
        Пока-что на Linux-машине использую openbox + тайловую штуку, PyTile.
        Выглядит так: сразу после загрузки окон (у меня это 3 терминала) нажимаю alt+a и вуаля, окна разложены.
        • 0
          Доки на русском есть, например (первые 2 ссылки из гугла по запросу «lua» с фильтром «Только на русском»), чтобы получить первоначальное представление о синтаксисе и типах достаточно глянуть в википедию, а для более глубокого изучения языка и его особенностей есть "Справочное руководство по языку Lua 5.1" на русском. И, да, я тоже не_программист, особых сложностей при изучении не возникло.

          У меня с awesome это выглядит так: сразу после загрузки компа и входа в систему у меня запускаются gmail (ff prism), ff, pidgin, skype, 5 терминалов, claws mail, remmina, red notebook и все на своих тегах (рабочих столах) =)
    • +3
      Он прекрасен для N мониторов! Очень удобно. Коллега за пятью развлекается, у меня 2. Полный контроль над тем где когда и как запускаются те или иные приложения. Ни какой гном такого не сможет.
  • 0
    Как стартовать разные демоны вместе с awesome? Есть ли в нем какой-то индикатор раскладок? Индикатор батареии? Какой network manager для wifi посоветуете под awesome?
    • +5
      Это WM, он не занимается стартом разных демонов, о чём вы?
    • +4
      У awesome замечательная wiki на сайте.

      Если вы хотите, чтобы какая-либо команда была выполнена каждый раз при старте awesome, просто добавьте строчку в конфиг.
      Если же важно, чтобы команда выполнялась только один раз, то придется написать скрипт.

      Индикаторы также добавляются в конфиг-файле:
      Индикатор раскладок
      Индикатор батареи awesome.naquadah.org/wiki/Acpitools-based_battery_widget (есть много разных, но я пользовался этим)

      NetworkManager — например, wicd. Диалог добавления сетей называется wicd-gtk. Можно прописать его в автозапуск в конфиге, можно запускать по мере необходимости. Если будете прописывать в автозапуск, то через скрипт, иначе после каждого рестарта awesome (а рестарт нужен, чтобы подгрузить новый конфиг, если он был изменен) у вас будет появляться одна дополнительная иконка wicd в трее.
      • +1
        Не обязательно писать скрипт, можно просто добавить нужные программы в .xinitrc
        • +1
          Может кому поможет: в Ubuntu 12.04 с .xinitrc не заработало, заработало с .xsessionrc
  • +7
    На ЛОРе как-то в галерее вывешивали скрины + описание/конфиги весьма качественной настройки осома: раз, два.
    • +1
      Сколько вкусного. Благодарю. Мой десктоп станет интересней этой ночью.
  • +1
    Извиняюсь за оффтоп, но что за девушка на скрине?)
  • 0
    WMSF(а теперь WMFS2) мне как-то больше понравился.
    • 0
      а какие у них прицнипиальные отличия?
      • +1
        Awesome тяжеловесен. Хотя, если быть откровенным, то на мой взгляд, он чрезвычайно жирный и требовательный до вычислительных ресурсов для фреймового WM. WMFS в этом плане намного приятнее.
        • 0
          Для меня также был большим плюсом простой конфиг, вместо Lua
  • +6
    В Debian пакет называется awesome-extra, а не vicious
    packages.debian.org/wheezy/awesome-extra
  • +4
    Вчера первый раз попробовал, пол вечера переписывал конфиг, но оно того стоило… полностью сменил Openbox на Awesome. Действительно потрясающий wm.
  • 0
    А как же старый-добрый dwm.suckless.org/?
    • 0
      У него нет LuaAPI, да и каждый раз собирать его заново при каждом чихе напрягает.
      • +1
        Я для себя выбрал wmii:
        не нужно учить ЛУА, баш ближе к телу. Не нужно перекомпилировать
  • 0
    Пользовался несколько месяцев, но ИМХО Lua — не лучший вариант, ещё и с очень ограниченным набором фич, использующихся в конфиге он становится сильным оверкиллом. wmii с bash в настройке проще и удобнее, зато намного менее фичаст.
  • 0
    А ещё там есть меню:


    Не понял по конфигу как кнопка меню переносится.
    • 0
      В смысле, как переместить кнопку меню, например, вправо?

      Находите в конфиге, как называется переменная кнопки меню:
      -- Create a laucher widget and a main menu
      mymainmenu = awful.menu.new({                  <-- это переменная меню
      
      mylauncher = awful.widget.launcher({ ... menu = mymainmenu })       <-- а это искомая переменная кнопки меню
      


      Теперь нужно по имени найденной переменной найти примерно такое:
          -- Add widgets to the wibox - order matters
          mywibox[s].widgets = {
              {
                  mylauncher,
                  mytaglist[s],
                  mypromptbox[s],
                  layout = awful.widget.layout.horizontal.leftright
              },
      		mytextbox,
              s == 1 and mysystray or nil,
              mylayoutbox[s],
              mytasklist[s],
              layout = awful.widget.layout.horizontal.rightleft
          }
      

      Если переместить mylauncher в конец верхнего списка (перед «layout = ...»), то кнопка меню будет справа от тегов. А если переместить mylauncher в начало нижнего списка (перед mytextbox), то кнопка меню будет первой справа.

      • 0
        Именно это и интересовало, спасибо.
    • 0
      Ни разу не пользовался, т.к. dmenu просто несравнимо быстрее.
      • 0
        Мне в dwm его иногда не хватает.
        Например, знаю что есть программа в меню называется «Дисковая утилита»,
        а вот исполняемый файл palimpsest.
    • 0
      А как вы добавляете новые пункты в меню? Классически, редактируя конфиги или есть что-то графическое, вроде obmenu?
      • 0
        Никак. Я не пользуюсь awesome.
        Из любопытства установил.
        Но судя по всему чего то вроде obmenu нет.
  • 0
    Как раз искал тайловый WM — спасибо за наводку.
    Расширения для него, как я понял, пишутся только на Lua или есть ещё какие-то варианты?
    P.S. Последнее видео ваше или с просторов?
    • +3
      Можно и на bash.
      • 0
        Ого! Не знал. Спасибо за наводку.
    • 0
      Только на Lua, но язык очень простой.

      С просторов...:)
  • +1
    Сначала хотел осилить awesome, но потом нашёл i3-wm. Он весьма похож на awesome, но настраивать легче (у меня он даже из коробки весьма неплохо работал, в общем-то).
    • +1
      Тоже остановил выбор на i3, очень удобный и легкий WM, особенно с учетом возможности выбора между тайлингом и вкладками для контейнеров.
      • 0
        Аналогично. Использую i3 уже около года и очень им доволен. Кто из новичков ещё не видел презентацию i3 на Google Tech Talk — добро пожаловать.
  • 0
    Мне больше хочется архив с вашими обоями. ;)
  • 0
    Он до сих пор ломается при каждом обновлении и курсор меняется на дефолтный, при наведении на панельку?

    awesome.naquadah.org/wiki/FAQ#How_to_change_the_cursor_theme.3F

    Советую всем заинтересованным тайлингом обратить внимание на xmonad.

    • 0
      Он перестал ломаться при каждом обновлении года 1.5-2 назад. А тогда да, любили в каждом минорном релизе немножко менять формат конфига, чтобы обязательно пришлось после обновления его поковырять.
  • 0
    Тоже использую awesome уже как несколько лет. До этого пыталась юзать xmonad, у awesome оказалось несколько весомым плюсов:
    + корректно отображает заголовки окон с русским текстом
    + содержит встроенный плагин для отображения систрея
    + lua-конфиг более понятен, чем мозгодробительный haskell
    + ну и стандартные плюсы titling window мэнеджеров: экономит место на экране за счёт отсуствующих заголовков и бордюров окон, а также нетребователен к системным ресурсам.

    Саму тайловость практически не использую т.к. удобно каждому приложению отводить всю область рабочего стола

    Автозапуск сделан у меня через .xinitrc:
    xbindkeys &
    syndaemon -i 0.5 -d &
    wmname LG3D
    xset r rate 200 50
    setxkbmap us,ru -option grp:caps_togglegrp_led:caps
    
    $(sleep 1;rxvt) &
    $(sleep 3; google-chrome) &
    $(sleep 3; xsetroot -solid black) &
    $(sleep 7; gajim) &
    $(sleep 11; skype) &
    $(sleep 15; /home/lorien/.dropbox-dist/dropboxd) &
    $(sleep 20; wicd-client) &
    
    awesome
    
    


    В конфиге awesome почти не менял ничего. Основное изменение — настройка автоматического раскладывания программ по нужным столам:

    -- {{{ Rules
    awful.rules.rules = {
        -- All clients will match this rule.
        { rule = { },
          properties = { border_width = beautiful.border_width,
                         border_color = beautiful.border_normal,
                         focus = true,
                         keys = clientkeys,
                         buttons = clientbuttons } },
        { rule = { class = "MPlayer" },
          properties = { floating = true } },
        { rule = { class = "pinentry" },
          properties = { floating = true } },
        { rule = { class = "gimp" },
          properties = { floating = true } },
        { rule = { class = "Firefox" },
          properties = { tag = tags[1][7] } },
        { rule = { class = "Iceweasel" },
          properties = { tag = tags[1][7] } },
        { rule = { class = "Google-chrome" },
          properties = { tag = tags[1][2] } },
        --{ rule = { class = "Opera" },
          --properties = { tag = tags[1][2] } },
        --{ rule = { class = "Iceweasel" },
          --properties = { tag = tags[1][2] } },
        { rule = { class = "Pidgin" },
          properties = { tag = tags[1][3] } },
        { rule = { class = "Skype" },
          properties = { tag = tags[1][4] } },
        { rule = { class = "Gajim" },
          properties = { tag = tags[1][3] } },
        -- Set Firefox to always map on tags number 2 of screen 1.
        -- { rule = { class = "Firefox" },
        --   properties = { tag = tags[1][2] } },
    }
    -- }}}
    
    
  • +1
    Эхх… Почему никто не пишет про старый славный WindowMaker оконный менеджер.
    • +3
      Всё в ваших руках.
  • 0
    странно, что еще никто не исправил. «Это тайлинговый windows manager для» windowS без s пишется.
    А вообще отличная штука. Пересев на этот ВМ производительность рутинных операций возрастает в двое-трое. И мышь становится вообще не нужна.
  • +3
    Как же я хочу уже наконец выбить свободный вечерок и в тишине посидеть — поковырять что-нибудь наподобие awesome. Давно хотел попробовать. Спасибо за напоминание. Ещё бы побольше информации по плагинам. Если не трудно — напишите продолжение статьи, пожалуйста. (:
    • 0
      Особенно было бы интересно увидеть подборочку различных плагинов и пр., расширяющих функциональность этого замечательного WM, которые затруднительно отыскать или выбрать самому.
      • 0
        Хорошо, я постараюсь :)
  • 0
    Для любителей Lua и Awesome отличный браузер Luakit, конфиги тоже пишутся на Lua.
    Писать конфиги на lua мне не понравилось. До xmonad я так и не добрался.
    В комментариях прочитал про wmfs2 — попробую на днях.
  • 0
    Если интересно то могу то могу показать поделиться «цветными» инидкаторами — можно настроить какое значение будет зелёным, какое красным, цвет плавно меняется между значениями. Кроме того индикатор загрузки памяти ( с вычетом всяких кешей и прочего). Индикатор загрузки Процессора от 0 до 100% (с учётом количества ядер, а то странно видеть 200-400%).
    Ну и индикатор раскладки с помощью kbdd
    • 0
      Конечно делитесь! Только в местах специально для этого предназначенных — на wiki, к примеру. Хабр — это хорошо, но в первую очередь, если нужно что-то идут туда…
  • 0
    Всех, кто хочет поделится своей конфигурацией или посмотреть чужие, ждут на соответствующей странице вики: awesome.naquadah.org/wiki/User_Configuration_Files.

    JagaJaga, неплохо было бы дать эту ссылку в статье. Может у кого-то есть какие-то интересные мысли…
  • –1
    Если вам нравится awesome, но надоела его костыльность и необходимость на каждый чих изобретать что-то на Lua (а так же отсутствие какой бы то ни было поддержки дисплеев с высоким DPI, глюки с русскими раскладками и тому подобное), велкам в i3. Он очень похож на awesome, в котором правильный конфиг уже написан.
    • 0
      Костыльность?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.