File: Bluetooth.html

package info (click to toggle)
brltty 6.8-5
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 35,896 kB
  • sloc: ansic: 150,447; java: 13,484; sh: 9,667; xml: 5,702; tcl: 2,634; makefile: 2,339; awk: 713; lisp: 366; python: 321; ml: 301
file content (569 lines) | stat: -rw-r--r-- 19,071 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="generator" content="Docutils 0.20.1: https://docutils.sourceforge.io/" />
<title>Bluetooth Connections</title>
<style type="text/css">

/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.

Default cascading style sheet for the HTML output of Docutils.

See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/

/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
  border: 0 }

table.borderless td, table.borderless th {
  /* Override padding for "table.docutils td" with "! important".
     The right padding separates the table cells. */
  padding: 0 0.5em 0 0 ! important }

.first {
  /* Override more specific margin styles with "! important". */
  margin-top: 0 ! important }

.last, .with-subtitle {
  margin-bottom: 0 ! important }

.hidden {
  display: none }

.subscript {
  vertical-align: sub;
  font-size: smaller }

.superscript {
  vertical-align: super;
  font-size: smaller }

a.toc-backref {
  text-decoration: none ;
  color: black }

blockquote.epigraph {
  margin: 2em 5em ; }

dl.docutils dd {
  margin-bottom: 0.5em }

object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
  overflow: hidden;
}

/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
  font-weight: bold }
*/

div.abstract {
  margin: 2em 5em }

div.abstract p.topic-title {
  font-weight: bold ;
  text-align: center }

div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
  margin: 2em ;
  border: medium outset ;
  padding: 1em }

div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
  font-weight: bold ;
  font-family: sans-serif }

div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
  color: red ;
  font-weight: bold ;
  font-family: sans-serif }

/* Uncomment (and remove this text!) to get reduced vertical space in
   compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
  margin-bottom: 0.5em }

div.compound .compound-last, div.compound .compound-middle {
  margin-top: 0.5em }
*/

div.dedication {
  margin: 2em 5em ;
  text-align: center ;
  font-style: italic }

div.dedication p.topic-title {
  font-weight: bold ;
  font-style: normal }

div.figure {
  margin-left: 2em ;
  margin-right: 2em }

div.footer, div.header {
  clear: both;
  font-size: smaller }

div.line-block {
  display: block ;
  margin-top: 1em ;
  margin-bottom: 1em }

div.line-block div.line-block {
  margin-top: 0 ;
  margin-bottom: 0 ;
  margin-left: 1.5em }

div.sidebar {
  margin: 0 0 0.5em 1em ;
  border: medium outset ;
  padding: 1em ;
  background-color: #ffffee ;
  width: 40% ;
  float: right ;
  clear: right }

div.sidebar p.rubric {
  font-family: sans-serif ;
  font-size: medium }

div.system-messages {
  margin: 5em }

div.system-messages h1 {
  color: red }

div.system-message {
  border: medium outset ;
  padding: 1em }

div.system-message p.system-message-title {
  color: red ;
  font-weight: bold }

div.topic {
  margin: 2em }

h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
  margin-top: 0.4em }

h1.title {
  text-align: center }

h2.subtitle {
  text-align: center }

hr.docutils {
  width: 75% }

img.align-left, .figure.align-left, object.align-left, table.align-left {
  clear: left ;
  float: left ;
  margin-right: 1em }

img.align-right, .figure.align-right, object.align-right, table.align-right {
  clear: right ;
  float: right ;
  margin-left: 1em }

img.align-center, .figure.align-center, object.align-center {
  display: block;
  margin-left: auto;
  margin-right: auto;
}

table.align-center {
  margin-left: auto;
  margin-right: auto;
}

.align-left {
  text-align: left }

.align-center {
  clear: both ;
  text-align: center }

.align-right {
  text-align: right }

/* reset inner alignment in figures */
div.align-right {
  text-align: inherit }

/* div.align-center * { */
/*   text-align: left } */

.align-top    {
  vertical-align: top }

.align-middle {
  vertical-align: middle }

.align-bottom {
  vertical-align: bottom }

ol.simple, ul.simple {
  margin-bottom: 1em }

ol.arabic {
  list-style: decimal }

ol.loweralpha {
  list-style: lower-alpha }

ol.upperalpha {
  list-style: upper-alpha }

ol.lowerroman {
  list-style: lower-roman }

ol.upperroman {
  list-style: upper-roman }

p.attribution {
  text-align: right ;
  margin-left: 50% }

p.caption {
  font-style: italic }

p.credits {
  font-style: italic ;
  font-size: smaller }

p.label {
  white-space: nowrap }

p.rubric {
  font-weight: bold ;
  font-size: larger ;
  color: maroon ;
  text-align: center }

p.sidebar-title {
  font-family: sans-serif ;
  font-weight: bold ;
  font-size: larger }

p.sidebar-subtitle {
  font-family: sans-serif ;
  font-weight: bold }

