awesome (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи awesome. Дата последней синхронизации: 20 января 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

С официального сайта:

awesome — это полностью настраиваемый современный оконный менеджер для Xorg. Он очень быстрый и расширяемый. Ориентирован на опытных пользователей, разработчиков, людей, занимающихся вычислениями и на тех, кто желает иметь полный контроль над графической средой.

Установка

Установите пакет awesome. Разрабатываемая версия доступна в пакете awesome-gitAUR, считается нестабильной и может иметь отличия в API настроек.

Запуск

Запустите awesome с помощью xinit. Для того, чтобы использовать входящий в комплект файл xsession, смотрите статью Экранный менеджер.

GNOME

Вы можете настроить GNOME использовать awesome как визуальный интерфейс, но держать GNOME работющем в фоновом режиме. Смотрите awesome-gnomeAUR.

XFCE

Смотрите Xfce (Русский)#Использовать сторонний оконный менеджер.

Настройка

Основанный на языке программирования lua, файл настроек находится в ~/.config/awesome/rc.lua.

Создание файла настроек

Во-первых, создайте новый каталог, необходимый в следующем шаге:

$ mkdir -p ~/.config/awesome/

Awesome попытается использовать настройки, которые содержится в файле ~/.config/awesome/rc.lua. Он не создается автоматически, поэтому скопируйте шаблон:

$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/

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

Дополнительная информация о настройке доступна в разделе Configuration в документации awesome.

Примеры

Примечание: Синтаксис конфигурации awesome регулярно меняется, поэтому Вам скорее всего придется изменить файл, который Вы скачаете.

Отличные примеры файлов rc.lua можно найти по следующим ссылкам:

Расширения

Несколько расширений, доступных для awesome:

Расширение Функциональность Версия
Поверхностный просмотр всех открытых клиентов Awesome 3.5+
Динамические тэги Awesome 3.5
Всплывающие уведомления Awesome 3.5+
Дополнительные виджеты Awesome 3.5

Автозапуск программ

Для использования XDG Autostart установите xorg-xrdb и dex и добавьте следующие строки в файл ~/.config/awesome/rc.lua:

~/.config/awesome/rc.lua
awful.spawn.with_shell(
    'if (xrdb -query | grep -q "^awesome\\.started:\\s*true$"); then exit; fi;' ..
    'xrdb -merge <<< "awesome.started:true";' ..
    -- list each of your autostart commands, followed by ; inside single quotes, followed by ..
    'dex --environment Awesome --autostart'
    )

Другой способ — создать скрипт autorun.sh со следующим содержимым:

~/.config/awesome/autorun.sh
#!/bin/sh

run() {
  if ! pgrep -f "$1" ;
  then
    "$@"&
  fi
}

Не забудьте сделать его исполняемым.

Для добавления программ автозапуск просто добавляйте строки вида run "программа [аргументы]" в файл autorun.sh. Функция run ищет указанную программу среди запущенных процессов и запускает её, только если ничего не нашлось. Проверьте корректность файла, попробовав запустить его напрямую:

$ ~/.config/awesome/autorun.sh

И, если всё хорошо, пропишите его в файле настроек:

~/.config/awesome/rc.lua
awful.spawn.with_shell("~/.config/awesome/autorun.sh")

Выбор раскладки клавиатуры

Есть несколько способов изменения раскладки клавиатуры.

С помощью setxkbmap

В стандартных настройках awesome уже активирован виджет раскладки.

Чтобы временно добавить несколько доступных раскладок, выполните

$ setxkbmap -layout "us,ru"

Клик по виджету будет переключать раскладку. Если вы хотите переключать раскладки с помощью клавиатуры, к команде можно добавить, например, -option "grp:alt_shift_toggle" для переключения с помощью Shift+Alt. То есть полная команда будет выглядеть так:

$ setxkbmap -layout "us,ru" -option "grp:alt_shift_toggle"

Пример для добавления фонетической русской раскладки:

$ setxkbmap -model pc105 -option "grp:shifts_toggle,compose:sclk" "us,ru(phonetic_YAZHERTY)"

где

  • в качестве клавиши Compose используется Scroll Lock, а переключение раскладки настроено на Left Shift + Right Shift;
  • используется клавиатура со 105 клавишами.

Чтобы сделать изменения постоянными, добавьте команду в автозапуск. Например, если вы используете LightDM, можно добавить команду в файл .xprofile.

С помощью rc.lua

Начиная с версии 4, в awesome можно настроить переключение раскладок. Для переключения раскладки с помощью Shift+Alt добавьте следующие две строки в globalkeys:

~/.config/awesome/rc.lua
-- {{{ Key bindings
globalkeys = gears.table.join(
    -- ...
    awful.key({ "Shift" }, "Alt_L", function () mykeyboardlayout.next_layout(); end),
    awful.key({ "Mod1" }, "Shift_L", function () mykeyboardlayout.next_layout(); end)
)

Необходимо заранее настроить несколько раскладок, например, с помощью setxkbmap или в файлах настроек X.

Команду для добавления раскладок можно добавить в #Автозапуск программ.

С помощью Xorg

Смотрите статью Конфигурация клавиатуры в Xorg.

Темы оформления

Beautiful — это библиотека Lua, которая позволяет вам задавать темы оформления для awesome из внешних файлов. С её помощью весьма легко изменить «на лету» цвета или обои awesome без внесения изменений в файл rc.lua.

Тема по-умолчанию содержится в /usr/share/awesome/themes/default. Скопируйте её ~/.config/awesome/themes/default и измените theme_path в rc.lua.

-- beautiful.init(gears.filesystem.get_configuration_dir() .. "/themes/default/theme.lua")
local theme_path = string.format("%s/.config/awesome/themes/%s/theme.lua", os.getenv("HOME"), "default")
beautiful.init(theme_path)

Можно скопировать другие темы и заменить «default» на, например, «sky», «gtk», «zenburn» и т.д. — локальные копии тем легко изучать, изменять и тестировать. Смотрите [1] для информации о дополнительных параметрах тем. Например, чтобы добавить промежуток между окнами, добавьте

beautiful.useless_gap = 5

в файл rc.lua.

Обои рабочего стола

Beautiful может обрабатывать ваши обои, поэтому вам не нужно устанавливать их в ваших файлах .xinitrc или .xsession. Это позволяет иметь конкретные обои для каждой темы.

Есть два способа установить обои:

  • в вашей копии файла theme.lua:
    -- абсолютный путь
    theme.wallpaper = "/путь/к/фону.png"
    
    -- относительно вашего каталога themes
    theme.wallpaper = theme_path .. "путь/к/фону.png"
    
  • или в файле настроек rc.lua, где-нибудь между beautiful.init и local function set_wallpaper:
    -- абсолютный путь
    beautiful.wallpaper = "/путь/к/фону.png"
    
    -- относительно каталога настроек
    beautiful.wallpaper = awful.util.get_configuration_dir() .. "путь/к/фону.png"
    

Можно выбирать случайные обои с помощью такого скрипта: [2] — добавьте его в rc.lua, обновив настройки под ваши нужды. Модификация скрипта, которая умеет сама считывать список файлов из указанного каталога: [3].

Советы и рекомендации

Скрыть / показать wibox

Чтобы привязать комбинацию Modkey + b для показа/скрытия строки состояния на активном рабочем столе (как в awesome 2.3), добавьте в ваш globalkeys в rc.lua:

awful.key({ modkey }, "b",
          function ()
              myscreen = awful.screen.focused()
              myscreen.mywibox.visible = not myscreen.mywibox.visible
          end,
          {description = "toggle statusbar"}
),

Показывать wibox (или выполнять другие действия) только при нажатой Mod-клавише невозможно из awesome, но есть python-скрипт для этого: autohidewibox.

Скриншот (снимок экрана)

Смотрите статью Keyboard input (Русский) для правильного назначения кнопки PrtSc. Затем установите какую-нибудь программу для создания скриншотов например scrot.

Добавьте в массив globalkeys:

 awful.key({ }, "Print", function () awful.util.spawn("scrot -e 'mv $f ~/screenshots/ 2>/dev/null'", false) end),

Эта функция сохраняет скриншоты внутри ~/screenshots/, измените путь/папку при необходимости.

Удаление пробелов окна

Начиная с версии awesome 3.4, можно удалить небольшие зазоры между окнами; в awful.rules.rules таблице есть раздел properties, добавьте к нему

 size_hints_honor = false

Прозрачность

Смотрите Xorg (Русский)#Композит.

В awesome 3.5, прозрачность окна можно установить динамически с помощью сигналов . Например, rc.lua будет содержать следующее:

client.connect_signal("focus", function(c)
                              c.border_color = beautiful.border_focus
                              c.opacity = 1
                           end)
client.connect_signal("unfocus", function(c)
                                c.border_color = beautiful.border_normal
                                c.opacity = 0.7
                             end)

wibox'ы

В awesome есть встроенная поддержка псевдо-прозрачности. Чтобы задействовать её, добавьте 2 шестнадцатеричные цифры к цветам в вашем файле темы (например, ~/.config/awesome/themes/default/theme.lua, который, как правило, копия /usr/share/awesome/themes/default/theme.lua) как показано здесь:

theme.bg_normal = "#000000AA"

где "AA" это значение прозрачности.

Чтобы менять прозрачность текущего окна, нажатием Modkey + PgUp/PgDown, можно установить transset-dfAUR и внести следующие изменения в вашем rc.lua:

globalkeys = gears.table.join(
    -- Ваше сочетание клавиш
    [...]
    awful.key({ modkey }, "Next", function (c)
        awful.util.spawn("transset-df --actual --inc 0.1")
    end),
    awful.key({ modkey }, "Prior", function (c)
        awful.util.spawn("transset-df --actual --dec 0.1")
    end),
    -- Другое ваше сочетание клавиш
    [...]
)

Промежуток между виджетами

Стандартный файл rc.lua размещает в wibox'е виджеты, в том числе значок раскладки клавиатуры и часы, с очень маленьким промежутком между ними. Его можно увеличить с помощью свойства spacing:

       { -- Right widgets
       layout = wibox.layout.fixed.horizontal,
       spacing = 10,
       mykeyboardlayout,
       ...

ImageMagick

You may have problems if you set your wallpaper with imagemagick's display command. It does not work well with xcompmgr. Please note that awsetbg may be using display if it does not have any other options. Installing habak, feh, hsetroot or whatever should fix the problem (grep -A 1 wpsetters /usr/bin/awsetbg to see your options).

Передача информации виджетам при помощи awesome-client

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

mywidget = widget({ type = "textbox", name = "mywidget" })
mywidget.text = "initial text"

Для обновления текста из внешнего источника, используйте awesome-client:

echo -e 'mywidget.text = "new text"' | awesome-client

Не забудьте добавить виджет в раздел wibox Вашего файла настроек.

Использование другой панели с awesome

Если вам нравится в awesome все, кроме того, как выглядит стандартная панель, то пришло время установить другую, например xfce4-panel.

Затем добавьте его в секцию autorun вашего rc.lua. Вы можете также закомментировать секцию, которая создает wibox'ы для каждого экрана (начиная с mywibox[s] = awful.wibox({ position = "top", screen = s })) но это не так необходимо. Не забудьте проверить ваш rc.lua на наличие ошибок, введя:

$ awesome -k rc.lua

Вы должны также изменить modkey+R данное сочетание клавиш, чтобы запустить другое приложение запуска вместо встроенного в awesome. Для примеров смотрите List of applications/Other#Application launchers. Не забудьте добавить:

      properties = { floating = true } },
    { rule = { instance = "$ваше_запускаемое_приложение" },

в ваш rc.lua.

Каталоги приложений в строке меню

awesome содержит menubar. По умолчанию при нажатии Mod+p откроется похожее на dmenu меню приложений в верхней части экрана. Оно ищет файлы .desktop в каталогах $XDG_DATA_DIRS/applications/ и $XDG_DATA_HOME/applications/.

Чтобы добавить или заменить эти каталоги, можно изменить menubar.menu_gen.all_menu_dirs:

~/.config/awesome/rc.lua
table.insert(menubar.menu_gen.all_menu_dirs, "/path/to/custom/applications/")

Стоит отметить, что файлы .desktop перечитываются каждый раз при запуске awesome, тем самым замедляя запуск. Если вы запускаете программы другим способом, то меню можно отключить в rc.lua путём удаления local menubar = require("menubar") и других упоминаний переменной menubar.

Всплывающие меню

Существует простое меню в awesome 3, - упрощённое пользовательское меню. [4] Если вы хотите меню freedesktop.org, смотрите тут awesome-freedesktop.

Если вы предпочитаете видеть более традиционное меню приложений, когда вы щёлкаете по иконке Awesome или делаете щелчок правой кнопкой мышки по пустому участку рабочего стола, вы можете воспользоваться инструкциями, приведёнными в статье Xdg-menu (Русский)#Awesome. Однако это меню не обновляется при добавлении или удалении программ. Поэтому не забывайте выполнять команду для обновления вашего меню. Она может выглядеть примерно так:

 xdg_menu --format awesome --root-menu /etc/xdg/menus/arch-applications.menu >~/.config/awesome/archmenu.lua

Заголовки окон

Включить заголовки окон в awesome легко, просто установите в файле настроек переменную titlebars_enabled в true (в разделе Rules):

   { rule_any = {type = { "normal", "dialog" }
     }, properties = { titlebars_enabled = true }
   },

Тем не менее, вы можете захотеть иметь возможность включения или отключения заголовков окон. Для этого вы можете добавить сочетание клавиш в clientkeys:

   -- working toggle titlebar
   awful.key({ modkey, "Control" }, "t", function (c) awful.titlebar.toggle(c)         end,
             {description = "Show/Hide Titlebars", group="client"}),

Если вы хотите по умолчанию скрыть заголовки окон, выполните эту функцию сразу после создания заголовка окна (в обработчике сигнала "manage"):

awful.titlebar.hide(c)

Уведомление о состоянии батареи

Этот пост в блоге содержит пример скрипта для rc.lua, показывающего простое уведомление о состоянии батареи. Заметьте, что для него требуется модуль naughty для уведомлений (установлен по умолчанию в версии 3.5). Ещё примеры есть на сайте awesome.

Мультимедийные клавиши

Можно управлять громкостью и статусом воспроизведения с клавиатуры с помощью amixer (пакет alsa-utils) и playerctl. Назначьте выполнение этих команд на соответствующие мультимедийные клавиши:

   -- Volume Keys
   awful.key({}, "XF86AudioLowerVolume", function ()
     awful.util.spawn("amixer -q -D pulse sset Master 5%-", false) end),
   awful.key({}, "XF86AudioRaiseVolume", function ()
     awful.util.spawn("amixer -q -D pulse sset Master 5%+", false) end),
   awful.key({}, "XF86AudioMute", function ()
     awful.util.spawn("amixer -D pulse set Master 1+ toggle", false) end),
   -- Media Keys
   awful.key({}, "XF86AudioPlay", function()
     awful.util.spawn("playerctl play-pause", false) end),
   awful.key({}, "XF86AudioNext", function()
     awful.util.spawn("playerctl next", false) end),
   awful.key({}, "XF86AudioPrev", function()
     awful.util.spawn("playerctl previous", false) end),

Экранная клавиатура Steam

Экранная клавиатура Steam, активируемая с помощью Steam Controller, может зависнуть после попытки ввести один символ. Это происходит потому, что окно, которое должно получить ввод, должно иметь фокус, и клавиатура будет ждать, пока этот ввод не будет успешно отправлен. Ручное переключение фокуса на другое окно отправит ввод на него, и клавиатура отвиснет до следующей попытки ввода символа.

Хитрость заключается в том, чтобы предотвратить получение фокуса клавиатурой. Добавьте следующий сигнал в вашу конфигурацию (или объедините с существующим сигналом focus):

client.connect_signal("focus", function(c)
    if awful.rules.match(c, { name = "^Steam Keyboard$" }) then
        awful.client.focus.history.previous()
    end
end)

Это будет возвращать фокус предыдущему окну каждый раз, когда фокус переходит на клавиатуру. Поскольку ввод на клавиатуре обрабатывается клиентом Steam и потому не требует фокуса, ввод текста теперь будет работать правильно.

Решение проблем

Отладка rc.lua

Xephyr позволяет запускать X, вложенный в окно клиента другого Х. Это позволяет проверять работоспособность rc.lua, не нарушая работу текущего сеанса. Начните с копирования rc.lua в новый файл (например rc.lua.new), и изменяйте его по мере необходимости. Затем запустите новый экземпляр awesome в Xephyr, передав ему путь к файлу настроек rc.lua.new:

$ Xephyr :1 -ac -br -noreset -screen 1152x720 &
$ DISPLAY=:1.0 awesome -c ~/.config/awesome/rc.lua.new

Преимущество такого способа заключается в том, что вы не нарушите работу текущего рабочего стола awesome, избежите потенциальный сбой приложений X и потерю работоспособности. После завершения настройки и тестирования скопируйте rc.lua.new в rc.lua и перезапустите awesome.

awmtt

awmttAUR (Awesome WM Testing Tool — Утилита тестирования Awesome WM) — простой скрипт-обёртка над Xephyr. По умолчанию он будет использовать ~/.config/awesome/rc.lua.test. Если он не может найти тестовый файл, он будет использовать ваш фактический rc.lua. Вы также можете указать местоположение файла настроек, который вы хотите проверить:

$ awmtt start -C ~/.config/awesome/rc.lua.new

Когда вы закончите тестирование, закройте окно:

$ awmtt stop

Или сразу смотрите изменения, которые вы делаете в файл настроек с помощью следующей команды:

$ awmtt restart

Файл журналов

Если вы используете LightDM, awesome будет записывать ошибки в `$HOME/.xsession-errors`. Если вы используете .xinitrc для запуска awesome, смотрите вопрос «Where are logs, error messages or something?» на странице FAQ.

Клавиша Mod4

Awesome рекомендует переназначить mod4, которой по умолчанию является клавиша Super («Windows»). Если по какой-то причине она не распознаётся как mod4, используйте xmodmap чтобы узнать её. Для того чтобы изменить назначение, воспользуйтесь xev, чтобы найти код клавиши и имя клавиши для сопоставления. Затем добавьте нечто похожее в ~/.xinitrc

xmodmap -e "keycode 115 = Super_L" -e "add mod4 = Super_L"
exec awesome

В этом случае проблемой является то, что иногда xorg распознаёт код клавиши 115 неправильно, как клавишу 'Select'. Приведенная выше команда явно перераспределяет код ключа 115 на корректную клавишу 'Super_L'.

Для того, чтобы переназначить mod4 с помощью setxkbmap (конфликтует с xmodmap) смотрите:

tail -50 /usr/share/X11/xkb/rules/evdev

Для установки клавиши caps lock как mod4 добавьте следующую строку в ~/.xinitrc:

setxkbmap -option caps:hyper

Исправление для Java приложений (серый интерфейс)

Смотрите Java (Русский)#Ошибки отрисовки приложений Java и [5].

Eclipse: невозможно изменить размер/переместить главное окно

Если главное окно "прилипло" и вы не можете переместить его или изменить размер (используя mod4 + левую/правую клавишу мыши) отредактируйте workbench.xml и установите fullscreen/maximized в значение false (если оно установлено), уменьшите цифру ширины и высоты на меньшую, чем размер одного вашего экрана рабочего стола.

workbench.xml можно найти в eclipse_workspace/.metadata/.plugins/org.eclipse.ui.workbench/. Отредактируйте строку:

<window height="xx" maximized="true" width="xx" x="xx" y="xx"

Netbeans: автозавершение кода отображается на неправильном экране

Если у вас два дисплея и вы используете автозавершение кода (Ctrl + Space) в Netbeans, оно может отображаться на неправильном экране. Может помочь это:

.config/awesome/rc.lua
awful.rules.rules = {
        ...
	{
		rule_matches = { -- Исправление Netbeans
			class = {
				"sun-awt-X11-XWindowPeer", "NetBeans IDE 8.2"
			},
			name = {
				"win1"
			}
		}, properties = { screen = 1 } -- даже если здесь экран 1, это всё равно работает и на втором экране (непонятно почему).
	},
        ...

}

scrot: не получается сделать скриншот с выделением мышью с помощью сочетаний клавиш

При использовании scrot могут возникнуть проблемы с назначением сочетания клавиш для создания снимка области экрана с выделением мышью (scrot -s). Чтобы решить эту проблему, добавьте следующую строку в ваш rc.lua:

awful.key( { modkey,	 }, клавиша, nil, function () awful.spawn("scrot -s") end)

Обратите внимание, что в функцию awful.key в аргумент press передаётся nil. Вместо этого функция-обработчик, которая запускает scrot, передаётся в аргумент release.

YouTube: полноэкранный режим показывает как в фоновом режиме

Если видео с YouTube появляется под вашим браузером в полноэкранном режиме, или скрывается под панелью управления, то добавьте в rc.lua

{ rule = { instance = "plugin-container" },
  properties = { floating = true } },

Для Chromium

{ rule = { instance = "exe" },
  properties = { floating = true } },

или:

{ rule = { role = "_NET_WM_STATE_FULLSCREEN" },
  properties = { floating = true } },

Смотрите [6].

Запретить колесу прокрутки мыши менять теги

В вашем rc.lua измените раздел Mouse Bindings на следующий:

-- {{{ Mouse bindings
root.buttons(gears.table.join(
    awful.button({ }, 3, function () mymainmenu:toggle() end)
))
-- }}}

Xdg-menu генерирует дублирующиеся пункты меню

Xdg-menu будет генерировать дубликаты пунктов меню, если вы копируете файлы .desktop из /usr/share/applications в ~/.local/share/applications, даже если предпочтительнее просто использовать пользовательские файлы вместо оригинальных, чтобы, например, задать другую тему для конкретного приложения. Одним из решений является фильтрация сгенерированного вывода через awk для удаления пунктов с именем, идентичным предыдущему пункту.

 xdg_menu --format awesome --root-menu /etc/xdg/menus/arch-applications.menu | awk -F, '{if (a!=$1) print $a; a=$1}' >~/.config/awesome/archmenu.lua

Некоторые сочетания клавиш не работают в Xfce4

Возможно, есть пересечения в используемых сочетаниях клавиш между Xfce4 и awesome. Откройте настройки:

$ xfce4-keyboard-settings

и посмотрите, нет ли там пересечений с сочетаниями клавиш awesome, в частности с mod-клавишей (обычно Super_L).

Утечки памяти

Некоторые пользователи сталкиваются с утечкой памяти даже при отсутствии активности. При использовании большого количества виджетов утечка может происходить со скоростью до 5 МБ/мин. Чтобы уменьшить потребление памяти, можно выполнять более частую сборку мусора, добавив следующее в ~/.config/awesome/rc.lua:

-- Регулярный запуск сборщика мусора для предотвращения утечки памяти
gears.timer {
       timeout = 30,
       autostart = true,
       callback = function() collectgarbage() end
}

Смотрите также