Table des matières

, ,

Comment connecter un smartphone sous Windows Mobile 5 en USB ? (mode synchronisation série USB)

Cette méthode fonctionne pour l'ancienne mode de synchronisation série USB. Pour la connexion RNDIS voir la page sync_wm5-6.

NB : A seulement été testé sur Ubuntu 7.04 où cela fonctionne correctement.

Ce tuto vous permettra enfin de pouvoir connecter votre smartphone à ubuntu en USB, ce qui vous permettra de naviguer dans son système de fichier afin d'y ajouter des fichiers (installation de .cab, jar, photos, vidéos, musiques etc) ou bien d'en récupérer (photos, vidéos etc) ; de cette manière, votre mobile se comportera comme une clé USB sans avoir à utiliser WM5Storage.

Pré-requis

Il vous faut un mobile utilisant windows mobile 5 de type SPV c600, SPV C100, qtek 8500 etc.

Installation

Nous allons débuter par l'installation du plus basique : synce-trayicon

wget http://kuci.org/~teddy/ubuntu/synce-software-manager_0.9.0-2_i386.deb
wget http://kuci.org/~teddy/ubuntu/synce-trayicon_0.9.0-2_i386.deb
sudo dpkg -i synce-software-manager_0.9.0-2_i386.deb synce-trayicon_0.9.0-2_i386.deb
sudo ln -si /usr/lib/libgtop-2.0.so.7 /usr/lib/libgtop-2.0.so.2

Remarque : si vous avez une erreur qui vous dit qu'il y a des dépendances manquantes, faites :

sudo apt-get install -f

puis :

sudo ln -si /usr/lib/libgtop-2.0.so.7 /usr/lib/libgtop-2.0.so.2

Maintenant, ajoutons le programme synce-trayicon au démarrage du système afin que l'applet se charge automatiquement à chaque fois Allez dans Système ⇒ Préférences ⇒ Sessions ⇒ Programmes au démarrage et ajoutez une nouvelle entrée avec la commande :

synce-trayicon

Installation du pilote RNDIS

nous allons maintenant installer les paquets nécessaires à la compilation du pilote générique RNDIS :

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 subversion linux-headers-`uname -r` python-dbus python-dev

Maintenant rapatrions les pilotes en utilisant SVN :

Mise à jour 22/12/2014:

svn checkout svn://svn.code.sf.net/p/synce/code/trunk synce-code

===Compilation de libsynce==== Commençons par compiler libsynce ; entrez les commandes suivantes ligne par ligne : cd libsynce/ sudo ./autogen.sh sudo ./bootstrap sudo ./configure –enable-desktop-integration sudo make sudo make install cd .. Un probleme a partir de sudo ./bootstrap il me semble (jmschlaich[@)gmail.com)

Pas trouvé d'alternative au 21/12/2014

Compilation de librapi

Même chose que pour libsynce :

 echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf
 sudo ldconfig
 cd librapi2/
 sudo ./bootstrap
 sudo ./configure
 sudo make
 sudo make install
 cd ..

Lors de l'installation de la librairie il peut y avoir une erreur si vous n'avez pas le paquet python-pyrex qui provoquera une erreur RAPI avec PLS par la suite.
Vous aurrez ce message /bin/bash: pyrexc : commande introuvable si vous n'avez pas le paquet lors du make install.

* juste une précision : ne pas oublier les sudo ! (brioche)

Compilation de ODCCM

cd odccm/
sudo autoreconf -i
sudo ./configure
sudo make
sudo make install
sudo cp data/dbus/odccm.conf /etc/dbus-1/system.d/
cd ..

Installation du pilote USB

Maintenant, nous allons repèrer quel est le pilote USB adapté à votre appareil : pour cela, rendez vous ICI Pour ceux qui possèdent un Qtek 8500, il faut utiliser le pilote IPAQ qui est déja inclus dans le noyau.

Éditez le fichier /etc/modules, ce fichier liste les modules qui seront chargés automatiquement au démarrage :

gksudo gedit /etc/modules

et ajoutez tout en bas du fichier :

ipaq

savegardez puis fermez gedit.

Pour ceux qui possèdent un SPV C600, il leur faudra installer rndis_lite :

 svn co https://synce.svn.sourceforge.net/svnroot/synce/trunk/usb-rndis-lite
 cd usb-rndis-lite/
 make
 sudo ./clean.sh
 sudo make install
 cd ..

si vous avez besoin d'installer rndis-ng, faites ceci :

sudo apt-get install libhal-dev libhal-storage-dev
svn co https://synce.svn.sourceforge.net/svnroot/synce/trunk/usb-rndis-ng
cd usb-rndis-ng/
./autogen.sh
./configure --enable-hal
make
sudo make install
cd ..

Si tout s'est bien passé, débranchez puis rebranchez votre téléphone puis exécutez ceci :

sudo dhclient3 rndis0

le terminal devrait vous retourner une réponse de ce genre :

