Bluetooth pair use command line

来源:互联网 发布:怎么推广淘宝客 编辑:程序博客网 时间:2024/06/10 15:35
This article explains how to set up a bluetooth connection between your ubuntu laptop and phone and get PPP working with BT's mobile service in the UK. It probably isn't so hard to repeat this for other network providers. I'm sure that if you do a Yahoo search for the GPRS settings of your mobile telco, you'll be up and runnin with little more than a few mintues of poking around.

First you need to install the bluetooth packages on your linux machine:
$sudo apt-get install bluez-utils$sudo apt-get install blues-pin

Now you need to make sure you have the ppp package installed

$sudo apt-get install ppp


At this point you already have enough software on your machine to do a scan of the local area and see what devices are available. this is done using hcitool. When I run this command, the output looks like this:
$chris@snackerjack-lx:~$ hcitool scanScanning ...        00:07:3A:08:EE:74       n/a        00:18:13:50:0C:EB       Christo Yahoo!chris@snackerjack-lx:~$

That means that my laptop can see my phone - it's reporting the MAC address and the device name.

For more information on hcitool, you can run 'man hcitool'. Basically hcitool is a handy bluetooth utility which allows you to scan for and query local bluetooth devices. At this stage you can use hcitool to pair your bluetooth-enabled laptop with your phone. Use the following commands to achieve this:
$sudo hcitool cc 00:18:13:50:0C:EB

Note, you should use the MAC address of your own phone in this command - as reported by the hcitool scan command earlier. This creates a baseband connection to your phone. The next step is:
$sudo hcitool auth 00:18:13:50:0C:EB

This will request authentication with your phone - this is known as 'pairing' and will allow your computer to communicate with your bluetooth phone. Note again, you should replace the mac address with that of your phone. Don't use mine!


The next stage is to use the Service Discovery Protocol to ask your device what bluetooth services it is offering. At this point, if you're feeling really curious, you could re-run your hcitool scan and then run an SDP discovery search on all the listed devices. You never know - it might be interesting. However, this article is about setting up a Dial-up connection through your phone, so let's keep focussed.. The command you need to issue looks like this:
$sdptool browse 00:18:13:50:0C:EB

Again, use your own phone's MAC address - This will list all sorts of bluetooth services that your phone offers. This is what the output looks like when I run this command against my own phone.. I know it's a lot to paste, but it's worth seeing the kind of services which might be on offer:
chris@snackerjack-lx:~$ sdptool browse 00:18:13:50:0C:EBBrowsing 00:18:13:50:0C:EB ...Service Description: Sony Ericsson K750Service RecHandle: 0x10000Service Class ID List:  "PnP Information" (0x1200)Service Name: Dial-up NetworkingService RecHandle: 0x10001Service Class ID List:  "Dialup Networking" (0x1103)  "Generic Networking" (0x1201)Protocol Descriptor List:  "L2CAP" (0x0100)  "RFCOMM" (0x0003)    Channel: 1Profile Descriptor List:  "Dialup Networking" (0x1103)    Version: 0x0100Service Name: Serial PortService RecHandle: 0x10002Service Class ID List:  "Serial Port" (0x1101)Protocol Descriptor List:  "L2CAP" (0x0100)  "RFCOMM" (0x0003)    Channel: 2Service Name: HF Voice GatewayService RecHandle: 0x10003Service Class ID List:  "Handfree Audio Gateway" (0x111f)  "Generic Audio" (0x1203)Protocol Descriptor List:  "L2CAP" (0x0100)  "RFCOMM" (0x0003)    Channel: 3Profile Descriptor List:  "Handsfree" (0x111e)    Version: 0x0101Service Name: HS Voice GatewayService RecHandle: 0x10004Service Class ID List:  "Headset Audio Gateway" (0x1112)  "Generic Audio" (0x1203)Protocol Descriptor List:  "L2CAP" (0x0100)  "RFCOMM" (0x0003)    Channel: 4Profile Descriptor List:  "Headset" (0x1108)    Version: 0x0100Service Name: OBEX Object PushService RecHandle: 0x10005Service Class ID List:  "OBEX Object Push" (0x1105)Protocol Descriptor List:  "L2CAP" (0x0100)  "RFCOMM" (0x0003)    Channel: 5  "OBEX" (0x0008)Profile Descriptor List:  "OBEX Object Push" (0x1105)    Version: 0x0100Service Name: OBEX File TransferService RecHandle: 0x10006Service Class ID List:  "OBEX File Transfer" (0x1106)Protocol Descriptor List:  "L2CAP" (0x0100)  "RFCOMM" (0x0003)    Channel: 6  "OBEX" (0x0008)Profile Descriptor List:  "OBEX File Transfer" (0x1106)    Version: 0x0100Service Name: OBEX SyncML ClientService RecHandle: 0x10007Service Class ID List:  "Error: This is UUID-128" (0x00000002-0000-1000-8000-0002ee000002)Protocol Descriptor List:  "L2CAP" (0x0100)  "RFCOMM" (0x0003)    Channel: 7  "OBEX" (0x0008)Service Name: OBEX IrMC Sync ServerService RecHandle: 0x10008Service Class ID List:  "IrMC Sync" (0x1104)Protocol Descriptor List:  "L2CAP" (0x0100)  "RFCOMM" (0x0003)    Channel: 8  "OBEX" (0x0008)Profile Descriptor List:  "IrMC Sync" (0x1104)    Version: 0x0100Service Name: Mouse & KeyboardService Description: Remote ControlService Provider: Sony EricssonService RecHandle: 0x10009Service Class ID List:  "Human Interface Device" (0x1124)Protocol Descriptor List:  "L2CAP" (0x0100)    PSM: 17  "HIDP" (0x0011)Language Base Attr List:  code_ISO639: 0x656e  encoding:    0x6a  base_offset: 0x100Profile Descriptor List:  "Human Interface Device" (0x1124)    Version: 0x0100chris@snackerjack-lx:~$

