Open Software. Open Knowledge.


GRPS via Bluetooth


This document describes how to create a GPRS connection with your mobile phone from a notebook running under Linux. Assumptions are that you have a basic idea of how thinks work under Linux and that you have your bluetooth device up and running (most USB adapters just work after plugging them in). I am using the integrated bluetooth device of my IBM Thinkpad T41p which works perfectly under Fedora Core 3. I will first describe a general way on how to test things out on the console. This may help to understand what's going on. In the end I will describe how to integrate this nicely with Fedora Core 3 so that you may easily startup the connection with just one command. My service provider is T-Mobile but most should apply to other providers as well. You need to change the access point name (APN) but that should be it - especially the dialup number is the same! As far as I know all phones and providers understand the number mentioned to initiate GPRS.

Connecting to the phone via Bluetooth

I assume that you have your Bluetooth device up and running successfully. This can be any kind of Bluetooth transceiver.

You can check if Bluetooth is working try the following:
hciconfig -a
If you see output you have an USB device. If it says "DOWN" then the hcid is probably not running.

Now we will try to find the phone. Set your phone to be visible by everybody for now. Then execute hcitool, this should look somewhat similar to this:
[root@evilgenius ~]# hcitool scan
Scanning ...
        00:E0:03:3E:4E:19       Nokia 6230 TN
This is good news. We found the phone. Now we are going to inquire the device and ask it for dialup networking (DUN). This will bring up the pairing process that you have to do once. If your system is configured well (like FC3) you will be asked for the communication PIN that you have to enter the same on the machine and on the phone.
[root@evilgenius ~]# sdptool search DUN
Inquiring ...
Searching for DUN on 00:E0:03:3E:4E:19 ...
Service Name: Dial-up networking
Service RecHandle: 0x10002
Service Class ID List:
  "Dialup Networking" (0x1103)
  "Generic Networking" (0x1201)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Dialup Networking" (0x1103)
    Version: 0x0100
Write down the channel you see. You will need it soon. You can now ping the device to see if communication is working:
[root@evilgenius ~]# l2ping 00:E0:03:3E:4E:19
Ping: 00:E0:03:3E:4E:19 from 00:20:E0:7A:15:6F (data size 20) ...
0 bytes from 00:E0:03:3E:4E:19 id 200 time 47.65ms
0 bytes from 00:E0:03:3E:4E:19 id 201 time 36.47ms
0 bytes from 00:E0:03:3E:4E:19 id 202 time 37.44ms
3 sent, 3 received, 0% loss
If that works your are fine. the GRPS connection later.
[root@evilgenius ~]# rfcomm bind 0 00:E0:03:3E:4E:19 1
The 1 at the very end of the line is the channel we noted earlier. You can verify the result with
[root@evilgenius ~]# rfcomm show
rfcomm0: 00:E0:03:3E:4E:19 channel 1 clean
Now you can use minicom or something similar to talk to the phone. Use /dev/rfcomm0 as the device (if you bound to 0 above) you talk to. With my phone 57600 bits/sec and 8-N-1 worked fine. Try typing "at[ENTER]" which should return "OK".

GPRS connection

First we try it the low-tech style. Try a serial minicom session like the following:
This should establish the GRPS connection. Note that you have to replace "" by whatever the access point name (GPRS) is for your service provider.

If this worked you are ready for a more formal way. I will describe this here for Fedora Core 3.

Nice way on Fedora Core 3

First edit /etc/wvdial.conf. Add two sections like the following:
Modem = /dev/rfcomm0
Baud = 57600
SetVolume = 0
Dial Command = ATDT
Init1 = ATE1
Init2 = AT+CGDCONT=1,"IP","","",0,0
FlowControl = CRTSCTS

[Dialer GPRS]
Phone = *99#
Stupid Mode = 1
Inherits = BluetoothMobile
Username = t-mobile
Password = t-mobile
Replace the APN appropriately as you did above. The number should be the same on all networks. The settings given are for a Nokia 6230 but should also apply to other mobiles.

Now we will create the PPP peers file /etc/ppp/peers/GPRS with the following content:
connect "/usr/bin/wvdial --remotename GPRS --chat 'GPRS'"
The name given here is the name from the dialer section above. Now we create the configuration file so that we can easily establish the connection. Create the file /etc/sysconfig/network-scripts/ifcfg-GPRS with the following content:
A little tweak is needed to get bluetooth and rfcomm started up when it is needed right before the device initialization. The init parameter of pppd cannot be used (pppd won't start if the devcice is not already present). So what we do is create the file /sbin/ifup-pre-local which gets executed before ifup-ppp. This script may look similar to this one:

case "$1" in
        /etc/init.d/bluetooth start
        /usr/bin/rfcomm bind 0 00:E0:03:3E:4E:19 1
This will do what we want. Replace the address and channel appropriately. Not that on some older versions it may be just "GPRS" instead of "ifcfg-GPRS". You can check this by outputting $1 into a file (add echo $1 > /tmp/GPRS for example).

Now you can establish the connection (the USERCTL=yes will allow you to do this as a normal user) as easy as
/sbin/ifup GPRS

Jabber works just fine over that line and maybe cheaper than SMS with an appropriate plan that includes data transfer.

That's it. Have fun!
    Home     Contents     Search     View other revisions     Recent changes    

Top 5 Pages
Friends' blogs
SquidGuard Webmin Module

Palm Software
UniMatrix UniMensa UniSorter
UniChat OHS Mobile Onager

My Bookshelf

Valid XHTML 1.1!

RSS Copyright © 2000-2016 by Tim Niemueller