Моё знакомство с WM Awesome. Часть 3 / Хабр
Третья часть моего поста (предыдущую можно найти тут)
В этом кусочке назначаем кнопки мыши и клавиатуры. Небольшое примечание: для Mod4 + PrntScr я назначил делать скриншот выделенной области, а на просто PtntScrn скриншот всего экрана, но второй случай не работает — не доходят руки разобраться (для скриншотов вам понадобится установить пакет xsnap
Назначение кнопок и комбинаций
----------------------------------- --- Назначения мыши --- ----------------------------------- root.buttons(awful.util.table.join( -- Правая кнопка - вызов меню awful.button({ }, right_button, function() main_menu:toggle() end), -- Боковые кнопки - переключение тэгов по порядку awful.button({ }, plus_button, awful.tag.viewnext ), awful.button({ }, minus_button, awful.tag.viewprev ) )) ------------------------------------------- --- Назначения клавиатуры --- ------------------------------------------- -- Глобальные назначения клавиш globalkeys = awful.util.table.join( -- Переключение рабочих столов awful.key( { modkey, }, key_Left, awful.tag.viewprev ), awful.key( { modkey, }, key_Right, awful.tag.viewnext ), awful.key( { modkey, }, key_Esc, awful.tag.history.restore ), --awful.key( { }, key_Alt_R, function () kbdcfg.switch() end), -- Манипуляция областями экрана (перестановка клиентов) awful.key( { modkey, }, key_Tab, function() awful.client.focus.history.previous() if client.focus then client.focus:raise() end end ), -- Запуск стандартных программ -- Терминал awful.key( { modkey, }, key_X, function() awful.util.spawn(terminal) end ), -- Командная строка awful.key( { modkey, }, key_R, function() bottom_prompt_box[mouse.screen]:run() end ), awful.key( { }, key_Home, function() awful.util.spawn_with_shell("google-chrome-stable") end ), -- Перезапуск awesome awful.key( { modkey, "Control" }, key_R, awesome.restart), awful.key( { modkey }, key_F1, function () awful. util.spawn('slimlock') end), awful.key( { }, key_Print, function () awful.util.spawn_with_shell("DATE=`date +%d%m%Y_%H%M%S`; xsnap -file $HOME/Snapshots/snap$DATE") end), awful.key( { modkey }, key_Print, function () awful.util.spawn_with_shell("DATE=`date +%d%m%Y_%H%M%S`; xsnap -nogui -file $HOME/Snapshots/snap$DATE") end), awful.key( { }, key_Vol_Up, function () volumecfg.up() end), awful.key( { }, key_Vol_Down, function () volumecfg.down() end), awful.key( { }, key_Mute, function () volumecfg.toggle() end) ) ------------------------------------------------------ --- Клиентские назначения клавиш --- ------------------------------------------------------ clientkeys = awful.util.table.join( -- РАзвернуть на весь экран awful.key( { modkey, }, key_F, function(c) c.fullscreen = not c.fullscreen end ), -- Закрыть окно awful.key( { modkey, "Shift" }, key_C, function(c) c:kill() end ), -- Перевести окно в плавающий режим awful. key( { modkey, "Control" }, key_Space, awful.client.floating.toggle ), -- Сделать данной клиентское окно главным awful.key( { modkey, "Control" }, key_Return, function(c) c:swap( awful.client.getmaster() ) end ), -- Переместить окно на другой экран??? awful.key( { modkey, }, key_O, awful.client.movetoscreen ), -- Поместить окно поверх всех awful.key( { modkey, }, key_T, function(c) c.ontop = not c.ontop end ), -- Минимизировать окно awful.key( { modkey, }, key_N, function(c) c.minimized = true end ), -- Максимизировать окно awful.key( { modkey, }, key_M, function(c) c.maximized_horizontal = not c.maximized_horizontal c.maximized_vertical = not c.maximized_vertical end ) )
Здесь определены некоторые комбинации для тегов, роли и сигналы. Например пиджин у меня открывается только на 4 теге, а в сигнала я прописываю — отображать у окон кнопку развернуть, закрыть, иконку и заголовок окна.
Комбинации для окон, правила и сигналы
----------------------------------------------------------------------------------------------------------------------- --- Переключение тэгов и операции с клиентами и тэгами на каждом из экранов --- ----------------------------------------------------------------------------------------------------------------------- for i = 1, 9 do -- modkey + <номер тэга> -- Переключиться в выбранный тэг globalkeys = awful.util.table.join( globalkeys, awful.key({ modkey }, "#" .. i + 9, function() local screen = mouse.screen local tag = awful.tag.gettags(screen)[i] if tag then awful.tag.viewonly(tag) end end), -- modkey + Ctrl + <номер тэга> -- Совместить выбранный тэг с текущим awful.key({ modkey, "Control" }, "#" .. i + 9, function() local screen = mouse.screen local tag = awful.tag.gettags(screen)[i] if tag then awful.tag.viewtoggle(tag) end end), -- modkey + <номер тэга> -- Переместить клиент в фокусе на выбранный тэг awful.key({ modkey, "Shift" }, "#" .. i + 9, function() local tag = awful.tag.gettags(client.focus.screen)[i] if client.focus and tag then awful.client.movetotag(tag) end end), -- modkey + <номер тэга> -- Переместить клиент в фокусе на выбранный тэг, оставив его и в текущем тэге awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, function() local tag = awful.tag.gettags(client.focus. screen)[i] if client.focus and tag then awful.client.toggletag(tag) end end) ) end ---------------------------------------------------------------------------- --- Назначение кнопок мыши для каждого клиента --- ---------------------------------------------------------------------------- clientbuttons = awful.util.table.join( -- Переключить фокус awful.button( { }, left_button, function(c) client.focus = c; c:raise() end), -- Переместить awful.button( { modkey }, left_button, awful.mouse.client.move), -- Изменить размер awful.button( { modkey }, right_button, awful.mouse.client.resize) ) -- Задать глобальные клавиши root.keys(globalkeys) ---------------------------------- --- Роли приложений --- ---------------------------------- awful.rules.rules = { { -- Главная роль для всех приложений rule = { }, properties = { border_width = beautiful.border_width, -- задается толщина рамки окна border_color = beautiful.border_normal, -- цвет рамки окна не в фокусе focus = awful. client.focus.filter, -- это что не знаю :( keys = clientkeys, -- горячие клавиши buttons = clientbuttons} -- кнопки мыши }, --{ rule = { class = "MPlayer" }, -- properties = { floating = true } }, --{ rule = { class = "pinentry" }, -- properties = { floating = true } }, --{ rule = { class = "Gimp" }, -- properties = { floating = true } }, -- Set Firefox to always map on tags number 5 of screen 1. --{ rule = { class = "Firefox" }, -- properties = { tag = tags[1][5] } } -- "Коньки": без рамки и плавать { rule = { class = "Conky"}, properties = { border_width = 0, floating = true } }, { rule = { instance = "Pidgin" }, properties = { tag = tags[1][4], floating = false, maximized_horizontal = false, maximized_vertical = false } }, { rule = { instance = "Skype" }, properties = { floating = true, maximized_horizontal = false, maximized_vertical = false } } } -------------------- --- Сигналы --- -------------------- client. connect_signal("manage", function (c, startup) -- Enable sloppy focus c:connect_signal("mouse::enter", function(c) if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier and awful.client.focus.filter(c) then client.focus = c end end) if not startup then -- Set the windows at the slave, -- i.e. put it at the end of others instead of setting it master. -- awful.client.setslave(c) -- Put windows in a smart way, only if they does not set an initial position. if not c.size_hints.user_position and not c.size_hints.program_position then awful.placement.no_overlap(c) awful.placement.no_offscreen(c) end end end) -- У окон в фокусе client.connect_signal("focus", function(c) -- Раскрасить рамку соответствеено c.border_color = beautiful.border_focus -- Нарисовать заголовок окна -- Виджет слева от заголовка окна local left_layout = wibox. layout.fixed.horizontal() left_layout:add(awful.titlebar.widget.iconwidget(c)) -- Виджеты в правой части заголовка окна local right_layout = wibox.layout.fixed.horizontal() --right_layout:add(kbdcfg.widget) right_layout:add(awful.titlebar.widget.maximizedbutton(c)) right_layout:add(awful.titlebar.widget.closebutton(c)) -- Заголовок окна local middle_layout = wibox.layout.flex.horizontal() local title = awful.titlebar.widget.titlewidget(c) title:set_align("center") middle_layout:add(title) -- Расставляем блоки виджетов по местам local layout = wibox.layout.align.horizontal() layout:set_left(left_layout) layout:set_right(right_layout) layout:set_middle(middle_layout) -- Добавляем их на заголовок окна awful.titlebar(c):set_widget(layout) -- Задаем размер заголовка окна awful.titlebar(c, {size = 18}) end) client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal awful.titlebar(c, {size = 18}) end)
Переключение раскладок.
Сразу скажу, что стоит откатиться xkbcomp до версии 1.2.3, так как в 1.2.4 есть баг (при переключении раскладки, не работают кнопки мыши)
Про раскладку вообще, можно добавить реализацию как это в gentoo wiki написанно, но тогда у нас не буду работать горячии клавиши (для системных мы указывали коды клавиш, так что это нам не страшно), а вот такие как ctrl + C и т.д. работать не будут.
в новых версиях Xorg сервера убрали xorg.conf, теперь конфигурация лежит в другом месте. Создадим директориюsudo mkdir /etc/X11/xorg.conf.d
И в ней создадим 2 файла, 01-keyboard-layout.conf и 01-enable-pointerkeys.conf
В первом:
Section "InputClass" Identifier "keyboard-layout" MatchIsKeyboard "on" Option "XkbLayout" "us,ru" Option "XkbOptions" "grp:ctrl_shift_toggle,terminate:ctrl_alt_bksp EndSection
Перезапуск X сервера комбинацией ctrl + alt + backspace и смена раскладки с помощью ctrl + shift
После смены раскладки у нас по умолчанию отключаются кнопки мыши, по этому для их включения запишем во втором (при версии xkbcomp-1. 2.4 это не работает):
Section "InputClass" Identifier "Keyboard Defaults" MatchIsKeyboard "yes" Option "XkbOptions" "keypad:pointerkeys" EndSection
Теперь сделаем приятным для глаз наш urxvt, для этого отредактируем файлик ~/.Xdefaults (опять таки, если его нету — смело создаём)
Мой ~/.Xdefaults
!darkgray *background: #212121 !silver *foreground: #C0C0C0 !black *color0: #251f1f *color8: #5e5e5e !red *color1: #eb4509 *color9: #eb4509 !green *color2: #94e76b *color10: #95e76b !yellow *color3: #ffac18 *color11: #ffac18 !blue *color4: #46aede *color12: #46aede !magenta *color5: #e32c57 *color13: #e32c57 !cyan *color6: #d6dbac *color14: #d6dbac !white *color7: #efefef *color15: #efefef !save 5000 lines URxvt*saveLines: 5000 !left button URxvt.matcher.button: 1 !default brauser google chrome URxvt.urlLauncher: google-chrome-stable !underline links URxvt. underlineURLs: true ! URxvt.keysym.M-u: perl:url-select:select_next !disabled button 'new tab' URxvt.tabbed.new-button:no !? URxvt.tabbed.tabbar-fg: 15 !? URxvt.tabbed.tabbar-bg: 8 !? URxvt.tabbed.tab-fg: 8 !? URxvt.tabbed.tab-bg: 14 Rxvt.font: -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso8859-1 URxvt.boldFont: -misc-fixed-bold-r-normal--15-140-75-75-c-90-iso8859-1 !disable scrollbar URxvt*scrollBar: false
В итоге получаем приятную для глаз цветовую схему нашего терминала.
В итоге получаем вот такую приятную и весьма удобную систему:
Конечно я не достиг такого уровня, как unlogic и мой конфиг ещё можно совершенствовать до бесконечности, но я получил удобную и работоспособную систему.
P.S. В emacs у меня цветовая схема monokai.
P.P.S. Надеюсь ничего не забыл описать.
Тайловый оконный менеджер Linux Awesome
Опубликовано admin — вт, 06/07/2022 — 12:23
Десктопы
Awesome — очень лёгкий тайловый (мозаичный) оконный менеджер Linux. Он также способен работать и в обычном (композитном) режиме.
Настраивается менеджер при помощи конфигурационного файла.
Содержание
- Установка
- Настройка
- Горячие клавиши
- Темы оформления
- Заключение
Установка
Установка в Arch Linux:
oleg@mobile:~:$ sudo pacman -S awesome vicious разрешение зависимостей... проверка конфликтов... Пакеты (6) libxdg-basedir-1.2.3-1 lua53-5.3.6-1 lua53-lgi-0.9.2-7 xcb-util-xrm-1.3-2 awesome-4.3-3 vicious-2.5.0-1 Будет загружено: 1,75 MiB Будет установлено: 10,73 MiB :: Приступить к установке? [Y/n] :: Получение пакетов... ...
В пакете vicious
находятся базовые плагины, которые могут быть использованы в дальнейшем.
Установка в Ubuntu:
$ sudo apt-get install awesome awesome-extra
Для старта Awesome при загрузке X Window System необходимо прописать загрузку менеджера в файле .xinitrc
, расположенном в домашнем каталоге.
oleg@mobile:~:$ vim .xinitrc #!/bin/sh ... exec awesome
Настройка
Горячие клавиши
- 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
super — клавиша-модификатор modkey, на которой изображён логотип Windows.
Команды можно изменить в конфигурационном файле имея небольшие навыки в написании скриптов. Для этого создаётся пользовательский конфигурационный файл:
oleg@mobile:~:$ mkdir ~/.config/awesome oleg@mobile:~:$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua
Горячие клавиши находятся в секции:
... -- {{{ Key bindings ...
Ничто не мешает настроить команды на свой вкус.
Пример:
... awful.key({ modkey, "Shift" }, "q", awesome.quit), ...
Из этой строки следует, что командой modkey + Shift + q
менеджер будет закрыт.
modkey — клавиша с логотипом Windows.
Можно например сменить терминал и редактор в секции:
... -- {{{ Variable definitions ...
При желании можно и переименовать теги, заменив цифры чем-либо удобочитаемым.
Темы оформления
Тема по умолчанию находится в /usr/share/awesome/themes/default
. Её следует скопировать в ~/.config/awesome/themes/default
и изменить theme_path
в rc. lua
.
Заключение
Оконный менеджер Linux Awesome прекрасно подходит для ноутбуков и слабых машин. Он также весьма удобен при необходимости держать в фокусе зрения несколько окон.
Поделиться с друзьями
Контроль яркости в Awesome оконном менеджере
спросил
Изменено 5 лет, 5 месяцев назад
Просмотрено 21к раз
Я только что установил Awesome WM, и у меня нет возможности изменить яркость экрана, а также не работает его ярлык. Кто-нибудь может помочь?
- яркость
- потрясающий
1
В разделе globalkeys = ужасно.util.table.join(
раздела ~/.config/awesome/rc. lua
:
-- Яркость ужасно.key({ }, "XF86MonBrightnessDown", функция () ужасно.util.spawn("xbacklight -dec 15") конец), ужасно.key({ }, "XF86MonBrightnessUp", функция () ужасно.util.spawn("xbacklight -inc 15") конец),
1
1) Установить xbacklight:
sudo apt-get install xbacklight
2) Проверить в консоли:
xbacklight -inc 10 хбэклайт -дек 10
3) Добавьте горячие клавиши в ваш awesome config ~/.config/awesome/rc.lua
Вставьте в раздел [globalkeys = ужасно.util.table.join] следующий текст:
ужасно.key({ }, " XF86MonBrightnessDown", функция () ужасно.util.spawn("xbacklight -dec 15") конец), ужасно.key({ }, "XF86MonBrightnessUp", функция () ужасно.util.spawn("xbacklight -inc 15") конец)
Я использую клавиатуру без XF86MonBrightness*, поэтому добавил привязки к Mod+o, Mod+p:
ужасно.key({modkey, }, "p", function () ужасно. util.spawn("xbacklight -dec 15") конец), ужасно.key({modkey,}, "о", функция () ужасно.util.spawn("xbacklight -inc 15") конец)
Надеюсь, это поможет)
2 9″ gnome-power-manager» внутри awesome или при запуске awesome: https://wiki.archlinux.org/index.php/Awesome#Transitioning_away_from_Gnome3 Надеюсь, это поможет
Другой вариант — запустить awesome внутри gnome, тогда вы можете просто положиться на элементы управления gnome (работает нормально), сеть и т. д. тоже работает http://awesome.naquadah.org/wiki/Quickly_Setting_up_Awesome_with_Gnome
Чтобы приложение запускалось автоматически при входе в Awesome WM: Щелкните правой кнопкой мыши на рабочем столе, перейдите к awesome > edit config . добавьте в конце следующую строку:
-- Автозапуск программ в Awesome WM автозапуск = правда автозапуск приложений = { "xfce4-питание-менеджер", } если автозапуск то для приложения = 1, #autorunApps сделать ужасно. util.spawn(autorunApps[приложение]) конец конец
Замените «xfce4-power-manager» вашим менеджером питания.
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
.bash — Awesome WM — Запустите приложение на основе терминала с помощью ярлыка
Задавать вопрос
спросил
Изменено 2 года, 5 месяцев назад
Просмотрено 1к раз
Я хочу иметь ярлык для запуска таких вещей, как vifm, cmus, htop и т. д. Эти приложения требуют запуска с терминала.
Я знаю, что для создания ярлыка в Awesome WM я должен:
ужасно.key({ modkey }, "my_hotkey", function () ужасно.util.spawn(...вот приложение) end, {description = "the_description", group = "моя пользовательская группа"}),
Но я не могу просто написать:
ужасно.util.spawn("vifm")
У меня не работает. Итак, как я мог бы сделать ярлык, который инициирует, скажем, vifm, принимая во внимание, что этот код должен сначала запустить терминал, а затем внутри этого терминала запустить «vifm».
Кроме того, есть ли более эффективный способ сделать это? Я имею в виду, может быть, запустить vifm напрямую, вместо того, чтобы полагаться на запуск терминала?
PD: Моя оболочка — bash, мой терминал — Konsole.
- bash
- awesome
- lua
Большинство терминалов позволяют запустить команду, которая после завершения также закроет терминал. Я не знаю Konsole, но в терминале GNOME это так же просто, как gnome-terminal -- vim
.
Если вы хотите, чтобы терминал завис после завершения команды, вы можете использовать этот хак: гном-терминал -- bash -c 'vim; баш
.
1
Я чувствую себя немного смущенным из-за того, что не понял решения раньше. На самом деле это было на самой странице справки консоли, в любом случае команда (для консоли):
konsole -e cli_based_app
Например,
konsole -e vim
Затем вы можете поместить это в свой rc.