DHCPREQUEST on rndis0 to 255.255.255.255 port 67
DHCPACK from 169.254.2.1
bound to 169.254.2.2 -- renewal in 1267550 seconds.

si cela est le cas, attaquons nous maintenant à odccm :

  sudo odccm -f

et dans un autre terminal :

pls

le terminal devrait vous retourner une liste de fichier.

Si vous possédez un Qtek 8500 et que rien ne se passe, vous obtenez une erreur, n'y faites pas attention et attaquez vous plutôt aux étapes suivantes.

Configuration de Firestarter

Passez cette étape si vous n'avez pas installé Firestarter.

Si vous avez installé Firestarter, il se peut qu'il bloque les connexions entrantes et empêche Synce de connecter votre mobile.

Pour y remèdier, configurez firestarter en ouvrant un Terminal et en tapant :

  cd /etc/firestarter
  sudo chmod +w user-pre
  sudo gedit /etc/firestarter/user-pre

Ajoutez au fichier :

 $IPT -A INPUT -i rndis0 -j ACCEPT
 $IPT -A OUTPUT -o rndis0 -j ACCEPT

enregistrez puis fermez le fichier, puis :

 sudo chmod u-w /etc/firestarter/user-pre

Activer la navigation à l'intérieur du smartphone avec Nautilus

Si nous voulons naviguer à l'intérieur des fichiers du smartphone avec nautilus, nous devons en installer le support :

sudo apt-get install librapi2 librapi2-dev librapi2-tools librra0 librra0-dev librra0-tools libsynce0 libsynce0-dev synce-dccm synce-serial libgnomevfs2-dev gcc-3.3

puis :

cd /usr/lib
sudo ln -s libsynce.so.0.0.0 libsynce.so
sudo ln -s librapi.so.2.0.0 librapi.so

maintenant on compile :

 cd ~
 export CC=/usr/bin/gcc-3.3
 svn co https://synce.svn.sourceforge.net/svnroot/synce/trunk/gnomevfs
 cd gnomevfs/
 ./bootstrap
 ./configure
 make
 sudo make install

et encore :

 ls /usr/bin/gcc-*
 export CC=/usr/bin/gcc-4.1

Maintenant éditons /etc/gnome-vfs-2.0/modules/default-modules.conf :

 sudo gedit /etc/gnome-vfs-2.0/modules/default-modules.conf

ajoutez tout en bas du fichier :

 synce: libsyncevfs

Configurer ODCCM

Maintenant nous allons faire en sorte que ODCCM se charge automatiquement au démarrage de la machine.

D'abord éditons /etc/init.d/odccm :

gksudo gedit /etc/init.d/odccm

puis copiez ceci dedans, sauvegardez et quittez le fichier :

#! /bin/sh
# /etc/init.d/odccm
#
# Script d'initiation du daemon odccm
# http://www.synce.org

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin

test -x /usr/local/sbin/odccm || exit 0

. /lib/lsb/init-functions

case "$1" in
  start)
    log_daemon_msg "Starting odccm service"
    if start-stop-daemon --start --exec /usr/local/sbin/odccm ; then
     log_end_msg 1
     exit 1
    fi
    log_end_msg 0
  ;;
  stop)
    log_daemon_msg "Stopping odccm service"
    start-stop-daemon --stop --exec /usr/local/sbin/odccm ;
    log_end_msg 0
  ;;
  restart)
    $0 stop
    sleep 2
    $0 start
  ;;
    *)
    log_action_msg "Usage: /etc/init.d/odccm {start|stop|restart}"
    exit 1
    ;;
esac

exit 0

ensuite :

sudo chmod +x /etc/init.d/odccm
sudo update-rc.d odccm defaults

slach

Installation du notificateur

Maintenant, nous allons installer un utilitaire qui va nous afficher une bulle de notification à chaque fois que votre mobile se connectera ou se déconnectera :

cd
sudo cp synce-gnome /usr/htc/
sudo chown -R root.root /usr/src/synce-gnome

puis dans Systeme ⇒ Préférences ⇒ Session ⇒ Programmes au démarrage, ajoutez la commade suivante :

 python /usr/src/synce-gnome/src/test.py

maintenant nous allons éditer /usr/src/synce-gnome/src/test.py :

gksudo gedit /usr/src/synce-gnome/src/test.py

éffacez tout ce qu'il y a dans le fichier puis mettez ceci à la place :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import dbus
import dbus.glib
import gtk
import os

