Aral Balkan

Mastodon icon RSS feed icon

Using iCloud calendars on GNU/Linux

Screenshot of Gnome Calendar showing my calendar entries from my iCloud calendars. I’m travelling to Denmark on Tuesday morning at 6:25AM with Ryanair and staying there until Thursday to speak at a festival called Smukfest. Laura is in Menorca Wednesday to Saturday. Meanwhile, Barry is housesitting and looking after Osky.

My week, courtesy of iCloud.

iCloud isn’t just for your Apple toys.

Since iCloud uses an open standard called CalDAV, you can synchronise your calendars to your other devices on other operating systems like GNU/Linux.1

To use your iCloud calendars under GNU/Linux2:

A. Install the required software.

Install the following apps if you don’t already have them:

  1. Install Evolution:

    sudo apt install evolution
  2. Install Gnome Calendar:

    sudo apt install gnome-contacts

We will be using Evolution to set up the iCloud accounts but you will most likely want to use Gnome Calendar as your daily calendar as it offers a minimal, beautiful experience.

B. Set up an app-specific password on iCloud.

  1. Sign into your Apple account at

    The Apple ID sign-in page
  2. Scroll down to the App-Specific Passwords area in the Security section and select the Generate Password… link.

    Screenshot of the Generate Password… pop-over under the Security → App-specific passwords section with “CalDAV on notebook” entered in the textbox followed by Cancel and Create buttons.
  3. In the resulting pop-over, enter a descriptive name for this password.

  4. Copy the password onto the clipboard.

C. Set up your calendar(s) in Evolution.

  1. Screenshot of the main navigation with the calender icon with the word Calendar next to it.
    Select the Calendar section in the main navigation.

  2. Open the drop-down menu next to the New button and select Calendar3.

    Screenshot of the drop-down menu next to the New button. The dropdown is marked up with a red circle.
  3. In the resulting New Calendar window, select CalDAV from the Type drop-down.

    Screenshot of the New Calendar window. All of the settings shown are described in the instructions here.
  4. In the URL field, enter

  5. In the User field, enter your Apple ID

  6. Press the Find Calendars button.

    Screenshot of the Choose a Calendar window showing my various calendars. They are presented in a two-column table with headings that read Name and Supports. The names of the calendars shown are Jo and Aral (partial), Old events, Calendar, Home, Aral Work, Laura and Aral, Team, Laura’s Events, Laura’s Work, Holidays, CalChat, Laura Gym. All the entries in the Supports column read Events. Underneath the table is a field titled User mail. The value is one of my email addresses ( At the bottom of the dialog are two buttons: Cancel and OK.
  7. In the resulting password entry pop-up, paste the app-specific password you copied onto the clipboard in the last section.

  8. In the resulting Choose a Calendar window, select the calendar you want to set up4.

  9. Back in the New Calendar window, choose a colour to match the one you use on iCloud.

  10. Set your options: I select Copy calendar contents locally for offline operation, as I want to be able to access the calendar even if I don’t have an Internet connection, and Server handles meeting invitations.5

  11. If you want this to be your default calendar, also check Mark as default calendar.

  12. Set the Refresh every setting6 to decide how frequently your calendars should synchronise.

  13. Press the OK button to create the calendar when you’re happy with your choices.

This should be easier…

That’s it! If all goes well, you should see your calendar entries begin to pop up in Evolution. If you want to set up additional calendars, rinse and repeat the instructions in this section.

Once you’ve set up your accounts, fire up Gnome Calendar and enjoy your synchronised calendars in a beautifully minimal interface.

Any entries you make in Gnome Calendar will sync to iCloud and, from there, to all of your Apple toys, and vice-versa.

Ideally, this should be a seamless process that’s built into Gnome Calendar7.


As I discover issues, I will document them here.

You cannot move an event between calendars

Error dialogue: Calendar authentication request. Failed to put data: HTTP error code 403 (Forbidden): Found component … with same UID in a different collection.

Issue #304: Moving an event from one iCloud CalDAV calendar to another, results in a 403 (Forbidden) error. The exact error is “Failed to put data: HTTP error code 403 (Forbidden): Found component … with same UID in a different collection.”


  1. That said, the process is not well-documented at Apple or elsewhere. There is a clear need for better documentation as well as a seamless process for using CalDAV-based calendars in GNU/Linux. This post aims to contribute to the former. ↩︎

  2. The examples here are tested to work on Pop!_OS 18.04 running Gnome 3.28.2. ↩︎

  3. I would have taken a screenshot of the menu itself but the system-wide screenshot hot-key stops responding in Evolution when any drop-down is open. The same thing happens on the New Calendar window with the Type field. I’ve noticed similar issues in modal states in some other apps also. Not sure if this is a bug with the apps, with Gnome, or even Xorg. ↩︎

  4. You will have to set up your calendars one by one. ↩︎

  5. Because iCloud reportedly supports scheduling as described in RFC 6638. ↩︎

  6. I have mine set to every ten minutes at the moment but I might tweak that as – no pun intended – ­time goes by. ↩︎

  7. I opened an issue for this on the Gnome Calendar source code repository: Add support for iCloud CalDAV. ↩︎