DWM. Часть 2. Смена изображения и автозагрузка
- Подробности
- Опубликовано 12.03.2016 00:20
Гнетущую пустоту на рабочем столе вы наверняка захотите заполнить любимым изображением, и сам DWM, этого, конечно же не может. Зато может feh, описанный в статьях по настройке Openbox и Awesome. Установите feh из репозитория вашей системы, откройте им выбранную картинку, ПКМ -> File -> Background → Set Filled, после чего изображение появится на рабочем столе, а в домашней директории файл ./fehbg
Данный файл автоматически перезаписывается каждый раз, когда вы меняете обои подобным образом. А содержит он в себе только команду для смены изображения и полный путь к оному, так что все что нам нужно - прописать его в автозагрузку с приложением, которое его прочитает и выполнит - source (поставляется с большинством дистрибутивов Linux). Средств автозагрузки в DWM также нет - зато они есть у самого X-сервера Linux (иксов), который служит для отображения графики на экран. Проще говоря - просто пропишите в самом начале файла ~/.xinitrc строки:
source ~/.fehbg &
И теперь изображение будет подружаться при каждом старте иксов.
Подобным образом (вписывая имена команд) можно добавлять в автозагрузку любое приложение, и оно будет стартовать при старте системы. Вообще автозагрузка по .xinitrc - довольно мощный инструмент для запуска приложений при старте иксов. Это скрипт, читаемый и выполняемый сервисом xinit при запуске, и он может включать в себя код, команды на исполнение других скриптов, команды запуска приложений с указанным местом расположения и размером окна, и многое другое. Подробней об этом:
https://wiki.archlinux.org/index.php/xinitrc
Если у вас есть другая настроенная WM или DE со своими средставами автозагрузки - то будьте осторожны, ведь автозагрузка ~/.xinitrc сработает вместе с автозагрузкой другой WM, что может вызвать неразбериху.
Config.h - настройка панели.
Что ж, теперь рассмотрим файл config.h.
Вы могли заметить, что вместо русских букв dwm отображает что-то невразумительное:
Всё же без ошибок в столь идеальной WM не обошлось - разработчики не подумали о локализации. Исправить это, однако, можно своими руками. Откройте файл config.h и найдите строку:
static const char font[] =
И приведите его к такому виду:
static const char font[] = "-*-clean-*-*-*-*-*-*-*-*-*-*-iso10646-*";
Теперь в роли системного шрифта выступает clean с кодировкой iso10646. Шрифты и кодировки можно вписывать по своему вкусу - главное правильно вписать название и выбрать шрифт, совместимый с данной кодировкой.
Первый блок настроек /* appearance */ отвечает за расцветку панели и рамки вокруг окон. Его вполне можно редактировать.
static const char normbordercolor[] = "#444444"; - цвет рамки вокруг окна, на котором вы не сфокусированы.
static const char normbgcolor[] = "#222222"; - цвет панели, помимо сфокусированных тегов и заголовка окна.
static const char normfgcolor[] = "#bbbbbb"; - цвет шрифтов на панели, помимо шрифтов на сфокусированнх тегах и заголовках окна.
static const char selbordercolor[] = "#005577"; - цвет рамки вокруг окна, на котором вы сфокусированы.
static const char selbgcolor[] = "#005577"; - цвет сфокусированных тегов панели и заголовка окна.
static const char selfgcolor[] = "#eeeeee"; - цвет шрифтов в сфокусированных тегах и заголовках окна.
static const unsigned int borderpx = 1; /* border pixel of windows */ - толщина рамки вокруг окна.
static const unsigned int snap = 32; /* snap pixel */ - число пикселей от границы экраны, при котором перемещаемое окно автоматически «прилепится» к краю.
В блоке /* tagging */
static const char *tags[] = { "1", "2" …"9" }
Как несложно догадаться, идут наши теги (рабочие столы). Их можно удалять или добавлять, или даже переименовать, вписывая между кавычками что угодно (удобно, например, назвать тег только для мессенджеров, другой только для файлового менеджера, и прочее).
Не забудьте заново скомпилировать DWM с отредактированным config.h (в ArchLinux с помощью makepkg -efi) и перезагрузить wm.
Но это всё не то, ведь на нашей панели даже самого необходимого - часов нет! И, к счастью, панель можно сделать более информативной. Для работы с панелью (правильнее сказать - статус бар), используем программу xsetroot (поставляется с x-сервером, так что наверняка уже установлена). Вот как это работает: пропишите в командной строке, к примеру:
xsetroot -name "Hello World!"
И вот что получится:
А если прописать в ~/.xinitrc такой простенький скрипт:
while true; do
xsetroot -name "$( date +"%F %R" )"
sleep 1m # Update time every minute
done &
То в статус-баре появяться такие вот замечательные часы с датой, обновляемые каждую минуту с момента запуска иксов (только, не сами часы обновляются каждую минуту, а ежеминутно у команды date спрашивается дата и время, и вывод через xsetroot идет в статусбар):
Есть один простой способ всунуть в статус-бар какую-угодно информацию, воспользовавшись сторонним сервисом и отобразив его вывод по xsetroot. Что за сторонний сервис? Conky! Если вы не знакомы с Conky - то это замечательная и крайне настраиваемая панелька (жаль, не динамическая, а лишь выводящая текст), позволяющая получить вывод с датчиков температуры CPU, состояние батареи, уведомление о новых письмах или даже погоду за окном. При правильной настройке отображения панели, а именно:
background no
out_to_console yes
out_to_x no
update_interval 2
total_run_times 0
use_spacer none
TEXT
[Блок вывода с датчиков, который вы отредактируете самостоятельно - главное, чтобы всё было в одной строке]
Можно заставить xsetroot делать вывод с Conky, прописав в ~/.xinitrc строку:
conky | while read -r; do xsetroot -name "$REPLY"; done &
И вот что из этого получится:
Конкретно данный Conky, а именно его блок TEXT, сконфигурирован так:
TEXT
[RAM: $mem / $memmax] | [Swap: $swap / $swapmax] | [Mem: /: ${fs_used
/} / ${fs_size /} | /filestorage: ${fs_used /mnt/filestorage} / ${fs_size
/mnt/filestorage}] [${time %a %d %B | %H:%M}]
Больше о кастомизации Conky:
http://help.ubuntu.ru/wiki/conky
https://wiki.archlinux.org/index.php/Conky_(Русский)
http://ru.wikibooks.org/wiki/Conky
Сonky - пожалуй, самый простой и удобный способ разнообразить статус-бар, однако - не совсем правильный, ведь не соответствует философии DWM, являясь «сторонним сервисом». К тому же, написанием собственных скриптов (вроде скрипта вывода времени в начале раздела) и пропатчиванием конфига (так как это - прямые исходники а не просто конфиг, что дает просто безграничные возможности для допиливания, при умении и желании), можно добиться куда большего.
Вот, к примеру, вот этот скрипт:
https://github.com/w0ng/bin/blob/master/dwm-statusbar
Приводит ваш статус-бар к вот такому виду:
И никаких сторонних сервисов, вроде Conky.
Больше информации о настройке статус-бара как на скриншоте выше:
http://archlinux.me/w0ng/2012/05/01/dwm-a-pretty-statusbar/
И о настройке статус-бара в целом:
http://dwm.suckless.org/dwmstatus/
https://bbs.archlinux.org/viewtopic.php?id=92895&p=56