以前、
Googleカレンダーのコマンドラインインターフェース gcalcliを使ってみるでGoogle CalendarをCLIで操作できるgcalcli
を紹介した。しかし、全角文字が含まれるとズレがあるし、対話式でも操作できるカレンダーアプリが欲しい1。
KOrganizerで試すも失敗
KOrganizerを試すが、 kubuntu - How to sync with Google Calendar? - Ask Ubuntuのとおり行うも、
- Login to you Google account then allow access to it
で、このブラウザまたはアプリは安全でない可能性があります。
と言われ駄目。
calcurseをインストール
ようやく本題。 calcurseを試してみる。
sudo apt install calcurse
pip3 install --user httplib2
Google Calendarと同期させるためのページも用意されている→ calcurse-caldav。
CalDAV設定ファイル作成
まず、CalDAV設定ファイルを作成する。
config.sample « caldav « contrib - calcurse.git - the main calcurse repository
mkdir -p ~/.calcurse/caldav
wget https://git.calcurse.org/calcurse.git/plain/contrib/caldav/config.sample -O ~/.calcurse/caldav/config
以下の項目を変更する
~/.calcurse/caldav/config
[General]
Hostname = apidata.googleusercontent.com
Path = /caldav/v2/example@gmail.com/events/
AuthMethod = oauth2
SyncFilter = cal
DryRun = No
[OAuth2]
ClientID = your_client_id
ClientSecret = your_client_secret
Scope = https://www.googleapis.com/auth/calendar
RedirectURI = http://127.0.0.1
クライアントIDやクライアントシークレットはOAuth 2.0の認証情報に記されたものを記述する。
認証コードを取得する
そしてcalcurse-caldav --init keep-remote
を実行する。
ブラウザが起動して、カレンダー操作したいアカウント、そしてカレンダー権限付与の有無を聞かれるので、答える。すると
http://127.0.0.1/?code=4/Ok6mBNW2nppfIwyL-Q1ZPVkEk3zZdZN3mHc642f12512161fec78Cb8b79f1B102c5b811Y&scope=https://www.googleapis.com/auth/calendar
上記URLの画面に飛ばされる(code=
以降の英数字はそれぞれ)。自身がWebサーバーでなければ、正常に接続できませんでした
と表示されるが問題ない。code=
から&scope
の間にある英数字記号を記録しておく。
ここでは4/Ok6mBNW2nppfIwyL-Q1ZPVkEk3zZdZN3mHc642f12512161fec78Cb8b79f1B102c5b811Y
とする。
それをcalcurse-caldav --init keep-remote --authcode '4/Ok6mBNW2nppfIwyL-Q1ZPVkEk3zZdZN3mHc642f12512161fec78Cb8b79f1B102c5b811Y'
といった形で--authcode ''
のシングルコーテーションの間に埋めて実行する。シングルコーテーションで括るかどうかはシェルに仕様に合わせる。
403 に悩まされる
私の場合、ここで詰まった…
$ calcurse-caldav --init keep-remote --authcode '4/Ok6mBNW2nppfIwyL-Q1ZPVkEk3zZdZN3mHc642f12512161fec78Cb8b79f1B102c5b811Y'
Connecting to apidata.googleusercontent.com...
Removing all local calcurse objects...
error: The server at apidata.googleusercontent.com replied with HTTP status code
error: 403 (Forbidden) while trying to access https://apidata.googleusercontent.
error: com/caldav/v2/example@gmail.com/events/.
エラーになる。
403 Forbidden when submitting authcode for google calendar · Issue #200 · lfos/calcurse · GitHubではauthcode
の指定にscope
以降も含めているんじゃないのか云々言ってるが、違う!
諦めかけたが単純なことだった。必要なAPIライブラリがGoogle Calendar APIだけでなく CalDAV API も必要だったのだ。私の場合、以前にgcalcli
を試していて、それがGoogle Calendar APIだけで動いていたので、見落していた。
After doing that, you can go to the API Library and search for the CalDAV API and enable it for your project. You will then need to do the same for the Google Calendar API.
よく読まない私が悪いが、こういうのは文中に含めるより、箇条書きにして欲しいなぁ…OAuth2 認証情報を使うプロジェクトに、 CalDAV API も追加2する。
今度は成功。
$ calcurse-caldav --init keep-remote --authcode '4/Ok6mBNW2nppfIwyL-Q1ZPVkEk3zZdZN3mHc642f12512161fec78Cb8b79f1B102c5b811Y'
Connecting to apidata.googleusercontent.com...
Removing all local calcurse objects...
Importing new object 63584323024.
Importing new object 63746828647.
・・・中略・・・
Saving synchronization database to /home/arimasou16/.calcurse/caldav/sync.db...
886 items imported, 0 items removed locally.
0 items exported, 0 items removed from the server.
デスクトップアプリとして登録
calcurse
と叩けば、起動する。QTerminal3だとズレる。これはneomutt
でもあった問題なので、同様にalacritty
経由で実行することで対応する。標準ターミナルを入れ変えてもいいのだけど、背景画像を設定できるQTerminalを結構気に入ってるのよね。
とりあえず、適当なアイコンを
Flaticon - The largest database of free iconsから取得して48x48ピクセルに縮小する。そして、~/.local/share/icons/hicolor/48x48/apps
直下に保存4する。
デスクトップ環境の関連付けするファイルを作成5する。
~/.local/share/applications/calcurse.desktop
[Desktop Entry]
Name=calcurse
GenericName=A calendar and scheduling application for the command line.
Comment=A calendar and scheduling application for the command line.
TryExec=calcurse
Exec=alacritty -t "calcurse" -e calcurse
Terminal=false
Type=Application
Keywords=calendar;
Icon=calcurse
Categories=Network;Calendar;
StartupNotify=false
あとは、何となくで使えるはず。週の予定、月、タスクの三つをTabで移動して操作する。メニューが下に表記してあるのでそれほど困らない。週の予定とかタスクではa
で作成、d
で削除とか行なえる。はCtrl+g
で操作取消できる。
スクリプト配備
で、登録した予定とか、初回同期以降に作成した予定とかいつ同期されるんだろう、と思ったら、calcurse-caldav
を叩く必要がある。おお、じゃあ、ログイン時に実行とか、crontab
で設定しないといけないのか、と思ったら、ちゃんと準備してあるんだね。
~/.calcurse/hooks/pre-load
、~/.calcurse/hooks/post-save
でアプリ実行前、後に実行するスクリプトを配備できる。しかもちゃんとサンプルがあるので、それを使う。
wget https://git.calcurse.org/calcurse.git/plain/contrib/hooks/pre-load -O ~/.calcurse/hooks/pre-load
wget https://git.calcurse.org/calcurse.git/plain/contrib/hooks/post-save -O ~/.calcurse/hooks/post-save
chmod a+x ~/.calcurse/hooks/pre-load
chmod a+x ~/.calcurse/hooks/post-save
実行権限を与えないと、権限がー、みたいなエラーが出る。 post-save にはバージョン管理している場合に合わせてgit commit
をする箇所が含まれているので、そこはコメントアウトして使ってる。
で、バグなのか繰り返し予定として保存してあるものが、何故か追加されていくんだよなぁ。しかも、全ての繰り返し予定だけじゃなくて、特定の予定だけ…
ともあれ、良しとする。