How To Synchronize Google Calendar With KDE-PIM (Part 2)

Filed in LinuxTags: Google Calendar, KDE-PIM, Kubuntu, Synchronization

This guide has been moved to the Tutorials section, but will remain here for historical reference. Please refer to the KDE-PIM-GCal Sync: GCalDaemon Tutorial for any future updates to this guide.

In my previous post, I detailed how to use OpenSync, MultiSync, and KitchenSync to synchronize Google Calendar with KDE-PIM.

The reason that I do not use this method to synchronize KDE-PIM with my Google Calendar is three-fold:

  1. If you notice on the Google Calendar group member configuration dialogue, you will see the statement: Please note that currently the password is stored as plain text in the plugin configuration file. That means that your gmail password is stored in plain text. Granted, the configuration file is located in the home directory, which is protected; even still, I would prefer not to leave the password in clear text.
  2. The plugin appears to be limited to a single calendar. I use at least four different calendars, and would like to synchronize all four.
  3. The synchronization is would like to add an event to either KDE-PIM or Google Calendar, and have the synchronization take place without my intervention. (I know, I could set up a cron job and msynctool or something to automate it.)

Fortunately, GCalDaemon provides all the functionality that I need for Google Calendar synchronization.

Part 1: What is GCalDaemon?

From the GCalDaemon web site:

GCALDaemon is an OS-independent Java program that offers two-way synchronization between Google Calendar and various iCalendar compatible calendar applications. GCALDaemon is primarily designed as a calendar synchronizer but it can also be used as a Gmail notifier, Address Book importer, Gmail terminal and RSS feed converter.

Part 2: GCalDaemon Installation Prerequisites

The first two requirements for GCalDaemon should seem obvious:

  • A Gmail account
  • An iCal-compatible calendar application (KDE-PIM in our case)

