====== 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".