Third party cookies may be stored when visiting this site. Please see the cookie information.

PenguinTutor YouTube Channel

Linux Bluetooth Networking Tutorial (Ubuntu)

Linux Bluetooth Networking Tutorial (Ubuntu)

This is an article I wrote some time ago for the PenguinTutor tutorial pages.
As I am updating the tutorials and this is now too dated to be of use in the main tutorial (What’s a Palm PDA I hear you ask) but was something I thought was worth saving in case it was required in future.

Linux Bluetooth Networking Tutorial (Ubuntu)

This explains the steps that required to enable Bluetooth Networking using Ubuntu. The final goal to allow web browsing on a palm using bluetooth, sharing a broadband connection on the linux machine.

This was carried out using Ubuntu 4.10 “The Warty Warthog” and using a Palm Tungsten T3 (PalmOS version 5 and WebPro). Both the linux machine and the palm machine were working systems so may have varied slightly from a vanilla install. If using other distributions of linux, or different palm devices then the instructions may differ. The bluetooth was provided using an unbranded bluetooth USB dongle. I believe this is the same as the “Acer” dongle. The dongle / bluetooth device must be supported by the bluez drivers.

Getting started

Insert the bluetooth dongle.

Using the Synaptic Package Manager Install



The kernel must be at least 2.4 (or have the blueZ patches installed), this is the case for Ubuntu, and most other recent distributions.

Basic Bluetooth Config

Check that the bluez module is loaded

$ lsmod | grep blue

bluetooth 44036 7 rfcomm,l2cap,hci_usb

If this does not show the bluetooth device then you may need to reboot, although unlikely.

You can then see the interface

$ hciconfig

hci0: Type: USB

BD Address: 00:04:3E:40:6C:FD ACL MTU: 1356:5 SCO MTU: 48:1


RX bytes:101 acl:0 sco:0 events:13 errors:0

TX bytes:300 acl:0 sco:0 commands:13 errors:0

You can use

hciconfig -a

to see more details, and if the status is not showing as up using hciconfig hci0 up to activate it.

Bluetooth Pairing

Ensure that the Palm is switched on, and that bluetooth is enabled (under prefs bluetooth on the palm).

You can scan for the device using:

$ hcitool scan

Scanning …

00:07:E0:30:9A:76 Palm

The address shown is of the palm device (and Palm will be replaced with the name of your device).

This value will be needed later when we come to setting up ppp.

The PIN for the computer is stored in /etc/bluetooth/pin

it’s default is 1234 (this may differ on other systems)

On Palm Prefs -> Communication (Bluetooth)

(assuming status “on”) Choose Trusted Devices Add Device – Show Current Discovery

It should show the linux machine’s hostname. Select and it will prompt for PIN (see above).

The devices are now paired

Setup the basic bluetooth connection

The sdpd daemon is required to tell the palm what services are provided by the

linux machine. Check sdpd daemon is running (using ps -ef | grep sdpd)

Check it is setup to act as a LAN

$ sdptool get Lan

Service Name: SDP Server

Service Description: Bluetooth service discovery server

Service Provider: BlueZ

Service RecHandle: 0x0

Service Class ID List:

“SDP Server” (0x1000)

Protocol Descriptor List:

“L2CAP” (0x0100)

PSM: 1

Version: 0x0001

Language Base Attr List:

code_ISO639: 0x656e

encoding: 0x6a

base_offset: 0x100

On palm create a “connection” from the prefs

Name – something appropriate

Connect to – PC

Via – Bluetooth

Device – Select previously paired device


The rfcomm provides the basic connectivity layer

sudo rfcomm bind 0 00:07:E0:30:9A:76 1

address taken from hcitool scan

The command format is rfcomm []. You may see documentation referring to this as a daemon rfcommd, but this is outdated as it is now included in the kernel.

You can view this entry

$ rfcomm -a

rfcomm0: 00:07:E0:30:9A:76 channel 1 clean

This can be added permanently by editing the file /etc/bluetooth/rfcomm.conf

Create file /etc/ppp/peers/bluetooth.options

with the following:

# /etc/ppp/bluetooth.options


# Increase debugging level (same as -d). The debug output is written

# to syslog LOG_LOCAL2.

# debug

# noauth means do not require the peer to authenticate itself, this must

# be set if you want to use pppd to connect to the internet. In this case

# *you* must authenicate yourself to the peer(internet provider), so do

# not disable this setting unless you are the dial-in server which where

# the peer has to autenticate to.


# Specifies that pppd should use a UUCP-style lock on the serial device

# to ensure exclusive access to the device.


# Connect without using a modem


# async character map — 32-bit hex; each bit is a character

# that needs to be escaped for pppd to receive it. 0x00000001

# represents ‘\x01’, and 0x80000000 represents ‘\x1f’.

asyncmap 0

# Don’t fork to become a background process (otherwise pppd will do so

# if a serial device is specified).

# nodetach

# Specifies that pppd should disconnect if the link is idle for n seconds.

idle 600

# Disable the IPXCP and IPX protocols.


# Specify which DNS Servers the incoming Win95 or WinNT Connection should use

# Two Servers can be remotely configured

# set your own dns server here, otherwise on the palm

# ms-dns

# wait for client to re-initiate a connection



# the two addresses to use for the client and the local ppp interface

You may need to add a ms-dns entry (unless you define this manually in the palm).

You can normally use the entries from /etc/resolv.conf

Now edit /etc/default/bluez-utils to point to this file, when an attempt is made to establish a ppp connection.

Find the entry DUND_ENABLED=0, and change it to DUND_ENABLED=1

Find the entry

DUND_OPTIONS=”–listen –persist”

and change it to

DUND_OPTIONS=”–listen –persist –msdun call dun”

Then restart the bluez-utils

sudo /etc/init.d/bluez-utils restart


You then need to configure iptables to provide NAT

Details are at

I hope to provide some better details soon.