Cette page n'a pas encore d'étiquettes.
Apportez votre aide…

Ceci est une ancienne révision du document !



Comment connecter un smartphone sous Windows Mobile 5 en USB ?

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, 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.

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

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

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 python-dev

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/
sudo ./bootstrap
sudo ./configure --enable-desktop-integration
sudo make
sudo make install
cd ..

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)

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

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://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.

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 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

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

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

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/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/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()

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

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).

Qtek 8500 la connexion fonctionne parfaitement.

SPV C600 la connexion fonctionne parfaitement.

HTC S710 la connexion fonctionne parfaitement (windows mobile 6).

SPV M650 la connexion fonctionne.

  • tutoriel/comment_connecter_un_pda_sous_windows_mobile_5_en_usb.1196523186.txt.gz
  • Dernière modification: Le 18/04/2011, 14:50
  • (modification externe)