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, который рисует вполне пристойный систем-монитор. Собственно, перелопатив его немного, я получил вот такой конфиг для своего календаря:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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 } |
1 |
1 2 3 | 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 добавил
1 | /usr/local/bin/conky & |
Теперь, что касается всплывающих напоминалок:
ставим
1 2 3 | /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
1 | /usr/local/libexec/notification-daemon & |
В документации советуют добавить в crontab
*/10 * * * * username gcalcli remind
Однако, у меня не взлетело. Вместо оповещалок в лог вываливается ошибка питона, сводящаяяся к тому, что второй аргумент скрипта должен быть строкой. Думаю, причина в связке python2x и UTF-8. Благо, в доументации есть пример шеллскрипта, который делает то же самое. Я поместил его в .xinitrc перед запуском vm, как это и советуют:
1 2 3 4 5 6 | 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, там и добавлять события можно, и редактировать, и искать, но лично мне уже это проще в веб-версии делать.