Fixing rtl8723be Wifi and Bluetooth issues in Linux
The problems
rtl8723be is an Wifi + Bluetooth card provided by Realtek. As goes with many devices, the support for this device in Linux has not been very good. On many devices, either or both of WiFi and Bluetooth don’t work properly, or in the worst case, don’t work at all.
This post should help you fix the common issues that occur with this device.
Why the problems occur
The problems occur mainly due to the fact that while rtl8723be chip supports two antennas, many device manufacturers only put one antenna to save money. By default, the Linux drives for the device tries to use both the antennas(one of which does not exist) and ends up failing miserably.
Also comes the problem of making Bluetooth and WiFi work together properly, something that’s easier said than done.
Fixing WiFi
Enough background, let’s get fixing stuff up. If the WiFi does not work or shows very poor signal for hotspots, this is for you.
The driver for this device is maintained by larry finger on github. Luckily, this driver has been included in Linux kernel for some time, so you don’t have to install it. All you have to do is set up the driver to use the proper antenna.
To do this, first create an file rtl8723be.conf
in /etc/modprobe.d
directory. Add the following line to it,
options rtl8723be ant_sel=1
remove the driver by executing, the following command in the terminal,
sudo modprobe -r rtl8723be
mount the driver again by executing,
sudo modprobe rtl8723be
Check the wifi connection. It should be good now. If it ain’t, try changing the ant_sel option to 2, repeat the process above to remove and mount the driver again, and check again. The problem should be fixed now.
Sometimes, driver/kernel update requires you to change ant_sel option between 1 and 2, even if it worked previously.
Fixing Bluetooth
On most devices, Bluetooth does not work at all with rtl8723be. The issue is due to an inbuilt power management utility, called tlp. Well, not actually. The problem exists somewhere in the power management code for the driver itself, which causes interference with the normal working of tlp.
To fix this, you have two options,
- remove tlp (not recommended)
- Block rtl8723be in tlp
How to block the device in tlp
To block the device, first, find the device id using lsusb
lsusb
You’ll see something like this,
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0bda:57d6 Realtek Semiconductor Corp.
Bus 001 Device 004: ID 0bda:b006 Realtek Semiconductor Corp.
Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 014: ID 05c6:f003 Qualcomm, Inc.
Bus 001 Device 002: ID 0461:4e54 Primax Electronics, Ltd
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Let’s say 0bda:57d6
is the id of realtek’s card. To block it in tlp, open the file /etc/default/tlp
and find the line that reads,
#USB_BLACKLIST="1111:2222 3333:4444"
change it to
USB_BLACKLIST="0bda:57d6"
Reboot your computer and test Bluetooth, it should work now.
Bluetooth works, but only for very short distance
In case after blocking the device in tlp, Bluetooth works only for short distance, it’s problem with btcoexist
. btcoexist is responsible for making the Bluetooth and WiFi “coexist” peacefully, and it fails to do so. In this case, WiFi and Bluetooth require different antennas, and btcoexist fails to assign them properly.
A temporary fix for this is to change ant_sel setting(again!). This way, you’ll get Bluetooth to work very well, but WiFi won’t work properly. When you need WiFi, change the settings again, so that you can use WiFi, but won’t be able to use Bluetooth properly.
What’s coming in the future?
It is rumoured that updates to btcoexist may fix the issue in future. It is also possible that Realtek fixes the power management issues with the driver.