Bluetooth-ul în Linux este gestionat prin stiva BlueZ, care include serviciul de sistem bluetooth, utilitarul în linie de comandă bluetoothctl și suportul la nivel de kernel prin modulele bluetooth și btusb. Articolul de față urmează structura Arch Wiki și adaptează informația pentru toate distribuțiile principale.
Driverul generic de Bluetooth este modulul kernel btusb. Verifică dacă este încărcat:
lsmod | grep btusb
Dacă nu apare, încarc-ă manual:
sudo modprobe btusb
Instalează pachetele de bază. bluez furnizează stiva de protocol, bluez-utils furnizează bluetoothctl:
sudo apt install bluez bluez-tools
sudo pacman -S bluez bluez-utils
sudo dnf install bluez bluez-tools
sudo zypper install bluez bluez-tools
sudo emerge --ask net-wireless/bluez
sudo apk add bluez bluez-deprecated
sudo xbps-install -S bluez
Pe Gentoo, activează mai întâi suportul Bluetooth global prin USE flag dacă nu l-ai activat deja, apoi actualizează sistemul:
# În /etc/portage/make.conf: USE="bluetooth" sudo emerge --ask --changed-use --deep @world
Pornește și activează serviciul:
systemd (Debian, Ubuntu, Mint, Arch, Fedora, openSUSE):
sudo systemctl enable --now bluetooth
OpenRC (Gentoo cu OpenRC, Alpine cu OpenRC):
sudo rc-update add bluetooth default sudo rc-service bluetooth start
runit (Void Linux):
sudo ln -s /etc/sv/bluetoothd /var/service/
Notă: Câteva situații speciale de reținut:
Unele adaptoare Bluetooth sunt integrate cu placa Wi-Fi (ex. Intel Centrino mai vechi). Pe acestea, Wi-Fi-ul trebuie activat primul (de obicei printr-o combinație de taste pe laptop) pentru ca kernelul să vadă adaptorul Bluetooth. Unele plăci Broadcom intră în conflict cu adaptorul de rețea - asigură-te că dispozitivul Bluetooth se conectează înaintea serviciului de rețea la boot.bluetooth.servicenecesită existența directorului/sys/class/bluetooth, creat de modulul kernelbluetooth. Dacă directorul nu există, verifică dacă modulul este încărcat:lsmod | grep bluetooth.
Opt unelte BlueZ au fost depreciate și eliminate din bluez-utils: hcitool, hciconfig, hcidump, rfcomm, ciptool, sdptool, gatttool, hciattach. Nu primesc actualizări și pot eșua silențios pe hardware modern. Înlocuitorul primar este bluetoothctl, completat de btmgmt și btmon.
Tabel cu înlocuitorii recomandați:
| Unealtă depreciată | Înlocuitor recomandat |
gatttool | btgatt-client, D-Bus Gatt API |
hciattach | btattach |
hciconfig | btmgmt (și bluetoothctl) |
hcidump | btmon (și btsnoop) |
hcitool | lipsă; D-Bus Device API disponibil |
rfcomm | lipsă; implementează cu D-Bus Profile/ProfileManager API |
sdptool | lipsă; funcționalitate dispersată în D-Bus |
Dacă ai nevoie totuși de ele (urmezi un tutorial mai vechi, ai un caz specific):
sudo apt install bluez-hcidump
sudo pacman -S bluez-deprecated-tools
sudo dnf install bluez-deprecated-tools
sudo zypper install bluez-deprecated-tools
# Activează USE flag: deprecated sudo emerge --ask net-wireless/bluez
Începând din 2024, bluez-obex și bluez-mesh sunt separate de bluez. Dacă vrei să trimiți sau să primești fișiere prin Bluetooth, trebuie instalat separat și serviciul de utilizator obex.service activat:
sudo apt install bluez-obexd systemctl --user enable --now obex.service
sudo pacman -S bluez-obex systemctl --user enable --now obex.service
sudo dnf install bluez-obexd systemctl --user enable --now obex.service
sudo zypper install bluez-obexd systemctl --user enable --now obex.service
# Activează USE flag: obex sudo emerge --ask net-wireless/bluez
gnome-bluetooth-3.0 furnizează backend-ul, gnome-shell furnizează applet-ul, gnome-control-center furnizează panoul grafic. Poți lansa direct bluetooth-sendto pentru a trimite fișiere. Primirea de fișiere funcționează numai cât timp panoul Bluetooth este deschis.sudo apt install blueman
sudo pacman -S blueman # sau pentru KDE: sudo pacman -S bluedevil
sudo dnf install blueman
sudo zypper install blueman
sudo emerge --ask net-wireless/blueman
sudo apk add blueman
sudo xbps-install -S blueman
Notă: Înainte de a folosi un dispozitiv Bluetooth, asigură-te că nu este blocat de rfkill:rfkill list bluetooth. Dacă apareSoft blocked: yes, ruleazăsudo rfkill unblock bluetooth.
Această secțiune descrie configurarea directă a BlueZ prin bluetoothctl. Dacă folosești o interfață grafică (GNOME Bluetooth, Blueman etc.), pașii următori nu sunt necesari.
Procedura exactă depinde de dispozitivele implicate și de capacitățile lor de intrare. Mai jos este conturul general al asocierii unui dispozitiv cu bluetoothctl.
Pornești sesiunea interactivă și tastezi help pentru lista de comenzi disponibile:
bluetoothctl
Pașii în cadrul promptului [bluetooth]#:
select MAC_addresspower on dacă este oprit - vezi Starea implicită a adaptoruluidevices pentru a vedea adresele MAC ale dispozitivelor cunoscute dejascan on dacă dispozitivul nu este încă în listăagent on sau alege un agent specific (apasă Tab de două ori după agent pentru lista agenților disponibili); agentul gestionează codul de asociere Bluetoothpair MAC_address pentru asociere (Tab completează adresa)trust MAC_address dacă dispozitivul nu are PIN, pentru a-i permite reconectarea automatăconnect MAC_address pentru a stabili conexiuneaO sesiune completă de exemplu:
$ bluetoothctl [NEW] Controller 00:10:20:30:40:50 hostname [default] [bluetooth]# agent KeyboardOnly Agent registered [bluetooth]# default-agent Default agent request successful [bluetooth]# power on Changing power on succeeded [CHG] Controller 00:10:20:30:40:50 Powered: yes [bluetooth]# scan on Discovery started [CHG] Controller 00:10:20:30:40:50 Discovering: yes [NEW] Device 00:12:34:56:78:90 device name [CHG] Device 00:12:34:56:78:90 LegacyPairing: yes [bluetooth]# pair 00:12:34:56:78:90 Attempting to pair with 00:12:34:56:78:90 [CHG] Device 00:12:34:56:78:90 Connected: yes [CHG] Device 00:12:34:56:78:90 Connected: no [CHG] Device 00:12:34:56:78:90 Connected: yes Request PIN code [agent] Enter PIN code: 1234 [CHG] Device 00:12:34:56:78:90 Paired: yes Pairing successful [CHG] Device 00:12:34:56:78:90 Connected: no [bluetooth]# connect 00:12:34:56:78:90 Attempting to connect to 00:12:34:56:78:90 [CHG] Device 00:12:34:56:78:90 Connected: yes Connection successful
Sfat: Pentru a automatiza comenzibluetoothctl, foloseștiecho -e „command1\ncommand2\n“ | bluetoothctlsaubluetoothctl – command.
Toată configurația BlueZ - dispozitivele asociate, cheile de pairing, setările trust - se află în /var/lib/bluetooth/. Structura directorului:
/var/lib/bluetooth/
└── AA:BB:CC:DD:EE:FF/ ← MAC-ul adaptorului tău Bluetooth
├── settings ← setările controlerului
├── cache/ ← cache cu dispozitivele descoperite
└── XX:XX:XX:XX:XX:XX/ ← câte un director per dispozitiv asociat
└── info ← cheile și metadata dispozitivului
Backup și restaurare completă:
# Backup sudo cp -r /var/lib/bluetooth/ ~/bluetooth-backup-$(date +%Y%m%d)/ # Restaurare (după reinstalare, pe alt sistem cu același adaptor) sudo cp -r ~/bluetooth-backup-20250101/ /var/lib/bluetooth/ sudo systemctl restart bluetooth
Dispozitivele asociate anterior se vor reconecta automat fără re-pairing.
Pe sisteme cu dual boot Linux+Linux, copierea sau symlinking-ul întregului director /var/lib/bluetooth/MAC_ADAPTOR/ face toate dispozitivele să funcționeze pe ambele instalări fără re-pairing.
Pe sisteme cu Windows sau macOS, problema este că fiecare sistem de operare generează propria cheie de asociere și o suprascrie pe cea de pe dispozitiv. Soluția este sincronizarea cheilor.
Notă: Unele dispozitive, precum Logitech MX Master și Logitech 604 Lightspeed, incrementează un octet al adresei MAC (de obicei ultimul) la fiecare nouă asociere. Verifică dacă dispozitivul tău face asta pentru a ține cont la final.
/var/lib/bluetooth/)bluetooth.serviceCheia de pairing poate fi extrasă fie din Windows, fie direct din Linux (fără a porni Windows).
Extragere din Windows cu PsExec:
Cheia din registru este accesibilă numai prin contul SYSTEM, deci ai nevoie de PsExec din Microsoft Sysinternals. Dintr-un terminal de administrator:
.\PsExec64.exe -s -i regedit.exe
Navighezi în registry la:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys
Există câte un subkey per adaptor Bluetooth (după adresa MAC). În subkey-ul adaptorului găsești perechi nume-valoare pentru fiecare dispozitiv asociat. Dacă dispozitivul are și propriul subkey (cu valori de tipul LTK, IRK etc.), este un dispozitiv Bluetooth 5.1. Dacă are numai o pereche nume-valoare simplă, este un dispozitiv clasic. Exportezi subkey-ul adaptorului ca fișier .reg și îl muți în Linux.
Extragere din Linux cu chntpw:
sudo apt install chntpw
sudo pacman -S chntpw
sudo dnf install chntpw
sudo zypper install chntpw
Notă: Dacă partiția Windows este criptată cu BitLocker, nu poți accesa registrul din Linux cuchntpw.
Montezi partiția Windows, navighezi la registry hive și pornești chntpw:
cd /path/to/windows/Windows/System32/config chntpw -e SYSTEM
În consola chntpw:
> cd CurrentControlSet\Services\BTHPORT\Parameters\Keys # (sau ControlSet001 în loc de CurrentControlSet - verifică cu ls) > ls > cd MAC_adaptor > ls > cd MAC_dispozitiv > ls
Dacă dispozitivul nu este Bluetooth 5.1, vei vedea o singură valoare. Afișezi hexdump-ul cheii:
> hex ab12cd34ef56 :00000 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
Dacă dispozitivul este Bluetooth 5.1, vei vedea mai multe valori: LTK, KeyLength, ERand, EDIV, IRK, Address etc. Afișezi cu hex VALOARE fiecare în parte.
macOS Monterey sau mai nou:
Deschizi Keychain Access (pe Tahoe și mai nou: Passwords), cauți Bluetooth, sortezi după dată. Deschizi intrarea, dai click pe „Show password“, copiezi conținutul XML și îl salvezi în ~/bt_keys.txt.
High Sierra sau mai nou:
sudo defaults read /private/var/root/Library/Preferences/com.apple.bluetoothd.plist LinkKeys > ~/bt_keys.txt
Sierra sau mai vechi:
sudo defaults read /private/var/root/Library/Preferences/blued.plist LinkKeys > ~/bt_keys.txt
Notă: Pe versiunile mai vechi de macOS (High Sierra și anterioare), cheile sunt stocate în format inversat și trebuie inversate înainte de aplicare. Exemplu:98 54 2f aa bb cc dd ee ff gg hh ii jj kk ll mmdevineMM LL KK JJ GG FF EE DD CC BB AA 2F 54 98. Inversare cu Python:key = „98 54 2f…“; „ “.join(reversed(key.split()))
Devii root și navighezi la directorul adaptorului:
sudo -i cd /var/lib/bluetooth/MAC_ADAPTOR/MAC_DISPOZITIV
Notă: Dacă dispozitivul incrementează adresa MAC la fiecare asociere (Logitech MX Master etc.), mută directorul la noua adresă:mv MAC_VECHI MAC_NOU. Copiezi adresa din Windows sau o incrementezi manual - fiecare octet este un număr hexazecimal de două cifre.
Dispozitive clasice (Bluetooth ≤ 4.0, fără subkey 5.1):
Editezi fișierul info și modifici valoarea Key din secțiunea [LinkKey]. Toate literele trebuie să fie majuscule, fără spații:
[LinkKey] Key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Dispozitive Bluetooth 5.1:
Transformările necesare diferă în funcție de dispozitiv. Mai jos sunt regulile generale și cele pentru cele mai comune dispozitive. Utilitare Python pentru conversii:
# Eliminare spații "key_value".replace(" ", "") # Inversare octeți ERand = " 63 02 84 B8 5D 40 44 DF " ERand = list(reversed(ERand.strip().split())) # Conversie la decimal (după inversare) int("".join(ERand), 16) # => 16088054540146049635 # Conversie base64 → hex (macOS) import base64, binascii binascii.hexlify(base64.decodebytes(b'...')).upper() # Conversie macOS Encrypted Diversifier import struct, base64 struct.unpack('<H', base64.decodebytes(b'...')) # Conversie macOS Random Number struct.unpack('<Q', base64.decodebytes(b'...'))
Exemplu general: un LTK 48 4D AF CD 0F 92 22 88 0A 52 9A F4 76 DA 8B 94 devine Key=484DAFCD0F9222880A529AF476DA8B94; un ERand 63 02 84 B8 5D 40 44 DF devine Rand=16088054540146049635; un EDIV 37520 devine EDiv=37520.
Tabel cu transformările per categorie de dispozitiv:
| Dispozitiv | Cheie Windows | Fișier destinație |
|---|---|---|
| Logitech MX Anywhere 3S, MX Master 3/3S, MX Keys, MX Keys Mini, MX Mechanical, Xbox One S Wireless | IRK: elimini spațiile | IdentityResolvingKey.Key |
| (același grup) | LTK: elimini spațiile | SlaveLongTermKey.Key și PeripheralLongTermKey.Key |
| Logitech MX Anywhere 2S, ELECOM Bitra | IRK: elimini spațiile | IdentityResolvingKey.Key |
| (același grup) | CSRK: elimini spațiile | LocalSignatureKey.Key |
| (același grup) | LTK: elimini spațiile | LongTermKey.Key |
| (același grup) | KeyLength: decimal | LongTermKey.EncSize |
| (același grup) | EDIV: decimal | LongTermKey.EDiv |
| (același grup) | ERand: inversezi octeții, convertești la decimal | LongTermKey.Rand |
| ThinkPad TrackPoint Keyboard II, Pebble M350, Logitech G604 | IRK: inversezi octeții | IdentityResolvingKey.Key |
| (același grup) | LTK: elimini spațiile | LongTermKey.Key |
| (același grup) | ERand: inversezi octeții, convertești la decimal | LongTermKey.Rand |
| (același grup) | EDIV: inversezi octeții, convertești la decimal | LongTermKey.EDiv |
| Alte dispozitive | LTK: elimini spațiile | LongTermKey.Key |
| Xbox wireless controller | LTK: elimini spațiile | SlaveLongTermKey.Key |
Exemplu pentru un controller Xbox One S (fișierul info după modificare):
[IdentityResolvingKey] Key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [PeripheralLongTermKey] Key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [SlaveLongTermKey] Key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Repornești serviciul bluetooth (și PulseAudio dacă îl folosești):
sudo systemctl restart bluetooth # dacă folosești PulseAudio: pulseaudio -k && pulseaudio --start
Notă: În funcție de managerul Bluetooth folosit, poate fi necesară repornirea completă a sistemului pentru reconectare.
Începând cu BlueZ 5.65, comportamentul implicit este pornirea automată a tuturor adaptoarelor la pornirea serviciului sau la revenirea din suspend. Dacă vrei să dezactivezi (ex. pentru a economisi baterie pe laptop), editează /etc/bluetooth/main.conf:
[Policy] AutoEnable=false
Adaptorul poate fi pornit manual oricând cu power on din bluetoothctl.
Dacă dispozitivul trebuie să fie mereu vizibil și direct conectabil:
[General] DiscoverableTimeout = 0
Pentru a permite tastaturii, mouse-ului sau altor dispozitive Bluetooth să trezească sistemul din suspend, verifică mai întâi că Wake from USB este activat în BIOS/UEFI (în multe cazuri, Bluetooth-ul de pe placă este un dispozitiv USB intern). Adaugă o regulă udev pentru adaptoare Bluetooth USB (Wireless Controller Base Class, Bluetooth Programming Interface):
sudo tee /etc/udev/rules.d/91-bluetooth-wakeup.rules << 'EOF' ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", \ ATTR{bDeviceClass}=="e0", \ ATTR{bDeviceProtocol}=="01", \ ATTR{bDeviceSubClass}=="01", \ ATTR{power/wakeup}="enabled" EOF sudo udevadm control --reload-rules
Implicit, BlueZ folosește modul dual (ControllerMode=dual) - atât Bluetooth clasic (BR/EDR) cât și Low Energy (LE). Dacă vrei să forțezi protocolul clasic (ex. pentru a simplifica dual boot pairing cu un dispozitiv Bluetooth 3.0):
[General] ControllerMode=bredr
BlueZ ține funcțiile noi în spatele unor opțiuni experimentale. Printre cele disponibile astfel: raportarea nivelului de baterie pentru căști mai vechi. Activează în /etc/bluetooth/main.conf:
[General] # Activează interfețele D-Bus experimentale Experimental = true # Activează funcțiile kernel experimentale KernelExperimental = true
Alternativ, prin fișier drop-in systemd:
sudo mkdir -p /etc/systemd/system/bluetooth.service.d/ sudo tee /etc/systemd/system/bluetooth.service.d/override.conf << 'EOF' [Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd --experimental EOF sudo systemctl daemon-reload sudo systemctl restart bluetooth
Notă: Modul experimental poate împiedica unele căști (ex. Sony WH-1000XM3) să se conecteze automat.bluez-meshtrebuie activat separat dacă îl folosești.
Audio Bluetooth necesită un pas suplimentar față de instalarea BlueZ de bază - integrarea cu serverul de sunet. Vezi și pagina dedicată căștilor Bluetooth pentru mai multe detalii.
| Profil | Descriere | Calitate | Microfon |
| A2DP | Redare stereo de calitate înaltă | Înaltă (SBC, SBC-XQ, AAC, LDAC, AptX, AptX HD) | Nu |
| HSP | Headset Profile clasic, mono | Scăzută | Da |
| HFP | Hands-Free Profile | Scăzută/medie (mSBC) | Da |
| LE Audio / BAP | Standard nou, LC3 codec | Înaltă | Da |
Kernelul, BlueZ 5 și PipeWire suportă toate trei profilele principale. PulseAudio și ALSA suportă numai A2DP și HFP/HSP. LE Audio (LC3) este experimental în BlueZ și dezactivat implicit (din feb. 2025).
PipeWire, începând cu v0.3.19, activează suportul Bluetooth implicit. Oferă suport A2DP cu SBC/SBC-XQ, AptX, LDAC, AAC și HFP/HSP out-of-the-box.
sudo apt install pipewire pipewire-pulse libspa-0.2-bluetooth wireplumber systemctl --user enable --now pipewire pipewire-pulse wireplumber
sudo pacman -S pipewire pipewire-pulse wireplumber # Se pornesc automat ca servicii de utilizator
# Inclus implicit, adaugă: sudo dnf install pipewire-pulseaudio wireplumber
sudo zypper install pipewire pipewire-pulseaudio wireplumber
sudo emerge --ask media-video/pipewire media-video/wireplumber
sudo apk add pipewire pipewire-pulse wireplumber
sudo xbps-install -S pipewire wireplumber
Dacă folosești PulseAudio în loc de PipeWire, instalează modulul Bluetooth și repornește daemonul:
sudo apt install pulseaudio pulseaudio-module-bluetooth pulseaudio -k
sudo pacman -S pulseaudio pulseaudio-bluetooth pulseaudio -k
sudo dnf install pulseaudio pulseaudio-module-bluetooth pulseaudio -k
Dacă folosești PulseAudio la nivel de sistem (system-wide), asigură-te că utilizatorul care rulează daemonul (de obicei pulse) este în grupul lp și că modulele Bluetooth sunt încărcate în /etc/pulse/system.pa:
load-module module-bluetooth-policy load-module module-bluetooth-discover
Adaugă opțional load-module module-switch-on-connect dacă vrei comutare automată pe dispozitivul Bluetooth la conectare.
BlueZ 5 nu mai are integrare directă cu ALSA. Dacă nu poți sau nu vrei să folosești PulseAudio/PipeWire, instalează bluez-alsa (bluez-alsa-git din AUR pe Arch), pornește serviciul bluealsa și adaugă utilizatorul în grupul audio. Testezi cu:
aplay -D bluealsa:SRV=org.bluealsa,DEV=XX:XX:XX:XX:XX:XX,PROFILE=a2dp FILE.wav
Și adaugi în ~/.asoundrc:
defaults.bluealsa {
service "org.bluealsa"
device "XX:XX:XX:XX:XX:XX"
profile "a2dp"
}
Pentru comunicare serială Bluetooth cu module HC-05, HC-06:
Asociezi dispozitivul cu bluetoothctl ca de obicei, instalezi bluez-deprecated-tools pentru rfcomm, apoi legi adresa MAC la un terminal tty:
sudo rfcomm bind rfcomm0 MAC_address_of_Bluetooth_device
Acum poți deschide /dev/rfcomm0 pentru comunicare serială:
picocom /dev/rfcomm0 -b 115200
Oprești serviciul și îl pornești manual cu debug:
sudo systemctl stop bluetooth sudo /usr/lib/bluetooth/bluetoothd -n -d
Sau folosești btmon pentru a urmări activitatea HCI în timp real:
sudo btmon
bluetooth.service necesită directorul /sys/class/bluetooth, creat de modulul kernel bluetooth. Acesta este autoîncărcat de systemd-udev numai dacă detectează hardware Bluetooth real. Dacă directorul nu există:
lsmod | grep bluetooth sudo modprobe bluetooth btusb sudo systemctl restart bluetooth
Modulele posibile în funcție de chipset: btusb, btrtl, btintel, btbcm, bnep.
Dacă serviciul a pornit cu succes dar bluetoothctl returnează org.Bluez.Error.NotReady la scan on, încearcă un restart complet al sistemului și verifică dacă directoarele și modulele sunt prezente.
Pe sisteme cu suspend-to-idle/S2idle/S0ix/Modern Standby, controllerele Bluetooth rămân active în sleep și trezesc sistemul imediat dacă un dispozitiv este conectat. Soluție - dezactivează Bluetooth înainte de suspend cu un serviciu systemd:
sudo tee /etc/systemd/system/bluetooth-disable-before-sleep.service << 'EOF' [Unit] Description=Disable Bluetooth before going to sleep Before=sleep.target Before=suspend.target Before=hybrid-sleep.target Before=suspend-then-hibernate.target StopWhenUnneeded=yes [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/bin/bluetoothctl power off ExecStop=/usr/bin/bluetoothctl power on [Install] WantedBy=sleep.target WantedBy=suspend.target WantedBy=hybrid-sleep.target WantedBy=suspend-then-hibernate.target EOF sudo systemctl enable bluetooth-disable-before-sleep.service
Notă: Cu acest workaround activ, trezirea sistemului din suspend cu mouse/tastatură Bluetooth nu va funcționa.
Două cauze posibile:
sudo loginctl enable-linger UTILIZATORlogind-monitor care activează Bluetooth la login și îl dezactivează la logout. Vezi WirePlumber - Keep Bluetooth running after logout.bluez-hid2hci - udev face asta automat. Sau manual:sudo /usr/lib/udev/hid2hci
bluetoothctl power on
Mai întâi verifici că nu este blocat de rfkill. Dacă folosești USBGuard, verifică că nu blochează controllerul Bluetooth.
Alte cauze posibile:
journalctl | grep hci. Dacă apare command tx timeout sau Reading Intel version command failed, oprește complet calculatorul și scoate cablul de alimentare câteva secunde (nu simplu restart) - asta forțează reîncărcarea firmware-ului.bluez-deprecated-tools în loc de bluez-utils.btusb.enable_autosuspend=n (sau echivalentul prin modprobe: options btusb enable_autosuspend=0 în /etc/modprobe.d/btusb.conf).sudo modprobe -r btusb sudo modprobe btusb
Verifici recunoașterea la inserare:
journalctl -f # monitorizezi live la inserare
La inserarea unui dongle funcțional, ar trebui să apară:
kernel: usb 4-1: new full-speed USB device number 3 using uhci_hcd bluetoothd: HCI dev 0 registered bluetoothd: Listening for HCI events on hci0 bluetoothd: HCI dev 0 up bluetoothd: Adapter /org/bluez/4568/hci0 has been enabled
Dacă apar primele linii dar nu și ultimele (adaptorul este detectat dar nu inițializat), trebuie ridicat manual cu btmgmt:
sudo btmgmt [mgmt]# select hci0 [hci0]# power up
Sau cu bluetoothctl:
bluetoothctl power on
Verifici versiunea de Bluetooth a adaptorului (HCI version din btmgmt info mapează la versiunea Bluetooth conform specificației oficiale; ex. HCI version 6 = Bluetooth 4.0).
Dacă alte dispozitive USB partajează același hub cu adaptorul Bluetooth, pot întrerupe comunicarea cu dispozitivele audio. Asigură-te că adaptorul Bluetooth este singurul dispozitiv pe bus-ul respectiv:
lsusb
Notă: Dongle-ul CSR cu ID0a12:0001(Cambridge Silicon Radio, Bluetooth Dongle HCI mode) are un regression bug și funcționează numai în kernelul ≥5.17 și <6.0. Vezi Kernel Bug 60824.
Dongle-urile Logitech (ex. MX5000) funcționează în două moduri: Embedded (emulează USB HID) și HCI. Pentru HCI, ții apăsat butonul roșu de pe dongle la inserare timp de 3-5 secunde. Alternativ, instalezi bluez-hid2hci care face comutarea automat prin udev.
Aceste dispozitive necesită uneori flash de firmware la boot. Pachetul broadcom-bt-firmware (din AUR pe Arch) furnizează fișierele pentru mai multe plăci. Alternativ, firmware-ul poate fi convertit dintr-un fișier Windows .hex cu utilitarul hex2hcd (inclus în bluez-utils):
# Identifici device-ul lsusb # ex: Bus 002 Device 004: ID 04ca:2006 Lite-On... # Descarci driverul Windows corespunzător și extragi .hex # Conversia: hex2hcd fisier.hex fisier.hcd # Copiezi în locul potrivit (verifici dmesg pentru numele exact) sudo cp fisier.hcd /lib/firmware/brcm/BCM.hcd # Reîncarci modulul sudo modprobe -r btusb && sudo modprobe btusb
Dacă versiunile de firmware Bluetooth diferă între Windows și Linux, adaptorul nu funcționează după reboot din Windows. Soluția recomandată este actualizarea driverelor Bluetooth la ultima versiune pe ambele sisteme. Dacă nu poți găsi firmware actualizat pentru Windows, poți copia fișierul din Linux:
/usr/lib/firmware/mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin.xz
Îl extragi și îl copiezi pe Windows în C:\WINDOWS\system32\DRIVERS\.
Identifici vendor ID și product ID-ul adaptorului:
lsusb -tv
Apoi folosești usb_modeswitch pentru a-l reseta:
sudo usb_modeswitch -R -v VENDOR_ID -p PRODUCT_ID
bluetoothctl discoverable on
bluetoothctl show # verifici Discoverable: yes
Dacă calculatorul tot nu apare, încearcă să schimbi clasa dispozitivului în /etc/bluetooth/main.conf:
[General] # Class = 0x000100 # implicit: Computer Class = 0x100100 # Object-Transfer Service + Computer
Notă: În unele cazuri,Classdinmain.confeste suprascrisă după inițializarea dispozitivului. În acel caz, setează clasa direct:hciconfig hci0 class 100100(deprecated, dar funcțional).
Televizoarele LG (și altele) descoperă dispozitive din categoria audio. Folosind clasa 000414 (soundbar) poți face calculatorul vizibil pentru astfel de dispozitive. Generatorul de clase: bluetooth class generator.
Un bug introdus în BlueZ 5.83 (prezent și în 5.86) provoacă o deconectare după o tentativă eronată de autentificare pe dispozitive cu suport multipoint. Workaround temporar: sudo systemctl restart bluetooth. Pe KDE Plasma, oprirea sau dezactivarea KDE Connect poate rezolva problema.
Dacă în jurnal apar:
bluetoothd: Unable to get connect data for Headset Voice gateway: getpeername: Transport endpoint is not connected (107) bluetoothd: connect error: Connection refused (111)
Cauza este probabil că dispozitivul a fost asociat și cu alt sistem de operare pe același adaptor Bluetooth. Urmează instrucțiunile din Dual boot pairing.
Unele dispozitive Bluetooth Low Energy (ex. Logitech MX Master) nu apar la scanarea normală. Folosești scanarea filtrată pe transport LE:
bluetoothctl [bluetooth]# menu scan [bluetooth]# transport le [bluetooth]# back [bluetooth]# scan on [bluetooth]# devices
Scanarea pasivă BLE este defectă pe acest adaptor. Vezi upstream bug report.
Dacă în jurnal apar:
bluetoothd[487]: Authentication attempt without agent bluetoothd[487]: Access denied: org.bluez.Error.Rejected
Dispozitivul nu este marcat ca trusted. Rulezi bluetoothctl trust MAC_ADDRESS.
Poți ajusta parametrii de conexiune direct în fișierul info al dispozitivului, adăugând sau modificând secțiunea [ConnectionParameters]:
[ConnectionParameters] MinInterval=6 MaxInterval=9 Latency=44 Timeout=216
Valorile implicite sunt optimizate pentru economie de energie și pot introduce latență. Aceste setări se aplică și unor tastaturi Keychron BLE. Repornești Bluetooth sau faci re-pair după modificare.
Un dispozitiv audio Bluetooth eșuează la conectare dacă PipeWire este instalat dar nu rulează nicio instanță. Pornești manual serviciul sau redai orice sunet pentru a porni daemonul, apoi reîncerci conectarea:
systemctl --user start pipewire.service
Dacă audio se întrerupe când folosești simultan mouse Bluetooth și căști, poți încerca:
hciconfig hci0 lm ACCEPT,MASTER
hciconfig hci0 lp HOLD,SNIFF,PARK
Adaugă în /etc/bluetooth/main.conf:
[General] JustWorksRepairing = always FastConnectable = true Class = 0x000100 [GATT] ReconnectIntervals=1,1,2,3,5,8,13,21,34,55 AutoEnable=true
Repornești bluetooth.service. Driver-ul xpadneo nu este necesar.
connmanctl enable bluetooth
Dacă transferurile primite eșuează și în jurnal apare open(…): Operation not permitted pe un path cu symlink-uri, adaugă un drop-in pentru obex.service:
mkdir -p ~/.config/systemd/user/obex.service.d/ tee ~/.config/systemd/user/obex.service.d/10-symlink.conf << 'EOF' [Service] ExecStart= ExecStart=/usr/lib/bluetooth/obexd --symlinks EOF systemctl daemon-reload --user systemctl restart --user obex.service
Dezactivare temporară:
sudo rfkill block bluetooth
Dezactivare permanentă prin udev:
sudo tee /etc/udev/rules.d/80-disable-bluetooth.rules << 'EOF' SUBSYSTEM=="rfkill", ATTR{type}=="bluetooth", ATTR{state}="0" EOF sudo udevadm control --reload-rules
Dezactivare prin blacklist modul kernel:
sudo tee /etc/modprobe.d/blacklist-bluetooth.conf << 'EOF' blacklist bluetooth blacklist btusb blacklist bnep blacklist btrtl blacklist btbcm blacklist btintel EOF