class TestApp:
    def __init__(self):
      self.devices = {}

      bus = dbus.SystemBus()
      self.bus = bus
     proxy_obj = bus.get_object("org.synce.odccm", "/org/synce/htc/DeviceManager")
     mgr = dbus.Interface(proxy_obj, "org.synce.odccm.DeviceManager")

     mgr.connect_to_signal("DeviceConnected", self.device_connected_cb)
     mgr.connect_to_signal("DeviceDisconnected", self.device_disconnected_cb)

     session_bus = dbus.SessionBus()
     notif_obj = session_bus.get_object("org.freedesktop.Notifications", "/org/freedesktop/Notifications")
     self.notify_iface = dbus.Interface(notif_obj, "org.freedesktop.Notifications")

     for obj_path in mgr.GetConnectedDevices():
      self._add_device(obj_path, False)

    def device_connected_cb(self, obj_path):
     self._add_device(obj_path, True)

    def device_disconnected_cb(self, obj_path):
       if obj_path in self.devices:
      device = self.devices[obj_path]
      self.notify_iface.Notify("SynCE", 0, "", "PDA disconnected", "'%s'just disconnected." % device.name, [], {}, 3000)
      del self.devices[obj_path]
      p = os.popen('killall synce-trayicon')

    def _add_device(self, obj_path, just_connected):
     device = CeDevice(self.bus, obj_path)
     self.devices[obj_path] = device

     if just_connected:
      p = os.popen('killall synce-readlin')
      self.notify_iface.Notify("SynCE", 0, "", "PDA connected", "A %s %s '%s'just connected." % \
       (device.model_name, device.platform_name, device.name), [], {}, 3000)


 ODCCM_DEVICE_PASSWORD_FLAG_SET  = 1
 ODCCM_DEVICE_PASSWORD_FLAG_PROVIDE = 2

 class CeDevice:
    def __init__(self, bus, obj_path):
     self.obj_path = obj_path
     dev_obj = bus.get_object("org.synce.odccm", obj_path)
     dev = dbus.Interface(dev_obj, "org.synce.odccm.Device")
     self.name = dev.GetName()
     self.platform_name = dev.GetPlatformName()
     self.model_name = dev.GetModelName()
     self.dev_iface = dev

     dev.connect_to_signal("PasswordFlagsChanged", self.password_flags_changed_cb)

     self._print_debug()

     self._password_flags_changed()

    def _print_debug(self):
     dev = self.dev_iface
     print "Created CeDevice with obj_path=\"%s\"" % self.obj_path
     print "  GetIpAddress:", dev.GetIpAddress()
     print "  GetGuid:", dev.GetGuid()
     print "  GetOsVersion:", dev.GetOsVersion(htc name)
     print "  GetName:", dev.GetName()
     print "  GetVersion:", dev.GetVersion()
     print "  GetCpuType:", dev.GetCpuType()
     print "  GetCurrentPartnerId:", dev.GetCurrentPartnerId()
     print "  GetId:", dev.GetId()
     print "  GetPlatformName:", dev.GetPlatformName()
     print "  GetModelName:", dev.GetModelName()
     print "  GetPasswordFlags:", dev.GetPasswordFlags()

    def password_flags_changed_cb(self, added, removed):
     print "password_flags_changed_cb: added=0x%08x removed=0x%08x" % (added, removed)
     self._password_flags_changed()

    def _password_flags_changed(self):
     flags = self.dev_iface.GetPasswordFlags()

     if flags & ODCCM_DEVICE_PASSWORD_FLAG_PROVIDE:
      authenticated = False
      while not authenticated:
       dlg = EntryDialog(None, "Password required",
                "The PDA '%s'is password-protected.  Enter password:" % self.name,
                True)
       if dlg.run() == gtk.RESPONSE_ACCEPT:
        authenticated = self.dev_iface.ProvidePassword(dlg.get_text())
       dlg.destroy()


class EntryDialog(gtk.Dialog):
    def __init__(self, parent, title, text, password=False):
     gtk.Dialog.__init__(self, title, parent,
             gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
             (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT,
              gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT))

     label = gtk.Label(text)
     label.set_alignment(0.0, 0.5)
     self.vbox.pack_start(label, False)
     self._label = label

     entry = gtk.Entry()
     entry.set_visibility(not password)
     self.vbox.pack_start(entry, False, True, 5)
     self._entry = entry

     self.show_all()

    def get_text(self):
     return self._entry.get_text()


TestApp()
gtk.main()

Installation Terminée

Maintenant, il ne vous reste plus qu'à rebooter et à admirer le résultat.

Todo

Il ne reste plus qu'à complèter ce tuto en indiquant comment synchroniser avec Evolution ou Thunderbird.

Il semblerait que la synchronisation entre Evolution et le Qtek 8500 soit impossible à cause d'une erreur de segmentation avec Multisync (n'a pas encore été testé avec le SPV C600 et le HTC S710).

Comptes rendus

Qtek 8500 la connexion fonctionne parfaitement.

SPV C600 la connexion fonctionne parfaitement. FIXME Pas chez moi.

HTC S710 la connexion fonctionne parfaitement (windows mobile 6). FIXME Bugs pendant la connexion USB.

SPV M650 la connexion fonctionne.

ACER n300 la connexion fonctionne.

AIRIS T620 / MIO P550 la connexion fonctionne.

Qtek 9090 / SPV M2000 / HTC BlueAngel la connexion fonctionne. FIXME Pas chez moi.

Liens externes

Le site officiel de Synce.

Topic Ubuntuforums avec le tuto complet pour la connexion d'un mobile WM5 avec un ordinateur.


Rédigé par Louis XVI with a gun.