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.
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 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
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 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.
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
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
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()
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. Pas chez moi.
HTC S710 la connexion fonctionne parfaitement (windows mobile 6).
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. Pas chez moi.