While attending the Mil-OSS conference this week, I had the opportunity to use one of the coolest features of my new iPhone 3GS — Bluetooth Internet tethering. Assuming that your mobile carrier allows the feature on their network, it provides a very easy way to have a persistent Internet connection, for those situations where a free Ethernet drop or WiFi access point aren’t readily available.
I happened to have my Dell Mini 9 (running Ubuntu Jaunty) with me for the conference, rather than my MacBook, so I thought that it might be difficult to get the Bluetooth connection working between the phone and laptop. This blog posting, however, provided exactly what I needed.
Following this process, the connection worked without a hitch. One
caveat is that I didn’t need to explicitly pair my phone with my
laptop; the first time I ran the pand --connect
command, my phone
prompted me with the pairing confirmation dialog. Later connections
didn’t require re-pairing.
As for bandwidth, the connection was perfectly reasonable for email
and basic Web surfing as long as I had decent 3G coverage — 3 of 5
bars or higher and I was good to go. I also did an apt-get
package
update as a “beefier” test; I was usually seeing around 20-30 Kb/sec
of download speed, which would be fine for small daily updates, but
would probably be unworkable for something large like a GNOME,
texlive, or GHC update. All in all, not bad for some surreptitious
email checking during the talks.
One thing that can be cumbersome about the instructions on the blog
post is that you have to run the pand
and ifup
/ifdown
commands
separately each time you want to start or stop the Bluetooth
connection. Not a huge waste of effort, to be sure, but we can do
better. So I wrote a quick little Bash script that will start and
stop the connection with a single command. You can find the script in
this
commit
on my Github page.
The script is fairly straightforward; you start your Bluetooth tether by running
tether up
and you stop it by running
tether down
Instead of hard-coding your phone’s Bluetooth MAC address into the script itself, you place it into the $HOME/etc/bluetooth.conf file. This file isn’t checked into Git, so that I’m not putting my personal MAC addresses into the public repository. Instead, the commit contains a $HOME/etc/bluetooth.conf.sample file, which you copy over to bluetooth.conf, and then edit appropriately.
While this script worked great for during the conference, there are two main issues with it as it stands.
dbus integration — Many applications now listen to the system’s
dbus message bus to determine different facts about the current
state of the system, including whether there’s an active Internet
connection. The NetworkManager application knows to publish the
correct dbus messages when it starts and stops a network connection.
The tether
script does not. This means that each time I open up
Firefox after turning on the tether, I have to manually uncheck the
File › Work Offline menu option to be able to access any web
pages.
Fixing this issue should only require finding the appropriate dbus
messages to send, and adding them to the up
and down
cases in
the script.
GUI access — While I don’t mind running a simple command to
activate and deactivate the network connection, I realize that a GUI
control within the NetworkManager applet would be more ideal. (This
would also eliminate the first issue, since NetworkManager would
then send the appropriate dbus messages when the connection is
started or stopped.) Luckily, Dan Williams has recently added
Bluetooth PAN
support
to nm-applet
. The new code is in the bleeding edge tree, so
hopefully it will make it into a release in time to be picked up for
October’s Karmic release.