Some things to check…
Gather information about the hardware
For example:
$ sudo dnf install inxi
$ inxi --bluetooth
Bluetooth: Device-1: Intel AX200 Bluetooth type: USB driver: btusb
Report: rfkill ID: hci0 state: up address: see --recommends
$ lsusb | grep -i bluetooth
Bus 001 Device 012: ID 8087:0029 Intel Corp. AX200 Bluetooth
Check wireless radios
$ nmcli radio all
WIFI-HW WIFI WWAN-HW WWAN
enabled enabled enabled enabled
$ rfkill list all
0: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
Hard blocked means “blocked by hardware,” for example by a hardware switch or BIOS setting.
Soft blocked means “blocked by software”.
If the above output indicates that Bluetooth is soft blocked, you can try unblocking it with the following command:
sudo rfkill unblock bluetooth
or
sudo rkfill unblock all
Check kernel messages
The following commands search the journal for kernel messages containing ‘blue’. The search term ‘blue’ does not contain any uppercase letters, therefore the search will be case-insensitive.
journalctl -k -b-0 -g blue # Show kernel messages containing 'blue' from the current boot
journalctl -k -b-1 -g blue # Show kernel messages containing 'blue' from the previous boot
journalctl -k -b-2 -g blue # Show kernel messages containing 'blue' from two boots ago
etc.
Equivalent with long options:
journalctl --dmesg --boot=-0 --grep blue
Or, instead of filtering the journal entries, it’s often better to utilize your pager’s search features. Remove the -g, --grep
option from the above journalctl
command and, when viewing the results in your pager, press /
and the search term followed by ENTER to search through the results. Pressing ‘n’ or ‘N’ will move to the next or previous match, respectively. This approach has the advantage that it shows surrounding context. I recommend adding the i option to the SYSTEMD_LESS environment variable so that the search is case-insensitive unless your search term contains uppercase letters. To do this, put export SYSTEMD_LESS=FRSXMKi
in your ~/.bash_profile
, or equivalent wherever you like to set environment variables. Log out and back in to make the environment variable take effect.
See if there is a difference in the kernel messages between when bluetooth worked and when it didn’t.
bluetoothctl
$ bluetoothctl
Agent registered
[Logitech K810]# help
Excerpt from the help listing:
list List available controllers
show [ctrl] Controller information
power <on/off> Set controller power
devices List available devices
paired-devices List paired devices
info [dev] Device information
connect <dev> Connect device
The show command will show detailed information about your bluetooth controller, including whether it is powered on.