Блог Александра Башкирова

ИТ и бизнес, компьютеры и ПО, фото, программирование и просто мысли…
Этот сайт в основном посвящен тому, что мне интересно вне работы. Ведется в порядке хобби.
Все изложенное на сайте - мое частное оценочное мнение и не может быть истолковано иначе.
Со всеми вытекающими из этого последствиями.

оконные менеджеры

Подписаться на эту метку по RSS

Про IceWM. Тест в боевых условиях.

Просмотров: 2128Комментарии: 0
Linux

Я псиал про легковесный дистртибутив AntiX: http://www.alib.spb.ru/blog/page/legkovesnyj-linux-distributiv-antix и чем-то меня зацепла IceWM до состояния, что решил постаить и попробовать настроить.
В отличие от того поста, я не был связан производительностью (i3 & 8Gb Ram), так что мог делать не "чтобы быстрее", а "как нравится". А нраится мне когда панель сверху, есть все индикаторы - в том числе сеть :) еще мне нравится gonky на рабочий стол, и на рабочем же столе - файлы и обои :) А еще я люблю выпадающие меню прямо с панель (XFCE-style рулит). И меню, чтобы слева...
В общем, получилось практически все, что планировал. До состояния, когда можно использовать IceWM вместо основной среды (xfce), кроме одного: меню там (пока?) вправо не перенесети. Что, я считаю, очень круто.

Что сделал:

  1. Убрал из автозагрузки - icewmbg (обои будт делать pcmanfm)
  2. Прописал в автозагрузку
    1. Корретировку раскладки
      setxkbmap -layout us,ru -variant -option grp:alt_shift_toggle,grp_led:scroll,terminate:ctrl_alt_bksp &
    2. Локер (странно, но IceWM экран лочить не умеет никак)
      xscreensaver -no-splash &
    3. Демон настроек GNOME - в основном для предоставления стиля GTK+ приложений. Можно и без него. Но не так красиво :)
      gnome-settings-daemon &
    4. Рабочий стол. Обои, значки, плюшки.
      pcmanfm --desktop &
    5. Индикатор клавиатуры. Как это ни странно, но IceWM собственного элемента на этот счет не имеет.
      xxkb &
    6. Системный монитор. Ну тут все понятно... Даешь информации о системе больше и лучше :)
      conky --config=/home/alex/.conky/.conkyrc &
    7. Терминал. С ним небольшая накладка - пришлось ему в настройках сказать, чтобы открывался снизу, так как сверху он не видит панель и открывается под ней. Жить можно (всего-то 1,5 строки) - но лучше видеть все.
      guake &
    8. Апплет network manager. Для привычного способа доступа к сетям.
      nm-applet &
    9. Апплет blueman. Графическая морда для bluetooths.
      blueman-applet &
    10. Индикатора громкости тоже нет в IceWM. Хотя есть обращения к штатной системе управления громкостью. Но в целом, мне больше нравится volumeicon - потому что он беспроблемно цепляется к увеличить/уменьшить громкость клавишам на любой клавиатуре. Сам, без бубнов.
      volumeicon &
  3. Настроил настройки (подробно настройки и что в них измеил - описано тут: http://wiki.crystaltask.ru/doku.php?id=linux:icewm-main-settings )

    Что получилось:

Ссылки (для кросспоста, который режет картинки):

http://www.alib.spb.ru/blog/uploads/icewm-1.jpg
http://www.alib.spb.ru/blog/uploads/icewm-2.jpg
http://www.alib.spb.ru/blog/uploads/icewm-3.jpg

Выводы:

  • в IceWM можно запросто настроить очень много чего. В целом на мой взгляд - там избыточное число настроек. (Из прямо бросающегося в глаза - 4 способа фокусировки)
  • для особых эстетов в IceWM есть настройка, которая скрывает панель, оставляя только рабочий стол. Можно завести на этом столе панель lx или xfce. Ну или tint2. Зачем это делать - не знаю. Но можно.
  • в IceWM из коробки идет достаточно много тем. Можно выбрать ту, что нравится. Или найти в Интернет. Или сделать свою.
  • все настройки достаточно хорошо документированы.
  • очень круто я считаю, что IceWM имеет свой встроенный лаунчер (Win+Пробел). При его наличии уже можно жить. А если еще настроить клик-элементы - то вообще прекрасно.
  • на сочетания клавиш можно повесить все, что угодно. Я вот на Ctrl+Пробел повесил вызов xfce4-appfinder - прекрасная вещь (хотя и не очень нужная, с учетом нормального меню и клик-элементов)
  • меню настраиваемо. Можно скрыть что-то, что-то добавить.
  • очень крутая возможноть, которую я не встречал в других оконных менеджерах / средах - при разворачивании окна на экрнан, можно настроить так, чтобы заголовок окна не отрисовывался. (Что из этого получается - смотри последний скриншот).
  • теперь ложка дегтя. Все настройки текстовые. На сайте проекта есть утилиты для настройки, но я так, по старинке - конфиги правил ... ))))
  • система получилась на удивление не сильно тяжелой. При том, что у меня постоянно в памяти сидит apache/mysql/postgre.