The only package dependency is Java Runtime, version 1.5 or later. Install either of the following packages (but not both):

  • sun-java6
    (Sun's Java Runtime)
  • openJDE-6-jre
    (open-source Java runtime)

Part 3: GCalDaemon Installation

These instructions are generally based on the GCalDaemon web site's installation instructions. They do require use of the command line, but aren't anything too painful.

Begin by downloading the latest Linux installation ZIP file.

Unzip this archive under the '/usr/local/sbin' directory. Assuming you downloaded the ZIP file into ~/downloads/, then:

cd /usr/local/sbin

unzip ~/downloads/gcaldaemon-linux*.zip

chmod -R g+w /usr/local/sbin/GCALDaemon

chmod 755 /usr/local/sbin/GCALDaemon/bin/*.sh

Test your setup by trying to run the password-encoding script:

/usr/local/sbin/GCALDaemon/bin/password-encoder.sh

If you see something like the following, then GCalDaemon is successfully installed:

Your Google password: _

We will run the password encoder script later, during configuration; so for now, hit ENTER to exit the script.

Part 4: iCalendar File Setup

We will use the file-based synchronization scheme, explained by the following diagram (provided by the GCalDaemon web site):

File-based synchronization using GCalDaemon

The key to this synchronization scheme is to have an iCal calendar file that is read/written by both GCalDaemon and KDE-PIM.

First, create the iCal file using KDE-PIM:

  1. In Kalendar view, select "Add Calendar".
  2. In the dialogue that appears, choose "Calendar in Local File".
  3. In the Resource Configuration dialogue:
    • Under "General Settings" give the calendar file a name (for this guide, we will assume the file is named "test")
    • In "Location" browse to the location you wish to store the file (this guide will assume "~/calendars/")
    • Under "Calendar Format" ensure "iCalendar" is selected

You will now see your new calendar appear in KDE-PIM. If you want, add a sample event in your calendar.

Now that the calendar file is created, we can configure GCalDaemon to synchronize this file with Google Calendar. To do so, you have two options: editing the configuration file directly, or using the Configuration Editor application.

If you are only synchronizing one calendar file, either method is equally easy. I did find, however, that configuring multiple calendar files to synchronize (I have four) was much easier using the Configuration Editor.

This guide will first explain how to edit the configuration file directly, and then how to run the Configuration Editor.

Part 5a: GCalDaemon Configuration (Editing the Configuration File)

Using the command-line instructions above, run the Password Encoder script:

/usr/local/sbin/GCALDaemon/bin/password-encoder.sh

At the prompt, enter your gmail password. The script will return the result of encoding the password. Take note of this result; you will need it shortly.

GCalDaemon gmail password encoder

Go to Google Calendar, and copy the iCal URL for your calendar's Private Address on the Calendar Settings page.

Google Calendar settings iCal URL

Now you are ready to edit the configuration file. Using the editor of your choice (e.g. Kate), open the /usr/local/sbin/conf/gcal-daemon.cfg file. Edit as follows:

  1. Set the 'file.enabled' property to 'true'
  2. Set the 'file.google.username' property to your Gmail address
  3. Set the 'file.google.password' property to your encoded password
  4. Set the 'file.private.ical.url' property to iCal URL, without protocol and hostname

The following screenshot details the above instructions:

GCalDaemon configuration file

Save and close the file. Everything should now be configured.

Part 5b: GCalDaemon Configuration (Configuration Editor)

GCalDaemon doesn't provide a KMenu shortcut for the Configuration Editor. (You can create one, but doing so it outside the scope of this guide.) To launch the Configuration Editor, use the command-line to run the Config Editor script:

/usr/local/sbin/GCALDaemon/bin/config-editor.sh

This script will run the Configuration Editor, which looks something like the following:

GCalDaemon Configuration Editor

The GCalDaemon website has a nice guide for how to configure using the Configuration Editor (note: the method I describe uses the Offline-Enabled mode). Please see the GCalDaemon guide for screenshots. Also, This guide by MakeTechEasier does a nice job of explaining how to use the Configuration Editor.

To configure:

  1. Select the second tab (HTTP Synchronizer) and disable the HTTP-based synchronizer.
  2. Select the third tab (File Synchronizer) and enable the file-based synchronizer.
  3. Enable the 'dial-up connection' mode (second checkbox on this page)
  4. Click on the 'Google Accounts' button.
  5. Register your Google Account (note: if you have already configured using the previous method, you will already see your Google account listed): Click on 'New Account', type in your Gmail address and password (twice), then click on 'Verify' button.
  6. After the verification, click on the 'OK' button in the "Verify" dialogue.
  7. Back in the File Synchronization tab, ensure the tab (at the bottom) that corresponds to your Gmail account is selected, and click on the 'New' button (bottom left). The Google Calendar Synchronization dialogue will appear. Configure as follows:
    • Google Account: Your Gmail account should be selected; if not, select it from the drop-down menu
    • Google Calendar: paste in the Private URL for your Google Calendar (which you noted previously, in Part 5a)
    • iCal File: paste in the file location for your local iCal file, used by KDE-PIM (which you created previously, in Part 4)
  8. Click "OK" to be returned to the File Synchronization tab. You will now see the file-synchronization information for your Google Calendar and local iCal file.
  9. (Note: if you want to set up multiple calendar-file synchronizations, simply repeat the above steps iin the File Synchronization tab for each calendar to by synchronized. In my case, I have four separate file synchronizations defined here.)
  10. Close the Configuration Editor.

GCalDaemon is now fully configured.

Part 6: Running GCalDaemon

Start GCALDaemon by running the "standalone-start.sh" script:

/usr/local/sbin/GCALDaemon/bin/standalone-start.sh

GCalDaemon is now running. You should now see your Google Calendar events in KDE-PIM. Verify the two-way synchronization by adding an event to your calendar in KDE-PIM. Depending on the polling frequency in gcal-daemon.cfg, it may take a few minutes for your new event to appear in your Google Calendar.

It would probably be a good idea to set this script to be started at session startup. (Again, doing so is outside the scope of this guide.) If this script is running, GCalDaemon will continuously poll both your Google Calendar and your local iCal file, and keep both in synch.

If, however, you don't want to leave the script running, you can use the one-time synchronize script whenever you want to synchronize your calendars. This script will run the synchronization and then exit:

/usr/local/sbin/GCALDaemon/bin/sync-now.sh

That's it! Your calendars will stay perpetually synchronized (if you use the always-running script) or will synchronize on command (if you use the one-time synchronization script). Again, the setuip is more involved than using OpenSync, but in the end, maintaining synchronized calendars is easier and more secure using GCalDaemon.

How To Synchronize KDE-PIM with Google Calendar

Filed in LinuxTags: Google Calendar, KDE-PIM, Kubuntu, Synchronization

This guide has been moved to the Tutorials section, but will remain here for historical reference. Please refer to the KDE-PIM-GCal Sync: OpenSync Tutorial for any future updates to this guide.

As a follow-up to my previous post, I was asked a question regarding how to synchronize KDE-PIM with Google Calendar using OpenSync. This post will explain how to use the Google Calendar plugin for OpenSync. In my next post, I will explain what I believe to be a better way to synchronize KDE-PIM with Google Calendar, using GCalDaemon.

This guide will assume that the synchronization will take place between Google Calendar and KDE-PIM.

Installing the OpenSync Google Calendar Plugin

(Caveat: this guide is purely theoretical, in that I have not actually followed the steps in practice, to perform a real-life synchronization. I prefer using GCalDaemon, which I will explain later in this post.)

Assuming OpenSync, MultiSync, and KitchenSync are installed and working, in order to synchronize Google Calendar, install the following plugin:

  • opensync-plugin-google-calendar
  • (OpenSync plugin for Google Calendar)

The rest of the instructions are pretty similar to the original guide.

Configuring the OpenSync Google Calendar Plugin Using msynctool (Command Line)

We will use msynctool, which we previously installed, to set up the synchronization via the command line. I found the msynctool manpage documentation to be incredibly helpful. To set up the synchronization via msynctool, at the command line type the following:

msynctool --addgroup GCal

msynctool --addmember GCal google-calendar

msynctool --addmember GCal kdepim-sync

You have just created a group called “GCal” that contains two members: a Google Calendar and KDE-PIM. The KDE-PIM member requires no configuration; however, the Google Calendar member does require configuration - namely, the gmail credentials and private feed URL of the calendar to by synchronized. To see the group configuration, at the command line type the following:

msynctool --showgroup GCal

The command will return information that member 1 (google-calendar) is not configured, and that member 2 (kdepim-sync) does not require configuration. To configure google-calendar, type the following at the command line:

msynctool --configure Gcal 1

The “1" at the end of the command indicates “member 1", which is google-calendar (if you followed the above instructions). This command brings up the configuration file for the google-calendar member of the “GCal” group. Optionally, you can edit the file (using Kate or your editor of choice), by opening the file directly.

Currently, the OpenSync configuration files are located in:
~/.opensync-0.22/.
If you followed the previous guide, and already have another sync group configured, then this group’s configuration files should be found in:
~/.opensync-0.22/group2/
If you defined google-calendar as member 1, then the google-calendar configuration files should be found in:
~/.opensync-0.22/group2/1/.

In this directory, open and edit the barry-sync.conf file. You will only need to edit one line, as indicated by the instructions in the file. The line to edit begins with “Device” and should look something like:

<url>
http:[email protected]/private/full
</url>
<username>[email protected]</username>
<password>PASSWORD</password>

Edit to add your gmail credentials, as follows:

  • [email protected]: Replace with your gmail address
    (Be sure to replace both instances: in <url> and in <password>.)
  • PASSWORD: Replace with your gmail password

Edit, save, and close the configuration file, and your synchronization group should be ready to go. To verify using msynctool, type the following at the command line:

msynctool --showgroup GCal

This time, the command should return the configuration information you just entered.

Now comes the moment of truth: performing the synchronization. First, make sure that KDE-PIM is not running (otherwise the process will generate errors). Again using msynctool, at the command line type the following:

msynctool --sync GCal

That’s it. You should see the synchronization process in the command shell, and once the process completes, you should see your KDE-PIM (Kalendar) calendar events on your Google Calendar, and vice versa.

Configuring the OpenSync Google Calendar Plugin Using KitchenSync (GUI)

To begin, go to KMenu -> Utilities -> KitchenSync, which will launch the KitchenSync application.

The process of creating groups and group members is pretty straight-forward. (Note: if you have already created a sync group in the previous step, you will see this group displayed within KitchenSync.) To configure:

  1. Click the “Add Group” button.
  2. Assign a name to the group in the dialogue that appears, and click “OK”. The Configure Synchronization Group dialogue will appear.
  3. Select the object types to be synchronized. Since our focus is Google Calendar, we will select only "events" and de-select "Contacts", "Notes", and "To-Dos".
  4. At the bottom of the dialogue, click “Add Member”. The Select Member Type dialogue appears.
  5. Select "Google Calendar” and click “OK”. The configuration dialogue will appear. Enter the information as follows:
    • Name: leave as-is, or customize to your needs
    • Username: your gmail username (full gmail email address)
    • Password: your gmail password
    • Calendar URL: the event feed URL for the Google Calendar you wish to synchronize<. Replace "USER" in "[email protected]" with your gmail username.
  6. Again click “Add Member”. The Select Member Type dialogue appears.
  7. The second member is KDE-PIM. Select “KDE Desktop” and click “OK”.
  8. Click “OK” again, and you will be returned to the main screen.

You should now see the group you just configured, along with two links: “Synchronize Now” and “Configure.”

Click “Synchronize Now” (or, click the “Synchronize” button on the toolbar), and the synchronization should commence, with indications of its progress. At this point, you should see the synchronization progress indication, and once the process completes, you should see your KDE-PIM (Kalendar) calendar events in your Google Calendar, and vice versa.

Again, I can't confirm that this method works; but if anyone would like to try, and report, please let me know.