| # Troubleshoot Bluetooth | |
| You are helping the user diagnose and fix Bluetooth connectivity issues. | |
| ## Task | |
| 1. **Check Bluetooth service status:** | |
| ```bash | |
| # Service status | |
| systemctl status bluetooth | |
| # Is it running? | |
| systemctl is-active bluetooth | |
| # Is it enabled to start on boot? | |
| systemctl is-enabled bluetooth | |
| ``` | |
| 2. **Check Bluetooth hardware:** | |
| ```bash | |
| # List Bluetooth adapters | |
| hciconfig -a | |
| # Or using rfkill | |
| rfkill list bluetooth | |
| # Check if Bluetooth is soft/hard blocked | |
| rfkill list | |
| # Detailed hardware info | |
| lsusb | grep -i bluetooth | |
| lspci | grep -i bluetooth | |
| ``` | |
| 3. **Check Bluetooth controller status:** | |
| ```bash | |
| # Controller info | |
| bluetoothctl show | |
| # List controllers | |
| bluetoothctl list | |
| # Check if powered on | |
| bluetoothctl show | grep "Powered:" | |
| ``` | |
| 4. **Check for firmware issues:** | |
| ```bash | |
| # Look for firmware errors in journal | |
| journalctl -u bluetooth | grep -i firmware | |
| # Check dmesg for Bluetooth firmware loading | |
| dmesg | grep -i "bluetooth\|firmware" | tail -20 | |
| # Check kernel modules | |
| lsmod | grep bluetooth | |
| ``` | |
| 5. **Common fixes - Restart Bluetooth:** | |
| ```bash | |
| # Restart Bluetooth service | |
| sudo systemctl restart bluetooth | |
| # Reset Bluetooth controller | |
| sudo hciconfig hci0 down | |
| sudo hciconfig hci0 up | |
| # Or use bluetoothctl | |
| bluetoothctl power off | |
| sleep 2 | |
| bluetoothctl power on | |
| ``` | |
| 6. **Unblock Bluetooth if blocked:** | |
| ```bash | |
| # Check if blocked | |
| rfkill list bluetooth | |
| # Unblock if soft-blocked | |
| sudo rfkill unblock bluetooth | |
| # Power on controller | |
| bluetoothctl power on | |
| ``` | |
| 7. **Scan for devices:** | |
| ```bash | |
| # Start scanning | |
| bluetoothctl scan on | |
| # Wait 10 seconds | |
| sleep 10 | |
| # List discovered devices | |
| bluetoothctl devices | |
| # Stop scanning | |
| bluetoothctl scan off | |
| ``` | |
| 8. **Check paired devices:** | |
| ```bash | |
| # List paired devices | |
| bluetoothctl paired-devices | |
| # Show info about specific device | |
| bluetoothctl info DEVICE_MAC_ADDRESS | |
| ``` | |
| 9. **Remove and re-pair problematic device:** | |
| ```bash | |
| # Ask user for device MAC address | |
| # Remove device | |
| bluetoothctl remove DEVICE_MAC_ADDRESS | |
| # Scan again | |
| bluetoothctl scan on | |
| sleep 10 | |
| # Pair device | |
| bluetoothctl pair DEVICE_MAC_ADDRESS | |
| # Trust device | |
| bluetoothctl trust DEVICE_MAC_ADDRESS | |
| # Connect to device | |
| bluetoothctl connect DEVICE_MAC_ADDRESS | |
| ``` | |
| 10. **Check Bluetooth configuration:** | |
| ```bash | |
| # Main config file | |
| cat /etc/bluetooth/main.conf | |
| # Check for problematic settings | |
| grep -E "^(Name|Class|DiscoverableTimeout|AutoEnable)" /etc/bluetooth/main.conf | |
| ``` | |
| 11. **Check for interference:** | |
| ```bash | |
| # Check WiFi and Bluetooth coexistence | |
| iw dev | grep -i channel | |
| # Bluetooth operates on 2.4GHz | |
| # WiFi on 2.4GHz can interfere | |
| echo "Consider switching WiFi to 5GHz if available" | |
| ``` | |
| 12. **Detailed diagnostics:** | |
| ```bash | |
| # Bluetooth subsystem logs | |
| journalctl -u bluetooth --since "1 hour ago" --no-pager | |
| # Kernel Bluetooth messages | |
| dmesg | grep -i bluetooth | tail -30 | |
| # Check for errors | |
| journalctl -u bluetooth | grep -iE "error|fail|timeout" | |
| ``` | |
| 13. **Audio-specific Bluetooth issues:** | |
| ```bash | |
| # Check PulseAudio/PipeWire Bluetooth modules | |
| pactl list | grep -i bluetooth | |
| # PipeWire Bluetooth | |
| pw-cli ls Device | grep -i bluetooth | |
| # Load Bluetooth module (PulseAudio) | |
| # pactl load-module module-bluetooth-discover | |
| # Restart audio with Bluetooth | |
| systemctl --user restart pipewire pipewire-pulse wireplumber | |
| ``` | |
| 14. **Generate diagnostic report:** | |
| ```bash | |
| cat > /tmp/bluetooth-diagnostic.txt << EOF | |
| Bluetooth Diagnostic Report | |
| =========================== | |
| Date: $(date) | |
| === Service Status === | |
| $(systemctl status bluetooth --no-pager) | |
| === Hardware Detection === | |
| $(rfkill list bluetooth) | |
| $(hciconfig -a) | |
| === Controller Info === | |
| $(bluetoothctl show) | |
| === Paired Devices === | |
| $(bluetoothctl paired-devices) | |
| === Recent Bluetooth Logs === | |
| $(journalctl -u bluetooth --since "1 hour ago" --no-pager | tail -50) | |
| === Kernel Messages === | |
| $(dmesg | grep -i bluetooth | tail -30) | |
| === Loaded Modules === | |
| $(lsmod | grep bluetooth) | |
| === Configuration === | |
| $(grep -v "^#\|^$" /etc/bluetooth/main.conf) | |
| EOF | |
| cat /tmp/bluetooth-diagnostic.txt | |
| ``` | |
| ## Common Issues & Solutions | |
| **Bluetooth not starting:** | |
| ```bash | |
| # Check if service masked | |
| systemctl unmask bluetooth | |
| sudo systemctl enable --now bluetooth | |
| ``` | |
| **Device pairs but won't connect:** | |
| ```bash | |
| # Remove and re-pair | |
| bluetoothctl remove DEVICE_MAC | |
| bluetoothctl scan on | |
| # Wait for device to appear | |
| bluetoothctl pair DEVICE_MAC | |
| bluetoothctl trust DEVICE_MAC | |
| bluetoothctl connect DEVICE_MAC | |
| ``` | |
| **Audio stuttering or quality issues:** | |
| ```bash | |
| # Check Bluetooth audio codec | |
| pactl list | grep -i "bluetooth\|codec" | |
| # Try different codec | |
| # Edit /etc/bluetooth/main.conf | |
| # [General] | |
| # Enable=Source,Sink,Media,Socket | |
| ``` | |
| **Bluetooth adapter not found:** | |
| ```bash | |
| # Reload Bluetooth module | |
| sudo rmmod btusb | |
| sudo modprobe btusb | |
| # Or all Bluetooth modules | |
| sudo rmmod bnep btusb bluetooth | |
| sudo modprobe bluetooth | |
| sudo modprobe btusb | |
| sudo modprobe bnep | |
| ``` | |
| **Random disconnections:** | |
| ```bash | |
| # Increase page timeout | |
| sudo hciconfig hci0 pageto 8192 | |
| # Disable power management for USB Bluetooth | |
| # Add to /etc/udev/rules.d/50-bluetooth.rules: | |
| # ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="YOUR_VENDOR", ATTR{power/autosuspend}="-1" | |
| ``` | |
| **LE (Low Energy) devices not working:** | |
| ```bash | |
| # Enable LE in bluetoothctl | |
| bluetoothctl | |
| [bluetooth]# menu scan | |
| [bluetooth]# transport le | |
| [bluetooth]# scan on | |
| ``` | |
| ## Reset Bluetooth Completely | |
| If nothing else works: | |
| ```bash | |
| # Stop Bluetooth | |
| sudo systemctl stop bluetooth | |
| # Remove paired devices cache | |
| sudo rm -rf /var/lib/bluetooth/* | |
| # Restart Bluetooth | |
| sudo systemctl start bluetooth | |
| # Re-pair all devices | |
| ``` | |
| ## Notes | |
| - Most Bluetooth adapters work with btusb kernel module | |
| - Firmware files typically in `/lib/firmware/` | |
| - Check if kernel has Bluetooth support: `zgrep BLUETOOTH /proc/config.gz` | |
| - Some devices require specific pairing codes | |
| - Audio devices may need PulseAudio/PipeWire Bluetooth modules | |
| - USB Bluetooth adapters: check with `usb-devices | grep -A 10 Bluetooth` | |
| - Bluetooth 5.x adapters are backward compatible with older devices | |
| - Distance and obstacles affect connection quality | |