Сайт проекта IceWM: http://www.icewm.org/
Сайт с темами: https://www.box-look.org/

Маленькая плюшка для тех, кому интересно. Я написал скрипт, который в теории приводит свежеустановленный Linux к виду как на картинке. Скачать.

Ограничения: скрипт работает только с Linux Mint (это условие проверяется сразу же на входе) - так как на других дистрибутивах не было возможности проверить.

Скрипт скачат, установит и настроит необходимые для окружения пакеты.

Скрипт НЕ скачает и НЕ установит другие пакеты, которые у меня живут в меню:

  •  palemoon
  • firefox
  • chromium-browser
  • tor
  • vivaldi
  • opera
  • chrome
  • skypeforlinux
  • viber
  • telegram
  • liferea
  • deadbeef
  • gedit
  • leafpad
  • geany
  • juffed
  • wpsoffice
  • libreoffice
  • onlyoffice

Их необходимо скачать самостоятельно - и они появятся в меню. Или не скачивать - тогда они в меню не появятся :)

Можно было бы конечно, предусмотреть логику - если есть, то генерировать в меню вхождение... Можно. Но лень. Так как скрипт писал для себя, по принципу - установил Linux Mint, запустил скрипт - получил привычное окружение.

Про LXLE, LXQt и вообще немного про LX

Просмотров: 14340Комментарии: 0
Linux

Случайно наткнулся на описание дистрибутива Linux на базе ubuntu - LXLE. Суть - в том, что это та же самая Lubuntu, только с поддержкой старого железа. Кстати, LXLE переводится как Lubuntu Extra Life Extension. Дистрибутив весит в итоге 1,5 Гб (я так подозреваю, туда запилены драйверы для старого всего).

Стало интересно - поставил на виртуалку. В общем, работает, стартует. Ставил “по-скромному” (512 Мб памяти и 20% процессора). После установки “голая” система ест у меня 85 Мб, что по-моему неплохо. Из коробки, на мой вкус - идет много разных приложений. Слишком много. Подозреваю, что это частично бэкпорты, но не разбирался.

Официальный сайт: http://lxle.net/

Кстати, на сайте требований по железу я так и не нашел, что мне кажется странным - если дистрибутив легкий, то обычно пишут “от какой точки” начинается эта самая легкость…

Ссылка на прямое скачивание версии 16.04.1: https://sourceforge.net/projects/lxle/files/Final/OS/16.04.1-32/lxle-eclectica-16.04.1.iso/download

Ну и “чтобы 2 раза не вставать”, раз уж речь зашла о lx… я какое-то время назад узнал о форке - развитии lxde, под названием lxqt (та же lxde - но под Qt). Тогда - в конце 2014 пациент был “скорее жив”. Сейчас же - пациент жив вполне уверенно. С удивлением отметил, что под этим вполне можно работать, выглядит симпатично (на мой вкус). Многое “утащено” из LXDE, ну и привнесены мелкие приятные фишки (например, группировка окон “а-ла windows”). В общем, как бы альтернатива LXDE, как ни крути. Правда, вопрос сколько памяти кушает, а также  производительность и стабильность на текущий момент - они немного за бортом…

Оф.сайт: http://lxqt.org/

Скриншот для примера с моего ноутбука:

Про i3wm

Просмотров: 7905Комментарии: 0
Linux

Вот не дает мне покоя идея использования тайлинговых менеджеров в повседневной работе. Я писал про dwm и awesome, но по факту они были признаны негодными для использования. Первый - потому что конфигурируется через правки исходников, второй - потому что конфиг на lua и требует слишком много бубнов. (Мне любопытно, сколько времени на настройку потратили те, кто сидят под этими wm).

i3 - по слухам, требует сильно меньше усилий для настройки. Ну, чтоже ...посмотрим.

Ставим i3, а также дополнительные пакеты:

$ sudo apt-get install i3 i3status i3lock dmenu

