| # Reset Bluetooth |
|
|
| You are helping the user completely reset the Bluetooth subsystem to fix persistent issues. |
|
|
| ## Task |
|
|
| **WARNING:** This will remove all paired Bluetooth devices and require re-pairing. |
|
|
| 1. **Ask user to confirm:** |
| - This will unpair all Bluetooth devices |
| - Devices will need to be paired again |
| - Bluetooth service will be restarted |
|
|
| 2. **Stop Bluetooth service:** |
| ```bash |
| # Stop Bluetooth |
| sudo systemctl stop bluetooth |
| |
| # Verify stopped |
| systemctl is-active bluetooth |
| ``` |
|
|
| 3. **Kill any remaining Bluetooth processes:** |
| ```bash |
| # Kill bluetoothd |
| sudo killall bluetoothd 2>/dev/null |
| |
| # Kill bluetooth-related processes |
| ps aux | grep bluetooth | grep -v grep |
| sudo killall -9 bluez-alsa bluez-obexd 2>/dev/null |
| ``` |
|
|
| 4. **Remove Bluetooth pairing cache:** |
| ```bash |
| # Remove paired devices database |
| sudo rm -rf /var/lib/bluetooth/* |
| |
| # Show what was removed |
| echo "Removed all paired device data from /var/lib/bluetooth/" |
| ``` |
|
|
| 5. **Clear user Bluetooth cache:** |
| ```bash |
| # Remove user Bluetooth cache |
| rm -rf ~/.cache/bluetooth 2>/dev/null |
| rm -rf ~/.local/share/bluetooth 2>/dev/null |
| |
| echo "Cleared user Bluetooth cache" |
| ``` |
|
|
| 6. **Reset Bluetooth modules:** |
| ```bash |
| # Remove Bluetooth kernel modules |
| sudo modprobe -r bnep |
| sudo modprobe -r bluetooth |
| sudo modprobe -r btusb |
| sudo modprobe -r btintel # Intel Bluetooth |
| sudo modprobe -r btrtl # Realtek Bluetooth |
| |
| echo "Bluetooth modules unloaded" |
| sleep 2 |
| ``` |
|
|
| 7. **Reload Bluetooth modules:** |
| ```bash |
| # Reload modules |
| sudo modprobe bluetooth |
| sudo modprobe btusb |
| sudo modprobe bnep |
| |
| # Load vendor-specific modules if needed |
| sudo modprobe btintel 2>/dev/null |
| sudo modprobe btrtl 2>/dev/null |
| |
| echo "Bluetooth modules reloaded" |
| ``` |
|
|
| 8. **Reset HCI interface:** |
| ```bash |
| # Bring down Bluetooth controller |
| sudo hciconfig hci0 down 2>/dev/null |
| |
| sleep 1 |
| |
| # Bring it back up |
| sudo hciconfig hci0 up 2>/dev/null |
| |
| # Reset the controller |
| sudo hciconfig hci0 reset 2>/dev/null |
| |
| echo "HCI interface reset" |
| ``` |
|
|
| 9. **Unblock Bluetooth:** |
| ```bash |
| # Unblock Bluetooth (soft and hard) |
| sudo rfkill unblock bluetooth |
| |
| # Verify not blocked |
| rfkill list bluetooth |
| ``` |
|
|
| 10. **Start Bluetooth service:** |
| ```bash |
| # Start and enable Bluetooth |
| sudo systemctl start bluetooth |
| sudo systemctl enable bluetooth |
| |
| # Wait for service to fully start |
| sleep 3 |
| |
| # Check status |
| systemctl status bluetooth --no-pager |
| ``` |
| |
| 11. **Power on Bluetooth controller:** |
| ```bash |
| # Turn on Bluetooth |
| bluetoothctl power on |
| |
| # Set as discoverable (optional) |
| bluetoothctl discoverable on |
| |
| # Set pairable |
| bluetoothctl pairable on |
| |
| # Show controller info |
| bluetoothctl show |
| ``` |
| |
| 12. **Verify Bluetooth is working:** |
| ```bash |
| # Check service |
| echo "Service status: $(systemctl is-active bluetooth)" |
| |
| # Check controller |
| echo "Controller powered: $(bluetoothctl show | grep Powered)" |
| |
| # Check for adapters |
| hciconfig -a |
| |
| # Start scanning to test |
| echo "Starting scan for 10 seconds..." |
| timeout 10 bluetoothctl scan on |
| |
| bluetoothctl devices |
| ``` |
| |
| 13. **Create reset report:** |
| ```bash |
| cat > /tmp/bluetooth-reset-report.txt << EOF |
| Bluetooth Reset Report |
| ====================== |
| Date: $(date) |
| |
| === Service Status === |
| $(systemctl status bluetooth --no-pager) |
| |
| === Controller Info === |
| $(bluetoothctl show) |
| |
| === Hardware Info === |
| $(hciconfig -a) |
| |
| === RF Kill Status === |
| $(rfkill list bluetooth) |
| |
| === Loaded Modules === |
| $(lsmod | grep -E "bluetooth|bnep|btusb") |
| |
| === Kernel Messages (last 20) === |
| $(dmesg | grep -i bluetooth | tail -20) |
| |
| Next Steps: |
| 1. Your Bluetooth has been reset |
| 2. All previous pairings have been removed |
| 3. Put your device in pairing mode |
| 4. Use: bluetoothctl scan on |
| 5. Use: bluetoothctl pair <DEVICE_MAC> |
| 6. Use: bluetoothctl connect <DEVICE_MAC> |
| EOF |
| |
| cat /tmp/bluetooth-reset-report.txt |
| ``` |
| |
| ## USB Bluetooth Adapter Reset |
|
|
| If using USB Bluetooth adapter: |
| ```bash |
| # Find USB Bluetooth device |
| usb_bt=$(lsusb | grep -i bluetooth | head -1) |
| echo "Found: $usb_bt" |
| |
| # Get bus and device numbers |
| bus=$(echo $usb_bt | awk '{print $2}') |
| dev=$(echo $usb_bt | awk '{print $4}' | tr -d ':') |
| |
| # Reset USB device |
| echo "Resetting USB device: Bus $bus Device $dev" |
| sudo usb_modeswitch -v 0x$(lsusb | grep -i bluetooth | awk '{print $6}' | cut -d: -f1) \ |
| -p 0x$(lsusb | grep -i bluetooth | awk '{print $6}' | cut -d: -f2) \ |
| --reset-usb 2>/dev/null |
| |
| # Alternative: unbind and rebind |
| device_path="/sys/bus/usb/devices/$bus-*" |
| echo "Unbinding and rebinding USB device" |
| echo "$bus-*" | sudo tee /sys/bus/usb/drivers/usb/unbind 2>/dev/null |
| sleep 2 |
| echo "$bus-*" | sudo tee /sys/bus/usb/drivers/usb/bind 2>/dev/null |
| ``` |
|
|
| ## Firmware Reload |
|
|
| If firmware issues persist: |
| ```bash |
| # Check firmware files |
| ls -l /lib/firmware/ | grep -i bluetooth |
| |
| # Reload firmware (device-specific) |
| # For Intel Bluetooth: |
| sudo rmmod btintel |
| sudo modprobe btintel |
| |
| # For Realtek: |
| sudo rmmod btrtl |
| sudo modprobe btrtl |
| |
| # Check if firmware loaded |
| dmesg | grep -i "bluetooth.*firmware" | tail -5 |
| ``` |
|
|
| ## Complete System Reset |
|
|
| Nuclear option if nothing else works: |
| ```bash |
| # Stop everything |
| sudo systemctl stop bluetooth |
| sudo killall -9 bluetoothd |
| |
| # Remove all data |
| sudo rm -rf /var/lib/bluetooth/* |
| rm -rf ~/.cache/bluetooth |
| rm -rf ~/.local/share/bluetooth |
| |
| # Remove and reload all modules |
| sudo modprobe -r bnep bluetooth btusb btintel btrtl |
| sleep 3 |
| sudo modprobe bluetooth btusb bnep |
| |
| # Remove config (will regenerate) |
| sudo mv /etc/bluetooth/main.conf /etc/bluetooth/main.conf.backup |
| |
| # Reboot system |
| echo "A system reboot is recommended for complete reset" |
| # sudo reboot |
| ``` |
|
|
| ## Post-Reset Pairing |
|
|
| Guide user through pairing: |
| ```bash |
| cat << 'EOF' |
| To pair a device after reset: |
| |
| 1. Put device in pairing mode |
| 2. Start Bluetooth scan: |
| bluetoothctl scan on |
| |
| 3. Find your device MAC address in the list |
| |
| 4. Pair the device: |
| bluetoothctl pair XX:XX:XX:XX:XX:XX |
| |
| 5. Trust the device: |
| bluetoothctl trust XX:XX:XX:XX:XX:XX |
| |
| 6. Connect: |
| bluetoothctl connect XX:XX:XX:XX:XX:XX |
| |
| 7. Stop scanning: |
| bluetoothctl scan off |
| |
| For audio devices, you may need to restart PipeWire: |
| systemctl --user restart pipewire wireplumber |
| EOF |
| ``` |
|
|
| ## Troubleshooting |
|
|
| **Reset didn't work:** |
| ```bash |
| # Try full reboot |
| sudo reboot |
| |
| # Or try removing Bluetooth packages and reinstalling |
| # sudo apt remove bluez bluetooth |
| # sudo apt install bluez bluetooth |
| ``` |
|
|
| **Service won't start:** |
| ```bash |
| # Check for errors |
| journalctl -u bluetooth --since "5 minutes ago" --no-pager |
| |
| # Check if masked |
| sudo systemctl unmask bluetooth |
| |
| # Force restart |
| sudo systemctl restart bluetooth |
| ``` |
|
|
| **No adapters found:** |
| ```bash |
| # Check hardware detection |
| lsusb | grep -i bluetooth |
| lspci | grep -i bluetooth |
| |
| # Check kernel modules |
| lsmod | grep bluetooth |
| ``` |
|
|
| ## Notes |
|
|
| - Backup `/var/lib/bluetooth/` before reset if you want to preserve pairings |
| - Some devices may require specific PIN codes during pairing |
| - Audio devices may need additional PipeWire/PulseAudio configuration |
| - Bluetooth 5.0+ devices are backward compatible |
| - LE (Low Energy) devices may require special pairing procedures |
| - System reboot recommended after complete reset |
| - Check `/var/log/syslog` for detailed Bluetooth errors |
|
|