Ceci est une ancienne révision du document !
Comment connecter un smartphone sous Windows Mobile 5 en USB ?
NB : A été 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, videos, 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 driver RNDIS
nous allons maintenant installer les paquets nécessaires à la compilation du driver 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
Maintenant rapatrions les drivers en utilisant SVN :
sudo svn checkout https://synce.svn.sourceforge.net/svnroot/synce/trunk/libsynce sudo svn checkout https://synce.svn.sourceforge.net/svnroot/synce/trunk/librapi2 sudo svn checkout https://synce.svn.sourceforge.net/svnroot/synce/trunk/odccm sudo svn checkout https://synce.svn.sourceforge.net/svnroot/synce/trunk/synce-gnome
Compilation de libsynce
Commençons par compiler libsynce ; entrez les commandes suivantes ligne par ligne :
cd libsynce/ ./bootstrap ./configure --enable-desktop-integration make sudo make install cd ..
Compilation de librapi
Même chose que pour libsynce :
echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf sudo ldconfig cd librapi2/ ./bootstrap ./configure make sudo make install cd ..
Compilation de ODCCM
cd odccm/ autoreconf -i ./configure make sudo make install sudo cp data/dbus/odccm.conf /etc/dbus-1/system.d/ cd ..
Installation du driver USB
Maintenant, nous allons repèrer quel est le driver USB adapté à votre appareil : pour cela, rendez vous ICI
Pour ceux qui possèdent un Qtek 8500, il faut utiliser le driver 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://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://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 connections entrantes et empêche Synce de connecter votre mobile.
Pour y remèdier, configurez firestarter comme suit :
gksudo 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://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 update-rc.d odccm defaults
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/src/ 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/share/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/odccm/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-trayicon') 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() 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 connection fonctionne parfaitement.
SPV C600 la connection fonctionne parfaitement.
HTC S710 la connection fonctionne parfaitement (windows mobile 6).