クイックリファレンス
| コマンド名 | 説明 | 使用例 | 
|---|---|---|
| list | 利用可能なコントローラをすべて表示する | list | 
| select | デフォルトのコントローラを変更する | select <CONTROLLER_DB_ADDRESS> | 
| show | 選択されているコントローラの情報を表示する | show | 
| power | Bluetooth レシーバーの電源のオン・オフを切り替える | power on|off | 
| pairable | Bluetooth レシーバーのペアリング可否の状態を変更する | pairable on|off | 
| discoverable | Bluetooth レシーバーを、他のデバイスから検索可能な状態にするかどうかを変更する | discoverable on|off | 
| discoverable-timeout | discoverable onを実行したあとに、自動的にdiscoverable offにするまでの時間を設定する | discoverable-timeout <TIME> | 
| scan | ペアリング・接続可能なデバイス一覧を検索する | scan on|off | 
| devices | ペアリング・接続可能なデバイス一覧を表示する | devices | 
| pair | デバイスとペアリングする | pair <DEVICE_BD_ADDRESS> | 
| agent | ペアリングする際にどのように認証するかを指定する | agent <TYPE> | 
| paired-devices | ペアリングされているデバイス一覧を表示する | paired-devices | 
| info | ペアリング・接続したデバイスの情報を表示する | info <DEVICE_BD_ADDRESS> | 
| connect | デバイスと接続する | connect <DEVICE_BD_ADDRESS> | 
| disconnect | デバイスを切断する | disconnect <DEVICE_BD_ADDRESS> | 
| trust | デバイスを信頼する | trust <DEVICE_BD_ADDRESS> | 
| untrust | 信頼したデバイスを信頼しない状態に戻す | untrust <DEVICE_BD_ADDRESS> | 
| block | デバイスをブロックする | block <DEVICE_BD_ADDRESS> | 
| unblock | ブロックされているデバイスのブロックを解除する | unblock <DEVICE_BD_ADDRESS> | 
| remove | デバイスと切断し、ペアリング情報を削除する | remove <DEVICE_BD_ADDRESS> | 
| set-alias | デバイスにエイリアスを設定する | set-alias <DEVICE_ALIAS> | 
| system-alias | コントローラにエイリアスを設定する | system-alias <CONTROLLER_ALIAS | 
| reset-alias | system-aliasで設定したエイリアスを削除する | reset-alias | 
| default-agent | ペアリングなどをしたいデバイス側からリクエストがあったときに、どのコントローラでそのリクエストを受けるのかを指定する | default-agent | 
| advertise | 用途不明 | 
はじめに
最近 bluetoothctl を利用する機会が多いので、bluetoothctl のコマンドについて調べてまとめてみた。
bluetoothctl とは
GNU/Linux で利用可能なコマンドの一つ。Bluetooth のライブラリをインストールすると一緒についてくるコマンドの一つ。
Ubuntu Desktop の場合は Bluetooth のライブラリがプリインストールされているので bluetoothctl コマンドが最初から使えるはず。
Ubuntu Server の場合は以下のコマンドを実行すると利用可能になる。
sudo apt -y install bluetooth bluez
主な利用用途
Bluetooth に関する操作をコマンドラインで行うことができる。
たとえば、PC やスマートフォンで Bluetooth の設定に行くと、接続可能なデバイス一覧が表示され、そのデバイスを選択すると Bluetooth のペアリングができる。その後、対象の Bluetooth デバイスと接続したり切断したりすることができる。
その一連の Bluetooth 操作を、GNU/Linux ではコマンドラインで行うことができる。コマンドラインで Bluetooth の操作ができてしまうのも GNU/Linux の特徴の一つだろう。
使い方
使い方は至ってシンプルだ。
bluetoothctl コマンドはインタラクティブなインターフェースで実装されている。下記コマンドを実行すると、コントローラ1の一覧とともに bluetoothctl のプロンプトが表示されるはずだ。
bluetoothctl
Agent registered
[CHG] Controller XX:XX:XX:XX:XX:XA Pairable: yes
[CHG] Controller XX:XX:XX:XX:XX:XB Pairable: yes
[CHG] Controller XX:XX:XX:XX:XX:XC Pairable: yes
[CHG] Controller XX:XX:XX:XX:XX:XD Pairable: yes
[CHG] Controller XX:XX:XX:XX:XX:XE Pairable: yes
[CHG] Controller XX:XX:XX:XX:XX:XF Pairable: yes
[Bluetooth]#
ここから bluetoothctl のコマンドを実行することによって、各種 Bluetooth の操作をコマンドラインで行うことができる。
終了する場合は exit または quit を実行する。
exit|quit
動作確認環境
- bluetoothctl 5.53
コマンド一覧
コマンド一覧とどのような操作を行うものかを順番に説明していく。
list
利用可能なコントローラ1をすべて表示する。
list
Controller XX:XX:XX:XX:XX:XA BlueZ 5.53 [default]
Controller XX:XX:XX:XX:XX:XB BlueZ 5.53
Controller XX:XX:XX:XX:XX:XC BlueZ 5.53
Controller XX:XX:XX:XX:XX:XD BlueZ 5.53
Controller XX:XX:XX:XX:XX:XE BlueZ 5.53
Controller XX:XX:XX:XX:XX:XF BlueZ 5.53
末尾に [default] と表示されているのが、現在選択されているコントローラである。これはどういう意味か説明する。
たとえば、USB タイプの Bluetooth レシーバーを 3 つ接続していて、それぞれ A, B, C としよう。
A に Bluetooth キーボードを接続して、B に Bluetooth マウスを接続して、C に Bluetooth ヘッドフォンを接続したいとする。この用途だと、一つのレシーバーにキーボードとマウスとヘッドフォンを全部接続すれば良いのだが、あくまで説明用だ。
実際に各種デバイス (キーボード、マウス、ヘッドフォン) と接続する際は、list で [default] と表示された Bluetooth レシーバーに対してペアリングや接続が行われる。
なので、A が [default] となっていて、キーボードを接続したら、次は B を [default] にしてマウスを接続して、C を [default] にしてヘッドフォンを接続する、といった具合だ。
[default] の切り替え方は、後述する select コマンドを使用する。
select
デフォルトのコントローラを変更する。
select XX:XX:XX:XX:XX:XX
Controller XX:XX:XX:XX:XX:XX BlueZ 5.53 [default]
XX:XX:XX:XX:XX:XX にはコントローラの BD アドレスを指定する。コントローラの BD アドレスは、先ほど list コマンドで表示されたものだ。
先の list の例では、XX:XX:XX:XX:XX:XA がデフォルトになっていた。XX:XX:XX:XX:XX:XB を選択して再度 list を実行すれば [default] が変更されていることがわかる。
select XX:XX:XX:XX:XX:XB
list
Controller XX:XX:XX:XX:XX:XA BlueZ 5.53
Controller XX:XX:XX:XX:XX:XB BlueZ 5.53 [default]
Controller XX:XX:XX:XX:XX:XC BlueZ 5.53
Controller XX:XX:XX:XX:XX:XD BlueZ 5.53
Controller XX:XX:XX:XX:XX:XE BlueZ 5.53
Controller XX:XX:XX:XX:XX:XF BlueZ 5.53
先ほども説明したが、ここで [default] がついている Bluetooth 送受信装置 (Bluetooth レシーバーなど) に対して各種 Bluetooth の設定を行うことになる。
show
選択されているコントローラの情報を表示する。
show
Controller XX:XX:XX:XX:XX:XX (public)
	Name: BlueZ 5.53
	Alias: BlueZ 5.53
	Class: 0x00000000
	Powered: yes
	Discoverable: no
	DiscoverableTimeout: 0x00000000
	Pairable: yes
	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: Generic Attribute Profile (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: Generic Access Profile    (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: Handsfree                 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: Audio Sink                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	Modalias: usb:xxxxxxxxxxxxxxx
	Discovering: no
Advertising Features:
	ActiveInstances: 0x00
	SupportedInstances: 0x00
	SupportedIncludes: tx-power
	SupportedIncludes: appearance
	SupportedIncludes: local-name
その Bluetooth 送受信装置が起動しているかどうか、別のデバイスから検索可能かどうかなどの情報が表示される。
ここで表示されるのは選択されている (デフォルトの) コントローラの情報なので、別のコントローラの情報を見たかったら select でコントローラを変更する必要がある。
power
Bluetooth レシーバーの電源のオン・オフを切り替える。
power on|off
引数には on または off を指定する。
Changing power on/off succeeded
show を実行すると電源のオン・オフが変更されたことがわかる。
show
  Controller XX:XX:XX:XX:XX:XX (public)
  	Name: BlueZ 5.53
  	Alias: BlueZ 5.53
  	Class: 0x00000000
- 	Powered: yes
+ 	Powered: no
  	Discoverable: no
  	DiscoverableTimeout: 0x00000000
  	Pairable: yes
  	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Generic Attribute Profile (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Generic Access Profile    (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Handsfree                 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Audio Sink                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	Modalias: usb:xxxxxxxxxxxxxxx
  	Discovering: no
  Advertising Features:
  	ActiveInstances: 0x00
  	SupportedInstances: 0x00
  	SupportedIncludes: tx-power
  	SupportedIncludes: appearance
  	SupportedIncludes: local-name
電源がオン (Powered が yes) になっていないと、近くにある Bluetooth デバイスを検索したりペアリングしたり接続したりすることができない。
これ以降のコマンドの説明では、電源がオンになっていることを前提とする。
pairable
Bluetooth レシーバーのペアリング可否の状態を変更する。
pairable on|off
Changing pairable on/off succeeded
show を実行するとペアリング可能かどうかが変更されたことがわかる。
show
  Controller XX:XX:XX:XX:XX:XX (public)
  	Name: BlueZ 5.53
  	Alias: BlueZ 5.53
  	Class: 0x00000000
  	Powered: yes
  	Discoverable: no
  	DiscoverableTimeout: 0x00000000
- 	Pairable: yes
+ 	Pairable: no
  	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Generic Attribute Profile (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Generic Access Profile    (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Handsfree                 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Audio Sink                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	Modalias: usb:xxxxxxxxxxxxxxx
  	Discovering: no
  Advertising Features:
  	ActiveInstances: 0x00
  	SupportedInstances: 0x00
  	SupportedIncludes: tx-power
  	SupportedIncludes: appearance
  	SupportedIncludes: local-name
discoverable
Bluetooth レシーバーを、他のデバイスから検索可能な状態にするかどうかを変更する。
discoverable on|off
Changing discoverable on/off succeeded
オンにすると、他のデバイスの Bluetooth 設定画面で表示されるようになる。
| discoverable off | discoverable on | 
|---|---|
|  |  | 
また、show を実行すると他のデバイスから検索可能な状態かどうかが変更されたことがわかる。
show
  Controller XX:XX:XX:XX:XX:XX (public)
  	Name: BlueZ 5.53
  	Alias: BlueZ 5.53
  	Class: 0x00000000
  	Powered: yes
- 	Discoverable: no
+ 	Discoverable: yes
  	DiscoverableTimeout: 0x00000000
  	Pairable: yes
  	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Generic Attribute Profile (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Generic Access Profile    (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Handsfree                 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Audio Sink                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	Modalias: usb:xxxxxxxxxxxxxxx
  	Discovering: no
  Advertising Features:
  	ActiveInstances: 0x00
  	SupportedInstances: 0x00
  	SupportedIncludes: tx-power
  	SupportedIncludes: appearance
  	SupportedIncludes: local-name
discoverable-timeout
discoverable on を実行したあとに、自動的に discoverable off にするまでの時間を設定する。
無引数で実行すると、現在のタイムアウトが何秒なのかを見ることができる。
discoverable-timeout
DiscoverableTimeout: 180 seconds
デフォルトは 180 秒 (3 分) になっている。この場合、discoverable on を実行してから 3 分間は他のデバイスから検索可能な状態となる、その後、自動的に discoverable off となり、他のデバイスから検索不可能な状態に戻る。
引数に時間 (単位: 秒) を指定するとタイムアウトの秒数を変更することができる。
discoverable-timeout 240
Changing discoverable-timeout 240 succeeded
[CHG] Controller XX:XX:XX:XX:XX:XX DiscoverableTimeout: 0x000000f0
なお、現在のタイムアウト時間は show でも確認できるが、16 進数表記になっていることに注意。
DiscoverableTimeout: 0x000000f0
0x000000f0 は 10 進数では 240 なので 240 秒 (4 分) になっていることがわかる。
ちなみに、他のデバイスからずっと検索可能な状態になっているのは好ましくないので、不便にならない範囲で可能な限りタイムアウトの時間は短くしたほうが良い。筆者はデフォルト (3 分) なら問題ないと思っているが、これ以上に長くしたい場合は注意すること。
scan
ペアリング・接続可能なデバイス一覧を検索する。
scan on|off
[NEW] Device XX:XX:XX:XX:XX:XX MacBook Pro 15
[NEW] Device XX:XX:XX:XX:XX:XX iPhone 7
...
...
...
いわゆる PC やスマートフォンの Bluetooth 設定画面の、ペアリング・接続可能なデバイス一覧を表示するのと同じ機能だが、余計なものも大量に表示されるので、接続したいデバイスをここで見つけるのは大変だ。
その場合は、いったん scan off して検索を終了したあと、後述する devices を実行すると、ペアリング・接続が可能なデバイス一覧がノイズなしで表示される。
逆に言うと、まず最初に scan on をしてデバイスを検索しないと devives には何も表示されないので、scan on → scan off → devices とするのが良いだろう。
devices
ペアリング・接続可能なデバイス一覧を表示する。
ただし事前に scan on で検索しておく必要がある。
devices
Device XX:XX:XX:XX:XX:XX iPhone 7
Device XX:XX:XX:XX:XX:XX MacBook Pro 15
利用可能な状態、つまり電源がオンになっていて、Bluetooth 機能もオンになっていて、かつ Bluetooth の電波の圏内にあるデバイス一覧が表示される。
pair
デバイスとペアリングする。
ただし事前に scan on して検索し、devices に表示されるようになったデバイス (利用可能な状態であるデバイス) しかペアリングできない。
pair <DEVICE_BD_ADDRESS>
Attempting to pair with XX:XX:XX:XX:XX:XX
[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
[CHG] Device XX:XX:XX:XX:XX:XX Modalias: bluetooth:xxxxxxxxxxxxxxx
[CHG] Device XX:XX:XX:XX:XX:XX UUIDs: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
[CHG] Device XX:XX:XX:XX:XX:XX UUIDs: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
[CHG] Device XX:XX:XX:XX:XX:XX UUIDs: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
[CHG] Device XX:XX:XX:XX:XX:XX UUIDs: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
[CHG] Device XX:XX:XX:XX:XX:XX UUIDs: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
[CHG] Device XX:XX:XX:XX:XX:XX UUIDs: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
[CHG] Device XX:XX:XX:XX:XX:XX UUIDs: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
[CHG] Device XX:XX:XX:XX:XX:XX UUIDs: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
[CHG] Device XX:XX:XX:XX:XX:XX UUIDs: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
[CHG] Device XX:XX:XX:XX:XX:XX ServicesResolved: yes
[CHG] Device XX:XX:XX:XX:XX:XX Paired: yes
Pairing successful
<DEVICE_BD_ADDRESS> はペアリングしたいデバイスの Bluetooth アドレスを指定する。これはデバイス側の Bluetooth 設定画面に記載されていることもあるが、調べ方がわからない場合は scan on で検索したときや devices で確認することができる。
その後、ペアリング可能な場合は、ペアリングしようとしているデバイス側で接続するかどうかのダイアログが表示されるはずなので、「接続」を選択する。
| Numeric output | No output | 
|---|---|
|  |  | 
一方、bluetoothctl 側では yes とタイプするか、ペアリングしようとしているデバイス側で表示されている 6 桁の認証コードをタイプすることでペアリングを行う。後述する agent の設定を変更している場合は何も入力しなくても良いようにすることもできる。
agent
ペアリングする際にどのように認証するかを指定する。
agent on|off|DisplayOnly|DisplayYesNo|KeyboardDisplay|KeyboardOnly|NoInputNoOutput
Agent registered/unregistered
ペアリングする際に、このデバイスと接続するかどうかを、デバイス同士でそれぞれ確認 (認証) するのだが、その際にどのように認証を行うのかを指定することができる。
まず、bluetoothctl 側でどのように確認を行うかは、以下の 3 種類ある。
| 種類 | 説明 | デフォルト | 
|---|---|---|
| No input | ペアリング時に yesまたはnoを要求しない | |
| Yes / No | ペアリング時に yesまたはnoを要求する | ✔ | 
| Keyboard | ペアリング時に、相手側のデバイスで表示された 6 桁の認証コードの入力を要求する | 
そして、ペアリングしたいデバイス側 (相手側) でどのように確認を行うかは、以下の 2 種類ある。
| 種類 | 説明 | デフォルト | 
|---|---|---|
| No output | 6 桁の認証コードを表示しない | |
| Numeric output | 6 桁の認証コードを表示する | ✔ | 
そして、上記の 3 + 2 種類の組み合わせによって、どれを指定するかが決定する。
| 相手側 | 相手側 | ||
|---|---|---|---|
| No output | Numeric output | ||
| bluetoothctl 側 | No input | NoInputNoOutput | DisplayOnly | 
| bluetoothctl 側 | Yes / No | NoInputNoOutput | DisplayYesNo | 
| bluetoothctl 側 | Keyboard | KeyboardOnly | KeyboardDisplay | 
ちなみに初期設定 (agent を一度もいじっていない状態) だと yes が指定されているようで、yes はデフォルトの組み合わせ (bluetoothctl 側が Yes / No で、相手側が Numeric output) なので、DisplayYesNo と同じ設定になっている。
逆に no を指定すると No input と No output の組み合わせなので、NoInputNoOutput と同じ設定になる。
...... と、ここまで説明したが、実際に試してみると挙動が異なっているものもあって、ちょっとよくわからない。まあ必要がなければいじらなくて良いと思う。確認がめんどくさい場合はとりあえず no を指定しておけば yes や no や 6 桁の認証コードを入力しなくて済む。
paired-devices
ペアリングされているデバイス一覧を表示する。
paired-devices
Device XX:XX:XX:XX:XX:XX MacBook Pro 15
pair でペアリングして、ペアリングが成功したものをここで確認することができる。
ここで表示されるのは選択されている (デフォルトの) コントローラにペアリングされているデバイス一覧なので、別のコントローラにペアリングされているデバイス一覧を見たかったら select でコントローラを変更する必要がある。
info
ペアリング・接続したデバイスの情報を表示する。
info <DEVICE_BD_ADDRESS>
Device XX:XX:XX:XX:XX:XX (public)
	Name: MacBook Pro 15
	Alias: MacBook Pro 15
	Class: 0x00000000
	Icon: computer
	Paired: yes
	Trusted: no
	Blocked: no
	Connected: no
	LegacyPairing: no
	UUID: Serial Port               (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: A/V Remote Control Target (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: A/V Remote Control        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: Headset AG                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: GN                        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: Handsfree Audio Gateway   (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	UUID: Vendor specific           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
	Modalias: bluetooth:xxxxxxxxxxxxxxx
	ManufacturerData Key: 0x0000
	ManufacturerData Value:
  XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX     .MacBookPro15,1
現在選択されている (デフォルトの) コントローラにペアリング・接続されているデバイスの情報しか表示されないので、別のコントローラでデバイスをペアリング・接続させている場合は select で切り替える必要がある。
connect
デバイスと接続する。
connect <DEVICE_BD_ADDRESS>
Attempting to connect to XX:XX:XX:XX:XX:XX
[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
Connection successful
[CHG] Device XX:XX:XX:XX:XX:XX ServicesResolved: yes
事前に pair でペアリングを行っておかないと接続できないのだが、もしペアリングをしていなかった場合は自動的にペアリングも行ってくれる。
なお、ペアリングが完了しているなら、ペアリングしているデバイス側で接続しようとすれば接続することができる。connect は bluetoothctl 側から接続を行いたいときに使う。
info を実行すると接続状況が変更されたことがわかる。
info <DEVICE_BD_ADDRESS>
  Device XX:XX:XX:XX:XX:XX (public)
  	Name: MacBook Pro 15
  	Alias: MacBook Pro 15
  	Class: 0x00000000
  	Icon: computer
  	Paired: yes
  	Trusted: no
  	Blocked: no
- 	Connected: no
+ 	Connected: yes
  	LegacyPairing: no
  	UUID: Serial Port               (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control Target (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Headset AG                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: GN                        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Handsfree Audio Gateway   (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Vendor specific           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	Modalias: bluetooth:xxxxxxxxxxxxxxx
  	ManufacturerData Key: 0x0000
  	ManufacturerData Value:
    XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX     .MacBookPro15,1
disconnect
デバイスを切断する。
disconnect <DEVICE_BD_ADDRESS>
Attempting to disconnect from XX:XX:XX:XX:XX:XX
[CHG] Device XX:XX:XX:XX:XX:XX ServicesResolved: no
Successful disconnected
[CHG] Device XX:XX:XX:XX:XX:XX Connected: no
ペアリング情報が削除されるわけではないので、ペアリングしているデバイス側から接続することもできる。bluetoothctl 側から接続したい場合は connect を実行すれば良い。
info を実行すると接続状況が変更されたことがわかる。
info <DEVICE_BD_ADDRESS>
  Device XX:XX:XX:XX:XX:XX (public)
  	Name: MacBook Pro 15
  	Alias: MacBook Pro 15
  	Class: 0x00000000
  	Icon: computer
  	Paired: yes
  	Trusted: no
  	Blocked: no
- 	Connected: yes
+ 	Connected: no
  	LegacyPairing: no
  	UUID: Serial Port               (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control Target (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Headset AG                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: GN                        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Handsfree Audio Gateway   (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Vendor specific           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	Modalias: bluetooth:xxxxxxxxxxxxxxx
  	ManufacturerData Key: 0x0000
  	ManufacturerData Value:
    XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX     .MacBookPro15,1
trust
デバイスを信頼する。
trust <DEVICE_BD_ADDRESS>
[CHG] Device XX:XX:XX:XX:XX:XX Trusted: yes
Changing XX:XX:XX:XX:XX:XX trust succeeded
信頼することによって、再起動した場合でもペアリング情報を保持することができる。
bluetoothctl [無銘闇人の備忘録] (アーカイブ版)
また、デバイスを信頼するとクライアント側から接続を確立することができる。デバイスを信頼していない場合、Linux マシン側 (ホスト) から bluetoothctl コマンドを実行しないと特定のデバイスに接続することができない (クライアントからホストに接続しようとしても失敗する) が、一度信頼しておくと次回以降はクライアントからも接続ができるようになる。ただし、Bluetooth のデーモン (や OS 自体) を再起動した場合、初回はホストから接続する必要がある。
info を実行すると信頼状況が変更されたことがわかる。
info <DEVICE_BD_ADDRESS>
  Device XX:XX:XX:XX:XX:XX (public)
  	Name: MacBook Pro 15
  	Alias: MacBook Pro 15
  	Class: 0x00000000
  	Icon: computer
  	Paired: yes
- 	Trusted: no
+ 	Trusted: yes
  	Blocked: no
  	Connected: yes
  	LegacyPairing: no
  	UUID: Serial Port               (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control Target (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Headset AG                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: GN                        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Handsfree Audio Gateway   (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Vendor specific           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	Modalias: bluetooth:xxxxxxxxxxxxxxx
  	ManufacturerData Key: 0x0000
  	ManufacturerData Value:
    XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX     .MacBookPro15,1
untrust
信頼したデバイスを信頼しない状態に戻す。
untrust <DEVICE_BD_ADDRESS>
[CHG] Device XX:XX:XX:XX:XX:XX Trusted: no
Changing XX:XX:XX:XX:XX:XX untrust succeeded
info を実行すると信頼状況が変更されたことがわかる。
info <DEVICE_BD_ADDRESS>
  Device XX:XX:XX:XX:XX:XX (public)
  	Name: MacBook Pro 15
  	Alias: MacBook Pro 15
  	Class: 0x00000000
  	Icon: computer
  	Paired: yes
- 	Trusted: yes
+ 	Trusted: no
  	Blocked: no
  	Connected: yes
  	LegacyPairing: no
  	UUID: Serial Port               (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control Target (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Headset AG                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: GN                        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Handsfree Audio Gateway   (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Vendor specific           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	Modalias: bluetooth:xxxxxxxxxxxxxxx
  	ManufacturerData Key: 0x0000
  	ManufacturerData Value:
    XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX     .MacBookPro15,1
block
デバイスをブロックする。
block <DEVICE_BD_ADDRESS>
[CHG] Device XX:XX:XX:XX:XX:XX Blocked: yes
Changing XX:XX:XX:XX:XX:XX block succeeded
[CHG] Device XX:XX:XX:XX:XX:XX ServicesResolved: no
[CHG] Device XX:XX:XX:XX:XX:XX Connected: no
info を実行するとブロック状況が変更されたことがわかる。
info <DEVICE_BD_ADDRESS>
  Device XX:XX:XX:XX:XX:XX (public)
  	Name: MacBook Pro 15
  	Alias: MacBook Pro 15
  	Class: 0x00000000
  	Icon: computer
  	Paired: yes
  	Trusted: yes
- 	Blocked: no
+ 	Blocked: yes
  	Connected: yes
  	LegacyPairing: no
  	UUID: Serial Port               (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control Target (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Headset AG                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: GN                        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Handsfree Audio Gateway   (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Vendor specific           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	Modalias: bluetooth:xxxxxxxxxxxxxxx
  	ManufacturerData Key: 0x0000
  	ManufacturerData Value:
    XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX     .MacBookPro15,1
unblock
ブロックされているデバイスのブロックを解除する。
unblock <DEVICE_BD_ADDRESS>
[CHG] Device XX:XX:XX:XX:XX:XX Blocked: no
Changing XX:XX:XX:XX:XX:XX unblock succeeded
info を実行するとブロック状況が変更されたことがわかる。
info <DEVICE_BD_ADDRESS>
  Device XX:XX:XX:XX:XX:XX (public)
  	Name: MacBook Pro 15
  	Alias: MacBook Pro 15
  	Class: 0x00000000
  	Icon: computer
  	Paired: yes
  	Trusted: yes
- 	Blocked: yes
+ 	Blocked: no
  	Connected: yes
  	LegacyPairing: no
  	UUID: Serial Port               (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control Target (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: A/V Remote Control        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Headset AG                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: GN                        (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Handsfree Audio Gateway   (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Vendor specific           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	Modalias: bluetooth:xxxxxxxxxxxxxxx
  	ManufacturerData Key: 0x0000
  	ManufacturerData Value:
    XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX     .MacBookPro15,1
remove
デバイスと切断し、ペアリング情報を削除する。
remove <DEVICE_BD_ADDRESS>
[CHG] Device XX:XX:XX:XX:XX:XX ServicesResolved: no
Device has been removed
[CHG] Device XX:XX:XX:XX:XX:XX Connected: no
[DEL] Device XX:XX:XX:XX:XX:XX MacBook Pro 15
info を実行するとデバイス情報が削除されたことがわかる。
info <DEVICE_BD_ADDRESS>
Device XX:XX:XX:XX:XX:XX not available
再度、ペアリング・接続を行いたい場合は pair をし直す必要がある。
set-alias
デバイスにエイリアスを設定する。
set-alias Mac
[CHG] Device XX:XX:XX:XX:XX:XX Alias: Mac
Changing Mac succeeded
paired-devices を実行するとエイリアスが変更されたことがわかる。
paired-devices
- Device XX:XX:XX:XX:XX:XX MacBook Pro 15
+ Device XX:XX:XX:XX:XX:XX Mac
もともとデバイスにはわかりやすい識別名が最初からついている (MacBook Pro 15 や iPhone 7 など) ことが多いので、あまり使う機会がなさそう。
それと、これはバグなのかわからないが、select でコントローラを変更しても、このエイリアスが適用されるのは、bluetoothctl コマンドを起動したときに指定されているデフォルトのコントローラに対してのみだ。なのであまり役には立たなさそうだ。
system-alias
コントローラにエイリアスを設定する。
system-alias Ubuntu
Changing Ubuntu succeeded
[CHG] Controller XX:XX:XX:XX:XX:XX Alias: Ubuntu
show を実行するとエイリアスが変更されたことがわかる。
show
  Controller XX:XX:XX:XX:XX:XX (public)
  	Name: BlueZ 5.53
- 	Alias: BlueZ 5.53
+ 	Alias: Ubuntu
  	Class: 0x00000000
  	Powered: yes
  	Discoverable: no
  	DiscoverableTimeout: 0x00000000
  	Pairable: yes
  	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Generic Attribute Profile (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Generic Access Profile    (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Handsfree                 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Audio Sink                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	Modalias: usb:xxxxxxxxxxxxxxx
  	Discovering: no
  Advertising Features:
  	ActiveInstances: 0x00
  	SupportedInstances: 0x00
  	SupportedIncludes: tx-power
  	SupportedIncludes: appearance
  	SupportedIncludes: local-name
エイリアスが変更されたことで、list を実行したときにコントローラが識別しやすくなる。
list
Controller XX:XX:XX:XX:XX:XA Ubuntu [default]
Controller XX:XX:XX:XX:XX:XB BlueZ 5.53
Controller XX:XX:XX:XX:XX:XC BlueZ 5.53
Controller XX:XX:XX:XX:XX:XD BlueZ 5.53
Controller XX:XX:XX:XX:XX:XE BlueZ 5.53
Controller XX:XX:XX:XX:XX:XF BlueZ 5.53
reset-alias
system-alias で設定したエイリアスを削除する。
reset-alias
Changing  succeeded
[CHG] Controller XX:XX:XX:XX:XX:XX Alias: BlueZ 5.53
show を実行するとエイリアスがもとに戻ったことがわかる。
  Controller XX:XX:XX:XX:XX:XX (public)
  	Name: BlueZ 5.53
- 	Alias: Ubuntu
+ 	Alias: BlueZ 5.53
  	Class: 0x00000000
  	Powered: yes
  	Discoverable: no
  	DiscoverableTimeout: 0x00000000
  	Pairable: yes
  	UUID: Audio Source              (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Generic Attribute Profile (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Generic Access Profile    (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: PnP Information           (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Handsfree                 (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	UUID: Audio Sink                (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
  	Modalias: usb:xxxxxxxxxxxxxxx
  	Discovering: no
  Advertising Features:
  	ActiveInstances: 0x00
  	SupportedInstances: 0x00
  	SupportedIncludes: tx-power
  	SupportedIncludes: appearance
  	SupportedIncludes: local-name
エイリアスが 2 つあってややこしい (set-alias と system-alias) が、reset-alias は system-alias で設定したコントローラのエイリアスを削除するものであり、set-alias で設定したデバイスのエイリアスは削除しない。
デバイスのエイリアス (set-alias) はコマンドで削除することができないようなので、いったん remove でペアリング情報を削除してから、pair で再ペアリングしないともとに戻らない。
default-agent
ペアリングなどをしたいデバイス側からリクエストがあったときに、どのコントローラでそのリクエストを受けるのかを指定する。
default-agent
Default agent request successful
このコマンドは、デバイスとのペアリングなどをすべて bluetoothctl 側で操作する際には不要だ。
しかし、逆にペアリングなどをしたいデバイス側から bluetoothctl に対してペアリング等の操作を行う場合には、select などは使えない (bluetoothctl を操作するわけではないため) ので、その場合にどのコントローラでそのリクエスト (ペアリング等) を受けるのかを予め指定しておくことができる、というものらしい。
advertise *2
これに関しては調べてもよくわからなかった。
その他、便利な使い方
bluetoothctl コマンドでいったん bluetoothctl のインタラクティブインターフェースに入ってから操作を行うのが基本だが、以下のようにするとシェルから直接 bluetoothctl のコマンドを実行することもできる。
bluetoothctl -- list
上記は、シェルで bluetoothctl を実行したあとに、bluetoothctl のインターフェースで list を実行して exit したのと同じである。
上記の記法だと 1 つのコマンドしか実行できないが、以下のようにすると複数の bluetoothctl のコマンドを実行することもできる。
{
  printf "show\n\n"
  printf "paired-devices\n\n"
} | bluetoothctl
シェルスクリプト内で bluetoothctl のコマンドを実行したいときなどに便利だろう。