p.topic-title {
  font-weight: bold }

pre.address {
  margin-bottom: 0 ;
  margin-top: 0 ;
  font: inherit }

pre.literal-block, pre.doctest-block, pre.math, pre.code {
  margin-left: 2em ;
  margin-right: 2em }

pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}

span.classifier {
  font-family: sans-serif ;
  font-style: oblique }

span.classifier-delimiter {
  font-family: sans-serif ;
  font-weight: bold }

span.interpreted {
  font-family: sans-serif }

span.option {
  white-space: nowrap }

span.pre {
  white-space: pre }

span.problematic {
  color: red }

span.section-subtitle {
  /* font-size relative to parent (h1..h6 element) */
  font-size: 80% }

table.citation {
  border-left: solid 1px gray;
  margin-left: 1px }

table.docinfo {
  margin: 2em 4em }

table.docutils {
  margin-top: 0.5em ;
  margin-bottom: 0.5em }

table.footnote {
  border-left: solid 1px black;
  margin-left: 1px }

table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
  padding-left: 0.5em ;
  padding-right: 0.5em ;
  vertical-align: top }

table.docutils th.field-name, table.docinfo th.docinfo-name {
  font-weight: bold ;
  text-align: left ;
  white-space: nowrap ;
  padding-left: 0 }

/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
  border: 0px;
  border-top: 2px solid;
  border-bottom: 2px solid;
  border-collapse: collapse;
}
table.docutils.booktabs * {
  border: 0px;
}
table.docutils.booktabs th {
  border-bottom: thin solid;
  text-align: left;
}

h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
  font-size: 100% }

ul.auto-toc {
  list-style-type: none }

</style>
</head>
<body>
<div class="document" id="bluetooth-connections">
<h1 class="title">Bluetooth Connections</h1>

