Domyślny sterownik dla Realtek’a 8187 w Ubuntu jest niestety „niezbyt dobry”. Zasięgi łapie znakomite ale gorzej z bitrate’em. Prawdopodobnie przez obniżenie bitrate’u sterownik uzyskuje takie zasięgi. Postanowiłem wrócić do Ndiswrappera i sterownika z Win XP. Poradnik jest to kompilacja materiałów z sieci dotyczących instalacji tej karty w Ubuntu 8.04 oraz mojego poradnika napisanego dla forum Ubuntu.pl dotyczącego także Ubuntu 8.04.
1. Ściągamy sterownik dla Windows.
Ze strony Realtek’a, dział download ściągamy najnowszą wersję sterownika dla karty 8187B.
Rozpakowujemy archiwum.
2. Instalujemy ndiswrapper’a.
sudo apt-get install ndiswrapper-common ndiswrapper-utils ndiswrapper-utils-1.9
3. Instalacja sterownika Windows.
Przechodzimy do katalogu RTL8187B/WinXP w rozpakowanym archiwum ściągniętym w kroku 1. Operację tę wykonujemy oczywiście w konsoli. Jest to bardzo ważne aby być w tym katalogu. Następnie wydajemy polecenie:
sudo ndiswrapper -i net8187b.inf
Następnie:
sudo depmod -a
Następnie odnajdujemy oznaczanie naszej karty wifi:
lsusb
Szukamy linijki z nazwą Realtek Semiconductor Corp.. Przed nazwą powinno być tam podobne oznaczenie do tego: 0bda:8197. U mnie całą linijka wygląda tak:
Bus 006 Device 003: ID 0bda:8197 Realtek Semiconductor Corp.Po odnalezieniu oznaczenie karty, każemy ndiswrappre’owi dla urządzenia o oznaczeniu xxxx:yyyy używać podanego wcześniej sterownika z Windows. Wydajemy polecenie:
sudo ndiswrapper -a tu_wpisujemy_oznaczenie_uzyskane_po_lsusb net8187b
czyli u mnie wygląda to tak
sudo ndiswrapper -a 0bda:8197 net8187b
Dodajemy wpis do /etc/modules
sudo nano /etc/modules
na końcu pliku dopisujemy:
ndiswrapper
Do pliku /etc/modprobe.d/blacklist.conf
sudo nano /etc/modprobe.d/blacklist.conf
dopsiujemy:
blacklist rtl8187
4. Usypianie i hibernacja.
Musimy teraz edytować kilka plików, aby po wybudzeniu komputera bądź to z uśpienia czy hibernacji, sieć wifi nam działał.
Sposób pierwszy to edycja pliku /usr/lib/pm-utils/sleep.d/55NetworkManager.
sudo nano /usr/lib/pm-utils/sleep.d/55NetworkManager
Edytujemy tylko ostatnią część pliku aby miała ona następującą postać:
case "$1" in hibernate|suspend) suspend_nm rmmod ndiswrapper ;; thaw|resume) modprobe ndiswrapper resume_nm ;; *) exit $NA ;; esac
Wadą tego rozwiązania jest jednak to, że po każdej aktualizacji pakietów odpowiedzialnych za zarządzanie energią czy pakietów NetworkManager’a plik ten zostanie nadpisany i potrzebna będzie ponowna edycja pliku.
Sposób drugi to utworzenie skryptu. Sposób nietestowany przeze mnie i nie wiem czy to rozwiązanie działa – w teorii powinno :). Tworzymy skrypt o jeden początkowy numerek większy niż nazwa pliku użytego w sposobie pierwszym. Czyli jeżeli nasza nazwa pliku dla skryptu NetworkManger’a to /usr/lib/pm-utils/sleep.d/55NetworkManager, to tworzymy plik /usr/lib/pm-utils/sleep.d/56ndiswrapper:
sudo nano /usr/lib/pm-utils/sleep.d/56ndiswrapper
Wklejamy to:
#!/bin/sh . "${PM_FUNCTIONS}" case "$1" in hibernate|suspend) rmmod ndiswrapper ;; thaw|resume) modprobe ndiswrapper ;; *) exit $NA ;; esac
Nadajemy prawa do wykonywania:
sudo chmod ugo+x /usr/lib/pm-utils/sleep.d/56ndiswrapper
Zalety tego sposobu to, że podczas aktualizacji nic nie powinno się dziać. Wady – nie wiem czy działa :).
5. Sprawdzamy czy działa.
Rozłączamy połączenie wifi w NetworkManger.
Usuwamy stary moduł odpowiadający za kartę:
sudo rmmod rtl8187Ładujemy ndiswrapper’a:
sudo modprobe ndiswrapperPróbujemy się połączyć. Jeżeli nie dział, powinien pomóc restart komputera.