Aceasta e o versiune anterioară a paginii.
Bluetooth în Linux
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.
Instalare
BlueZ și modulul kernel
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.
Unelte depreciate BlueZ
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
Transfer de fișiere (OBEX)
Î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
Interfețe grafice
- GNOME Bluetooth - integrat în GNOME;
gnome-bluetooth-3.0furnizează backend-ul,gnome-shellfurnizează applet-ul,gnome-control-centerfurnizează panoul grafic. Poți lansa directbluetooth-sendtopentru a trimite fișiere. Primirea de fișiere funcționează numai cât timp panoul Bluetooth este deschis. - BlueDevil - unealta KDE Plasma; dacă nu apare iconița în system tray, activeaz-o din opțiunile tray-ului sau adaugă un widget.
- Blueberry - spin-off Linux Mint al GNOME Bluetooth, funcționează în orice mediu desktop. Nu suportă primirea fișierelor prin Obex Object Push.
- Blueman - manager complet, independent de desktop. Recomandat pentru XFCE, LXDE, Openbox, i3, Sway etc.
- bluetuith - manager TUI cu suport OBEX și mouse.
- bluetui - manager TUI simplu.
- Overskride - client Bluetooth simplu și performant.
- Bluetooth Manager Sidebar - manager GTK4/libadwaita pentru sesiuni Wayland, se deschide ca sidebar.
- toolBLEx - scanner și analizor pentru dispozitive BLE și Bluetooth clasic.
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
Asocierea dispozitivelor
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]#:
- (opțional) Selectează un controller implicit cu
select MAC_address - (opțional) Pornește controllerul cu
power ondacă este oprit - vezi Starea implicită a adaptorului devicespentru a vedea adresele MAC ale dispozitivelor cunoscute dejascan ondacă dispozitivul nu este încă în listăagent onsau alege un agent specific (apasă Tab de două ori dupăagentpentru lista agenților disponibili); agentul gestionează codul de asociere Bluetoothpair MAC_addresspentru asociere (Tab completează adresa)trust MAC_addressdacă dispozitivul nu are PIN, pentru a-i permite reconectarea automatăconnect MAC_addresspentru a stabili conexiunea
O 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.
Salvarea configurației
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.
Dual boot pairing (Linux + Windows/macOS)
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.
Procedura generală
- Asociezi dispozitivul în Linux (se creează fișierele în
/var/lib/bluetooth/) - Repornești în Windows/macOS și asociezi același dispozitiv
- Oprești dispozitivul Bluetooth pentru a preveni tentative de conexiune automată
- Extragi cheile generate de Windows/macOS
- Repornești în Linux și aplici cheile
- Repornești
bluetooth.service
Extragerea cheilor din Windows
Cheia 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.
Extragerea cheilor din macOS
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()))
Aplicarea cheilor în Linux
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.
Unelte automate pentru dual boot
- bt-dualboot - automatizează sincronizarea cheilor Linux↔Windows; nu suportă Bluetooth Low Energy
- bluetooth-dualboot script - proces semi-automat, nu modifică fișiere direct, dar ajută la formatarea valorilor
Configurare
Starea implicită a adaptorului
Î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.
Vizibilitate permanentă
Dacă dispozitivul trebuie să fie mereu vizibil și direct conectabil:
[General] DiscoverableTimeout = 0
Trezirea sistemului din suspend
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
Transport implicit (BR/EDR vs LE)
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
Funcții experimentale
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
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.
Profiluri audio
| 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 (recomandat)
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
PulseAudio
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.
ALSA (fără PulseAudio/PipeWire)
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"
}
Bluetooth serial (module HC-05, HC-06)
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
Probleme frecvente
Diagnosticare generală
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
systemd: serviciul bluetooth este sărit la boot
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.
Bluetooth trezește imediat sistemul din suspend-to-idle
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.
Bluetooth se oprește la delogare (sistem headless/server)
Două cauze posibile:
- PulseAudio și PipeWire rulează ca servicii de utilizator și se opresc la terminarea ultimei sesiuni. Activează lingering pentru utilizator:
sudo loginctl enable-linger UTILIZATOR - WirePlumber rulează un
logind-monitorcare activează Bluetooth la login și îl dezactivează la logout. Vezi WirePlumber - Keep Bluetooth running after logout.
hcitool scan: Device not found
- Pe unele laptop-uri (ex. Dell Studio 15, Lenovo ThinkPad X1) trebuie comutat modul de la HID la HCI. Instalează
bluez-hid2hci- udev face asta automat. Sau manual:
sudo /usr/lib/udev/hid2hci
- Dacă dispozitivul tot nu apare și ai Windows pe același calculator, pornești Windows și activezi adaptorul Bluetooth de acolo, apoi revii în Linux.
- Uneori ajunge pur și simplu:
bluetoothctl power on
bluetoothctl: No default controller available
Mai întâi verifici că nu este blocat de rfkill. Dacă folosești USBGuard, verifică că nu blochează controllerul Bluetooth.
Alte cauze posibile:
- Unele controllere de pe placa de bază au un bug care provoacă această eroare. Verifici în jurnal:
journalctl | grep hci. Dacă aparecommand tx timeoutsauReading 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. - Unele plăci Intel (ex. 8260) nu sunt preluate corect de serviciul Bluetooth. Încearcă cu
bluez-deprecated-toolsîn loc debluez-utils. - Power saving poate cauza probleme - adaugă parametrul kernel
btusb.enable_autosuspend=n(sau echivalentul prin modprobe:options btusb enable_autosuspend=0în/etc/modprobe.d/btusb.conf). - Descărcarea și reîncărcarea modulului fără opțiuni ajută uneori:
sudo modprobe -r btusb sudo modprobe btusb
Adaptor USB Bluetooth nu este recunoscut
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).
Audio skip la distanță mică de la dongle
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.
Logitech Bluetooth USB Dongle
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.
Foxconn / Hon Hai / Lite-On Broadcom
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
MediaTek MT7921 sau MT7961 în dual boot cu Windows
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\.
Adaptorul dispare după suspend/resume
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
Calculatorul nu este vizibil pentru alte dispozitive
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.
Dispozitivul se conectează și se deconectează după câteva secunde
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.
Dispozitivele LE nu apar în scan
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
BLE nu funcționează pe Intel AX200
Scanarea pasivă BLE este defectă pe acest adaptor. Vezi upstream bug report.
Nu se poate reconecta după sleep
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.
Mouse Bluetooth lag / disconnect / nu răspunde
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.
Audio device nu se conectează: br-connection-profile-unavailable
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
Interferențe între căști și mouse
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
Continual connect/disconnect cu TP-LINK UB400 și Xbox controller
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.
rfkill unblock: nu deblocheaz pe sisteme cu ConnMan
connmanctl enable bluetooth
Fișiere primite eșuează din cauza symlink-urilor
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
Dezactivarea Bluetooth-ului
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