maisvendoo |
|
Темы:
68
Сообщения:
1143
Участник с: 10 октября 2012
|
Поскольку заметок прибавилось, вперемешку с обсуждением их, решено навести порядок в блоге. Пост про автозагрузку перенесен вниз, вместо него добавлено ОГЛАВЛЕНИЕ 1. Awesome WM: разбор rc.lua "по косточкам" 2. Awesome WM: анимированный виджет на рабочем столе: аналоговые часы 3. Список автозагрузки средствами Awesome 4. Отображение браузерного видео в полноэкранном режиме 5. Создание всплывающего guake-like терминала (Haron_Prime) Так я думаю будет удобнее ориентироваться в блоге
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb http://rusrailsim.org |
serkhay |
|
Темы:
24
Сообщения:
304
Участник с: 06 июня 2012
|
А зачем использовать awesome для автозагрузки? Я понимаю, что он почти как DE, в нем можно реализовать практически все. Но не проще ли использовать для этого более подходящие способы. Самый простой, xinitrc, при этом программы при перезапуске дублироваться не будут. В конце концов можно использовать пользовательскую сессию systemd, оно как раз для этого предназначено. Но это конечно ваше дело, и наверняка кому то пригодится. А в целом я только рад, что на форуме появится блог про awesome) |
maisvendoo |
|
Темы:
68
Сообщения:
1143
Участник с: 10 октября 2012
|
Awesome WM: разбор rc.lua "по косточкам" Переходя на awesome, я мотивировался возможностью воспользоваться преимуществами тайлинга, предоставляемого данным WM, при сохранении привычного функционала из Openbox. Под тайлингом (англ. tiling) подразумевается способность менеджера окон управлять ими так, что при открытии каждого окна, оно не перекрывает предыдущие и располагается "встык" с ранее открытыми окнами. Собственно ради этой возможности и был затеян мой переход на awesome. После установки данного WM из коробки доступен базовый функционал и несколько тем оформления. Большая часть настройки awesome осуществляется путем редактирования файла ~/.config/awesome/rc.lua. При открытии конфига, идущего искаропки, волосы становятся дыбом от обилия непонятного кода на Lua. Собственно этот код позволяет задать весь необходимый Вам функционал Вашей рабочей среды, и хочется того или нет, с ним лучше хорошенько разобраться. С этого начал и я, переписав конфиг заново, в той или иной степени разобрав каждую его часть и откомментил на русском языке. Результаты всего этого излагаю в данной статье. Awesome WM написан на C/C++, а вот его настройка выполняется с помощью скриптов на языке Lua, причем имеется Lua API, документация по которому есть на сайте разработчика, и честно говоря не блещет подробностью. Первое что надо сделать - скопировать содержимое каталога /usr/share/awesome/ в каталог ~/.config/awesome для того чтобы использовать идущие в комплекте скрипты тем, картинки иконок для последующей модификации. Мною для издевательств была выбрана тема Zeburn, от которой нам понадобится файл ~/.config/awesome/themes/zeburn/theme.lua 1. Начало Результат моих потуг изображен на скриншоте Разберу теперь детально какая часть конфига rc.lua за что тут отвечает Начинается всё с подключения необходимых библиотек
При первом запуске Awesome удивляют часы на английском языке, исправляем эту ситуацию
Задаем тему оформления, которую будем использовать
Задаем используемые по умолчанию приложения
Определяем главную клавишу-модификатор, от которой пляшут все клавиатурные комбинации. В стандартном конфиге в качестве такой клавиши выбрана Mod4, она же клавиша "Windows" нафиг не нужная в линуксе. Тем же путем пошел и я, хотя есть идея сменить её на Alt, из-за того что виртуальные машины под виндой отбирают клавишу Win на вызов своего меню :(. Собственно делаем это так
Сразу позаботимся о том, чтобы определить коды кнопок мыши, которые пригодятся нам для создания каждому элементу интерфейса обработчиков. Для этого используем команду $ xev | grep 'button' теперь жмем все кнопки мыши и смотрим их номер, выводимый в консоль. У меня получились в итоге глобальные определения для кнопок мыши
Аналогично определим и скан-коды клавиш. В стандартном конфиге используются буквы английского алфавита, но это делает невозможным отработку хоткея на кирилической раскладке, поэтому $ xev | grep 'keycode' жмем клавиши и заполняем глобальные определения для клавиатуры
2. Режимы тайлинга Теперь зададим layouts - макеты расположения окон на экране, которые собираемся использовать. Они задаются в виде массива-таблицы
Я выбрал только тайлинговые макеты, а те окна которые необходимо сделать плавающими настраиваются таковыми принудительно дальше. Кладем обои на рабочий стол
Переменная beautiful.wallpaper задается в конфиге темы, и являет собой путь к файлу с обоями ~/.config/awesome/themes/zeburn/theme.lua
3. Тэги - виртуальные рабочие столы и не только Дальше создаем массив тэгов - аналог виртуальных рабочих столов в любой другой DE, отличие тэгов от рабочих столов заключается в возножности одновременного отображения нескольких тегов
4. Главное меню Теперь создаем главное меню. В Openbox оно мне было в принципе без надобности, только затем чтобы добраться до перезагрузки/выключения/логаута. Ну а для кого-то наличие такого менб будет необходимо ещё для чего-нибудь Для начала создаем подменю. Они выполняются в виде Lua-таблицы, элементами которой являются таблицы, содержащие строки с названием пункта меню, команды, выполняемой при выборе этого пункта, и пути к иконке, отображаемой в данном пункте подменю
Теперь можно делать основное меню, содержащее обычные пункты и подменю
Очень кстати здесь пришлись безрутовые команды systemd по перезагрузке и выключению компа. Должно получится нечто похожее на это Пути к иконкам приложений, используемым в меню, необходимо прописать в теме ~/.config/awesome/themes/zeburn/theme.lua
В дальнейшем эти же иконки мы используем для создания кнопок быстрого запуска приложений. Теперь создаем кнопку-лаунчер, и вешаем на неё меню
Вместо стандартного авесомовского логотипа повесил патриотичный лого арча, предварительно прописав путь к изображению в теме ~/.config/awesome/themes/zeburn/theme.lua
5. Кнопки быстрого запуска приложений Наличие таковых оказалось принципиальным, в Openbox они реализовывались на tint2-svn, и я, и моя девушка к ним уже привыкли, и реализация таковой же функции в awesome стала одним из условий перехода. Кнопки приложений можно создать с помощью виджета button, например таким образом
6. Текстовые часы С этим всё ок, данный виджет является стандартным, и создается просто
При нормально настроенной локализации часы будут отображаться по-русски. 7. Список тэгов Список тегов - панель, отображающая значки тегов, и обеспечивающая возможность переключения между тэгами, перебрасывание клиентов с тега на тэг с помощью мыши. Создается она использованием виджета taglist
В приведенном коде декларируется таблица, содержащая список тэгов, а так же назначаются действия, выполняемые с тегами и клиентами по нажатию кнопок мыши. О создании экземпляров списка тэгов речь пока не идет, они будут созданы чуть позже. 8. Список задач Список задач - это набор прямоугольных кнопок на панели задач, обозначающих запущенные приложения (как-то так) Его тоже необходимо создать, вернее создать таблицу для хранения этого списка, а так же назначить действия при щелчках мышью на кнопках приложений
9. Собираем всё вместе Настал момент когда можно собрать то что будет выполнять в нашем WM роль панели задач. Стандартный конфиг подразумевает использование и нескольких мониторов, поэтому имеется цикл, перебирающий все экраны и выполняющий действия по созданию панельки на каждом из них
После добавления в конфиг данного кода панель появится на экране и будет функциональна. 10. Оживляем рабочую среду: программируем мышь и клавиатуру Необходимо определить назначения мыши для всей среды, горячие клавиши для всей среды, а так же назначения для клиентов - окон приложений Глобальных назначений мыши не так много оказалось в стандартном конфиге, их шерстить я не стал. Единственное что было добевлено - номера кнопок мыши поменялись на определенные выше глобальные переменные
А вот назначений клавиш гораздо больше. Каждая комбинация добавляется вызовом awful.key({ <клавиша-модификатор1>, <клавиша-модификатор2>, <функция-обработчик>) Таблица назначений клавиш формируется как результат выполнения функции <имя таблицы> = awful.util.table.join( комбинация 1, комбинация 2,..., комбинация n) Кроме того, для себя заменил обозначения буквенных клавиш со строк латиницы на сканкоды, глобально определив их в переменных в начале конфига. Так удобнее.
Аналогично определяем клавиатурные комбинации для клиентских окон
Кроме того, к глобальным назначениям добавляются комбинации Mod4 + <цифровая клавиша>, путем перебора в цикле сканкодов цифровых клавиш и добавления в таблицу globalkeys
Ну и наконец мышиные назначения для клиентских окон
Далее просто активируем глобальные клавиатурные комбинации
Чтобы активировать клиентские назначения необходимо.... 11. Назначение ролей приложениям Роли приложений определяют как каждое из них будет себя вести при запуске в awesome. В моем конфиге роли назначены так
У всех приложений должна быть одна быть прописана общая роль, определяющая поведение всех окон, и задающая клиентам назначения горячих клавиш и реакцию на мышь
После добавления этой роли среда оживает, окна открываются, реагируют на заданные нажатия клавиш и мышь. Однако возникает необходимость для конкретного приложения определить особое поведение, скажем ICQ-клиент не совсем удобно запускать в тайлинге, равно как и некоторые другие приложения. Для каких-то приложений может понадобится запуск только в одном или нескольких выбранных тегах. Все это делается настройкой ролей для каждого приложения одновременно. Для этого необходимо указать в роли класс приложения, который можно получить так $ xprop | grep 'CLASS' и далее щелкнув курсором мыши по нужному окну, в консольном выводе получим например такое
Вторая строка URxvt это и есть искомый класс окна, а первое - свойство под название instance (не помню что это, чесло... :( ) Теперь можно определить роль для терминалов быть только в 9м тэге
для ICQ-клиента быть плавающим окном с без максимизации окна
12. Сигналы Определив роли перейдем к последнему - сигналам, определяющим поведение окна например при переводе фокуса на него, или при перемещении на него курсора мыши, и т.д. Для начала я ограничился действиями при переводе фокуса на окно и уводе фокуса с него Когда окно в фокусе перекрашиваем рамку и добавляем полоску заголовка окна с кнопками управления
У окон не в фокусе - перекрашиваю рамку и убираю заголовок ЗаключениеВыполнив всё это можно получить вполне работоспособную среду Awesome а заодно разобраться с основными механизмами настройки. На этом затянувшийся разбор завершаю :)
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb http://rusrailsim.org |
maisvendoo |
|
Темы:
68
Сообщения:
1143
Участник с: 10 октября 2012
|
serkhayПроще, хотелось поупражнятся с Lua и заставить среду выполнять то что я хочу :) Но первый пост переозаглавил.
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb http://rusrailsim.org |
brestows |
|
Темы:
24
Сообщения:
189
Участник с: 06 апреля 2013
|
вот чего хочу добиться, есть 3 приложения они стартуют вместе c системой, так вот надо сделать так что бы они располагались на одном теге, в котором кроме них ничего не будет, и надо что бы они располагались в определенном месте в самом теге. не подскажите как такое реализовать? И да рад что есть тема обсуждения awesome
kdeneur: https://github.com/brestows/kdeNeur
awesome WM 3.5 |
serkhay |
|
Темы:
24
Сообщения:
304
Участник с: 06 июня 2012
|
brestows, что вы имеете в виду под определенным местом? Одно из этих трех окон можно с помощью правил сделать главным, и тогда в обычном тайловом режиме оно будет слева, а два остальных окна будут делить оставшееся место |
brestows |
|
Темы:
24
Сообщения:
189
Участник с: 06 апреля 2013
|
нет я хочу именно сделать так например что одно конкретное приложение располагалось справа и имело фиксированный размер например 100% по высоте и 25% по ширине, два остальных занимали бы по 50% по высоте и 100% из 75% оставшихся по ширине. Проблема в том что при запуске awesome Делить рабочее пространство между окнами по полам, и не удобно каждый раз изменять размер окон, пусть и горячими клавишами...
kdeneur: https://github.com/brestows/kdeNeur
awesome WM 3.5 |
serkhay |
|
Темы:
24
Сообщения:
304
Участник с: 06 июня 2012
|
Размер главного окна можно задать так в rc.luaawful.tag.setproperty(tags[1][1], "mwfact", 0.25) |
brestows |
|
Темы:
24
Сообщения:
189
Участник с: 06 апреля 2013
|
serkhay, спасибо! Буду дальше ковырять сей прекрасный WM
kdeneur: https://github.com/brestows/kdeNeur
awesome WM 3.5 |
maisvendoo |
|
Темы:
68
Сообщения:
1143
Участник с: 10 октября 2012
|
Дописал пост про rc.lua. Продолжу по мере расковыривания информации :)serkhay При перезапуске awesome они просто вырубаются, если из добавить в .xinitrc. Может я что неверно сделал? compton & urxvt -e mc & urxvt -e htop & urxvt & guake & sbxkb & conky -c ~/.conky/.conkyrc & conky -c ~/.conky/.conkyrc_lua_clock & conky -c ~/.conky/.conkyrc_updates & exec ck-launch-session dbus-launch awesome & И ещё один глобальный вопрос. При переключении раскладке на русскую дефолтный awesome не реагирует ни на мышь ни на клавиатурные комбинации. С клавиатурой решилось логичным образом - сменил латинские строки в конфиге на скан-коды. А вот мышь при русской раскладке не работает никак с элементами интерфейса - не жмет кнопки, не закрывает окна. Стоит вернуть юэс инглиш - снова всё работает! Это баг или фича? P.S.: Нарыл решение Проблема решается комментированием соответствующих строк в /usr/share/X11/xkb/compat/basic (комманда выше давалась именно для этого): и, собсна такой вид указанного фйла [maisvendoo@arch-host ~]$ cat /usr/share/X11/xkb/compat/basic // Minimal set of symbol interpretations to provide // reasonable default behavior (Num lock, shift and // caps lock and mode switch) and set up the // automatic updating of common keyboard LEDs. default xkb_compatibility "basic" { virtual_modifiers NumLock,AltGr; interpret.repeat= False; setMods.clearLocks= True; latchMods.clearLocks= True; latchMods.latchToLock= True; interpret Shift_Lock+AnyOf(Shift+Lock) { action= LockMods(modifiers=Shift); }; interpret Any+Lock { action= LockMods(modifiers=Lock); }; interpret Num_Lock+Any { virtualModifier= NumLock; action= LockMods(modifiers=NumLock); }; interpret Mode_switch { useModMapMods= level1; virtualModifier= AltGr; action= SetGroup(group=+1); }; interpret Any + Any { action= SetMods(modifiers=modMapMods); }; //group 2 = AltGr; //group 3 = AltGr; //group 4 = AltGr; include "ledcaps" include "lednum" indicator "Shift Lock" { !allowExplicit; whichModState= Locked; modifiers= Shift; }; }; решает проблему
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb http://rusrailsim.org |