Google календарь во FreeBSD
После прочтения этой статьи, прочитайте еще и эту: «Google календарь — новшества». В ней содержатся обновления, без который ничего не заработает.
Стал я пользоваться Google calendar, потому-что удобно, он всегда в кармане в телефоне и даже на windows календарь умеет туда смотреть и напоминать всякое. Собственно, эта вот штука во вражеской ОС и натолкнула меня на хотение чего-нибудь такого же на FreeBSD. Поскакав по портам, нашел /usr/ports/gcalcli — забавная штука, выводящая календарь в консоль. После установки доступна масса команд, например: — gcalcli calw Nx, где Nx — количество недель (gcalcli calw 2 выведет две ближайшие недели); gcalcli calm — выводит месяц; gcalcli remind Nx (Nx — количество минут) оповестит о предстоящих в ближайшие Nx минут делах, о этом позднее.
Собственно, устанавливаем, запускаем gcalcli, при первом запуске он откроет нам браузер с входом в аккаунт google, где надо авторизоваться и разрешить ему доступ к календарю. Дальше начинаем работать.
Но нам же неинтересно все время тыкать в консоли gcalcli, на это дело на само надо напоминалку настраивать. Поэтому будем выводить календарь прямо на рабочий стол, а напоминания слать через стандартный протокол notify.
Первое — ставим /usr/ports/sysutils/conky , замечательную утилитку, умеющую выводить всякую информацию поверх рабочего стола. После ее установки, кстати, в /usr/local/share/examples/conky/ есть замечательный conky.conf, который рисует вполне пристойный систем-монитор. Собственно, перелопатив его немного, я получил вот такой конфиг для своего календаря:
conky.config = {
alignment = 'top_right',
background = false,
border_width = 0,
cpu_avg_samples = 2,
default_color = 'white',
default_outline_color = 'white',
default_shade_color = 'white',
draw_borders = false,
draw_graph_borders = true,
draw_outline = false,
draw_shades = false,
use_xft = true,
font = 'DejaVu Sans Mono:size=12',
gap_x = 5,
gap_y = 60,
minimum_height = 5,
minimum_width = 5,
net_avg_samples = 2,
double_buffer = true,
out_to_console = false,
out_to_stderr = false,
extra_newline = false,
own_window = true,
own_window_class = 'Conky',
own_window_type = 'desktop',
own_window_transparent = true,
own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
stippled_borders = 0,
update_interval = 1.0,
uppercase = false,
use_spacer = 'none',
show_graph_scale = false,
show_graph_range = false,
text_buffer_size = 8096,
override_utf8_locale = yes
}
conky.text = [[
${execi 300 gcalcli --military --nocolor --nolineart calw 2}
]]
Все описывать не буду, достаточно очевидно, но несоклько замечаний:
double_buffer = true — без этого вывод пртивно мерцает раз в секунду.
${execi 300 gcalcli —nocolor —nolineart calw 2}:
—nocolor нужна для того, чтобы не выводились коды цветов, conky этого не понимает, и даже если использовать ключ —conky, который есть у gcalcli, все равно выводит коды, вместо цветов, на экране не четкая табличка, а бардак.
—nolineart — для тех, кто использует системную кодировку UTF-8, а у меня именно она. Без этого ключа вместо линий таблицы рисуется лютый капец.
—military не обязателен, включает двадцатичетырехчасовое представление времени.
Теперь надо просто запустить conky и радоваться календарю поверх обоев рабочего стола. Можно запускать вручную, можно настроить автозапуск. У меня fluxbox, поэтому в ~/.fluxbox/startup добавил
/usr/local/bin/conky &
Теперь, что касается всплывающих напоминалок:
ставим
/usr/ports/devel/libnotify
/usr/ports/deskutils/notification-daemon
/usr/ports/deskutils/notify-osd
Собственно, из libnotify нам нужна notify-send, которую использует gcalcli remind, чтобы эти нотификации ловить нужен notification-daemon, который запускаем со стартом FluxBox
В ~/.fluxbox/startup добавляем перед conky
/usr/local/libexec/notification-daemon &
В документации советуют добавить в crontab
*/10 * * * * username gcalcli remind
Однако, у меня не взлетело. Вместо оповещалок в лог вываливается ошибка питона, сводящаяяся к тому, что второй аргумент скрипта должен быть строкой. Думаю, причина в связке python2x и UTF-8. Благо, в доументации есть пример шеллскрипта, который делает то же самое. Я поместил его в .xinitrc перед запуском vm, как это и советуют:
if [ -x /usr/local/bin/gcalcli ]; then
while true; do
/usr/local/bin/gcalcli --military remind
sleep 300
done &
fi
Выглядит все это вот так:
PS Собственно, у gcalcli много аргументов интересных, выводятся с помощью gcalcli —h, или смотрим /usr/local/share/doc/gcalcli/README.md, там и добавлять события можно, и редактировать, и искать, но лично мне уже это проще в веб-версии делать.