После логинимся под i3 … вуаля. При первом запуске i3 задаст несколько вопросов (где хранить конфиг и что считать mod-клавишей, то есть клавишей - модификатором. Я назначил win-клавишу, это, кстати, предлагается по умолчанию).

Основные сочетания клавиш:

  • Mod + Enter — открыть новый терминал;
  • Mod + D — запустить любую программу через dmenu;
  • Mod + 0..9 — переключение между workspace’ами (их, кстати, 10. Номер текущего высвечивается в левом нижнем углу);
  • Mod + Shift + 0..9 — перемещение окон в заданный workspace;
  • Mod + Shift + Q — закрыть текущее окно;
  • Mod + Стрелочки — перемещение между окнами, вместо стрелочек также могут быть использованы клавиши «J» (влево), «K» (вниз), «L» (вверх) и «;» (вправо);
  • Mod + Shift + Стрелочки — перемещение окон в пределах workspace’а, вместо стрелочек также могут быть использованы буквненные клавиши и точка с запятой;
  • Mod + V — использовать вертикальное разбиение;
  • Mod + H — использовать горизонтальное разбиение (отмечу, что можно запросто комбинировать вертикальное и горизонтальное разбиение, благодаря чему можно достичь интресных эфектов);
  • Mod + E — размещение окон по-умолчанию (default layout);
  • Mod + S — стековое размещение (stacking layout);
  • Mod + W — размещение с табами (tabbed layout);
  • Mod + F — раскрыть окно во весь экран или свернуть его обратно;
  • Mod + Shift + Пробел — разрешить свободное перемещение окна (floating mode) или вернуть его в мозаику;
  • Mod + Shift + R — рестарт i3 (например, после обновления конфига);
  • Mod + Shift + E — выйти из i3;
Настраивается i3 через простые конфиг-файлы: ~/.i3/config и ~/.i3status.conf (ура! никакого lua и пересборки исходников!!!)

Кстати, ~/.i3/config - получаем путем копирования из /etc/i3.. по умолчанию ~/.i3/config отсутствует.

$ cp /etc/i3status.conf ~/.i3/i2status.conf

Далее - правим ~/.i3/i2status.conf

Ставим xxkb и загоняем его в автостарт (exec в ~/.i3/config):

exec xxkb &

Также ставим и вписываем на автозапуск необходимые апплеты:

exec nm-applet &
exec blueman-applet &

Затем - клавиши управления звуком:

# Volume settings
bindsym XF86AudioRaiseVolume exec amixer -q sset Master 3%+
bindsym XF86AudioLowerVolume exec amixer -q sset Master 3%-
bindsym XF86AudioMute exec amixer -q set Master toggle

Там в общем - всё понятно. Вообще, i3 отличается редкой юзабельностью и понятностью конфигов.

Но и это, как говорится, “еще не всё”. Конфиги хорошо документированы. Достаточно посмотреть на http://i3wm.org/i3status/manpage.html (для затравки: там описано, например, как использовать dzen2 с i3) и  http://i3wm.org/docs/userguide.html , чтобы понять - документировано всё, достаточно хорошо. Да, и всё, что описано в документации - работает!

Выводы:

  • Если хочется попробовать тайлинговый менеджер, то имеет смысл посмотреть на i3 - он, на данный момент, по моему скромному мнению, наиболее прост с точки зрения настройки
  • Придется чуть “перестроить голову”. Тайлинговый менеджер - это другой способ организации взаимодействия ПК - человек, хотим мы этого или нет. Просто - другой. Больше клавиатуры, минимум мыши. На рабочий стол файл не положить (да и сам рабочий стол так… весьма относителен).
  • Тем не менее, жить можно, и достаточно комфортно. Хотя по первости кажется - ну его нафиг! Но если это пережить (до состояния “пальцы помнят”), то становится достаточно удобно.

