Rtl8187 wireless card drops signal within seconds

My Realtek RTL8187 USB wifi card is having trouble keeping a connection for more than a few seconds, while on the same machine under Windows 7 it has no problem. When I make the connection, I have a few seconds of full-bandwidth communication, followed by the connection completely failing to send or receive packets (the card usually makes a soft sound from the antenna, under both OSs, which cuts out, along with actual networking capabilities on Ubuntu). Network manager and WICD both report the card as still connected, with reasonable signal levels (around -40dBi, which is not a problematic level for this card on Windows). The loss of communication happens replicably and reliably, although occasionally I manage to transmit and receive a few stray packets. The indicator light on the card flickers constantly and abnormally quickly after the connection is lost.

I've tried to connect to both my WPA2 and (with consent) a neighbor's WEP access points (mine being Netgear, and theirs being Belkin), with the same result of losing the link after roughly one second. Ethernet is un-affected. This card is being used with the rtl8187 kernel module. I'm using a clean, fresh installation of Trusty x64. This did not occur on the live CD.

dmesg | tail -n 25 for the WEP network:

hexafraction@ubuntu-lapdesk:~/Downloads$ dmesg | tail -n 25
[16505.923287] wlan1: associated
[16505.923370] IPv6: ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready
[16505.943812] IPv6: ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready
[16535.278129] atl1c 0000:01:00.0: atl1c: eth0 NIC Link is Down
[16540.067784] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[16543.677051] wlan1: deauthenticating from [PREVIOUS AP MAC] by local choice (reason=3)
[16543.737566] cfg80211: Calling CRDA to update world regulatory domain
[16543.747499] cfg80211: World regulatory domain updated:
[16543.747510] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[16543.747518] cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[16543.747524] cfg80211:   (2457000 KHz - 2482000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[16543.747529] cfg80211:   (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[16543.747534] cfg80211:   (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[16543.747539] cfg80211:   (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[16546.240014] wlan1: authenticate with [AP MAC]
[16546.298661] wlan1: send auth to [AP MAC] (try 1/3)
[16546.300412] wlan1: authenticated
[16546.300741] rtl8187 1-3:1.0 wlan1: disabling HT/VHT due to WEP/TKIP use
[16546.300747] rtl8187 1-3:1.0 wlan1: disabling HT as WMM/QoS is not supported by the AP
[16546.300751] rtl8187 1-3:1.0 wlan1: disabling VHT as WMM/QoS is not supported by the AP
[16546.304473] wlan1: associate with [AP MAC] (try 1/3)
[16546.307090] wlan1: RX AssocResp from [AP MAC] (capab=0x431 status=0 aid=2)
[16546.307946] wlan1: associated
[16546.307992] IPv6: ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready
[16546.308625] IPv6: ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready

lsmod:

Module                  Size  Used by
rtl8187                64909  0 
mac80211              626489  1 rtl8187
cfg80211              484040  2 mac80211,rtl8187
nls_utf8               12557  0 
isofs                  39835  0 
ctr                    13049  0 
ccm                    17773  0 
rfcomm                 69160  0 
bnep                   19624  2 
bluetooth             395423  10 bnep,rfcomm
hid_generic            12548  0 
joydev                 17381  0 
uvcvideo               80885  0 
videobuf2_vmalloc      13216  1 uvcvideo
videobuf2_memops       13362  1 videobuf2_vmalloc
videobuf2_core         40664  1 uvcvideo
videodev              134688  2 uvcvideo,videobuf2_core
usbhid                 52616  0 
eeprom_93cx6           13344  1 rtl8187
arc4                   12608  2 
hid                   106148  2 hid_generic,usbhid
kvm_amd                59987  0 
kvm                   451511  1 kvm_amd
radeon               1514165  3 
psmouse               102222  0 
k10temp                13126  0 
toshiba_acpi           22901  0 
sparse_keymap          13948  1 toshiba_acpi
serio_raw              13462  0 
wmi                    19177  1 toshiba_acpi
snd_hda_codec_conexant    57441  1 
snd_hda_codec_hdmi     46207  1 
snd_hda_intel          52355  5 
snd_hda_codec         192906  3 snd_hda_codec_hdmi,snd_hda_codec_conexant,snd_hda_intel
ttm                    85115  1 radeon
snd_hwdep              13602  1 snd_hda_codec
snd_pcm               102099  3 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel
snd_page_alloc         18710  2 snd_pcm,snd_hda_intel
snd_seq_midi           13324  0 
snd_seq_midi_event     14899  1 snd_seq_midi
snd_rawmidi            30144  1 snd_seq_midi
snd_seq                61560  2 snd_seq_midi_event,snd_seq_midi
snd_seq_device         14497  3 snd_seq,snd_rawmidi,snd_seq_midi
snd_timer              29482  2 snd_pcm,snd_seq
drm_kms_helper         52758  1 radeon
snd                    69238  21 snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_hda_codec_conexant,snd_pcm,snd_seq,snd_rawmidi,snd_hda_codec,snd_hda_intel,snd_seq_device,snd_seq_midi
soundcore              12680  1 snd
drm                   302817  5 ttm,drm_kms_helper,radeon
video                  19476  0 
i2c_piix4              22155  0 
i2c_algo_bit           13413  1 radeon
mac_hid                13205  0 
parport_pc             32701  0 
ppdev                  17671  0 
lp                     17759  0 
parport                42348  3 lp,ppdev,parport_pc
ahci                   25819  2 
atl1c                  46086  0 
libahci                32168  1 ahci

I'm at a loss here, as I've tried reboots, wicd, and network-manager. The card itself is fine on Windows 7 (as I still dual-boot and can test it). I've removed network-manager before using wicd, and vice-versa, as well as having both installed. My suspicion is that some service or background program is causing the card to channel-hop, but I am not sure how to check whether that is happening, or which service is causing it. However, the hard-block issues seen on the live CD are not happening.

Due to my not having been able to check this on previous versions due to GPU incompatibility making Ubuntu unusable, I have no evidence that this is a bug introduced in Trusty.

Edit: sudo iwconfig wlan1 when not connected:

wlan1     IEEE 802.11bg  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

sudo iwconfig wlan1 when connected to my WPA2 net:

wlan1     IEEE 802.11bg  ESSID:"XXXXXXXXXX"  
          Mode:Managed  Frequency:2.462 GHz  Access Point: XX:XX:XX:XX:XX:XX   
          Bit Rate=54 Mb/s   Tx-Power=20 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=39/70  Signal level=-71 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:2   Missed beacon:0

sudo iwconfig wlan1 for WEP:

wlan1     IEEE 802.11bg  ESSID:"XXXXXXXXXX"  
          Mode:Managed  Frequency:2.437 GHz  Access Point: XX:XX:XX:XX:XX:XX   
          Bit Rate=11 Mb/s   Tx-Power=20 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:15A4-A159-AF
          Power Management:off
          Link Quality=47/70  Signal level=-63 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:27  Invalid misc:33   Missed beacon:0

I know for a fact that Windows experiences higher signal levels, both in terms of the dBm scale, and in terms of reported percentage connection quality.


Solution 1:

Edit: The previous link to the drivers was broken. It appears it's built into the kernel now according to this I believe the rest of this answer is still valid.

If this fails you could try this. source: http://www.backtrack-linux.org/forums/showthread.php?t=54375

Now open a new terminal and type the following:

ifconfig wlan1 down

or wlan0, whichever your card is on. use "ifconfig -a" to find out

Note the following 2 steps may be illegal in your country, if so skip them and continue. Then type:

iw reg set BO

This sets the country code to boliva so you can use the alfa card in max power.

Then type:

iwconfig wlan1 txpower 30

or wlan0, whichever your card is on.

This sets your card to 30db which is the max power the card can use.

Then type:

iwconfig wlan1 rate 1M

or wlan0, whichever your card is on.

This should fix the connection drop or very slow internet problem [main issue for me]

Now you are almost done, just type the following:

ifconfig wlan1 up

or wlan0, whichever your card is on.

Now just open your network manager and connect to your network and the problem should be fixed.

Just using iwconfig to set your rate, it will revert after rebooting. You can add the line to your /etc/rc.local to make it run every reboot though. I prefer to use something like:

iwconfig wlan1 rate 18M AUTO

which is "normal auto-rate up to 18M"

There are a few other things that can help with unstable/low quality connections... namely setting RTS & fragmentation threshold (default 2300ish) to 512 or lower to force smaller packet sizes (down to as low as 256). With this you could get stable at much higher data rates than before.

Overall, I start with this to my /etc/rc.local & tweak occasionally til it's rock stable.

iwconfig wlan1 rate 36M auto
iwconfig wlan1 frag 512
iwconfig wlan1 rts 512

Another thing you could try is safe removal from windows 7 (to power it down and insure is isn't left in an unstable state) prior to rebooting ubuntu and reinserting into the port.

One more thing to try is to adjust both short and long retries at the driver level. Try this.

iwconfig wlan1 retry short 21


iwconfig wlan1 retry long 21

Setting the retries to 31 has also been reported to work (see comments below)

What put me onto looking up these commands in the man page for iwconfig was information I found here: http://support.data-alliance.net/alfa-500mw-usb-improve-performance-significantly/

Solution 2:

Try specifying a static IP address. You'll have to find an IP outside the block offered by your router (your router may default to offering addresses above 192.168.1.100). Set your NIC to a double static double digit IP such as 192.168.1.10.

You can do this by click:

(Click on) Network Manager Notification Icon > Edit > Edit Connections

(Select the Wifi Connection by name) > Edit > (click tab) IPv4 Setting > (Change Automatic DHCP to) Manual > Add (Fill in: Address, Netmask, Gateway) > (Fill in DNS servers coma seperated) > (optional Search domains) > Save

Anything else can be left at default.