Install bluetooth software
$ apt install firmware-misc-nonfree bluez bluez-tools blueman screen
linux user groups: bluetooth, lp, netdev, sudo, and plugdev
add linux user to group
# usermod -aG sudo username
check your bluetooth adapter has been recognize by debian
$ lsusb
...
Bus 001 Device 003: ID 0489:e0cd Foxconn / Hon Hai MediaTek Bluetooth Adapter
...
pair your device, if you don't hook it in boot, you need to rebind after boot.
$ bluetoothctl pair 86:67:7A:1D:C2:E3
Attempting to pair with 86:67:7A:1D:C2:E3
[CHG] Device 86:67:7A:1D:C2:E3 Connected: yes
Failed to pair: org.bluez.Error.AuthenticationFailed
using bluetoothctl to handle bluetooth password
$ bluetoothctl
Agent registered
[bluetoothctl]> agent KeyboardOnly
Agent is already registered
[bluetoothctl]> default-agent
Default agent request successful
[bluetoothctl]> scan on
SetDiscoveryFilter success
Discovery started
[CHG] Controller BC:F4:D4:12:4C:28 Discovering: yes
[NEW] Device 4D:F9:CE:48:C4:1B 4D-F9-CE-48-C4-1B
[NEW] Device 62:FE:E1:08:CD:73 62-FE-E1-08-CD-73
[NEW] Device 6D:AC:09:7B:A7:F3 6D-AC-09-7B-A7-F3
[NEW] Device 86:67:7A:1D:C2:E3 RPP02N
[bluetoothctl]> pair 86:67:7A:1D:C2:E3
Attempting to pair with 86:67:7A:1D:C2:E3
[CHG] Device 86:67:7A:1D:C2:E3 Connected: yes
[CHG] Device 86:67:7A:1D:C2:E3 Bonded: yes
[CHG] Device 86:67:7A:1D:C2:E3 Modalias: usb:v05ACp0239d0644
[CHG] Device 86:67:7A:1D:C2:E3 ServicesResolved: yes
[CHG] Device 86:67:7A:1D:C2:E3 Paired: yes
Pairing successful
[DEL] Device 6D:AC:09:7B:A7:F3 6D-AC-09-7B-A7-F3
[CHG] Device 86:67:7A:1D:C2:E3 ServicesResolved: no
[CHG] Device 86:67:7A:1D:C2:E3 Connected: no
[DEL] Device 4D:F9:CE:48:C4:1B 4D-F9-CE-48-C4-1B
[DEL] Device 62:FE:E1:08:CD:73 62-FE-E1-08-CD-73
[bluetoothctl]> trust 86:67:7A:1D:C2:E3
[CHG] Device 86:67:7A:1D:C2:E3 Trusted: yes
Changing 86:67:7A:1D:C2:E3 trust succeeded
busctl output
$ busctl introspect org.bluez /org/bluez/hci0/dev_86_67_7A_1D_C2_E3
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
org.bluez.Device1 interface - - -
.CancelPairing method - - -
.Connect method - - -
.ConnectProfile method s - -
.Disconnect method - - -
.DisconnectProfile method s - -
.Pair method - - -
.Adapter property o "/org/bluez/hci0" emits-change
.Address property s "86:67:7A:1D:C2:E3" emits-change
.AddressType property s "public" emits-change
.AdvertisingData property a{yv} - emits-change
.AdvertisingFlags property ay - emits-change
.Alias property s "RPP02N" emits-change writable
.Appearance property q - emits-change
.Blocked property b false emits-change writable
.Bonded property b true emits-change
.Class property u 263808 emits-change
.Connected property b false emits-change
.Icon property s "printer" emits-change
.LegacyPairing property b false emits-change
.ManufacturerData property a{qv} - emits-change
.Modalias property s "usb:v05ACp0239d0644" emits-change
.Name property s "RPP02N" emits-change
.Paired property b true emits-change
.RSSI property n - emits-change
.ServiceData property a{sv} - emits-change
.ServicesResolved property b false emits-change
.Sets property a{oa{sv}} - emits-change
.Trusted property b true emits-change writable
.TxPower property n - emits-change
.UUIDs property as 7 "00000001-0000-1000-8000-00805f9b34fb… emits-change
.WakeAllowed property b - emits-change writable
org.freedesktop.DBus.Introspectable interface - - -
.Introspect method - s -
org.freedesktop.DBus.Properties interface - - -
.Get method ss v -
.GetAll method s a{sv} -
.Set method ssv - -
.PropertiesChanged signal sa{sv}as - -
bind to rfcomm (sudo), if you don't hook it in boot, you need to rebind after boot.
# rfcomm bind rfcomm0 86:67:7A:1D:C2:E3
or with sudo
$ sudo rfcomm bind rfcomm0 86:67:7A:1D:C2:E3
your dev access point
$ ls /dev/ | grep rfcomm
rfcomm0
get your bluetooth device info
$ bluetoothctl info 86:67:7A:1D:C2:E3
Device 86:67:7A:1D:C2:E3 (public)
Name: RPP02N
Alias: RPP02N
Class: 0x00040680 (263808)
Icon: printer
Paired: yes
Bonded: yes
Trusted: yes
Blocked: no
Connected: no
LegacyPairing: no
UUID: SDP (00000001-0000-1000-8000-00805f9b34fb)
UUID: RFCOMM (00000003-0000-1000-8000-00805f9b34fb)
UUID: L2CAP (00000100-0000-1000-8000-00805f9b34fb)
UUID: Serial Port (00001101-0000-1000-8000-00805f9b34fb)
UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)
UUID: Unknown (000018f0-0000-1000-8000-00805f9b34fb)
UUID: Vendor specific (e7810a71-73ae-499d-8c15-faa9aef0c3f2)
Modalias: usb:v05ACp0239d0644
Optional: to let systemd handling pair device
create/edit bluetooth-printer.service (or any name you wish), at /etc/systemd/system/, e.g /etc/systemd/system/bluetooth-printer.service.
[Unit]
Description=Bind Bluetooth Thermal Printer to rfcomm0
After=bluetooth.service
Requires=bluetooth.service
[Service]
Type=oneshot
ExecStart=/usr/bin/rfcomm bind rfcomm0 86:67:7A:1D:C2:E3
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
After that use systemd to handle pairing
- sudo systemctl daemon-reload
- sudo systemctl enable bluetooth-printer.service
- sudo systemctl start bluetooth-printer.service
- systemctl status bluetooth-printer.service
you can try previous code https://dedetoknotes.blogspot.com/2026/06/java-using-thermal-printer-6106-80mm.html by change
devicePath = "/dev/usb/lp1"
to
devicePath = "/dev/rfcomm0"
Credit: https://www.freeformatter.com/html-escape.html#before-output to esc html