Лично я поработал под i3 около недели, вернулся назад (openbox и панели xfce), но вот серьезно подумыаю, что на нетбуке (стареньком 8" sony, широкоформатном до безобразия) i3 пропишется основным менеджером... причем, видимо, надолго.

Ну и скриншоты:

Про awesome: настройка и использование

Просмотров: 3983Комментарии: 0
Linux

В общем, я посмотрел на DWM, мне стало печально (ну не дело "настраивать" любое ПО через правки исходных кодов... не дело), стал смотреть в сторону альтернатив. Нашел awesome. Это вроде как  тот же DWM, только более гибкий и настраиваемый. Правда, не без странностей: конфиги его написаны на малораспространенном языке программирования lua. Зато - их великое множество. Хорошая документация, и (о чудо после dwm'a) - для конфигурирования не надо лезть в исходный код и перекомпилировать приложение!

Ну, что же... проверим.

Ставим awesone:

alexander@alexander-VPCP11S1R:~$ sudo apt-get intall awesome awesome-extra

Далее - делаем автозуск. По умолчанию, его как бы нет, но лечится довольно легко.

Создаем папку настроек:

alexander@alexander-VPCP11S1R:~$ mkdir ~/.config/awesome
alexander@alexander-VPCP11S1R:~$ ls ~/.config/ | grep awesome
awesome

Копируем в нее файл автостарта openbox (он уже есть - чего по новой-то городить?)

alexander@alexander-VPCP11S1R:~$ cp ~/.config/openbox/autostart ~/.config/awesome/autostart

Смотрим, что в нем:

alexander@alexander-VPCP11S1R:~$ cat ~/.config/awesome/autostart
/home/alexander/My-Scripts/xrandr.sh
if which tint2 >/dev/null 2>&1; then
  (sleep 1 && xcompmgr) &
  (sleep 2 && tint2) &
  (sleep 5 && xxkb) &
  (sleep 5 && volumeicon ) &
fi
pcmanfm --desktop &
(sleep 2 && setxkbmap -layout "us,ru" -option "grp:alt_shift_toggle") &

Малость редактируем:

alexander@alexander-VPCP11S1R:~$ gedit ~/.config/awesome/autostart

Привоим к виду:

/home/alexander/My-Scripts/xrandr.sh
xxkb
setxkbmap -layout "us,ru" -option "grp:alt_shift_toggle"
volumeicon

Смотрим, что у нас в xrandr.sh (это только для sony vaio):

alexander@alexander-VPCP11S1R:~$ cat ~/My-Scripts/xrandr.sh 
#!/bin/bash
xrandr --newmode "1280x600_60.00"   61.00  1280 1328 1456 1632  600 603 613 624 -hsync +vsync
xrandr --newmode "1600x768_60.00"  100.25  1600 1688 1848 2096  768 771 781 798 -hsync +vsync
xrandr --addmode LVDS-0 1280x600_60.00
xrandr --addmode LVDS-0 1600x768_60.00
xrandr --output LVDS-0 --mode 1280x600_60.00

Во всех руководствах по awesome пишут, что работать надо с локальным конфигом, так что делаем его:

alexander@alexander-VPCP11S1R:~$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua

Теперь можно приступать непосрественно к автостарту

В начало rc.lua вписываем:

-------------------------------------------------------------------------------
--    Формируем список автозапуска
-------------------------------------------------------------------------------
local autostart_list = {}
-- Открываем файл списка для чтения
local f = io.open("/home/alexander/.config/awesome/autostart", "r")
-- Число прочитанных команд
local num_cmd = 0
-- Читаем команды в список и считаем их
for line in f:lines() do
  autostart_list[num_cmd] = line
  num_cmd = num_cmd + 1
end
-------------------------------------------------------------------------------
-- Конец списка автозапуска
-------------------------------------------------------------------------------

И в конец rc.lua

------------------------------------------------------------------------------
--    Автозапуск (этот код ставим в конце rc.lua)
------------------------------------------------------------------------------
-- Перебираем список автозапуска и стратуем всё с паузой в три секунды
for i = 0, num_cmd - 1 do
  awful.util.spawn_with_shell(autostart_list[i] .. " && sleep 3")
end
------------------------------------------------------------------------------
--    Конец: Автозапуск (этот код ставим в конце rc.lua)
------------------------------------------------------------------------------

(решение отсюда: http://archlinux.org.ru/forum/topic/11748/?page=4)

Вообще много способов описано тут: https://awesome.naquadah.org/wiki/Autostart/ru - я взял самый удобный мне, чтобы все приложения автозапуска были бы в отдельном файле.

Раз уж мы работаем с rc.lua, то заодно и обои поправим.

Копируем к себе файл темы:

alexander@alexander-VPCP11S1R:~$ cp /usr/share/awesome/themes/default/theme.lua ~/.config/awesome/theme.lua

Открываем его

Ищем строку

theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/default/background.png" }

Закомментируем ее:

--theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/default/background.png" }

И вместо нее пишем:

theme.wallpaper_cmd = { "awsetbg /home/alexander/Изображения/Wallpapers/1372644-wp-1253020795739.jpg" }

Затем в rc.lua нахоим и меняем строчку темы:

beautiful.init("/usr/share/awesome/themes/default/theme.lua")

на

beautiful.init("/home/alexander/.config/awesome/theme.lua")

Еще немного украшательств: календарь при наведении на часы

В ~/.config/awesome кладем calendar2.lua со следующим содержанием:

    -- original code made by Bzed and published on <a href="http://awesome.naquadah.org/wiki/Calendar_widget" target="_blank" >http://awesome.naquadah.org/wiki/Calendar_widget</a>
    -- modified by Marc Dequ?nes (Duck) <Duck@DuckCorp.org> (2009-12-29), under the same licence,
    -- and with the following changes:
    --   + transformed to module
    --   + the current day formating is customizable
     
    local string = string
    --local print = print
    local tostring = tostring
    local os = os
    local capi = {
        mouse = mouse,
        screen = screen
    }
    local awful = require("awful")
    local naughty = require("naughty")
    module("calendar2")
     
    local calendar = {}
    local current_day_format = "<u>%s</u>"
     
    function displayMonth(month,year,weekStart)
            local t,wkSt=os.time{year=year, month=month+1, day=0},weekStart or 1
            local d=os.date("*t",t)
            local mthDays,stDay=d.day,(d.wday-d.day-wkSt+1)%7
     
            --print(mthDays .."\n" .. stDay)
            local lines = "  " --интервал перед днями неделями
            os.setlocale("ru_RU.utf8")
            for x=0,6 do
                    lines = lines .. os.date("%a ",os.time{year=2006,month=1,day=x+wkSt})
            end
           lines = lines .. "\n"-- .. os.date(" %V",os.time{year=year,month=month,day=1}) --Убираем номер недели
     
            local writeLine = 1
            while writeLine < (stDay + 1) do
                    lines = lines .. "    " --интервал перед первым числом, если оно не в начале недели
                    writeLine = writeLine + 1
            end
     
            for d=1,mthDays do
                    local x = d
                    local t = os.time{year=year,month=month,day=d}
                    if writeLine == 8 then
                            writeLine = 1
                            lines = lines .. "\n"-- .. os.date(" %V",t) --убираем номер недели
                    end
                    if os.date("%Y-%m-%d") == os.date("%Y-%m-%d", t) then
                            x = string.format(current_day_format, d)
                    end
                    if (#(tostring(d)) == 1) then
                            x = " " .. x --выравнивание между одно и двухзначными цифрами
                    end
                    lines = lines .. "  " .. x --интервал между числами
                    writeLine = writeLine + 1
            end
            local header = os.date("%B %Y\n",os.time{year=year,month=month,day=1})
            header = "          " .. header --выравниваем месяц и год по центру
            return header .. "\n" .. lines
    end
     
    function switchNaughtyMonth(switchMonths)
            if (#calendar < 3) then return end
            local swMonths = switchMonths or 1
            calendar[1] = calendar[1] + swMonths
            calendar[3].box.widgets[2].text = string.format('<span font_desc="%s">%s</span>', "monospace", displayMonth(calendar[1], calendar[2], 2))
    end
     
    function switchNaughtyGoToToday()
            if (#calendar < 3) then return end
            local swMonths = switchMonths or 1
            calendar[1] = os.date("*t").month
            calendar[2] = os.date("*t").year
           switchNaughtyMonth(0)
    end
     
    function addCalendarToWidget(mywidget, custom_current_day_format)
      if custom_current_day_format then current_day_format = custom_current_day_format end
     
      mywidget:add_signal('mouse::enter', function ()
            local month, year = os.date('%m'), os.date('%Y')
            calendar = { month, year,
            naughty.notify({
                    text = string.format('<span font_desc="%s">%s</span>', "monospace", displayMonth(month, year, 2)),
                    timeout = 0,
                    hover_timeout = 0.5,
                    screen = capi.mouse.screen
            })
      }
      end)
      mywidget:add_signal('mouse::leave', function () naughty.destroy(calendar[3]) end)
     
      mywidget:buttons(awful.util.table.join(
        awful.button({ }, 1, function()
            switchNaughtyMonth(-1)
        end),
        awful.button({ }, 2, switchNaughtyGoToToday),
        awful.button({ }, 3, function()
            switchNaughtyMonth(1)
        end),
        awful.button({ }, 4, function()
            switchNaughtyMonth(-1)
        end),
        awful.button({ }, 5, function()
            switchNaughtyMonth(1)
        end),
        awful.button({ 'Shift' }, 1, function()
            switchNaughtyMonth(-12)
        end),
        awful.button({ 'Shift' }, 3, function()
            switchNaughtyMonth(12)
        end),
        awful.button({ 'Shift' }, 4, function()
            switchNaughtyMonth(-12)
        end),
        awful.button({ 'Shift' }, 5, function()
            switchNaughtyMonth(12)
        end)
      ))
    end

Далее, в верх rc.lua добавляем

require("calendar2")

И после строки

mytextclock = awful.widget.textclock({ align = "right" })

вставялем

calendar2.addCalendarToWidget(mytextclock, "<span color='green'>%s</span>")

проверяем, всё работает!

Проблема: некоторые процессы запускаются по несколько раз.

Нашел функцию (http://www.linux.org.ru/forum/general/8424382)

-- {{{ Autoruns
function run_once(prg)
    if not prg then
        do return nil end
    end
    awful.util.spawn_with_shell('ps ux | grep -v grep | grep -F ' .. prg .. ' || ' .. prg .. ' &')
end

Еще одна очень интересная возможность awesome - теги.

Во-первых, их можно переименовать "под себя". Достаточно найти tags { names - и там исправить имена тегов.

Например:

 tags[s] = awful.tag({ "Main", "WWW", "IM", "Ed", "CMD", 6, 7, 8, 9 }, s, layouts[1])

Во-вторых, можно запускать приложения в тегах, для этого надо внести корректировки в секцию awful.rules.rules.

Например, чтобы firefox запускался во втором теге, надо написать:

  { rule = { class = "Firefox" },  properties = {tag = tags[1][2]}},

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

теперь очень важная на sony vaio функция: переключение разрешения. Для этого ищем globalkeys, и вносим туда:

awful.key({}, "#146", function () awful.util.spawn("~/My-Scripts/xrandr-change.sh") end)

проверяем. Работает!

Продолжение видимо следует...)))

Осваиваем DWM: проблемы и решения (настройка трея, запуск dwm через систему альтернатив)

Просмотров: 5569Комментарии: 0
Linux

Ссылка на аепрый пост, посвященный DWM: клиц

Итак, как мы помним, в DWM нет плагинов, но есть патчи. Таким образом, чтобы эХсперементировать над DWM с патчами, не трогая основной DWM из пакета, появляется задача: скомпилировать чистый DWM в папке пользователя и настроить его запуск, не трогая dwm из пакета.

Решение:

Скачиваем исходные коды по ссылке http://dl.suckless.org/dwm/

Распаковываем в ~/dwm, переходим в него, делаем make, получаем ошибку:

alexander@alexander-ThinkPad-X201 ~ $ cd ~/dwm
alexander@alexander-ThinkPad-X201 ~/dwm $ make
dwm build options:
CFLAGS   = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os -I/usr/X11R6/include -I/usr/X11R6/include/freetype2 -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION="6.1" -DXINERAMA
LDFLAGS  = -s -L/usr/X11R6/lib -lX11 -lXinerama -lfontconfig -lXft
CC       = cc
CC drw.c
drw.c:5:22: fatal error: X11/Xlib.h: Нет такого файла или каталога
 #include <x11 xlib.h="">
                      ^
compilation terminated.
make: *** [drw.o] Ошибка 1

Лечим:

sudo apt-get install libx11-dev

Опять получаем ошибку, но уже другую:

drw.c:6:25: fatal error: X11/Xft/Xft.h: Нет такого файла или каталога

лечим:

sudo apt-get install libxft-dev

получаем:

/usr/include/X11/Xft/Xft.h:39:22: fatal error: ft2build.h: Нет такого файла или 
каталога

пробуем: make

получаем:

/usr/include/X11/Xft/Xft.h:39:22: fatal error: ft2build.h: Нет такого файла или каталога

лечим:

sudo apt-get install libfreetype6-dev

Этот файл лежит в /usr/include/freetype2

Правим config.mk

Находим строчку: INCS = -I${X11INC} -I${FREETYPEINC}

Правим: INCS = -I${X11INC} -I${FREETYPEINC} -I/usr/include/freetype2

Пробуем make

получаем:

X11/extensions/Xinerama.h: Нет такого файла или каталога

Но в config.mk говорится, что Xinerama, comment if you don't want it - так что ищем строки

# Xinerama, comment if you don't want it
XINERAMALIBS  = -lXinerama
XINERAMAFLAGS = -DXINERAMA

и комментируем их

пробуем: make

Ура! Все скомпилировалось :)

Теперь патч,который выводит системный трей

Скачиваем его: http://dwm.suckless.org/patches/dwm-6.1-systray.diff (для версии 6.1)

Патчим:

patch < dwm-6.1-systray.diff

Получаем ошибку:

1 out of 33 hunks FAILED -- saving rejects to file dwm.c.rej

Ручками правим в пропатченном dwm.c строку 663: с XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); на resizebarwin(m);

Компилируем: make

Все ок.

Теперь задача номер два: запустить наш DWM при входе. Для этого нам поможет

встроенная в ubuntu система альтернатив

.

Добавляем в систему альтернативу. Смотрим, где располагается текущий dwm:

alexander@alexander-ThinkPad-X201 ~ $ which dwm

/usr/bin/dwm

Добавляем альтернативу при помощи ключа --install утилиты update-alternatives (для памяти:   --install <ссылка> <имя> <путь> <приоритет>)

alexander@alexander-ThinkPad-X201 ~ $ sudo update-alternatives --install /usr/bin/dwm dwm /home/alexander/dwm/dwm 1065
[sudo] password for alexander: 
update-alternatives: используется /home/alexander/dwm/dwm для предоставления /usr/bin/dwm (dwm) в автоматический режим

Собственно, смотрим, что получилось... (выходим из текущего WM, и запускаем DWM)

Трей есть!

Далее, если надо вдруг удалить альтернативу, то используем ключ   --remove

  --remove <имя> <путь>

В данном случае:

alexander@alexander-ThinkPad-X201 ~ $ sudo update-alternatives --remove dwm /home/alexander/dwm/dwm
[sudo] password for alexander: 
update-alternatives: используется /usr/bin/dwm.default для предоставления /usr/bin/dwm (dwm) в автоматический режим

Для истории:

--config - настраивает альтернативу. Например, sudo update-alternatives --config x-www-browser - может сменить браузер по умолчанию.

ls -al /etc/alternatives/ - посмотреть список файлов-ссылок на альтернативы

Основные ссылки:

editor — редактор текста (типа nano, vi, vim, emacs)

ftp — ftp-клиент

x-cursor-theme — тема курсора

x-session-manager — графическая сессия (kde, gnome, openbox)

x-terminal-emulator — эмулятор терминала

x-window-manager — оконный менеджер (kwin, metacity, openbox)

x-www-browser — веб-браузер

Ну и напоследок, так сказать - выводы про dwm.

А выводы немного неутешительны. Несмотря на то, что эксперимент достаточно удачен, рано или поздно - патчи войдут в конфликт друг с другом, и будет "весело" - в том смысле, что разгребать вручную кучу diff-файлов удовольствие, с моей точки зрения ниже среднего. Так что посмотрим в сторону других тайлинговых альтернатив dwm...

Осваиваем DWM: проблемы и решения (как выйти из сеанса пользователя через консоль, автозапуск в DWM и т.д.)

Просмотров: 4184Комментарии: 0
Linux

Меня что-то торкнуло в сторону тайлинговых WM (windows manager, менеджер окон). Идея понравилась :) особенно на широкоформатном дисплее ноутбука... правда, есть одно "но": как правило, настройке эти DM подвергаются достаточно сложно. Начать "смотреть" решил с "самого простого" - DWM.

Оказалось, правда, что он самый сложный. Потому что настройка его сводится к измнению заголовочного C-файла, и перекомпиляции. Афигеть! Но "just for fun" попробовать стоит.

В общем, я буду потихоньку описывать тут - что сделано, что как решил...

Итак, первое. Вы установили DWM (ставится из репозиториев Убунты) и зашли в него. Посмотрели. Захотели что-нибудь запустить... а как - непонятно: меню нет, значков нет, ничего нет! Мышка есть - но зачем она, непонятно.

Да, DWM управляется с клавиатуры. И самое первое, что надо запомнить - это Shift-Alt-Enter. Запуск терминала. Кроме того, DWM поддерживает Dmenu - удобная вещь для запуска разных приложений. Вызывается через Alt-P. Alt-Num - переходы по "тегам" (9 областей). Alt-Shift-c - закрыть активное окно.

Второе. Вы захотели выйти из DWM.

Решается двумя путями:

1) Alt-Shift-q - закрыть dwm (штатная возможность DWM, ни за что бы не догадался).

2) Воспользоваться странным, но универсальным способом: killall -u `whoami` (я вообще себе в .bashrc прописал alias logoff='killall -u `whoami`' и использую logoff из консоли).

Пояснение: для Linux Mint (и подозреваю Убунты) - эта команда закрывает все процессы текущего пользователя, то есть выкидывает в окно логина. Потенциально это опасно, т.к. может быть фоном что-то запущено... и не отработано... в общем, на свой страх и риск. Тем не менее - это хороший работающий способ выйти из сеанса пользователя из консоли, для WM, которые этого не поддерждивают явно.

Третье. Обоев тоже нет, а среда графическая.

Ну, тут вроде должно быть просто: есть feh, есть nitrogen (я лично предпочитаю его)... но вот засада: нет в DWM startup скриптов. Никаких. Вообще!

Что в таком случае делают тру-линуксодиды? Правильно, используют .xinitrc (лично я давно не использовал этот как мне казалось - рудимнет, на чём и погорел, но об этом ниже). Так вот, раньше как было: в папке пользователя создаешь .xinitrc - пишешь туда, что нужно, и вуаля, оп! всё работает! Но, как выяснилось .xinitrc - "не работает". Теперь автостарт при старте иксов подхватывает ~/.xsessionrc - беда не велика, будем работать с ним.

Дальше - больше и интереснее. Если просто прописать в .xsessionrc - nitrogen --restore, то обои "из нитрогена" будут "переписывать" обои используемых WM. Для обоев может и не критично, а вот разнести запуск каких-то специфических для WM вещей хотелось бы... В итоге родилось такое вот извращенское решение:

(sleep 5

if [ `ps -aux | grep '0:00 dwm' | wc -l` -eq 2 ] ;

then

  nitrogen --restore

fi;) &

Тут, кстати, надо сделать пару пояснений. Идея в том, чтобы после того, как загрузится DWM (или другой WM) - убедиться что загружен именно DWM, и, если это так - провести нужные нам запуски (в данном примере - только нитроген). Задержка в 5 секунд нужна, чтобы DWM загрузился (на самом деле, это очень быстрая и легкая среда - грузится намного быстрее, секунды за 3. Остальные 2 - страховка).

Ну и для памяти: ps -aux | grep xfce-session - позволяет узнать, запущен ли xfce в данный момент (может, кому пригодится).

Продолжение наверное следует :)

Рабочее окружение на openbox и tint2: допилить и улучшить

В процессе доведения travel-нетбука до состояния "мне удобно" пришла идея использовать итоги "марафона января 2015", и устроить себе рабочее окружение на связке openbox + pcmanfm + tint2.

В общем-то "сказано-сделано". Достаточно подробно весь процесс расписан тут: http://www.alib.spb.ru/blog/page/janvarskij-marafon-post-5-openbox (я остановился на варианте с pcmanfn - так как он дает привычный интерфейс рабочего стола... а nitrogen это все-таки вещь, которая "просто натягивает обои"). Отдельно остановлюсь на выборе панели. tint2 выбрал потому, что она маленькая, легкая, и включает в себя то, что надо: лаунчер и трей. А как же меню? А меню, как выяснилось, мне не очень-то и надо. При наличии appfinder (о нем чуть ниже) оно становится "слегка ненужным". Логика проста: travel-нетбук имеет огрниченное число вариантов использования. От него нужен офис, браузер, скайп и файловый менеджер. Это выносим в лаунчер tint2. Запущенные приложения отображаются в панели по дефолту. Что не хватает: индикатора громкости (ставим volumeicon и автозапускаем его на openbox-сессии) и индикатора раскладки (ставим xxkb и аналогично автозапускаем его).
Немного о настройке tint2: http://www.alib.spb.ru/blog/page/pro-paneli-v-okonnyh-sredah-4(там не описана настройка лаунчера... вообще планирую написать отдельный пост на тему настройки tint2. В принципе, можно посмотреть тут или тут).

Ну и про appfinder. Это пакет из xfce4, независимый, то есть может использоваться не только в xfce, но и в любых других средах, чем мы и воспользуемся. Суть appfinder - отображение списка приложений, поиск приложений по вводу первых букв. (для памяти: sudo apt-get install xfce4-appfinder).

Я его повесил на сочетания Win+Tab, получается, что если мне нужно что-то кроме того, что висит в лаунчере, то это "что-то" можно прекрасно без меню найти. (хотя appfinder с моей точки зрения, это как раз разновидность меню, просто не привязанного к панели).

Ну и пару слов о том, как повесить вызов приложения на сочетания клавиш в lubuntu.

Открываем /home/alexander/.config/openbox (не забываем сделать бекап!!), там ищем секцию <keyboard>, в нее добавляем новый раздел по аналогии

    <keybind key="W-Tab">
      <action name="Execute">
        <command>xfce4-appfinder</command>
      </action>
Перегружаем openbox. Профит.

И дополнительно много толкового по настройке openbox тут: http://www.unix-lab.org/posts/openbox/