That's pretty cool - First you can see that I'm using a Sony Ericsson K750 phone and then on every bluetooth 'Service Name:' line, you can see the name of a service on offer. The one we are most interested in is the 'Dial-up Networking' service, however, we can also use this device as a voice gateway, and it will support OBEX transfer requests (ie the exchange of binary objects from other bluetooth devices). I can also use this phone as an input device (service 'Mouse & Keyboard') - note that this last service describes itself as 'Remote Control' and yes, it can be used in precisely that way - so the phone will suddenly become a pointer/mouse within the PAN. I will explain this in another article.

Okay, so where are we now? Well the next step is simply to tell your system which channel you want to talk RFCOMM. RFCOMM is a special bluetooth serial port emulation over radio frequency (hence the name rf communication). It is quite literally an implementation of the RS232 serial protocol over radio. Bluetooth can handle several rfcomm channels consecutively. We just have to decide which one we're going to use for this exercise.. This is dead easy. Just look at the output of the sdp search which you ran just now and look at the RFCOMM channel number in the 'Dial up Networking' service section. In the case above, it's channel 1.

All you do now is specify that channel in your rfcomm.conf - so on my system that looks like this:
rfcomm0 {        bind yes;        device 00:18:13:50:0C:EB;        channel 1;        comment "PPP connect";}

At this point, you can set up /dev/rfcomm0 by running the following command:
$sudo /etc/init.d/bluez-utils restart

We're nearly there. Now that you have your rfcomm node fully configured and your phone and computer are paired, all you need to do is set up the PPP and chat settings on your computer. Chat sets up a ppp connection between your modem and a remote ppp service based on rules which you define in a chatscript.

First create the file /etc/ppp/peers/bluetoothconn and put the following into it:
debugnoauthconnect "/usr/sbin/chat -v -f /etc/chatscripts/bluetoothconn"usepeerdns/dev/rfcomm0 115200defaultroutecrtsctslcp-echo-failure 0

Now edit the file /etc/chatscripts/bluetoothconn and make sure it contains the following:
TIMEOUT 35ECHO    ONABORT   'nBUSYr'ABORT   'nERRORr'ABORT   'nNO ANSWERr'ABORT   'nNO CARRIERr'ABORT   'nNO DIALTONEr'ABORT   'nRINGINGrnrnRINGINGr'''      rATOK      'AT+CGDCONT=2,"IP","btmobile.bt.com"'OK      ATD*99***2#CONNECT ""

It took me a while to get this configuration to work. I tried several settings for the data profile number, without any real idea of what it should be - and found that ***2 worked. You might have to play around with this for your own telco - try swapping the '2' for any integer between '1' and '4', or even remove the whole lot and just terminate with a '#'.

To bring the connection up, just run the command:
$pon bluetoothconn

and to turn it off again:
$poff Bluetoothconn

It's as simple as that. If you still have questions about your bluetooth and GPRS setup with linux on your laptop and trying to talk to BT, please reply to this and let me know.

Hope that helps.

christo

Follow me on twitter to catch all my tech updates
http://www.twitter.com/planet_guru
原创粉丝点击