A simple interactive tool to connect, pair, etc bluetooth devices via dmenu
Go to file
Alexander Bocken 700e1fec43
update to new paired-devices cmd
2022-09-29 16:17:32 +02:00
LICENSE Initial Project Version 2020-04-18 21:26:30 +02:00
Makefile externalize config from script 2021-07-02 13:21:13 +02:00
README.md fix readme 2021-08-24 16:40:41 +02:00
bt update to new paired-devices cmd 2022-09-29 16:17:32 +02:00
config cleanup 2021-07-04 19:59:23 +02:00



A simple interactive tool to:

  • connect to already paired devices
  • disconnect bluetooth devices
  • pair new ones
  • unpair already paired devices
  • turn bluetooth on/off
  • blacklist paired devices to not be listed in connection selection
  • trust devices
  • create alias names for devices

all via dmenu. Should be easily extendable by editing the actions string.

cropped preview


Edit the Makefile to reflect your preffered installation destination. Then, simply

make install

Warning: sudo make install will not install correctly. Will be fixed in the future.

Afterwards, invoking bt will start the menu.

Clear blacklist/pairlist

Since bluetoothctl paired-devices seems to be hugely unreliable in listing paired devices, bthandler has a seperate list for all devices paired through bthandler. There is also a blacklist available to not display certain devices, which might be useful for autoconnection Bluetooth mice for example.

To clear these files, simply run

make clear

and these files will be reset to their inital, empty state.

Note: If for some reason bluetoothctl paired-devices works for you dont worry, bthandler lists all devices returned from bluetoothctl and it's own paired devices list. (Duplicates are not displayed.)


To uninstall you might follow that it's a simple

make uninstall

If you have troubles with an uninstall, additionally run which bt | xargs rm.

files created by bthandler

There are four files which bthandler looks at, all located in ~/.config/bt (also respects $XDG_CONFIG_HOME, if set):

  • config
  • paired
  • alias
  • blacklist

They're configurable via bt edit <file> or by navigating to the corresponding location manually.


A shell file that gets read at the beginning of every invocation of bt. Mostly used to set variables such as the scan period, whether to automatically trust devices, etc.. Also defines the location of the following three files.


A hardcoded list of all paired devices. Gets updated even if devices are not paired through bt. This exists mostly because of historical unreliable output of bluetoothctl paired-devices. The syntax is exactly the same as that command:

Device <MAC-adress> <name>

With spaces as delimiter.


A file where one can manually set alias names for specific devices. Useful if multiple devices of the same device name are used on the PC. The syntax is:

<MAC-adress> <new alias name>

With spaces as delimiter.


A list of devices not to list in bt even though they're paired. Useful for devices that usually automatically connect. The syntax is:

<alias name/name>

Where the alias name takes precedence if present.


If bt takes long to show a menu

consider turning off AUTOSCAN. If there are many devices around you autoscanning will add them all to your bluetoothctl devices list. Every device on that list get's checked whether it's connected at startup.

This should only be an issue if bluetoothctl scan off is unreliable for you though.


  • start scanning for new devices immediately at execution to save time when pairing new devices
  • auto-trust newly paired devices/trust device via dmenu (changeable via the AUTOTRUST variable in the beginning of bt, menu display adjusts accordingly)
  • blacklist devices via dmenu (action is hidden, but typing blacklist as your choice will reveal the menu)
  • update bthandler internal paired devices list if something new shows up via bluetoothctl paired-devices not already listed in the paired devices file
  • only show disconnect option if devices are already connected
  • only list connected devices to disconnect from, not all paired devices
  • only list not trusted devices in trust menu
  • selecting already connected device disconnects it
  • create alias for devices via dmenu