I've read in many places on the web that Bluetooth on FreeBSD is broken and unusable.
I was pleasantly surprised to find that this is not the case and Bluetooth works surprisingly well, for transferring files anyway.
I managed to find a Bluetooth 2.0 USB dongle for about $1.50 including postage. Not bad.
I can now successfully send files between my android phone and my computer using Bluetooth.
Insert usb Bluetooth device.
just to be sure:
#kldload ubtbcmfw
Create a config file at /etc/bluetooth
# cd /etc/bluetooth
# touch ubt0.conf
Edit the ubt0.conf file
# ee ubt0.conf
Add these lines to the file:
authentication_enable="YES"
connectable="YES"
discoverable="YES"
role_switch="YES"
Leave the editor. You may need to reboot.
you may want to look in /var/log/messages for something like this:
ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2
ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3,
wMaxPacketSize=49, nframes=6, buffer size=294
start the Bluetooth service:
#service bluetooth start ubt0
You may get a warning here like :
/etc/rc.d/bluetooth: ERROR: Unable to setup Bluetooth stack for device ubt0
just try the command again:
#service bluetooth start ubt0
again you may get the same warning but the service may have started anyway.
Next try as normal user to search for nearby Bluetooth devices:
$hccontrol -n ubt0hci inquiry
If Bluetooth is working you'll get your phone discovered and see output like this:
Inquiry result, num_responses=1
Inquiry result #0
BD_ADDR: 11:31:55:90:xx:v8
Page Scan Rep. Mode: 0x1
Page Scan Period Mode: 0x2
Page Scan Mode: 00
Class: 5a:02:0c
Clock offset: 0x1052
Inquiry complete. Status: No error [00]
If you get errors here you're Bluetooth device is probably not supported.
If you just get "Inquiry complete. Status: No error [00]" , turn Bluetooth on on your phone.
Take note of the Bluetooth address - 11:31:55:90:xx:v8 Obviously your number will be different.
To find the name of your phone:
hccontrol -n ubt0hci remote_name_request 11:31:55:90:xx:v8 (use your BD_ADDR)
and you should get:
BD_ADDR: 11:31:55:90:xx:v8
Name: MyPhoneModel
Then edit the /etc/bluetooth/hcsecd.conf file and add these lines or edit on of the example entries that is already there:
device {
bdaddr 11:31:55:90:xx:v8;
name "MyPhoneModel";
key nokey;
pin "1234";
}
The pin can be any number you want "0000" or "1111" are also fine. Use your bdaddr and name
Then :
Turn on authentication:
# hccontrol -n ubt0hci write_authentication_enable 1
# hccontrol -n ubt0hci read_authentication_enable
#hcsecd -d
And pair from your phone. Your bluetooth device should show up in your phone as "yourcomputername(ubt0)". Tap on it and enter the password you put in your hcsecd.conf entry.
If you want to start hcsecd at boot put this into /etc/rc.conf
hcsecd_enable="YES"
Now your phone and computer should be paired. Now to transfer some files. To find the channel your phone uses to transfer files:
#service sdpd start
If you want this to start at boot put into /etc/rc.conf
sdpd_enable="YES"
Now install obexapp
#pkg ins obexapp
then:
start the obex server (as root)
#obexapp -s -C OPUSH
Then as user
$obexapp -c -a 11:31:55:90:xx:v8 -C OPUSH
if the connection is successful, you'll get the obex prompt which means obexapp can send the files you want. You may have to do this command 3 or even 4 times until you get the obex prompt.
When you get the prompt it looks like this:
obex>
Send a file to your phone
obex> put /file/name/youwanttosend
and hit enter and you should get a notification on your phone for accepting incoming bluetooth file.
When you've finished enter di.
obex> di
If you get any errors, make sure you have no quotation marks around the file you're sending and the file name has no gaps. i.e. /home/username/Pictures/my image.jpg will not be sent but /home/username/Pictures/myimage.jpg will.
To send from your phone to computer, make a folder at /var/spool/ called obex
#mkdir /var/spool/obex
And send file from phone to computer, choosing the yourcomputername(ubt0) device. You'll see the file at /var/spool/obex
If you want to send files automatically without all the obexapp commands, use the script here :
[BEGINNING OF SCRIPT]
#!/bin/sh
# $FreeBSD$
# PROVIDE: obexapp
# REQUIRE: LOGIN sdpd
. /etc/rc.subr
name="obexapp"
rcvar=`set_rcvar`
command="/usr/local/bin/${name}"
start_precmd="obexapp_precmd"
obexapp_precmd()
{
rc_flags="-s $rc_flags -C ${obexapp_channel}"
if [ -n "${obexapp_username}" ]; then
rc_flags="$rc_flags -u ${obexapp_username}"
fi
if [ -n "${obexapp_rootdir}" ]; then
rc_flags="$rc_flags -r ${obexapp_rootdir}"
fi
}
load_rc_config $name
: ${obexapp_enable="NO"}
: ${obexapp_flags="-S"}
: ${obexapp_channel="OPUSH"}
: ${obexapp_username="yourloginname"}
: ${obexapp_rootdir="/some/directory/"}
run_rc_command "$1"
END OF SCRIPT
Copy into your favourite text editor (pluma or mousepad) and call it obexapp.sh
In the section
: ${obexapp_enable="NO"}
: ${obexapp_flags="-S"}
: ${obexapp_channel="1"}
: ${obexapp_username=""}
: ${obexapp_rootdir=""}
edit the channel number, obexapp_username to your login name and obexapp_rootdir to wherever you want the files sent from your phone to go to. e.g /home/yourloginname/obex. Save the file and copy it to
/usr/local/etc/rc.d/
#cp /path/to/downloaded/obexapp.sh /usr/local/etc/rc.d/
chmod it to make it executable:
#chmod 577 /usr/local/etc/rc.d/obexapp.sh
Then add these to /etc/rc.conf
obexapp_enable="YES"
obexapp_username="yourloginname"
obexapp_rootdir="/home/yourloginname/obex"
also make sure devd_enable="YES" is also in /etc/rc.conf. This will start Bluetooth on boot up.
Start the script:
# /etc/rc.d/sdpd onestart
# /usr/local/etc/rc.d/obexapp.sh start
Now you should be able to send file from your phone without any commands at all.
To send file to your phone, make this script:
Copy these lines to a mousepad (or other text editor) file:
#!/bin/sh
obexapp -c -a 11:31:55:90:xx:v8 -C 1
Again edit bdaddr and channel number for your phone and save in your home folder or wherever you like and give it any name you like i.e. transfer
Make it executable:
#chmod 755 /path/to/file/transfer
Now to begin transferring files, run the script:
Open a terminal and type as user:
./transfer
Again do this until you get the obex prompt. Usually you only need to do it once, but sometimes it takes 3 times.
obex >
Then use the put command to send files.
obex> put /your/file/name
I've found sending files to be a little slow as I'm using Bluetooth version 2.0 but 4.0 is much faster. I'm wauting for the device and I'll test it when it comes. Also obexapp won't send odt files but will send mp4, mp3 and jpg files.
Bluetooth on GhostBSD
- NevilleGoddard
- Developer
- Posts: 517
- Joined: Thu Dec 22, 2016 10:30 pm
- Location: Japan
Re: Bluetooth on GhostBSD
Nice I might look to integrate that in the next release.
- NevilleGoddard
- Developer
- Posts: 517
- Joined: Thu Dec 22, 2016 10:30 pm
- Location: Japan
Re: Bluetooth on GhostBSD
Thanks ericbsd. I can't wait to test GhostBSD12.
Have you tried this on TrueOS?
I've tried it on FreeBSD 12 and I can transfer files from my computer to my phone, but to transfer files from phone to computer doesn't work anymore unless I run the command
obexapp -c -a 24:31:84:90:11:22 -C 5
then it will work. Maybe because I'm using CURRENT. I don't know.
Is there any way to get this command to start automatically at boot time?
Have you tried this on TrueOS?
I've tried it on FreeBSD 12 and I can transfer files from my computer to my phone, but to transfer files from phone to computer doesn't work anymore unless I run the command
obexapp -c -a 24:31:84:90:11:22 -C 5
then it will work. Maybe because I'm using CURRENT. I don't know.
Is there any way to get this command to start automatically at boot time?
- NevilleGoddard
- Developer
- Posts: 517
- Joined: Thu Dec 22, 2016 10:30 pm
- Location: Japan
Re: Bluetooth on GhostBSD
Just a quick update.
It looks like bluetooth 4.0 is supported under GhostBSD/FreeBSD.
I've tested a couple of Bluetooth 4.0 dongles and they work quite well. Probably a little better than the Bluetooth 2.0 dongles I tested before.
So far all dongles I've bought have worked. They are very cheap. Only around $5 US. However 4.0 speed is apparently much faster than 2.0 but it didn't seem to be a lot faster. I'll need to test more.
The latest dongles both had the same chip set, unfortunately. I was hoping to try a couple of different chip sets.
The chip is a CSR8510 A10. CSR stands for Cambridge Silicon Radio.
Apparently the Broadcom Corp BCM20702A0 also works.
It looks like bluetooth 4.0 is supported under GhostBSD/FreeBSD.
I've tested a couple of Bluetooth 4.0 dongles and they work quite well. Probably a little better than the Bluetooth 2.0 dongles I tested before.
So far all dongles I've bought have worked. They are very cheap. Only around $5 US. However 4.0 speed is apparently much faster than 2.0 but it didn't seem to be a lot faster. I'll need to test more.
The latest dongles both had the same chip set, unfortunately. I was hoping to try a couple of different chip sets.
The chip is a CSR8510 A10. CSR stands for Cambridge Silicon Radio.
Apparently the Broadcom Corp BCM20702A0 also works.
Re: Bluetooth on GhostBSD
Hi,
How do i enable Bluetooth for use with a speaker when the laptop has Bluetooth built in?
ta
How do i enable Bluetooth for use with a speaker when the laptop has Bluetooth built in?
ta
- NevilleGoddard
- Developer
- Posts: 517
- Joined: Thu Dec 22, 2016 10:30 pm
- Location: Japan
Re: Bluetooth on GhostBSD
You can try this:
Enable BlueTooth support: (If IBM machine)
kldload acpi_ibm ; echo 'acpi_ibm_load="YES"' >> /boot/loader.conf
sysctl dev.acpi_ibm.0.bluetooth=1 ; echo dev.acpi_ibm.0.bluetooth=1 >> /etc/sysctl.conf
Ensure kernel module ng_ubt is loaded, though it should be loaded automatically by devd:
kldload ng_ubt (for across reboots sysrc kld_list+="ng_ubt" and sysrc kld_list+="ubtbcmfw"
Ensure bthidd service is enabled and started:
service bthidd start (for activation across reboots rc-update add bthidd)
Ensure hcsecd service is enabled and started:
service hcsecd start (for activation across reboots rc-update add hcsecd)
you may also need sdpd
service sdpd start (across reboots rc-update add sdpd)
Put device in pairing mode and pair with GhostBSD. Can be done manually using hccontrol or using bluetooth-config script from Phabricator review
bluetooth-config
Ensure that the connection exists by running hccontrol:
hccontrol -n ubt0hci create_connection BT_ADDR_OF_DEVICE
Verify connection using:
hccontrol -n ubt0hci read_connection_list
Install virtual_oss package:
pkg install virtual_oss
Start virtual_oss:
virtual_oss -C 2 -c 2 -r 48000 -b 16 -s 1024 -R /dev/null -P /dev/bluetooth/BT_ADDR_OF_DEVICE -d dsp
add -T /dev/sndstat before the -d to enable the device to show up in /dev/sndstat. If you want to use the virtual_oss_ctl package to control the virtual_oss device via GUI, add -t vdsp.ctl to the end. If you have trouble, try changing 48000 to 44100.
Play audio via vlc or other app
Further reading:
FreeBSD Handbook Chapter on BlueTooth
Pav's page on BlueTooth that Handbook Chapter was based on. Has some more detail
Review for bluetooth-config script
Review for making /dev/sndstat writeable
PR discussing setup which lead me to this
hccontrol(8) man page
l2ping(8) man page
FreeBSD BlueTooth mailing list archive
Enable BlueTooth support: (If IBM machine)
kldload acpi_ibm ; echo 'acpi_ibm_load="YES"' >> /boot/loader.conf
sysctl dev.acpi_ibm.0.bluetooth=1 ; echo dev.acpi_ibm.0.bluetooth=1 >> /etc/sysctl.conf
Ensure kernel module ng_ubt is loaded, though it should be loaded automatically by devd:
kldload ng_ubt (for across reboots sysrc kld_list+="ng_ubt" and sysrc kld_list+="ubtbcmfw"
Ensure bthidd service is enabled and started:
service bthidd start (for activation across reboots rc-update add bthidd)
Ensure hcsecd service is enabled and started:
service hcsecd start (for activation across reboots rc-update add hcsecd)
you may also need sdpd
service sdpd start (across reboots rc-update add sdpd)
Put device in pairing mode and pair with GhostBSD. Can be done manually using hccontrol or using bluetooth-config script from Phabricator review
bluetooth-config
Ensure that the connection exists by running hccontrol:
hccontrol -n ubt0hci create_connection BT_ADDR_OF_DEVICE
Verify connection using:
hccontrol -n ubt0hci read_connection_list
Install virtual_oss package:
pkg install virtual_oss
Start virtual_oss:
virtual_oss -C 2 -c 2 -r 48000 -b 16 -s 1024 -R /dev/null -P /dev/bluetooth/BT_ADDR_OF_DEVICE -d dsp
add -T /dev/sndstat before the -d to enable the device to show up in /dev/sndstat. If you want to use the virtual_oss_ctl package to control the virtual_oss device via GUI, add -t vdsp.ctl to the end. If you have trouble, try changing 48000 to 44100.
Play audio via vlc or other app
Further reading:
FreeBSD Handbook Chapter on BlueTooth
Pav's page on BlueTooth that Handbook Chapter was based on. Has some more detail
Review for bluetooth-config script
Review for making /dev/sndstat writeable
PR discussing setup which lead me to this
hccontrol(8) man page
l2ping(8) man page
FreeBSD BlueTooth mailing list archive
- NevilleGoddard
- Developer
- Posts: 517
- Joined: Thu Dec 22, 2016 10:30 pm
- Location: Japan
Re: Bluetooth on GhostBSD
Also this;
https://www.freebsd.org/cgi/man.cgi?que ... ease-ports
and this for a script that may speed things up:
https://reviews.freebsd.org/D3778
https://www.freebsd.org/cgi/man.cgi?que ... ease-ports
and this for a script that may speed things up:
https://reviews.freebsd.org/D3778
Re: Bluetooth on GhostBSD
Thanks for the tip,
a bit out of my depth with that! thought it might be a 1, maybe 2 liner!
I'll maybe come back to it when i feel a bit more confident!
a bit out of my depth with that! thought it might be a 1, maybe 2 liner!
I'll maybe come back to it when i feel a bit more confident!
- NevilleGoddard
- Developer
- Posts: 517
- Joined: Thu Dec 22, 2016 10:30 pm
- Location: Japan
Re: Bluetooth on GhostBSD
If you need help or get stuck feel free to ask. Are you new to UNIX?
- NevilleGoddard
- Developer
- Posts: 517
- Joined: Thu Dec 22, 2016 10:30 pm
- Location: Japan
Re: Bluetooth on GhostBSD
If you need help or get stuck feel free to ask. Are you new to UNIX?