В статье описывается способ синхронизации по USB-кабелю (технология [[http://en.wikipedia.org/wiki/Syncml SyncML]], протоколы TCP/IP и HTTP) календаря, задач, заметок и контактов мобильного телефона с компьютером. На компьютере установлена операционная система Linux (Debian/Ubuntu) и клиент пакета совместной работы Evolution.Рассматриваемый в качестве примера [[http://www.sonyericsson.com/cws/products/mobilephones/overvi... гаджет от Sony Ericsson]] представляет собой аппарат начального уровня, не является смартфоном, использует собственную закрытую программную платформу, а среди прочих сетевых функций поддерживает SyncML и имеет функцию модема.
++ Схема синхронизации и программное обеспечение
Мысль использовать Интернет-технологии для синхронизации по USB-кабелю с компьютером возникла после нескольких бесперспективных попыток сделать это более гуманными средствами:
*** Фирменный софт Sony Ericsson под Wine с первого раза не запустился (если бы запустился - пришлось решать проблему интеграции продукта Microsoft к Evolution). Требуемых функций для Wammu/Gammu через IrSync телефон не поддерживал.
*** В MultiSync\OpenSync трудно быстро разобраться (документации мало, литература по теме не соответствует современному состоянию пакета).
*** В KDE есть некие утилиты для синхронизации, но у нас нет KDE.
Основные предпосылки для реализации схемы:
*** Во-первых компьютер и телефон можно объединить в сеть по USB-кабелю. Linux при подключении телефона создает сетевой интерфейс, о чем свидетельствует запись в системном журнале:
usb0: register 'cdc_ether' at usb-0000:00:1d.0-2, CDC Ethernet Device, 02:80:37:ec:02:00
Утилита tcpdump на этом интерфейсе показывает, что телефон во всю шлет DHCP-запросы на получение IP-адреса (встроенный модем).
*** Во-вторых, в телефоне есть клиент для работы с удаленным SyncML-сервером.
Собственно схема локальной синхронизации:
Органайзер (календарь, заметки, задачи, контакты) / Телефон -> USB (HTTP, TCP/IP) -> Компьютер (локальный SyncML-сервер) / Evolution.
Этапы решения задачи:
*** 1.Настроить IP-сеть между компьютером и телефоном.
*** 2.Установить на компьютере [[http://www.samag.ru/art/03.2008/03.2008_01.html локальный SyncML-сервер]].
*** 3.Указать ПО синхронизации телефона обращаться к этому серверу.
*** 4.Синхронизировать SyncML-сервер и Evolution.
Программное обеспечение:
*** []Локальный SyncML-сервер[]. [[http://en.wikipedia.org/wiki/Syncml Здесь перечислены основные варианты]], как самостоятельных продуктов, так и в составе систем совместной работы. Выбран [[https://www.forge.funambol.org/download/ Funambol Server]]. У него много недостатков: он тяжелый, медленный, пришлось повозиться с подключением Mysql; но главное его достоинство: собственно для синхронизации настраивать ничего не нужно. Альтернативами (для настойчивых) могут выступать: HTTP-сервер из пакета SyncEvolution, Synthesis SyncML DEMO или HTTP-сервер MultiSync\OpenSync.
*** Для []клиента синхронизации Evolution[] и Funambol выбран [[http://syncevolution.org/ SyncEvolution]].
++ 1. Настройка сети между телефоном и компьютером по USB-кабелю
[]1.1.На телефоне:[]
*** В "параметрах Интернет" установить "Разрешить местные подключения".
*** В "параметрах USB" можно выбирать различные варианты доступа к сети (Доступ к Интернету) - "Интернет через телефон" и "Интернет через компьютер". Здесь описан вариант "Интернет через компьютер", поэтому нужно его выбрать.
Если на телефоне есть возможность прописать для USB-соединения статический IP-адрес и маску подсети, то нужно прописать 192.168.2.10 255.255.255.0 и не настраивать на компьютере DHCP-сервер, а только установить на интерфейсе usb0 статический IP-адрес.
[]1.2.Настройка DHCP-сервера и сети на компьютере:[]
Чтобы выдавать IP-адрес телефону установим на компьютере DHCP-сервер:
sudo apt-get install dhcp3-server
Настроим его:
В файле []/etc/default/dhcp3-server[] пропишем:
interfaces=usb0
В файле []/etc/dhcp3/dhcpd.conf[]:
subnet 192.168.2.0 netmask 255.255.255.224 {
range 192.168.2.10 192.168.2.20;
}
полезно также закомментировать:
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
Устанавливаем статический IP-адрес на интерфейс usb0 (телефон должен быть подключен):
sudo ifconfig usb0 192.168.2.2 netmask 255.255.255.0
Запускаем DHCP-сервер:
sudo /etc/init.d/dhcp3-server start
Проверяем сеть:
ping 192.168.2.10
++ 2. Настройка локального SyncML-сервера
[]2.1.Установка Funambol[]
Качаем [[https://www.forge.funambol.org/download/ отсюда]]. Устанавливаем:
sudo ./funambol-9.0.0.bin
[]2.2.Настройка Mysql[]
Родная база данных в Debian\Ubuntu проработает недолго (по крайней мере у меня).
[[https://wiki.ubuntu.com/marckaplan/funambol Лучше прикрутить Mysql]]. Устанавливаем Mysql:
sudo apt-get install mysql-server
Создаем базу данных:
mysql> create database funambol;
mysql> GRANT ALL PRIVILEGES ON funambol.* TO 'funambol'@'localhost' IDENTIFIED BY 'funambol';
Качаем mysql-connector-java [[http://dev.mysql.com/downloads/connector/j/ отсюда]].
Копируем файл mysql-connector-java-5.1.14-bin.jar в:
/opt/Funambol/tools/jre-1.5.0/jre/lib/ext
/opt/Funambol/pim-listener/lib
/opt/Funambol/inbox-listener/lib
Редактируем файл ds-server/install.properties:
Исправляем:
dbms=mysql
Добавляем:
jdbc.classpath=/opt/Funambol/tools/jre-1.6.0/lib/ext/mysql-connector-java-5.1.14-bin.jar
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/funambol?characterEncoding=UTF-8
jdbc.user=funambol
jdbc.password=funambol
Комментируем:
#jdbc.classpath=../tools/hypersonic/lib/hsqldb.jar
#jdbc.driver=org.hsqldb.jdbcDriver
#jdbc.url=jdbc:hsqldb:hsql://localhost/funambol
#jdbc.user=sa
#jdbc.password=
Запускаем повторную инсталяцию:
sudo /opt/Funambol/bin/install.cmd
[]2.3.Настройка Funambol[]
Команды для запуска\остановка сервиса:
sudo /opt/Funambol/bin/funambol-server start
sudo /opt/Funambol/bin/funambol-server stop
Меняем пароль администратора и гостя, используя утилиту администрирования:
sudo /opt/Funambol/admin/bin/funamboladmin
++ 3. Настройка синхронизации на телефоне
Сохраняем в надежное, тихое место все ценное и нужное, что есть.
В меню "Синхронизация" создаем новую учетную запись
Адрес сервера: http://192.168.2.2:8080/funambol/ds
Имя пользователя: guest
Пароль: guest
Выбираем приложения: Контакты, Календарь, Задания, Заметки
Настраиваем имена базы:
для контактов: card
для календаря: event
для заданий: task
для заметок: note
Вуаля. Синхронизируем телефон и SyncML-сервер.
++ 4. Настройка SyncEvolution на компьютере
Сохраняем в надежное, тихое место все ценное и нужное, что есть.
Качаем [[http://downloads.syncevolution.org/apt/pool/main/s/syncevolu.../ пакет]] для Debian\Ubuntu. Устанавливаем:
sudo dpkg -i syncevolution-evolution_1.1.1-2_i386.deb
Запускаем гуишную утилиту "Синхронизация" (sync-ui). В ней настраиваем службу Funambol:
Имя пользователя: guest
Пароль: guest
Адрес сервера: http://192.168.2.2:8080/funambol/ds
Папки прописываем, как на телефоне (имена базы).
Сохраняем. Синхронизируем Evolution и SynML-сервер.
Возможно, что графическая утилита не сможет первый раз корректно определить направление синхронизации и т.д., поэтому сообщит об ошибке.
В таких случаях можно использовать интерфейс командной строки:
syncevolution --sync refresh-from-server funambol calendar
(Обновить данные сервера в Evolution) и т.п.
При синхронизации контактов был замечен глюк: при изменении существующей записи из evolution в телефон поле email передается, а поле домашний телефон - нет.
++ 5. Дополнительная автоматизация
Так как мне ничего кроме локальной синхронизации не нужно, все вспомогательные манипуляции на компьютере были связаны с настройкой сетевого интерфейса usb0 (сеть настраивается редактированием непосредственно файла /etc/network/interfaces без всяких вспомогательных средств).
Отрывок файла /etc/network/interfaces:
allow-hotplug usb0
iface usb0 inet static
address 192.168.2.2
netmask 255.255.255.0
post-up /etc/init.d/dhcp3-server start
post-up /opt/Funambol/bin/funambol-server start
down /etc/init.d/dhcp3-server stop
down /opt/Funambol/bin/funambol-server stop
Остается только подключить телефон к компьютеру и нажимать кнопку "Синхронизировать" в sync-ui и выбирать соответствующий пункт меню в телефоне.
URL:
Обсуждается: http://www.opennet.dev/tips/info/2530.shtml