From: Бушмелев Юрий <jay-dev@simcom.ru.>
Newsgroups: email
Date: Mon, 14 Mar 2007 14:31:37 +0000 (UTC)
Subject: Синхронизация Nokia E-series с KDE-PIM
Синхронизация Nokia E-series с KDE-PIM
Disclaimer
В стать описывается личный опыт автора по синхронизации Nokia E50 через
Bluetooth с приложениями KDE 3.5 Kontact (Kaddressbook, Korganizer,
Knotes). Описанный метод может работать (а может и не работать) с
аналогичными телефонами Nokia серий E и N, а также с телефонами других
производителей, позволяющими синхронизироваться по протоколу SyncML
через OBEX.
OpenSync не является стабильным приложением на данный момент. Авторы
честно предупреждают об этом. Поэтому перед синхронизацией полезно иметь
резервные копии данных.
Автор предпочитает видеть интерфейс телефона на английском языке,
поэтому все настройки телефона показаны при использовании английского
интерфейса. Для некоторых настроек приведены также аналоги, взятые из
инструкции. Не обязательно русские аналоги будут совпадать с таковыми на
других телефонах.
Немного истории
Предыдущим телефоном у меня был SonyEricsson T68i. Все контакты с него я
периодически сливал через Bluetooth на домашний компьютер. Делал я это
при помощи obexapp, забирая через IrMC файл telecom/pb.vcf. Потом этот
vcf был импортирован в Kontact (Kaddressbook). Проводить реальную
синхронизацию данных в Kontact и на SE T68i было нецелесообразно,
поскольку последний хранил русские символы в контактах в кодировке
UTF-7. Писать фильтр мне было лень, а новые контакты появлялись не так
уж и часто, поэтому я просто параллельно вбивал их и в телефон, и в
Kontact.
Недавно я все-таки решил сменить телефон на что-то более серьезное и
купил смартфон Nokia E50. Сразу же встал вопрос, как залить на это чудо
технической мысли мои старые контакты с телефона или из Kontact'а.
Попытка передать все контакты с T68i через Bluetooth на E50 окончилась
неудачей. T68i все честно переслал, но E50 показывал в принятых только
одну визитку (business card). Аналогично закончилась попытка залить всю
адресную книжку одним файлом через Bluetooth с компьютера по obex push.
IrMC вообще не оказалось среди поддерживаемых смартфоном сервисов.
Следующим пунктом значилась gnokii. После изучения документации
оказалось, что авторы решили не заниматься исследованием протоколов
различных смартфонов на series60, а просто написали небольшой прокси -
gnapplet. Он устанавливается на смартфон и обеспечивает работу с данными
на нем по своему протоколу. Все бы ничего, только gnapplet еще не
портировали под series60v3.. Изучение gammu (давний форк gnokii) тоже не
дало ничего нового - используется тот же gnapplet.
Тут я вспомнил, что в KDE4 произошла смена бакэнда синхронизации с
multisync на opensync (www.opensync.org). О чудо, в гугле нашлось
несколько упоминаний об успешной синхронизации телефонов серии N с
помощью opensync через плагин syncml.
Поиск в портах FreeBSD не показал мне ничего интересного (если не
считать устаревшую libopensync), времени и желания портировать софт у
меня как-то тоже не нашлось. Поэтому в выходные я просто перезагрузился
в Kubuntu 6.06 и вплотную занялся изучением opensync. После некоторого
времени, проведенного за изучением ссылок и безуспешных попыток
синхронизироваться, мне это все-таки удалось! Вот краткое описание
процесса и найденных граблей.
Установка и настройка opensync и сотоварищи
Сначала добавим в sources.lst репозиторий с периодическими сборками
opensync для debian и ubuntu. Я их нашел вот
здесь: http://www.in.fh-merseburg.de/~jahn/ . Проходим по ссылке на OpenSync
0.21 Repository (возможно, когда вы будете это делать, там уже будет
новая версия). Согласно тексту страницы, добавляем в sources.lst (или
отдельный файлик в sources.lst.d - это на любителя) следующие строки
(для Dapper):
deb http://www.in.fh-merseburg.de/~jahn/opensync-0.21/ dapper main
deb-src http://www.in.fh-merseburg.de/~jahn/opensync-0.21/ dapper main
Затем забираем gpg-ключ от данного репозитория и импортируем его в apt:
KitchenSync - это интерфейс к библиотеке opensync. Есть еще интерфейс
командной строки, он называется msynctool.
После установки всего софта переходим к настройкам. Сначала надо
настроить bluetooth-соединение с телефоном. Для этого войдем в настройки
Bluetooth на телефоне: Connect. -> Bluetooth (Связь -> Bluetooth).
Включаем bluetooth и делаем телефон видимым для всех. Затем на
компьютере запускаем
hcitool scan
Эта утилита производит поиск bluetooth-устройств и выводит их список с
адресами и именами. Из полученного списка нам потребуется адрес
телефона. Если в списке не появится ваш телефон, проверьте еще раз
настройки bluetooth на нем. Теперь нужно "спарить" телефон и компьютер.
Для этого в тех же настройках Bluetooth на телефоне переходим на вторую
вкладку, где отображаются "спаренные" устройства. Выбираем Options ->
New paired device (Функции -> Нов.сопр.устройство). Телефон начинает
поиск bluetooth-устройств. Компьютер обычно (если иное не указано в
/etc/bluetooth/hcid.conf) имеет имя %h-%d, где %h - это короткое имя
хоста, а %d - номер bluetooth-устройства на компьютере. Жмем на него в
списке найденных устройств, появляется предложение ввести pin для
"спаривания". Вводим произвольный pin. Например, "12345". После этого на
компьютере должно появиться окошко, предлагающее также ввести pin.
Вводим тот же самый pin. Устройства должны "спариться". После успешного
сопряжения, E50 спрашивает, нужно ли разрешить устройству доступ без
уведомления. Рекомендую разрешить, иначе телефон будет просить
разрешения на каждое обращение к нему с компьютера. Заодно теперь можно
переключить bluetooth на телефоне в скрытый режим.
Теперь, посмотрим какой канал rfcomm на телефоне отвечает за
синхронизацию. Для этого выполним команду
sdptool browse адрес_телефона | less
Найдем в выводе команды службу "Nokia SyncML Server" и соответствующее
значение Channel. У меня это 14. На других моделях телефонов могут быть
другие значения. Это число пригодится нам при настройке syncml-плагина
opensync.
Собственно, синхронизация
Перед синхронизацией с данными KDE, необходимо убедиться, что программы
Kontact, Kaddressbook, Korganizer и Knotes не запущены, иначе
KitchenSync не начнет синхронизацию.
В качестве учебного примера использования opensync проведем
синхронизацию адресной книги KDE с пустым каталогом. Заодно получим
копию адресной книги для экспериментов с телефоном. Запускаем
KitchenSync (K -> Служебные -> KitchenSync). Жмем там "Add Group".
Вводим какое-нибудь имя, "test" например. Сейчас мы создали группу
синхронизации. В группу синхронизации обычно входят два и более членов,
синхронизирующих данные между собой. В открывшемся диалоге жмем "Add
Member..." и добавляем "KDE Desktop". Это плагин, позволяющий
синхронизировать PIM-данные KDE. Этот плагин не требует конфигурации.
Теперь добавим второго члена к группе. Снова жмем "Add Member..." и
добавляем "File Synchronization Plugin". Этот плагин позволяет
синхронизироваться с хранилищем в виде нескольких файлов в каталоге. Его
настройка заключается в выборе каталога, где будут располагаться (или
уже располагаются) данные. Нажмем кнопку выборка каталога напротив поля
"Directory name" и создадим новую папку в домашнем каталоге ("New
folder" в открывшемся диалоге). Назовем ее sync. Выберем ее и нажмем
"OK". Подкаталогов у нас не будет, поэтому синхронизировать их не надо,
соответственно, галочку "Sync all subdirectories" не ставим.
Все! Настройки группы закончены, жмем "OK". Не надо суетиться, если
после нажатия кнопки "OK" она на какое-то время задумается - видимо, так
надо. После того, как задумчивость пройдет, можно попробовать нажать
ссылку "Synchronize Now" под вновь созданной группой в главном окне
KitchenSync. Программа начнет получать данные из обоих источников
(KDE-PIM и пустой каталог). Затем, на некоторове время задумается и
выведет статус "Conflicts solved" - значит никаких конфликтов в данных
найдено не было (еще бы - второй источник-то пустой). Затем еще немного
подумает и начнет собственно обновление данных. Через некоторое время
синхронизация будет завершена. Теперь в каталоге sync у нас полная копия
PIM-данных (календарь, адресная книга и записки) из Kontact.
Теперь подключим данные из этого каталога к адресной книге KDE. Для
этого запустим Kontact, выберем слева "Контакты" и в блоке "Адресные
книги" уберем галочки со всех имеющихся там книг (обычно, там одна книга
- resource). Затем нажмем кнопку "Добавить..." и выберем тип адресной
книги "Каталог". В появившемся диалоге можно ввести осмысленно название
для этой адресной книги, формат нужно оставить "vCard", в поле
"Расположение" нужно указать путь к нашей папке sync. После нажатия "OK"
в блоке "Адресные книги" появится еще одна книга. Ее-то мы и будем
использовать в дальнейшем. Кстати, синхронизировать теперь ее будет не с
чем, поскольку данные адресной книги KDE теперь берутся именно из
каталога sync. Но всегда можно ее отключить и подключить исходный
вариант адресной книги простым расставлением галочек.
Далее перейдем к синхронизации с телефоном. Для начала, посмотрим, что у
нас в настройках самого телефона. В E50 профили синхронизации хранятся в
пункте меню Connect. -> Sync (Связь -> Синхр.). Изначально там только
один профиль - PC Suite. Его мы и будем использовать. Жмем на профиль и
выбираем редактирование его опций. На что надо обратить внимание.
Во-первых, названия баз в пункте Applications (Приложения) - в каждом из
подпунктов (Contacts, Calendar, Notes, SMS) есть пункт Remote Database с
именем базы. Эти имена пригодятся в дальнейшем при настройке
syncml-плагина opensync. Кстати, синхронизация SMS по умолчанию
отключена и у меня не редактируется (профиль только для чтения). Хотя
мне оно и без надобности. Далее в пункте "Connection settings" (Парам.
подключ.) нужно выставить в поле "Server version" версию 1.1.
Синхронизация по версии 1.2 у меня не проходила, syncml-obex-plugin не
мог договориться с E50. "Data bearer" выставлена в bluetooth изначально
(в профиле PC Suite у меня она и не редактируется). "Host address"
выставлен в "PC Suite". Это значение должно совпадать с полем Software
Identifier в настройках плагина syncml opensync. Поля "User name" и
"Password" должны быть пустыми (с ними я не экспериментировал). Поля
"Allow sync requests" и "Accept all sync reqs." должны быть выставлены в
"Yes".
Снова запустим KitchenSync и создадим группу, скажем, "nokia". Добавим в
нее плагин "KDE Desktop" и "SyncML over OBEX Client". Второй плагин
позволяет синхронизировать данные с мобильными устройствами,
поддерживающими SyncML через OBEX (по bluetooth или через USB-кабель).
Теперь нужно настроить этот плагин.
На вкладке "Connection" выбираем тип подключения (bluetooth/USB-кабель).
В данной статье рассматривается подключение через bluetooth. В поле
"Bluetooth address" вводим адрес телефона, который мы получили от
"hcitool scan". В поле "Channel" вводим канал SDP, на котором в телефоне
живет служба "Nokia SyncML Server", полученный от "sdptool browse".
На вкладке "Databases" нужно убедиться, что базы данных начинаются с
большой буквы. То есть, база контактов называется "Contacts", база
календаря - "Calendar", записок - "Notes". Иначе при синхронизации базы
не будут найдены. По умолчанию, у меня на вкладке были выставлены
правильные имена.
На вкладке "Options" поля Username и Password оставляем пустыми. Галочку
"Use String Tables" лучше поставить, хотя четкого понимания, что именно
она делает, я не получил. Самое адекватное описание на нее: Use wbxml
string tables (Improves transmission size, but not supported by some
phones). Синхронизация работает и с ней и без нее. Галочка "Only Replace
Entries" по умолчанию снята, пусть так и остается. Она заставляет
syncml-backend посылать команду REPLACE вместо команды ADD, что обычно
делать не требуется. Когда именно это требуется я не знаю, наверное это
описано в стандарте протокола SyncML. В поле "SyncML Version" выбираем
версию 1.1. Далее, галочка "WAP Binary XML" должна быть установлена
обязательно, поскольку обычный (не-binary) XML телефоном не
поддерживается. В поле Software Identifier выставляем "PC Suite" (должен
совпадать с именем хоста в настройках профиля синхронизации телефона).
Поля Recieve Limit и Maximum Object Size оставляем равными нулю, что
отключает лимиты на объем принятых данных и на размер одного
принимаемого объекта. Настройка группы на этом закончена. Жмем "OK" и
"Synchronize Now", чтобы начать синхронизацию. Если вам повезет, то
синхронизация пройдет успешно. Тут главное не торопиться.
Если все-таки вам не повезло, и телефон через какое-то время сказал, что
истекло время ожидания, а KitchenSync еще делает вид, что работает, то
можно попробовать прервать синхронизацию, пристрелить процессы
kitchensync и osplugin и запустить его еще раз. Если вторая и третья
попытка также не пройдут, то можно попробовать провести синхронизацию из
консоли при помощи следующей команды:
msynctool --sync nokia
Если вам повезло и синхронизация прошла успешно, то можно попробовать
поэкспериментировать с добавлением, редактированием и удалением записей
на телефоне и в Kontact с последующей синхронизацией.
Когда вы вдоволь наэкспериментируетесь, можно переходить к "боевой"
синхронизации. Здесь важно помнить, что группа сохраняет настройки
последней синхронизации, и если вы удалите все контакты из телефона, то
opensync, ничуть не сомневаясь, может удалить их и из адресной книги KDE.
Поэтому можно либо удалить группу и создать ее заново, либо удалить из
каталога $HOME/.opensync и его подкаталогов все *.db файлы.