Купил я пару лет назад на Avito RaspberryPi 2B за какие-то смешные деньги. Ну, оно и понятно - модель не новая, мало что может в плане производительности, если сравнивать с следующими поколениями... Покупал чисто поиграться, поднять на ней веб-сервер для самописных сайтов или сетевую шару сделать. Ну и домашнее радио, вроде советских радиоточек, которая в нашем доме работала постоянно, достаточно было только звук немного прибавить.
Всё это довольно быстро было реализовано, настроено и в дальнейшем ковырянии не нуждалось. Стало скучно, короче...
А надо отметить что сама малина досталась мне с экраном и веб.камерой. Не пропадать же добру, так сказать.
Было решено сделать настенный календарик-фоторамку. Чтобы периодически изменялись картинки, ненавязчиво информировал о дате, времени, музыкальном треке, который сейчас играет...
В качестве рабочего стола я выбрал xfce4.
Первым делом я придумал алгоритм, по которому менялась бы обоина на экране. Создал семь каталогов с названиями дней недели, внутри которых разместил по 60 тематических фотографий, имена которых от 00.jpg до 59.jpg
Затем - написал скрипт, который будет менять изображение рабочего стола в зависимости от контекста. Так, если календарь показывает Понедельник, а часы говорят что сейчас 12 минут - изображение берётся по следующему пути: /usr/share/backgrounds/Понедельник/12.jpg
Теперь по понедельникам на экране отображаются фотографии всяких географических объектов, по вторникам - коты и кошки, по средам - собаки, четверг - рыбный день, пятница - всякие алкогольные напитки и т.д...
Написал, проверил - всё работает. Стало снова скучно.
Решил по памятным событиям отображать не ежедневные обои, а что-то особенное. Создал каталог Holydays, в котором храню файлы, имена которых соответствуют формату МесяцДень, а содержимое - отображается на экране через conky. Таким образом файл 0412 содержит в себе текст "Сегодня день космонавтики" и эта надпись отображается на экране каждый год 12 Апреля. Картинки в этот день - тематические. Космос, Гагарин и всё такое...
Точно так-же и в дни рождения, Новый год, разные юбилеи и т.д.
Написал, проверил - всё работает. Ну, вы поняли...
Теперь захотелось чтобы по определённым событиям на экране выводилась всякая информация, а обоина менялась на какую нибудь особенную.
Создал каталог .notes, куда так-же, как и в случае с Holydays кладу файлы такого-же типа. Если, например, 24 Ноября запланирован поход к врачу - мне об этом сообщат особым изображением и текстом. И в этот раз обои меняться не будут, пока существует такой файл в таком каталоге. Прочёл напоминание, нажал на особую кнопку, файл удалился и всё стало как было.
Точно так-же и когда поступило новое сообщение на почту, пришло время выгулять собаку, попить кофе и пр.
За смену обоев отвечает скрипт changebackground.sh
#!/bin/sh
day=`date +"%A"`
daynomber=`date +"%d"`
mont=`date +"%m"`
date="${mont}""${daynomber}"
min=`date +"%M"`
### Начало условия
if [ -e $HOME/Documents/.notes/"${date}" ]; # Если файл, имя которого равно текущей дате существует...
then # Тогда
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image -s /usr/share/backgrounds/alert.jpg # Выполнить команду
elif [ -e $HOME/Documents/Holydays/"${date}" ]; # Или если файл, совпадающий названием с текущей датой существует
then # Тогда...
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image -s /usr/share/backgrounds/${date}/${min}.jpg # Выполнить команду
else # В противном случае
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image -s /usr/share/backgrounds/${day}/${min}.jpg # Выполнить команду
fi
Отдельно следует отметить вот эту часть кода: /backdrop/screen0/monitor0/workspace0/last-image
Это - команда на смену обоев. Она может не работать на разных компьютерах. Чтобы понять какая команда меняет изображение в вашем случае - нужно открыть терминал, выполнить
xfconf-query -c xfce4-desktop -m
затем - через графический интерфейс изменить обои и посмотреть "выхлоп" в терминале. У меня он как раз таки равен /backdrop/screen0/monitor0/workspace0/last-image
Другой скрипт работает в фоне и в случае наступления события меняет контекст. Я назвал его errormessage.sh
Вот его содержимое:
#!/bin/bash
mont=`date +"%m"`
day=`date +"%d"`
date="${mont}""${day}"
hour=`date +"%H"`
minutes=`date +"%M"`
dayname=`date +"%a"`
time=`date +"%H":"%M"`
number_day=`date +"%u"`
mail=$(curl -u address:password --silent "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' | wc -l)
### Начало условия
if [ "${time}" == "17:45" -o "${time}" == "17:46" -o "${time}" == "17:47" -o "${time}" == "17:48" -o "${time}" == "17:49" -o "${time}" == "17:50" -o "${time}" == "17:51" -o "${time}" == "17:52" -o "${time}" == "17:53" -o "${time}" == "17:54" -o "${time}" == "17:55" -o "${time}" == "09:45" -o "${time}" == "09:46" -o "${time}" == "09:47" -o "${time}" == "09:48" -o "${time}" == "09:49" -o "${time}" == "09:50" -o "${time}" == "09:51" -o "${time}" == "09:52" -o "${time}" == "09:53" ];
then
echo "ВНИМАНИЕ!"
echo ""
echo "Самое время покормить Барсика"
echo "и выгулять Джека"
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image -s /usr/share/backgrounds/alert.jpg
elif [ "${mail}" != "0" ];
then
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image -s /usr/share/backgrounds/alert.jpg
echo "ВНИМАНИЕ!"
echo "На вашу почту поступило новое сообщение."
echo ""
echo "Это уведомление не будет удалено пока вы"
echo "не прочтёте всю входящую почту."
echo ""
echo ""
echo "Количество новых писем в почтовом ящике = ${mail}."
elif [ -e $HOME/Documents/.notes/"${date}" ]; # Если файл, совпадающий названием с текущей датой существует
then # Тогда...
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image -s /usr/share/backgrounds/alert.jpg
cat ~/Documents/.notes/"${date}" # Прочесть файл, совпадающий названием с текущей датой
else # В противном случае...
/usr/bin/changebackground.sh
fi
Обратите внимание что в переменной mail нужно указать логин и пароль, чтобы отображалось количество новых писем.
Так-же в формировании окна conky участвует скрипт /usr/bin/today.sh
Он не большой и не сложный, если сравнивать с другими.
Вот его содержимое:
#!/bin/bash
mont=`date +"%m"`
day=`date +"%d"`
date="${mont}""${day}"
### Начало условия
if [ -e $HOME/Documents/Holydays/"${date}" ]; # Если файл, совпадающий названием с текущей датой существует
then # Тогда...
cat ~/Documents/Holydays/"${date}" # Прочесть файл, совпадающий названием с текущей датой
else # В противном случае...
echo "" # Вывести сообщение, указанное в кавычках
fi
### Конец условия
Ну и содержимое файла .conkyrc, пожалуй, здесь тоже оставлю. На случай если кому-то надо будет.
use_xft yes
xftfont Bitstream Vera Sans Mono:size=8
background yes
xftalpha 0
update_interval 1
total_run_times 0
own_window no
own_window_type display
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
minimum_size 740
maximum_width 740
draw_shades no
draw_outline no
border_width 5
draw_borders no
draw_graph_borders no
default_shade_color gray
default_outline_color black
alignment top_middle
gap_x 1
gap_y 5
no_buffers yes
uppercase no
cpu_avg_samples 2
net_avg_samples 1
override_utf8_locale yes
use_spacer none
color2 5f7585
color3 white
color4 gray
color5 yellow
color6 red
mpd_password password
mpd_host 127.0.0.1
TEXT
${font Arial:size=14:bold}$color4Играет песня: $color3${mpd_title} (${mpd_artist})
${image /usr/share/backgrounds/conkylinebackground.png -p -10,-6 -s 900x35}
${voffset -55}
$color5${font Arial:size=12:bold}${execi 0 /usr/bin/today.sh}
${voffset 23}
$color5${font Arial:size=16:bold}${execi 0 /usr/bin/errormessage.sh}
Это всё, что касается напоминалки со стороны сервера. На клиентских машинах есть ещё скрипты для удобной записи событий в файлы. Если кому нибудь надо будет - могу и про них рассказать.
Важно отметить что эта статья - скорее не готовое решение, а идея, которая, может быть, подтолкнёт кого-то создать что-то подобное или даже улучшенное.
Демонстрация отображения новой почты:
https://youtu.be/9wINtvtoia8