{"id":6126,"date":"2026-09-02T20:31:16","date_gmt":"2026-09-02T11:31:16","guid":{"rendered":"https:\/\/eternalsphere.net\/echoes\/?p=6126"},"modified":"2026-09-12T17:17:00","modified_gmt":"2026-09-12T08:17:00","slug":"ny72usccya63zwd","status":"publish","type":"post","link":"https:\/\/blog.eternalsphere.net\/index.php\/2026\/09\/02\/ny72usccya63zwd\/","title":{"rendered":"Arch Linux KDE on a MacBook Pro: Bluetooth Suddenly Cannot Be Enabled"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Symptom<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On a MacBook Pro running Arch Linux with KDE Plasma, Bluetooth had previously been working normally.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At some point, Bluetooth suddenly became unavailable. Clicking <strong>Enable<\/strong> in KDE&#8217;s Bluetooth panel had no effect. The switch could not be turned on, and no Bluetooth devices could be used.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At first glance, this looked like a KDE or BlueZ problem. Command-line diagnostics showed that the actual cause was lower in the stack: the Broadcom Bluetooth controller had failed to initialize correctly during boot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The issue was ultimately recovered without rebooting, reinstalling packages, modifying firmware, or changing the kernel.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Environment<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The affected system had the following general configuration:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MacBook Pro<\/li>\n\n\n\n<li>Arch Linux<\/li>\n\n\n\n<li>KDE Plasma<\/li>\n\n\n\n<li>BlueZ<\/li>\n\n\n\n<li>Linux LTS kernel<\/li>\n\n\n\n<li>Broadcom BCM4350-series wireless hardware<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The MacBook uses a Broadcom wireless combination device. Wi-Fi and Bluetooth are handled through different Linux driver paths, even though they belong to the same physical wireless hardware.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Initial symptom<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The KDE Bluetooth interface showed Bluetooth as disabled.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Clicking the Bluetooth enable switch produced no visible result.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The first step was therefore to determine whether the problem was caused by:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>KDE Plasma<\/li>\n\n\n\n<li>BlueZ<\/li>\n\n\n\n<li>rfkill<\/li>\n\n\n\n<li>the Bluetooth kernel subsystem<\/li>\n\n\n\n<li>the Broadcom driver<\/li>\n\n\n\n<li>firmware<\/li>\n\n\n\n<li>or the Bluetooth controller itself<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Diagnostic process<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1. Check the BlueZ service<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The first check was:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl status bluetooth --no-pager -l\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The service was running normally:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bluetooth.service - Bluetooth service\nActive: active (running)\nStatus: \"Running\"\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This immediately showed that <code>bluetoothd<\/code> itself had not crashed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Restarting or reinstalling BlueZ was therefore unlikely to address the underlying problem.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">2. Check rfkill<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Next:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rfkill list\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The Bluetooth adapter initially appeared as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bluetooth\n    Soft blocked: yes\n    Hard blocked: no\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A software block can normally be cleared with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo rfkill unblock bluetooth\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After doing so:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Soft blocked: no\nHard blocked: no\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">However, Bluetooth still did not work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This was an important result.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The rfkill state had been successfully corrected, but the Bluetooth controller was still unavailable. Therefore, rfkill was not the fundamental cause of the failure.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">3. Check whether BlueZ can see a controller<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The next commands were:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bluetoothctl list\nbluetoothctl show\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The result was:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>No default controller available\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This explains why clicking <strong>Enable<\/strong> in KDE did nothing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">KDE was not refusing to enable Bluetooth. There was simply no successfully initialized Bluetooth controller available for KDE or BlueZ to control.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The failure was therefore below the desktop environment.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Kernel log reveals the real problem<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The relevant kernel messages were obtained with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dmesg -T | grep -iE 'bluetooth|hci0|bcm|hci_uart'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The critical messages looked like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>hci_uart_bcm serial0-0: No reset resource, using default baud rate\n\nBluetooth: hci0: command 0xfc18 tx timeout\nBluetooth: hci0: BCM: failed to write update baudrate (-110)\nBluetooth: hci0: Failed to set baudrate\n\nBluetooth: hci0: command 0xfc18 tx timeout\nBluetooth: hci0: BCM: Reset failed (-110)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These messages identify the actual failure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Linux Bluetooth stack had created an HCI device, but the Broadcom Bluetooth controller stopped responding during UART initialization.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The most significant error was:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>command 0xfc18 tx timeout\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">followed by:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BCM: Reset failed (-110)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Linux error <code>-110<\/code> corresponds to a timeout.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In other words, the driver sent a Broadcom vendor command to the Bluetooth controller and did not receive the expected response.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Why this was not a KDE problem<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The software stack can be simplified as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>KDE Plasma\n    \u2193\nBlueZ \/ bluetoothd\n    \u2193\nLinux Bluetooth subsystem\n    \u2193\nhci_uart\n    \u2193\nhci_uart_bcm\n    \u2193\nBroadcom Bluetooth controller\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The upper layers were functioning.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>bluetoothd<\/code> was running normally.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>rfkill<\/code> could unblock Bluetooth.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The kernel Bluetooth subsystem loaded normally.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The failure occurred when <code>hci_uart_bcm<\/code> attempted to communicate with the physical Broadcom controller.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore, KDE&#8217;s inactive Bluetooth switch was only a symptom.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Comparing a successful boot with the failed boot<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">An especially useful diagnostic step was comparing Bluetooth kernel messages from the previous successful boot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This can be done with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>journalctl -k -b -1 --no-pager | \\\ngrep -iE 'hci_uart_bcm|Bluetooth: hci0|BCM:'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">and comparing them against the current boot:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>journalctl -k -b 0 --no-pager | \\\ngrep -iE 'hci_uart_bcm|Bluetooth: hci0|BCM:'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Interestingly, the previous working boot also reported:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BCM: failed to write update baudrate\nFailed to set baudrate\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">But initialization continued successfully afterward:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BCM: chip id 92\nBCM: features 0x2f\nBCM4350C0 UART 37.4 MHz\nBCM build information\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The failed boot never reached the <code>chip id<\/code> stage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead, it stopped after:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>command 0xfc18 tx timeout\nBCM: Reset failed (-110)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This difference was crucial.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Kernel regression or temporary controller failure?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Because Bluetooth had worked immediately before the failure, a kernel update initially appeared to be a possible cause.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The kernel version from the previous successful boot was compared with the current boot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Both boots were using the same Linux LTS kernel version.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That largely ruled out a kernel upgrade as the direct trigger of this particular occurrence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The more likely explanation was therefore a transient hardware\/driver initialization failure:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The Broadcom Bluetooth controller entered an abnormal UART or power state during boot and stopped responding to initialization commands.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">This distinction matters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Without comparing boots, it would have been easy to incorrectly downgrade the kernel, reinstall BlueZ, or modify firmware.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Solution: reload the Bluetooth UART driver<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A full system reboot was not necessary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Bluetooth service was stopped first:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl stop bluetooth\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then the Bluetooth UART driver was unloaded:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo modprobe -r hci_uart\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After a short delay:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sleep 2\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">the driver was loaded again:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo modprobe hci_uart\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">BlueZ was then restarted:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl start bluetooth\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, Bluetooth was unblocked:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo rfkill unblock bluetooth\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The complete recovery sequence is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl stop bluetooth\n\nsudo modprobe -r hci_uart\nsleep 2\n\nsudo modprobe hci_uart\nsleep 2\n\nsudo systemctl start bluetooth\nsudo rfkill unblock bluetooth\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">No files were modified.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No packages were reinstalled.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No kernel parameters were changed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No reboot was required.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Verification<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">After reloading the driver:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bluetoothctl show\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">now returned a valid controller with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Powered: yes\nPowerState: on\nPairable: yes\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The kernel log also showed successful initialization:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bluetooth: hci0: BCM: chip id 92\nBluetooth: hci0: BCM: features 0x2f\nBluetooth: hci0: BCM4350C0 UART 37.4 MHz\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The significant point is that the controller once again progressed beyond the initialization stage where it had previously timed out.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bluetooth immediately became available to KDE again.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Why reloading <code>hci_uart<\/code> works<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The Broadcom controller on this MacBook communicates with Linux through the Bluetooth UART subsystem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">During the failed boot, the controller entered a state in which it no longer responded correctly to the initialization sequence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Restarting only:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bluetooth.service\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">does not necessarily fix this condition.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That restarts BlueZ in userspace, but the kernel driver and physical controller can remain in the same broken state.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Reloading:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>hci_uart\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">forces the kernel Bluetooth UART driver to detach and initialize the device again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">During the second initialization attempt, the Broadcom controller responded correctly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is why restarting BlueZ alone did not solve the problem, while reloading <code>hci_uart<\/code> did.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">About the missing BCM firmware warning<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The kernel also reported a warning similar to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BCM: firmware Patch file not found\nbrcm\/BCM.hcd\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">At first glance, this looks suspicious.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, the same warning was present during a previous boot in which Bluetooth worked normally.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After the runtime recovery, Bluetooth also initialized successfully while the warning remained.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore, in this case:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The missing optional <code>BCM.hcd<\/code> patch file was not responsible for the sudden Bluetooth failure.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Installing random firmware files would therefore have been an unjustified troubleshooting step.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">About the Broadcom Wi-Fi firmware warnings<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Other kernel messages may also appear for files such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>brcmfmac4350c2-pcie...\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These belong primarily to the <code>brcmfmac<\/code> Wi-Fi driver.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A Broadcom Wi-Fi\/Bluetooth combination chip contains multiple functional interfaces, and Linux does not necessarily initialize Wi-Fi and Bluetooth through the same driver.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore, a <code>brcmfmac<\/code> firmware warning should not automatically be interpreted as the cause of an <code>hci_uart_bcm<\/code> Bluetooth failure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The surrounding log context must be examined.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Quick recovery command<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">If the same symptom occurs again and the kernel log contains the same Broadcom UART timeout, the following sequence can be used:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl stop bluetooth\nsudo modprobe -r hci_uart\nsleep 2\nsudo modprobe hci_uart\nsleep 2\nsudo systemctl start bluetooth\nsudo rfkill unblock bluetooth\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then verify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bluetoothctl show\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A successful result should contain:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Powered: yes\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Important caution<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">If this command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo modprobe -r hci_uart\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">returns:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FATAL: Module hci_uart is in use\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">the module should not be force-unloaded with <code>-f<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Forcing removal of an in-use kernel module is unnecessary and carries additional risk.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A device-specific unbind\/rebind operation should be used instead.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Recommended troubleshooting order<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For similar Bluetooth failures on Linux, the following sequence avoids unnecessary system modifications.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Check BlueZ<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl status bluetooth\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Check rfkill<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>rfkill list\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If necessary:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo rfkill unblock bluetooth\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Check whether a controller exists<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>bluetoothctl list\nbluetoothctl show\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Examine kernel messages<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dmesg -T | \\\ngrep -iE 'bluetooth|hci0|hci_uart|bcm'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Compare with the previous boot<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>journalctl -k -b -1 --no-pager | \\\ngrep -iE 'hci_uart_bcm|Bluetooth: hci0|BCM:'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">If the Broadcom UART controller is stuck<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl stop bluetooth\nsudo modprobe -r hci_uart\nsleep 2\nsudo modprobe hci_uart\nsleep 2\nsudo systemctl start bluetooth\nsudo rfkill unblock bluetooth\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">When Bluetooth suddenly cannot be enabled in KDE, the desktop environment is not necessarily responsible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this case, the real problem was a temporary initialization failure of the Broadcom Bluetooth controller.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The key symptoms were:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>No default controller available\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">together with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>command 0xfc18 tx timeout\nBCM: Reset failed (-110)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The controller had failed to respond during the Broadcom UART initialization process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Reloading the <code>hci_uart<\/code> kernel driver forced the Bluetooth hardware through a fresh initialization cycle, after which the BCM4350 controller was detected correctly and Bluetooth returned to normal operation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The practical lesson is simple:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">When BlueZ is running but no Bluetooth controller exists, troubleshooting should move below KDE and BlueZ into the kernel HCI driver and hardware initialization layer.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">In this particular failure mode, reloading <code>hci_uart<\/code> can restore Bluetooth without rebooting or modifying the system permanently.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Symptom On a MacBook Pro running Arch Linux with KDE Plasma, Bluetooth had previously been working normally. At some point, Bluetooth suddenly became unavailable. Clicking Enable in KDE&#8217;s Bluetooth panel had no effect. The switch could not be turned on, and no Bluetooth devices could be used. At first glance, &hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[122],"tags":[219,292,264],"class_list":["post-6126","post","type-post","status-publish","format-standard","hentry","category-awdn5b6gpb9nez4","tag-arch-linux","tag-bluetooth","tag-troubleshooting"],"_links":{"self":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6126","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/comments?post=6126"}],"version-history":[{"count":1,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6126\/revisions"}],"predecessor-version":[{"id":6127,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6126\/revisions\/6127"}],"wp:attachment":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/media?parent=6126"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/categories?post=6126"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/tags?post=6126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}