| ~~~~~~~~~~~~~~~~~~~~~ | |
| Bluetooth Connections | |
| ~~~~~~~~~~~~~~~~~~~~~ | |
| .. include:: prologue.rst | |
| Pairing a Bluetooth Device | |
| ========================== | |
| You need to "pair" your device with the host on which you wish to use it. You | |
| can pair a device with more than one host, but you can usually only use it with | |
| one host at a time. | |
| On Linux | |
| -------- | |
| Pairing a Bluetooth device on Linux is relatively easy if you're comfortable | |
| working within the graphical (X) environment. All you need to do is to run | |
| ``bluetooth-applet`` and follow the steps it presents to you. It's a little | |
| trickier to pair a Bluetooth device via the command line, but it can be done. | |
| How to do it depends on the version of the Bluetooth software stack that you're | |
| using. | |
| For Bluetooth Version 5 | |
| ~~~~~~~~~~~~~~~~~~~~~~~ | |
| As of Bluetooth version 5, all required actions for pairing a device via the | |
| command-line can be performed with a single tool called ``bluetoothctl``. | |
| First, in case you have several Bluetooth controllers in use (uncommon, but | |
| possible), you need to make sure that the correct one is currently selected. | |
| Use the ``list`` command to show all available controllers, and the | |
| ``select <host-address>`` command to select one: | |
| .. code-block:: console | |
| # bluetoothctl | |
| [bluetooth]# list | |
| Controller 01:23:45:67:89:AB fzidpc73 | |
| [bluetooth]# select 01:23:45:67:89:AB | |
| It can happen that the selected controller is not powered on at the moment. | |
| Make sure it is, and, if it isn't, use the ``power on`` command to enable the | |
| controller: | |
| .. code-block:: console | |
| [bluetooth]# show | |
| Controller 01:23:45:67:89:AB | |
| Name: fzidpc73 | |
| Alias: fzidpc73-0 | |
| Class: 0x000000 | |
| Powered: no | |
| Discoverable: no | |
| Pairable: yes | |
| UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb) | |
| UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb) | |
| UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb) | |
| UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb) | |
| UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb) | |
| Modalias: usb:v1D6Bp0246d0517 | |
| Discovering: no | |
| [bluetooth]# power on | |
| [CHG] Controller 01:23:45:67:89:AB Class: 0x000104 | |
| Changing power on succeeded | |
| [CHG] Controller 01:23:45:67:89:AB Powered: yes | |
| To obtain the Bluetooth device address of the device you want to pair with, | |
| enable scan mode: | |
| .. code-block:: console | |
| [bluetooth]# scan on | |
| Discovery started | |
| [CHG] Controller 01:23:45:67:89:AB Discovering: yes | |
| [NEW] Device 12:34:56:78:9A:BC braillex live 0139 | |
| [bluetooth]# scan off | |
| Discovery stopped | |
| [CHG] Controller 01:23:45:67:89:AB Discovering: no | |
| To be able to receive PIN code requests directly on the console, you need to | |
| enable the *agent*: | |
| .. code-block:: console | |
| [bluetooth]# agent on | |
| Agent registered | |
| Now you are finally ready to initiate the pairing: | |
| .. code-block:: console | |
| [bluetooth]# pair 12:34:56:78:9A:BC | |
| Attempting to pair with 12:34:56:78:9A:BC | |
| [CHG] Device 12:34:56:78:9A:BC Connected: yes | |
| Request PIN code | |
| [agent] Enter PIN code: 1234 | |
| [CHG] Device 12:34:56:78:9A:BC UUIDs: | |
| 00001101-0000-1000-8000-00805f9b34fb | |
| [CHG] Device 12:34:56:78:9A:BC Paired: yes | |
| Pairing successful | |
| [CHG] Device 12:34:56:78:9A:BC Connected: no | |
| For Bluetooth Version 4 | |
| ~~~~~~~~~~~~~~~~~~~~~~~ | |
| You need to find out your host's Bluetooth Device Address (referred to later in | |
| this document as *host-address*). To do this, run the command:: | |
| hciconfig hci0 | |
| Look for the (indented) line which begins with ``BD Address:``. The very next | |
| "word" on that line is your host's Bluetooth Device Address. It'll be six | |
| two-digit hexadecimal numbers separated by colons (``:``). Examples in this | |
| document use the value ``01:23:45:67:89:AB``. | |
| You need to find out your device's Bluetooth Device Address (referred to later | |
| in this document as *device-address*). To do this, run the command:: | |
| hcitool scan | |
| This command can take a while to complete as it gives devices a fair bit of | |
| time to respond. Each device which responds creates one two-column output line. | |
| The first column is its Bluetooth Device Address (examples in this document use | |
| the value ``12:34:56:78:9A:BC``), and the second column is its | |
| current name. Manufacturers usually set a device's initial name to its product | |
| name and model number so that it's easy to spot within the scan output. If your | |
| device allows you to change its name, it's okay to do so even after you've | |
| paired it. | |
| A device needs to be "visible" in order for the scan to find it. Most devices | |
| are "invisible" by default, but have a way to be made temporarily visible. You | |
| should check your device's manual to find out how to do this. In many cases, | |
| there's either a button which needs to be pressed or a menu item which needs to | |
| be selected. Since both the device's temporary visibility and the host's scan | |
| time out, make your device visible just before you initiate the scan. | |
| You need to know what PIN (password) your device is expecting. Your device's | |
| documentation should contain this information. Many devices allow you to set | |
| the PIN, in which case they'll have a menu which allows you to do this. | |
| Examples in this document use the value ``1234``. | |
| Go into the directory ``/var/lib/bluetooth/<host-address>``. In there (create | |
| if necessary) is the file ``pincodes``. Each line in this file associates a | |
| device with its PIN. It has two fields separated by space. The first field is | |
| the device's Bluetooth Device Address and the second field is its PIN. The | |
| Bluetooth Device Address must be in uppercase. For example:: | |
| cat /var/lib/bluetooth/01:23:45:67:89:AB/pincodes | |
| 12:34:56:78:9A:BC 1234 | |
| Using a Bluetooth Device with BRLTTY | |
| ==================================== | |
| After your device has been paired with your host, it's ready to be used by | |
| BRLTTY. | |
| Identifying the Device | |
| ---------------------- | |
| You can tell BRLTTY to use your Bluetooth device either via the ``-d`` | |
| (or ``--braille-device=``) command line option, or via the ``braille-device`` | |
| line in the file ``/etc/brltty.conf``. The device should be specified as the | |
| word ``bluetooth``, a colon (``:``), and the device's Bluetooth Device Address. | |
| For example:: | |
| brltty -d bluetooth:12:34:56:78:9A:BC | |
| or:: | |
| cat /etc/brltty.conf | |
| braille-device bluetooth:12:34:56:78:9A:BC | |
| On some platforms, | |
| BRLTTY supports the detection of a Bluetooth device based on its name. | |
| These platforms include: | |
| * Android | |
| * Linux (if the Bluetooth version is at least 5) | |
| * Windows | |
| The address of the device needn't be specified on these platforms - | |
| specifying just ``bluetooth:`` is sufficient. | |
| BRLTTY will find the braille device based on its name. | |
| It'll only consider devices that have already been paired with the host. | |
| If two (or more) braille devices are paired with your host, | |
| and if both of them are near by, turned on, and configured for Bluetooth access, | |
| then, of course, BRLTTY might choose the wrong one. | |
| As long as both of them don't have the same Bluetooth name, | |
| you can still specify the intended device without knowing its address. | |
| You can limit the devices that BRLTTY will consider | |
| by specifying the beginning of its Bluetooth name:: | |
| bluetooth:name=prefix | |
| If you need to specify a space within the prefix, then: | |
| * On the command line, use quotes:: | |
| -d "bluetooth:name=braille device" | |
| * In ``/etc/brltty.conf``, use \\s:: | |
| braille-device bluetooth:name=braille\sdevice | |