8月 312012
 

在两台机器上安装了 Thunderbird,时间长了两边的通讯录很容易不再一致, 所以想找到一种同步方案,使得各处的通讯录信息都一致。

网络搜索中看到了若干有同步功能的扩展,但一番研究后都没有作为自己的方案。 其中 Zindus 目前不能同步 Thunderbird 中通讯录中的列表,这对我来说是严重缺陷。目前我重度使用了列表功能。 SyncKolab 会把通讯录(和日历)和远程的 IMAP 文件夹同步,这个我感觉有些怪异。不过也许是不错的选择,未作进一步尝试。 Google Contacts 会把列表映射为 Google 通讯录的群组。事实上我已经在用这个扩展。它的问题是 Google 通讯录会被映射为一个独立的通讯录。而我本身希望保留本地通讯录,使得本地通讯录和远程的内容一致。如此的话我在本地就看到两份相同的内容。另外这个扩展有同步到 Google 通讯录后出现重复项的问题。

我还设想过使用 LDAP 服务器做中心来同步多个 Thunderbird 的通讯录。 Thunderbird 支持以 LDIF 格式导入导出其通讯录。 我考虑可以运行个 cron 任务,将导出的 ldif 文件合并到 LDAP 上的通讯录中。 (具体的合并手段可能是 ldapadd,或者 ldapmerge)不过目前我能连接的 LDAP 服务上私人通讯录并未实现,所以只能作罢。

网络搜索中,我发现 Thunderbird 会将个人通讯录和集合通讯录存储在 profile 目录 下的 abook.mabhistory.mab 中。 Thunderbird 可以保证更改这两个文件后 再启动时会加载更新后的通讯录。其他新建的通讯录也在同样的目录下,也是 mab 后缀,但名字比较随意,而且不能直接拷贝。(信息来源在此)我只用到两个 缺省的通讯录,所以没有这个烦恼。于是,不考虑中心服务器,我干脆直接在两个机器 上同步最新的 mab 文件即可。依此想法,写了个 Shell 脚本 tbcon, 通过 push/pull 参数来实现通讯录的拉取和推出。它需要一个简单的配置文件,指 定本地目录、远程主机和远程目录,远程主机需要开启 SSH 服务。