How to get a stable WLAN-connection with a Lenovo x121e?

I have permament problem when using WLAN with my Lenovo ThinkPad x121e. The wireless network adapter in use is this one:

lspci:

01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8188CE 802.11b/g/n WiFi Adapter (rev 01)

The connection normally works OK for some time and then starts to slow down and eventually disconnects. Sometimes the connection is reestablished seconds later, sometimes it takes 30 or more seconds, sometimes it does not reconnect at all.

This problem occures with every driver I tried up to now. Especially the kernel driver

Linux ThinkPad 3.0.0-14-generic #23-Ubuntu SMP Mon Nov 21 20:28:43 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

and Realteks driver that can be found here. The driver I'm using at the moment is the one found in this ppa: ppa:tista/x120e.

Here is another link to www.thinkwiki.org that hints at a "Low Power State" (LPS) option in realtek's driver but it seems that it cannot be disabled in the current driver.

Is there a way to get a more stable WLAN with this setup?

Some more system information:

lshw -class network:

   description: Wireless interface
   product: RTL8188CE 802.11b/g/n WiFi Adapter
   vendor: Realtek Semiconductor Co., Ltd.
   physical id: 0
   bus info: pci@0000:01:00.0
   logical name: wlan0
   version: 01
   serial: 38:59:f9:db:e6:83
   width: 64 bits
   clock: 33MHz
   capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless
   configuration: broadcast=yes driver=rtl8192CE driverversion=0006.0321.2011 firmware=56 ip=192.168.178.35 latency=0 link=yes multicast=yes wireless=802.11bgn
   resources: irq:17 ioport:3000(size=256) memory:f0200000-f0203fff

iwconfig wlan0:

wlan0     802.11bgn  ESSID:"xxx"  Nickname:"rtl8192CE"
      Mode:Managed  Frequency=2.452 GHz  Access Point: A2:05:43:2F:6E:8E   
      Bit Rate=65 Mb/s   
      Retry:on   RTS thr:off   Fragment thr:off
      Power Management period:0us  mode:All packets received
      Link Quality=100/100  Signal level=0 dBm  Noise level=-120 dBm
      Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
      Tx excessive retries:0  Invalid misc:0   Missed beacon:0

ifconfig wlan:

wlan0     Link encap:Ethernet  HWaddr 38:59:f9:db:e6:83  
      inet addr:192.168.178.35  Bcast:192.168.178.255  Mask:255.255.255.0
      inet6 addr: fe80::3a59:f9ff:fedb:e683/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:117385 errors:0 dropped:0 overruns:0 frame:0
      TX packets:85652 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:115417879 (115.4 MB)  TX bytes:10463799 (10.4 MB)
      Interrupt:17 Memory:ffffc900037a8000-ffffc900037a8100 

I finally fixed this problem by compiling and installing the latest drivers from Linux Wireless in Ubuntu 12.04, in my case the "compat-wireless-3.5.1-1-snpc.tar.bz2" package: http://wireless.kernel.org/en/users/Download/stable/

One needs the header files for his kernel and the build-essentials package. I recommend also to run the script "driver-select" with the option rtlwifi before compiling because one doesn't need the other drivers and it reduces building time:

sudo apt-get install linux-headers-$(uname -r) build-essential

tar jvxf compat-wireless-3.5.1-1-snpc.tar.bz2
cd compat-wireless-3.5.1-1-snpc
./scripts/driver-select rtlwifi
make
sudo make install

But the downside is you have to rebuild the driver after every kernel update.

I'm running the driver for two days now with excessive closing and opening the lid and didn't get any disconnects.


The problem could be caused by channel hopping (and the new Linux kernel).

I fixed it mostly with compile the driver by my own and install it. 2nd thing I did was to scan for networks if the network is breaking.

I entered in terminal watch sudo iwlist wlan0 scan.

With this the driver kept awake. Another fix I used is to press Fn+F5 to disable wifi and then I do the same a few seconds later.

One more thing I tried:

sudo modprobe -r rtl8192ce
sudo modprobe rtl8192ce

This reloads the driver for wifi. I also ping sometimes the router, this keeps my wifi connection stable.