====== creer une connexion entre son telephone portable equipe d'un modem et son ordinateur ====== ===== Par bluetooth ===== ==== Voir si son périphérique bluetooth est reconnu par linux ==== # hcitool dev Devices: hci0 00:01:02:03:04:05 ==== Rechercher l'adresse bluetooth du téléphone ==== Ouvrez un terminal et taper : # hcitool scan Scanning ... 00:17:83:48:XX:XX Gigi # l2ping 00:17:83:48:XX:XX Ping: 00:17:83:48:XX:XX from 00:22:43:A5:XX:XX (data size 44) ... 0 bytes from 00:17:XX:XX:E1:D6 id 0 time 35.62ms ==== Rechercher la liste des services du téléphone avec sdptool ==== gigi@portable:~$ sdptool browse 00:17:83:48:XX:XX Browsing 00:17:83:48:XX:XX ... Service Name: AVRCP Target Service Description: Audio Video Remote Control Service Provider: Symbian Software Ltd. Service RecHandle: 0x10000 Service Class ID List: "AV Remote Target" (0x110c) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 23 "AVCTP" (0x0017) uint16: 0x100 Profile Descriptor List: "AV Remote" (0x110e) Version: 0x0100 Service Name: Hands-Free Audio Gateway Service RecHandle: 0x10003 Service Class ID List: "Handsfree Audio Gateway" (0x111f) "Generic Audio" (0x1203) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 1 Language Base Attr List: code_ISO639: 0x454e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "Handsfree" (0x111e) Version: 0x0105 Service Name: Audio Source Service RecHandle: 0x10004 Service Class ID List: "Audio Source" (0x110a) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 25 "AVDTP" (0x0019) uint16: 0x100 Language Base Attr List: code_ISO639: 0x454e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "Advanced Audio" (0x110d) Version: 0x0100 Service Name: Headset Audio Gateway Service RecHandle: 0x10005 Service Class ID List: "Headset Audio Gateway" (0x1112) "Generic Audio" (0x1203) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 2 Language Base Attr List: code_ISO639: 0x454e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "Headset" (0x1108) Version: 0x0100 Service Name: AVRCP Controller Service Description: Audio Video Remote Control Service Provider: Symbian Software Ltd. Service RecHandle: 0x10006 Service Class ID List: "AV Remote" (0x110e) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 23 "AVCTP" (0x0017) uint16: 0x100 Profile Descriptor List: "AV Remote" (0x110e) Version: 0x0100 Service Name: SyncMLClient Service RecHandle: 0x10007 Service Class ID List: UUID 128: 00000002-0000-1000-8000-0002ee000002 Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 10 "OBEX" (0x0008) Language Base Attr List: code_ISO639: 0x454e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "" (0x00000002-0000-1000-8000-0002ee000002) Version: 0x0100 Service Name: OBEX File Transfer Service RecHandle: 0x10008 Service Class ID List: "OBEX File Transfer" (0x1106) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 11 "OBEX" (0x0008) Language Base Attr List: code_ISO639: 0x454e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "OBEX File Transfer" (0x1106) Version: 0x0100 Service Name: Nokia OBEX PC Suite Services Service RecHandle: 0x10009 Service Class ID List: UUID 128: 00005005-0000-1000-8000-0002ee000001 Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 12 "OBEX" (0x0008) Language Base Attr List: code_ISO639: 0x454e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "" (0x00005005-0000-1000-8000-0002ee000001) Version: 0x0100 Service Name: Phonebook access PSE Service Provider: Symbian Software Ltd Service RecHandle: 0x1000a Service Class ID List: "Phonebook Access - PSE" (0x112f) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 3 "OBEX" (0x0008) Language Base Attr List: code_ISO639: 0x656e encoding: 0x01 base_offset: 0x6a Profile Descriptor List: "Phonebook Access" (0x1130) Version: 0x0100 Service Name: OBEX Object Push Service RecHandle: 0x1000b Service Class ID List: "OBEX Object Push" (0x1105) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 9 "OBEX" (0x0008) Language Base Attr List: code_ISO639: 0x454e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "OBEX Object Push" (0x1105) Version: 0x0100 Service Name: Dial-Up Networking <-- ici Service RecHandle: 0x1000c Service Class ID List: "Dialup Networking" (0x1103) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) <-- rfcomm protocol Channel: 4 <-- channel 4 Language Base Attr List: code_ISO639: 0x454e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "Dialup Networking" (0x1103) Version: 0x0100 Service Name: Imaging Service RecHandle: 0x1000d Service Class ID List: "Imaging Responder" (0x111b) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 15 "OBEX" (0x0008) Language Base Attr List: code_ISO639: 0x454e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "Imaging" (0x111a) Version: 0x0100 Rechercher dans la liste qui apparaît le service Dial-up Networking, puis rechercher son numéro de channel (dans notre cas 4). On voit également que ce service supporte les protocoles l2cap et rfcomm, dans ce tuto nous utiliserons rfcomm. ==== Créer un périphérique correspondant au téléphone avec rfcomm ==== rfcomm connect [addresse du périph.bluetooth] [canal] Ce qui donne, pour notre exemple, cette commande, à taper dans un terminal (en root): rfcomm connect 0 00:17:83:48:XX:XX 4 Connected /dev/rfcomm0 to 00:0E:07:30:6B:78 on channel 1 Press CTRL-C for hangup Il est possible d'utiliser la commande rfcomm bind à la place de rfcomm connect. La syntaxe restant la même mais cela permet de lier /dev/rfcomm0 sans établir une connexion permanente. La liaison Bluetooth avec le téléphone est établie automatiquement et uniquement lorsque une application utilise /dev/rfcomm0. De plus cette façon de faire permet de fermer en toute sérénité le terminal utilisé pour lancer la commande. ==== Rendre la liaison rfcomm avec le téléphone permanente ==== Une fois la connexion testée avec succès il est possible de rendre permanente la liaison avec le téléphone. Pour cela il vous faut éditer le fichier ///etc/bluetooth/rfcomm.conf// et y copier le contenu suivant en remplaçant avec l'adresse et le channel Bluetooth de votre téléphone: rfcomm0 { # Liaison automatique de rfcomm0 au démarrage bind yes; # Adresse Bluetooth du périphérique device 00:0E:07:30:6B:78; # Canal RFCOMM à utiliser channel 1; } ==== Connexion avec wvdial ==== Créer un fichier appelé wvdial_Bluetooth.conf comme indiqué ci-dessous : [Dialer Defaults] Modem = /dev/rfcomm0 ISDN = off Modem Type = Analog Modem Baud = 460800 Init = ATZ Init2 = AT+cgdcont=,"IP","wapsfr" Init3 = Init4 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Phone = *99***1# Phone1 = Dial Prefix = Dial Attempts = 1 Dial Command = ATM0L0DT Ask Password = off Password = wapsfr Username = wapsfr Auto Reconnect = off Abort on Busy = off Carrier Check = off Check Def Route = on Abort on No Dialtone = on Stupid Mode = off Idle Seconds = 2400 Auto DNS = on ;Minimize = on ;Dock = on ;Do NOT edit this file by hand! Pour lancer une connexion : sudo wvdial -C wvdial_Bluetooth.conf * **Pour SFR :** o Nom d'utilisateur : websfr o Mot de passe : websfr o Numéros de Téléphone : *99***1# ou *99***3# * **Pour Orange :** o Nom d'utilisateur : orange o Mot de passe : orange o Numéros de Téléphone : *99# * **Pour Bouygues :** o Nom d'utilisateur : wap o Mot de passe : wapwap o Numéros de Téléphone : *99# ===== Connexion par câble ===== ==== Sur port Série ==== * Si vous utilisez le port Série numéro 1 de votre ordinateur (le seul ou celui du haut) le nom interne sera : **/dev/ttyS0** * Si vous utilisez le port Série numéro 2 de votre ordinateur (celui du bas) le nom interne sera : **/dev/ttyS1** ==== En IrDA (infrarouge) ==== * Le nom de votre périphérique infrarouge est par défaut : **/dev/irda0** ==== Sur Port USB ==== gigi@portable:~$ sudo udevadm monitor --udev monitor will print the received events for: UDEV - the event which udev sends out after rule processing UDEV [1241173783.066410] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1 (usb) UDEV [1241173783.080047] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0 (usb) UDEV [1241173783.085161] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.2 (usb) UDEV [1241173783.092353] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.4 (usb) UDEV [1241173783.109670] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.6 (usb) UDEV [1241173783.112113] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.6/usb_endpoint/usbdev2.3_ep84 (usb_endpoint) UDEV [1241173783.114375] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.6/usb_endpoint/usbdev2.3_ep03 (usb_endpoint) UDEV [1241173783.121222] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/usb_endpoint/usbdev2.3_ep00 (usb_endpoint) UDEV [1241173783.121992] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.8 (usb) UDEV [1241173783.124257] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.8/usb_endpoint/usbdev2.3_ep86 (usb_endpoint) UDEV [1241173783.126578] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.8/usb_endpoint/usbdev2.3_ep04 (usb_endpoint) UDEV [1241173783.139347] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.1 (usb) UDEV [1241173783.142391] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.3 (usb) UDEV [1241173783.190327] add /module/usbnet (module) UDEV [1241173783.215157] add /module/cdc_ether (module) UDEV [1241173783.216077] add /bus/usb/drivers/cdc_ether (drivers) UDEV [1241173783.217138] add /module/rndis_host (module) UDEV [1241173783.217216] add /bus/usb/drivers/rndis_host (drivers) UDEV [1241173783.218221] add /module/rndis_wlan (module) UDEV [1241173783.219325] add /bus/usb/drivers/rndis_wlan (drivers) UDEV [1241173783.227076] add /module/cdc_acm (module) UDEV [1241173783.227295] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.7 (usb) UDEV [1241173783.228612] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.7/usb_endpoint/usbdev2.3_ep85 (usb_endpoint) UDEV [1241173783.229939] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.5 (usb) UDEV [1241173783.230831] add /bus/usb/drivers/cdc_acm (drivers) UDEV [1241173783.231859] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.5/usb_endpoint/usbdev2.3_ep83 (usb_endpoint) UDEV [1241173783.780097] add /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.5/tty/ttyACM0 (tty) On voit à la dernière ligne que le périphérique ttyACM0 est ajouté, il se trouve dans **/dev/ttyACM0**. En regardant dans /var/log/kernel.log, on voit également : May 1 12:29:43 portable kernel: [ 4392.978487] cdc_acm 2-1:1.5: ttyACM0: USB ACM device La configuration est la meme, il suffit maintenant de lancer la commande wvdial en modifiant dans le fichier de configuration **/dev/rfcomm0** par **/dev/ttyACM0**. ===== Création de scipt ===== Le script Internet permet de se connecter à internet en 3G et le script sms permet d'envoyer des SMS. Si vous intilisez le script sms, vous devrez installer le paquet suivant : sudo aptitude install gsmsendsms SFR vérifie que vous utilisez bien le navigateur du téléphone portable pour surfer sur leur réseau. On va faire croire à leur proxy qu'on utilise le navigateur du téléphone portable. Ouvrez firefox et taper dans la barre d'adresse : about::config Changer la valeur de la ligne **general.useragent.extra.firefox** à **NokiaN95**. optionnel : si ca ne marche pas positionner le proxy sur l'ip 195.115.25.129 et sur le port 8080 Il existe 2 plugins firefox: * switch proxy pour changer facilement de proxy * User Agent Switcher ppur configurer et changer facilement de user agent ==== script shell basique ==== === Internet === #!/bin/bash if [ `id -u` != 0 ] ; then echo "Seul root peut lancer ce programme" exit 0 fi if [ -e /dev/ttyACM0 ] ; then echo "Connexion par USB" wvdial -C wvdial_USB.conf else echo "Connexion par bluetooth" if [ ! -e /dev/rfcomm0 ] ; then echo "Création de l'interface de communication /dev/rfcomm0" nohup rfcomm connect 0 00:17:83:48:E1:D6 4& sleep 6 fi sudo wvdial -C wvdial_Bluetooth.conf fi === SMS === #!/bin/bash if [ `id -u` != 0 ] ; then echo "Seul root peut lancer ce programme"; exit 0 fi if [ -e /dev/ttyACM0 ] ; then echo "Connexion par câble" dev="/dev/ttyACM0" else echo "Connection par bluetooth" if [ ! -e /dev/rfcomm0 ] ; then echo "Création de l'interface de communication /dev/rfcomm0" nohup rfcomm connect 0 00:17:83:48:E1:D6 4& sleep 1 fi dev="/dev/rfcomm0" fi printf "\nEntrer le numéro du destinataire comme de la façon suivante : +33620274684\n" read num_dest printf "Entrer votre message\n" read -d "#" message gsmsendsms -C +33609001390 -d "$dev" "$num_dest" "$message" ==== Script graphique ==== Il existe plusieurs outils pour faire du script graphique, perl TK, GTK dialog, zenity (GTK), kdialog (QT), Xdialog... Nous utiliserons Xdialog. sudo aptitude install dialog xdialog Tuto Xdialog : * http://xdialog.free.fr/doc/common.html * http://www.brothersofnet.freesurf.fr/sans_popup/Xdialog.html * http://ftp.traduc.org/doc-vf/gazette-linux/html/2004/101/lg101-P.html * http://www.xgarreau.org/aide/devel/langtk/bash_dialog.php === Internet === #!/bin/bash if [ -z $DISPLAY ] then DIALOG=dialog else DIALOG=Xdialog fi title="GigiX Internet 3G" if [ `id -u` != 0 ] ; then #echo "Seul root peut lancer ce programme"; $DIALOG --title "$title" --msgbox 'Seul root peut lancer ce programme !' 0 0 exit 0 fi log=/home/gigi/Documents/conf_3G_portable/log.txt if [ -e /home/gigi/Documents/conf_3G_portable/log.txt ] ; then rm "$log" touch "$log" else touch "$log" fi if [ "$1" = "--debug" ] ; then $DIALOG --title "$title" --no-cancel --date-stamp --logbox "$log" 0 0& $DIALOG --title "$title" --no-cancel --date-stamp --logbox /var/log/syslog 0 0& fi if [ -e /dev/ttyACM0 ] ; then echo "Connexion par câble" | tee -a "$log" dev="/dev/ttyACM0" echo "Utilisation du périphérique $dev" | tee -a "$log" else echo "Connection par bluetooth" | tee -a "$log" if [ ! -e /dev/rfcomm0 ] ; then echo "Création de l'interface de communication /dev/rfcomm0" | tee -a "$log" nohup rfcomm connect 0 00:17:83:48:E1:D6 4 | tee -a "$log"& compteur1=16 ( while [ "$compteur1" -le 100 ] do echo $compteur1 echo "XXX" echo "Création de l'interface de communication /dev/rfcomm0 (blutooth)" echo "XXX" compteur1=`expr $compteur1 + 16` sleep 1 done ) | $DIALOG --title "$title" --gauge "Création de l'interface de communication /dev/rfcomm0 (blutooth)" 20 70 0 if [ `grep down "$log" | wc -l` = 1 ] ; then $DIALOG --title "$title" --msgbox 'Raccorder le téléphone par câble ou activer le bluetooth' 0 0 exit fi else echo "/dev/rfcomm0 déjà créée, réutilisation de cette interface" | tee -a "$log" fi dev="/dev/rfcomm0" echo "Utilisation du périphérique $dev" | tee -a "$log" fi compteur2=0 ( while [ "$compteur2" != 102 ] do if [ `tail -10 /var/log/syslog | grep primary | wc -l` = 1 ] ; then compteur2=100; echo $compteur2 echo "XXX" echo "Connecté ($compteur2 pourcent)" echo "XXX" sleep 2 connect=1 else echo $compteur2 echo "XXX" echo "Tentative de connexion au réseau SFR ($compteur pourcent)" echo "XXX" if [ "$compteur2" = 98 ]; then if [ "$connect" = 1 ] ; then $DIALOG --title "$title" --msgbox "Problème l'initialisation modem du portable" 0 0 exit fi fi fi compteur2=`expr $compteur2 + 2` sleep 1 done ) | $DIALOG --title "$title" --gauge "Connexion en cours..." 20 70 0& if [ -e /dev/ttyACM0 ] ; then echo "Connexion par USB" | tee -a "$log" wvdial -C wvdial_USB.conf | tee -a "$log" else echo "Connexion par bluetooth" | tee -a "$log" if [ ! -e /dev/rfcomm0 ] ; then echo "Création de l'interface de communication /dev/rfcomm0" | tee -a "$log" nohup rfcomm connect 0 00:17:83:48:E1:D6 4 | tee -a "$log"& sleep 6 fi sudo wvdial -C wvdial_Bluetooth.conf | tee -a "$log" fi === SMS === Ce script utilise un fichier nommé **annuaire-tel.txt** comme annuaire, il doit avoir cette syntaxe : +33611111111 tata status1 +33622222222 toto status1 ... #!/bin/bash if [ -z $DISPLAY ] then DIALOG=dialog else DIALOG=Xdialog fi title="GigiX SMS" if [ `id -u` != 0 ] ; then #echo "Seul root peut lancer ce programme"; $DIALOG --title "$title" --msgbox 'Seul root peut lancer ce programme !' 0 0 exit 0 fi log=/home/gigi/Documents/conf_3G_portable/log.txt if [ -e /home/gigi/Documents/conf_3G_portable/log.txt ] ; then rm "$log" touch "$log" else touch "$log" fi if [ "$1" = "--debug" ] ; then $DIALOG --title "$title" --no-cancel --date-stamp --logbox "$log" 0 0& fi if [ -e /dev/ttyACM0 ] ; then echo "Connexion par câble" | tee -a "$log" dev="/dev/ttyACM0" echo "Utilisation du périphérique $dev" | tee -a "$log" else echo "Connection par bluetooth" | tee -a "$log" if [ ! -e /dev/rfcomm0 ] ; then echo "Création de l'interface de communication /dev/rfcomm0" | tee -a "$log" nohup rfcomm connect 0 00:17:83:48:E1:D6 4 | tee -a "$log"& compteur1=16 ( while [ "$compteur1" -le 100 ] do echo $compteur1 echo "XXX" echo "Création de l'interface de communication /dev/rfcomm0 (blutooth)" echo "XXX" compteur1=`expr $compteur1 + 16` sleep 1 done ) | $DIALOG --title "$title" --gauge "Création de l'interface de communication /dev/rfcomm0 (blutooth)" 20 70 0 if [ `grep down "$log" | wc -l` = 1 ] ; then $DIALOG --title "$title" --msgbox 'Raccorder le téléphone par câble ou activer le bluetooth' 0 0 exit fi else echo "/dev/rfcomm0 déjà créée, réutilisation de cette interface" | tee -a "$log" fi dev="/dev/rfcomm0" echo "Utilisation du périphérique $dev" | tee -a "$log" fi num_dest=`Xdialog --title "$title" --help "Cliquer sur annuler pour pouvoir saisir manuellement" --buildlist "Annuaire de GIGI" 0 0 1 \`cat annuaire-tel.txt| sort -k 2 | tr "\n" " "\` 2>&1` EXIT_CODE=$? case $EXIT_CODE in 0) # All OK. The $RESULTS variable holds everything entered/choosed by the user. ;; 1) # Cancel/No pressed. num_dest=`$DIALOG --title "$title" --inputbox 'Entrer les numéros des destinataires de cette forme +33620274684' 0 0 2>&1` EXIT_CODE=$? case $EXIT_CODE in 0) # All OK. The $RESULTS variable holds everything entered/choosed by the user. ;; 1) # Cancel/No pressed. exit ;; 255) # An error occured or the box was closed. exit ;; esac ;; 255) # An error occured or the box was closed. exit ;; esac if [ "$num_dest" = '' ] ; then $DIALOG --title "$title" --msgbox 'Vous devez entrer un numéro de téléphone' 0 0 exit fi num_dest=`echo $num_dest | sed s/"\/"/' '/g` message=`Xdialog --title "$title" --editbox text 1 0 2>&1` if [ "$?" = 1 ] ; then exit fi echo "Utilisation du centre de messagerie SFR +33609001390" | tee -a "$log" for num in $num_dest do gsmsendsms -C +33609001390 -d "$dev" "$num" "$message" | tee -a "$log" echo "Envoie du message à "$num" en cours ..." | tee -a "$log" done ====== Firefox ====== Tapez dans la barre d'adresse ceci : about:config Dans le champ Filtre, tapez "useragent", puis double cliquez sur le nom de l'option : general.useragent.extra.firefox et remplacez le contenu par "NokiaN95".