Автосмена обоев рабочего стола в Awesome c помощью Icon

В качестве оконного менеджера у меня стоит Awesome, в котором меня почти все устраивает, кроме использования в нем Lua (который я не знаю, да и не собираюсь специально изучать). Так вот, потребовалась мне автосмена обоев (чтобы рабочий стол смотрелся современно), но как такую вещь реализовать в конфигурации Awesome — я без понятия.

Но так как я не знаю Lua, но знаю и использую Icon — возникла идея, как реализовать автосмену обоев, задействовав минимальные познания в линуксовой командной строке и некоторые из операций Icon.

Для начала нужно создать скрытую папку внутри домашней папки и поместить в нее изображения в формате JPG:

mkdir /home/pingvinoid/.imgsr

Как вы поняли, моя домашняя папка — /home/pingvinoid/. Если хотите повторить описанное в статье, вам нужно будет исправить путь к домашней папке в скрипте и в команде shell, т.е. mkdir /home/имя_пользователя/.imgsrc/.

Далее нам потребуется программа для смены фона рабочего стола. В данном случае, этой программой будет Nitrogen. Из вывода команды:

nitrogen --help

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

nitrogen --set-scaled путь_к_изображению

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

Но, чтобы заметить смену изображений (да и чтоб не доставало глаза) требуется выполнять изменение пути для рисунка с небольшой задержкой, допустим, задержка будет около 1 минуты.

Теперь,когда у нас есть все данные на руках,можно приступать к написанию скрипта на Icon.

Все наши обои для рабочего стола лежат в папке /home/имя_пользователя/.imgsrc/ и имеют расширение *.jpg, следовательно, достаточно получить список всех файлов с этим расширением, поместить их в какой-нибудь текстовый файл и каждый раз запускать nitrogen —set-scaled путь_к_изображению с параметром путь_к_изображению, взятым из этого текстового файла, и небольшой задержкой (которая составляет в нашем случае — 1 минуту). Текстовый файл, в который будут помещены пути к обоям, мы назовем img.txt и разместим в той же самой папке, где лежат обои.

Для манипуляций по получению списка путей к изображению и вывода их в файл, применим команду Icon’a system(), аргументом которой станет небольшая команда из арсенала shell линукса:

ls путь_к папке_с_обоями/*.jpg & путь_к_файлу_img.txt

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

В итоге получаем вот такой скрипт:

procedure main(argv)
local dir,imgf,f
dir:=argv[1]
imgf:=dir||"img.txt"
system("ls "||dir||"*.jpg &"||imgf)
repeat {
   f:=open(imgf,"r")
   every mini(!f,f)
   close(f)
}
end

procedure mini(s,f)
system("nitrogen --set-scaled "||s)
delay(10000)
end

Запуск скрипта (который я назвал live_image.icn) после компиляции, будем осуществлять вот такой командой:

./live_image путь_к домашней_папке

Конечно, это самое простейшее решение подобной автоматизации, и можно было бы обойтись только shell-скриптами, однако, это решение служит примером использования Icon в качестве скриптового языка — и расширяет сферу использования этого необычного языка программирования.

P.S: Скрипт работает не только в Awesome 😉

Добавить комментарий