Итак, свершилось. Синхронизация контактов, задач и встреч у меня наконец заработала. Спешу подилиться этой хорошей новостью. Хотя сказать по правде, пишу я это в первую очередь для себя. Во-первых, чтоб систематизировать свои знания по этому вопросу, которые нажиты методом проб, ошибок и чтения мануалов вечерами. Во-вторых, мне передстоит повторить своё достижение на работе, и не очень хочется вновь наступать на грабли.
Что было: В качестве большого брата, ноутбук с KUbuntu 7.04, ядро 2.6.20-16. В качестве меньшего - E-Ten X500 c WM5
Чего мы добиваемся: Синхронизация контактов, задач и встреч. Базовый функциональный набор пресловутого ActiveSync. Желательно свести весь процесс к нажатию одной кнопки.
Что получилось у меня: Сразу скажу, что разработчики не врали, когда говорили, что продукт ещё на стадии разработки и возможны глюки. Так и есть, глюки имеют место. Правда к потери информации вроде не приводило, но я ещё особенно не копал. У меня по крайней мере телефон синхронизирован с телефоном жены, а она в свою очередь бекапится на виндовую машину, поэтому в случае глобального креша смогу поднять базу. Если у вас в наладоннике база телефонов всех партнёров по бизнесу, да ещё и в единственном экземпляре, то я вам советую крепко подумать. Заранее предупреждаю - вы рискуете.
С GUI у меня почему-то не сложилось. Во-первых он почему-то регулярно вылетает, а во-вторых у него очень ограниченная функциональность. С консоли у меня всё вроде бы работает. Впринципе лицезреть процесс не особо надо, можно при особом желании что нибудь и написать, для упрощения себе жизни. На первое время думаю ограничусь одним скриптом, который будет делать всю грязную работу гамузом.
Особенность синхронизации в том, что материться при случае конфликта по теме, а не так, как это делает ActiveSync: " У вас случилась херня, примите меры", и кнопка ОК. Этот вываливает в консоль оба обьекта на счёт которых он сомнивается и предлагает пользователю решить, что с ним делать. Варианты: Оставить тот, что новее, оставить оба, Юзать первый, второй, третий (а я так понял, что в одну песочницу можно усадить сразу несколько точек. Т.е. если мне сильно приспичит, я могу синхронизировать телефон с KDE_pim и SunBird одновременно). Огорчило то, что нет кнопки делать "что-то" для всех конфликтов. Это достаёт, потому, что если телефон за время синхронизации уйдёт в слип, то когда дело доходит до применения изменений multysynk падает с ошибкой, а при повторной синхронизации он заявляет, что предыдушая синхронизация была окончена некоректно поэтому синхронизируемся полностью заново. Когда у вас в телефонной книге болеше сотни контактов, отвечать на каждый " 1,Enter " запаривает. Ещё следует сказать, что синхронизирует, как и ожидалось, не всё. Картинки из контактов не переносятся и боюсь список непереносимых полей на этом не заканчивается. Подозреваю, что кастомные рингтоны идут туда-же. Да и всяких дней рождения я не заметил, хотя судя по той информации, которую он выдаёт в случае конфликта, могу сказать, что synce-plugin предоставляет всю информацию. Скорее всего обламывается kdepim-plugin. С кирилическими именами и адресами проблем нет, а вот кирилические Notes прикрепленные к контакту отображаются не корректно. Тут надо проверять, потому как эта хрень у меня и под виндой переодически глючила. На большом брате обнаружены переодические косяки с сетью во время подключения PDA, а именно слетает ресолв доменных имён, хотя роутинг не слетает. Задолбало уже. Смотреть надо. В целом, для начала совсем не плохо.
Что нам предстоит сделать в Linux Вобщем, всё совершенно не так, как мне казалось вначале. Первое, что мне приходило в голову, при слове синхронизация, это некоторая софтинка, аналого ActiveSync, которая выступает посредником между WM устройством и базой контактов. В windows базой контактов и прочего был Outlook - ненавистная любому "нормальному" человеку гениальное творение мелкомягких, которое я хотел поменять ещё во времена использования Windows. А роль устройства, в винде, по моему разумению должен был выполнять некоторый драйвер WM5 устройства, который поставлялся вместе с ActiveSync.
Так действительно было до появления WinMobile 5. А в нём всё по другому хотя для виндового пользователя ничего не поменялось. На деле начал использоваться для связи TPC-IP и ActiveSync стал лазить через него. Вобщем в Линухе это выливается в длинную последовательность драйверов, демонов и плагинов, которые вместе приводят нас к заветной цели, но требуют кучу времени для настройки. К слову в Windows ActiveSync приспокойно соединяется и со старыми устройствами и с новыми. Ва деле для этого служат абсолютно разные модули. В линухе всё это приходится настраивать, и причём по разному. Это я к тому, что если у вас на устройстве Windows Mobile 2003, то вам не сюда. Вам нужно искать как настраивать Raki а описано это тут
http://www.synce.org/index.php/Installation_Guides#Current_Status_of_Support_2. Этот мануал работает только на WM5 и выше. Нам предстоит настроить сетевой интерфейс к подключенному устройству, поднять демона WM5-устройства. Настроить движок синхронизации от SynCE написанный на питоне, потом установить MultySync и настроить SynCE плаг для него. Вот этот винегрет нам прийдётся заставить работать. Если я вас ещё не напугал то можно начинать.
Поехали: Итак, Raki нам не помошник. Он работает только со старыми CE2 и CE3 устройствами. Сами разработчики SynCE предлагают успользовать MultiSync написав для этого специальный плагин. Те же разработчики настоятельно рекомендуют синхронизировать устройство с виндовой машиной стандартным образом, т.к. всё может быть и они не дают никакой гарантии, что вам не прийдётся восстанавливать всю свою телефонную базу. Хороший совет. Бекапы это всегда хороший совет, самое время им воспользоваться.
В общем и целом настройка SynCE делалась по родному мануалу, которые можно найти по ссылке ниже. Всё что вы тут можете найти так или иначе взято оттуда, поэтому на авторство я не претендую.
http://www.synce.org/index.php/Windows_Mobile_2005_Support
Ставим базовый набор SynCE Забегая вперёд, скажу, что от идеи последовательного доставания из их SVN необходимых модулей мне пришлось отказаться потому, как кое-что разработчики просто забыли и для того, чтоб найти это мне пришлось утянуть весь их trunk и там искать. Учитывая, что понадобится практически всё рекомендую сразу так и сделать. Заходим в каталог, где будут лежать ваши исходники. Практически всё потом можно будет грохнуть за исключением sync-engine, который написан на Питоне и соответственно прямо оттуда и работает.
mkdir SynCE
cd SynCE
svn checkout https://synce.svn.sourceforge.net/svnroot/synce/trunk
У меня всё компилировалось нормально и без проволочек. Если у кого-то не компилится, оригинал находится тут:
http://www.synce.org/index.php/Building_SynCE_with_Windows_Mobile_2005_support_from_Subversion В целом помогает следующий алгоритм. Если на этапе ./configure вылезает нехватка библиотек, лезем уровнем выше в основной каталог SynCE и ищем там то, чего не хватает. Если не находим там, то ищем в основном репозитарии Ubuntu. Делаем именно в такой последовательности, а не наоборот. т.к. в репозитарии это всё тоже скорее всего есть, но не той версии. Подобный алгоритм помог мне скомпилить synce-kde, а в последствии уже узнал, что он на самом деле вообще работает только со старыми девайсами и нафиг не нужен.
Перед началом компиляции убеждаемся, что у нас есть все депенденсы из тех, которые заявляет разработчик.
sudo apt-get install libglib2.0-dev libusb-dev build-essential autoconf automake1.9 libtool libgnet-dev libhal-dev libhal-storage-dev libdbus-glib-1-dev python-sip4-dev python-pyrex python-dev
Дальше. Компилим libsynce
cd libsynce/
./bootstrap
./configure --enable-desktop-integration
make
sudo make install
cd ..
Как я понял ключик --enable-desktop-integration обязательный, даже учитывая то, что мы не будем пользоваться родными средствамии синхронизации.
Компилим librapi2
cd librapi2/
./bootstrap
./configure
make
sudo make install
cd ..
echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf
sudo ldconfig
Компилим odccm
cd odccm/
./bootstrap
./configure
make
sudo make install
sudo cp data/dbus/odccm.conf /etc/dbus-1/system.d/
cd ..
Дальше приступаем к настройки соединения с WM-устройством. Тут выбираем в зависимости от типа. Сначала я пытался подключить через BlueTooth, но, честно говоря, не осилил. Работает это так. Через синий зуб получаем Serial-соединение, на него натравляем ppp и получаем сетевой интерфейс. Это геморойнее чем поставить USB, но в принципе абсолютно реально. Благо мануал имеется тут.
http://www.synce.org/index.php/Connecting_your_Windows_Mobile_2005_device_via_Bluetooth_using_Bluetooth
Но там есть дополнительный подводный камень в том, что мало научить линух создавать необходимый интерфейс. Важно, чтоб PDA этим интерфейсом начал пользоваться. Фактически необходимо чтоб он поверил, что сетефой интерфейс создан ActiveSync-ом, а не линуксом. Мой пока не верит. Возможно я был не достаточно обаятелен, но буду стараться. И когда у меня получится, пробел в мануале заполнится, а пока могу посоветовать настроить через USB или читать самостоятельно предыдущий мануал.
Для соединения через USB, настраиваем RNDIS драйвер. Метод зависит от версии ядра. Если у вас Ubuntu 7.04 или более старые, то надо идти по пути самостоятельной компиляции драйвера. В 7.10 ядро версии 2.6.22 и в него уже встроен необходимый нам драйвер. Всё бы ничего, да работает он не так как надо. На работе уже проапдейтился до Гатси, и там подключение PDA к компу приводит к появлению вожделенного интерфейса, но сам PDA начинает дико тормозить. Вытаскивание шнурка USB мгновенно оживляет зверька. Так что дело именно в нём.
Для ядер 2.6.22 (такое как в Гатси Гиббон) разработчики предлагают следующее лекарство:
patch -p1 < /path/to/SynCE/patches/linux-2.6.22-rndis_host-wm5.patch
Потом необходимо установить следующие опции в конфигурации ядра:
CONFIG_USB_USBNET=y
CONFIG_USB_NET_CDCETHER=y
CONFIG_USB_NET_RNDIS_HOST=y
Затем компилировать это дело как модуль, обычным образом и т.д. Я это буду в последствии делать, поэтому детали этого процесса появятся позже. А сейчас просто ограничусь прозвучавшим пересказом мануала.
Для ядер 2.6.20 (Такое как в Фести Фавн) и ниже поступать надо по другому. Штатного модуля в ядре нет, однако разработчики нам его любезно предоставили. Они у вас уже благополучно лежат в папке SynCE
cd usb-rndis-lite/
make
sudo ./clean.sh
sudo make install
Вот собственно и всё. На этом этапе можно проверить, что у нас получилось, чтоб быть уверенным, что мы на верном пути. Подключаем девайс к USB и смотрим, что появляется в логах
dmesg | grep "rndis[0-9]: register" | grep "rndis_host" | tail -1
Хорошим знаком можно считать, если вы увидите нечно вроде этого
rndis0: register 'rndis_host' at usb-0000:00:10.1-2.1, RNDIS device, 80:00:60:0f:e8:00
Если этого нет, дальше идти пока рано. Следует обратиться в мануалу по следующей ссылке. Там этот вопрос описан шире.
http://www.synce.org/index.php/Connecting_your_Windows_Mobile_2005_device_via_USB_%28usb-rndis-lite%29
Двигаемся дальше. Теперь нам нужен демон WM устройства. Он у нас уже есть и называется он odccm. Его надо пускать от рута. В принципе сейчас самое время вписать его в /etc/rc.local
/usr/local/sbin/odccm
Для тестов же можно пока выделить консольку и запустить его там не в режиме демона.
sudo odccm -f
После запуска он должен найти rndis интерфейс и зацепиться за него. Вы должны увидить, что-то вроде этого:
** (process:13124): DEBUG: running mainloop
** (process:13124): DEBUG: PDA network interface discovered! udi='/org/freedesktop/Hal/devices/net_80_00_60_0f_e8_00', device='rndis0'
** (process:13124): DEBUG: device_info_received: registering object path '/org/synce/odccm/Device/_7A37B965_2F39_EAE1_17C6_9D5F3FD484DC_'
У меня этого не произошло сразу. Помогло отключение зверька и подключение его заново. Демон позволяет нам выполнять некоторые команды для доступа к ресурсам подключенного PDA. Команды доступа уже установлены вами вместе с базовым набором SynCE их можно просто вводить с консоли. Сейчас самое время попробовать.
pls
Вы должны увидеть содержимое корневого каталога WM5-устройства. Что-то вроде этого
Directory 2006-03-01 11:00:16 My Pictures/
Directory 2006-03-01 11:00:20 My Music/
Directory 2006-03-01 11:00:20 My Videos/
Directory 2006-06-20 23:41:24 Notes/
Если вы это увидели - принимайте поздравления. Вы успешно прошли очередной milestone по подключению.