<div class="contents topic" id="contents">
<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#pairing-a-bluetooth-device" id="toc-entry-1">Pairing a Bluetooth Device</a><ul>
<li><a class="reference internal" href="#on-linux" id="toc-entry-2">On Linux</a><ul>
<li><a class="reference internal" href="#for-bluetooth-version-5" id="toc-entry-3">For Bluetooth Version 5</a></li>
<li><a class="reference internal" href="#for-bluetooth-version-4" id="toc-entry-4">For Bluetooth Version 4</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#using-a-bluetooth-device-with-brltty" id="toc-entry-5">Using a Bluetooth Device with BRLTTY</a><ul>
<li><a class="reference internal" href="#identifying-the-device" id="toc-entry-6">Identifying the Device</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="pairing-a-bluetooth-device">
<h2><a class="toc-backref" href="#toc-entry-1">Pairing a Bluetooth Device</a></h2>
<p>You need to &quot;pair&quot; 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.</p>
<div class="section" id="on-linux">
<h3><a class="toc-backref" href="#toc-entry-2">On Linux</a></h3>
<p>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
<tt class="docutils literal"><span class="pre">bluetooth-applet</span></tt> 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.</p>
<div class="section" id="for-bluetooth-version-5">
<h4><a class="toc-backref" href="#toc-entry-3">For Bluetooth Version 5</a></h4>
<p>As of Bluetooth version 5, all required actions for pairing a device via the
command-line can be performed with a single tool called <tt class="docutils literal">bluetoothctl</tt>.</p>
<p>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 <tt class="docutils literal">list</tt> command to show all available controllers, and the
<tt class="docutils literal">select <span class="pre">&lt;host-address&gt;</span></tt> command to select one:</p>
<pre class="code console literal-block">
<span class="generic prompt"># </span>bluetoothctl<span class="whitespace">
</span><span class="generic prompt">[bluetooth]# </span>list<span class="whitespace">
</span><span class="generic output">Controller 01:23:45:67:89:AB fzidpc73
</span><span class="generic prompt">[bluetooth]# </span><span class="keyword">select</span><span class="whitespace"> </span><span class="literal number">01</span>:23:45:67:89:AB
</pre>
<p>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 <tt class="docutils literal">power on</tt> command to enable the
controller:</p>
<pre class="code console literal-block">
<span class="generic prompt">[bluetooth]# </span>show<span class="whitespace">
</span><span class="generic output">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
</span><span class="generic prompt">[bluetooth]# </span>power<span class="whitespace"> </span>on<span class="whitespace">
</span><span class="generic output">[CHG] Controller 01:23:45:67:89:AB Class: 0x000104
Changing power on succeeded
[CHG] Controller 01:23:45:67:89:AB Powered: yes</span>
</pre>
<p>To obtain the Bluetooth device address of the device you want to pair with,
enable scan mode:</p>
<pre class="code console literal-block">
<span class="generic prompt">[bluetooth]# </span>scan<span class="whitespace"> </span>on<span class="whitespace">
</span><span class="generic output">Discovery started
[CHG] Controller 01:23:45:67:89:AB Discovering: yes
[NEW] Device 12:34:56:78:9A:BC braillex live 0139
</span><span class="generic prompt">[bluetooth]# </span>scan<span class="whitespace"> </span>off<span class="whitespace">
</span><span class="generic output">Discovery stopped
[CHG] Controller 01:23:45:67:89:AB Discovering: no</span>
</pre>
<p>To be able to receive PIN code requests directly on the console, you need to
enable the <em>agent</em>:</p>
<pre class="code console literal-block">
<span class="generic prompt">[bluetooth]# </span>agent<span class="whitespace"> </span>on<span class="whitespace">
</span><span class="generic output">Agent registered</span>
</pre>
<p>Now you are finally ready to initiate the pairing:</p>
<pre class="code console literal-block">
<span class="generic prompt">[bluetooth]# </span>pair<span class="whitespace"> </span><span class="literal number">12</span>:34:56:78:9A:BC<span class="whitespace">
</span><span class="generic output">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</span>
</pre>
</div>
<div class="section" id="for-bluetooth-version-4">
<h4><a class="toc-backref" href="#toc-entry-4">For Bluetooth Version 4</a></h4>
<p>You need to find out your host's Bluetooth Device Address (referred to later in
this document as <em>host-address</em>). To do this, run the command:</p>
<pre class="literal-block">
hciconfig hci0
</pre>
<p>Look for the (indented) line which begins with <tt class="docutils literal">BD Address:</tt>. The very next
&quot;word&quot; on that line is your host's Bluetooth Device Address. It'll be six
two-digit hexadecimal numbers separated by colons (<tt class="docutils literal">:</tt>). Examples in this
document use the value <tt class="docutils literal">01:23:45:67:89:AB</tt>.</p>
<p>You need to find out your device's Bluetooth Device Address (referred to later
in this document as <em>device-address</em>). To do this, run the command:</p>
<pre class="literal-block">
hcitool scan
</pre>
<p>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 <tt class="docutils literal">12:34:56:78:9A:BC</tt>), 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.</p>
<p>A device needs to be &quot;visible&quot; in order for the scan to find it. Most devices
are &quot;invisible&quot; 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.</p>
<p>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 <tt class="docutils literal">1234</tt>.</p>
<p>Go into the directory <tt class="docutils literal"><span class="pre">/var/lib/bluetooth/&lt;host-address&gt;</span></tt>. In there (create
if necessary) is the file <tt class="docutils literal">pincodes</tt>. 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:</p>
<pre class="literal-block">
cat /var/lib/bluetooth/01:23:45:67:89:AB/pincodes
12:34:56:78:9A:BC 1234
</pre>
</div>
</div>
</div>
<div class="section" id="using-a-bluetooth-device-with-brltty">
<h2><a class="toc-backref" href="#toc-entry-5">Using a Bluetooth Device with BRLTTY</a></h2>
<p>After your device has been paired with your host, it's ready to be used by
BRLTTY.</p>
<div class="section" id="identifying-the-device">
<h3><a class="toc-backref" href="#toc-entry-6">Identifying the Device</a></h3>
<p>You can tell BRLTTY to use your Bluetooth device either via the <tt class="docutils literal"><span class="pre">-d</span></tt>
(or <tt class="docutils literal"><span class="pre">--braille-device=</span></tt>) command line option, or via the <tt class="docutils literal"><span class="pre">braille-device</span></tt>
line in the file <tt class="docutils literal">/etc/brltty.conf</tt>. The device should be specified as the
word <tt class="docutils literal">bluetooth</tt>, a colon (<tt class="docutils literal">:</tt>), and the device's Bluetooth Device Address.
For example:</p>
<pre class="literal-block">
brltty -d bluetooth:12:34:56:78:9A:BC
</pre>
<p>or:</p>
<pre class="literal-block">
cat /etc/brltty.conf
braille-device bluetooth:12:34:56:78:9A:BC
</pre>
<p>On some platforms,
BRLTTY supports the detection of a Bluetooth device based on its name.
These platforms include:</p>
<ul class="simple">
<li>Android</li>
<li>Linux (if the Bluetooth version is at least 5)</li>
<li>Windows</li>
</ul>
<p>The address of the device needn't be specified on these platforms -
specifying just <tt class="docutils literal">bluetooth:</tt> 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.</p>
<p>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:</p>
<pre class="literal-block">
bluetooth:name=prefix
</pre>
<p>If you need to specify a space within the prefix, then:</p>
<ul>
<li><p class="first">On the command line, use quotes:</p>
<pre class="literal-block">
-d &quot;bluetooth:name=braille device&quot;
</pre>
</li>
<li><p class="first">In <tt class="docutils literal">/etc/brltty.conf</tt>, use \s:</p>
<pre class="literal-block">
braille-device bluetooth:name=braille\sdevice
</pre>
</li>
</ul>
</div>
</div>
</div>
</body>
</html>