Synchronize Windows Mobile 6.5 and Linux Box

If you are confuse with many tutorial about how to connect your Windows Mobile 6.5 (WM65) device to your Linux box, then we have a same problem. I'm struggling to solved this problem for three days with googling and testing. And luckily now it works!

My Configuration
Samsung Omnia Pro (GT-B7320), Windows Mobile 6.5, and Fedora 12.

Checklist
  1. Please backup your contacts to free sync service such as Google Sync (highly recommended). After you do the backup, please remove ActiveSync partnership with this service.
  2. Make sure you have installed this packages (or equivalent for your Linux distros): synce-kpm, multisync-gui, sync-hal, synce-sync-engine, libopensync-plugin-evolution2, libopensync-plugin-synce-wm5 (not libopensync-plugin-synce because it's for older devices) and all dependencies.
  3. If you are using firewall, make sure you allow connection from 169.254.2.0/24 (RNDIS interface default). In iptables, we can do this with: iptables -A INPUT -s 169.254.2.0/24 -j ACCEPT. Wrong firewall configuration may block sync-engine and became a problem for synce-kpm.
synce-kpm (Files and Software)
  1. Connect the device using proper data cable.
  2. Run synce-kpm! At first run, you will be asked about making device's partnership. Just create a partnership with any name you like, select available field you'd like to synchronize and you're done!
  3. Make sure your devices detected and you have no problem with synce-kpm.
Evolution Sync (Contacts, Tasks and Calendar)
  1. Run multisync-gui and create a group with two member.
  2. First member using evo2-sync plugin and the second member using synce-opensync-plugin (and magically without to change any configuration).
  3. After all done, just click Refresh and your device will synchronized with Evolution.
opensync.py Patch

I have a problem with synchronizing from my device. I could changed the data (Contacts or Tasks) in my Evolution and synchronized well to my device, but didn't work in reverse!

The problem is caused by a bug in opensync.py just apply this patch if you have a same problem:

--- opensync.py.orig 2010-05-06 11:39:27.990099056 +0800
+++ opensync.py.new 2010-05-06 11:39:27.968098490 +0800
@@ -163,7 +163,11 @@ class OSyncChange(object):
    thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')

__repr__ = _swig_repr

def __init__(self, obj = None): 
-   this = _opensync.new_OSyncChange(obj)
+   # this = _opensync.new_OSyncChange(obj)
+   if obj:
+     this = _opensync.new_OSyncChange(obj)
+   else:
+     this = _opensync.new_OSyncChange()
    try: self.this.append(this)
    except: self.this = this

__swig_destroy__ = _opensync.delete_OSyncChange

Happy synchronizing!