Wireless Networking with ndiswrapper
How to use ndiswrapper to set up network cards normally unsupported by Linux. [This article initially appeared in TUX, issue 8.]
by Jes Hall
Wireless cards can be quite a bit of trouble for Linux users. Very few manufacturers have any interest in writing Linux drivers or releasing information about their cards so other people can use this information to write Linux drivers. There is a small selection of Linux-compatible Wi-Fi (wireless networking) cards, but they tend to be rather expensive. Worse, you don't get very much choice about which wireless networking chipset is built-in when you buy a laptop.
ndiswrapper is a project that provides a kernel module to load Windows NDIS wireless card drivers under Linux. NDIS stands for Network Driver Interface Specification and is the Windows/DOS driver interface. The ndiswrapper module wraps around this driver, acting as a translator between it and the Linux kernel.
Installing ndiswrapper is not for point-and-click users. It requires using the command line and being able to locate drivers and specialised instructions for your card. If this sounds like something you'd have difficulty doing, ask a geek to help. Your local Linux Users Group is a great place to find a friendly Linux guru who can help you with this.
Installing ndiswrapper
Many Linux distributions have binary packages for ndiswrapper. Use the
package updating tool for your distribution to make sure you have the
latest version available installed. Some distributions separate out the
driver and the command-line tools into two packages, so check to make
sure that you have ndiswrapper-utils or any similarly named package installed if typing
ndiswrapper
at the command line as root results in
command not found
.

Figure 1. Installing ndiswrapper
Identifying Your Card
To install and set up ndiswrapper, you need to know the chipset of your wireless card and find a suitable Windows driver to use. Then, you need to install ndiswrapper either from a package or by compiling the sources.
The chipset of your card differs from the brand or model. It refers to the actual chips inside the card that control its function. So a planet-, belkin- or genius-branded card could all have the same chipset and be able to use the same driver. Some manufacturers even have been known to use different chipsets in cards with the same model number.

Figure 2. The KDE Info Center
As shown in Figure 2, I'm using the KDE Info Center (kinfocenter) to get information about my devices. Your wireless card should show up under the PCI section, regardless of whether the card is built-in to your computer or is a PCMCIA card. The last item in the list in Figure 2 is my wireless card. According to this, it has a Realtek chipset, model 8180l, revision 20. This is a little cryptic, but all we need to do with this information is match it up to a driver that works with ndiswrapper.
If you don't have a graphical tool like the KDE Info Center at your
disposal, you can get the same information from the command line using
the command lspci
. If your shell tells you the command is not found,
try specifying the full path--often /sbin/lspci
.
Armed with the knowledge of what chipset your card is, the next port of call is the ndiswrapper wiki's card list.
Find the Driver
In some cases, you may have the original Windows driver disk. You can use this disk instead of downloading a driver, although you're likely to get a more recent driver if you download one. The ndiswrapper wiki page says that most people have had success using the Windows XP driver from the chipset manufacturer's Web site. Once you've located a driver for your card, copy it from your driver CD/floppy or download it to disk and extract it.
If your driver is in the form of a Windows self-extracting zip file with a
.EXE extension, it's possible that Linux unzip
can still extract it. Try using
unzip file.exe
from the command line. Locate the driver installation
instructions file. It will have the extension INF. If there is more
than one of these files, the ndiswrapper wiki will often point you to
which one you should use.
This step requires some command-line use. Open up a terminal and change to
the directory containing your drivers. If you use Konqueror as your file
manager, you can bring up a terminal in the directory you're already in
by using Window→Open Terminal Emulator. This lets you see a graphical
representation of the current directory in the top pane, and use the
command line in the bottom pane. You need root privileges for this
step. Either use the su -
command to change to the root user, or if
you have your system set up for it, use sudo
.
# ndiswrapper -i filename.INF
This causes ndiswrapper to create a configuration directory in /etc to hold the driver file and configuration pertaining to the driver and install the driver to it. Now if you issue the command:
# ndiswrapper -l
you should see something like the following:
dessa@holly:~> /usr/sbin/ndiswrapper -l net8180 driver present, hardware present
To load the module, type modprobe ndiswrapper
as the root user. To
set up the ndiswrapper module to be loaded on boot, type:
# ndiswrapper -m
This writes out a line in a system configuration file--usually /etc/modprobe.conf--to tell the system that your wireless card uses the ndiswrapper driver.
Set Up Networking
Now that you have ndiswrapper installed and a driver for your card, you should be able to set it up using the networking tools that come with your distribution. Here, I'm using SUSE 9.3, but these settings would apply no matter what distribution I'm using.
The ndiswrapper device is called wlan0, which means the first wireless
networking device on the system. If the ndiswrapper -m
step completed
correctly, your system knows that the wlan0 device and the ndiswrapper
driver are supposed to go together.

Figure 3. One Step in Setting Up Networking

Figure 4. Another Step in Setting Up Networking
Potential Problems
It's very difficult to describe a method that will work on every possible Linux distribution. What if these instructions don't work for you? A few minutes spent in troubleshooting and gathering information makes it much more likely that you'll find some help. Your first port of call should always be Google. Try to search for "ndiswrapper SUSE", replacing SUSE with the name of your distribution.
1) Check that the module is loaded:
open up a terminal and type in lsmod
. This shows you a list of the
currently loaded driver modules. Does ndiswrapper appear in this list? If
it doesn't, try typing modprobe ndiswrapper
and make a note of any errors. No
output at all means the module loaded fine.
2) Check that the card is associating with an access point:
open up a terminal and type iwconfig
as root. You should see some
output something like this:
wlan0 IEEE 802.11b ESSID:"internet@home" Nickname:"holly" Mode:Managed Frequency:2.437 GHz Access Point: 00:12:17:3A:51:E5 Bit Rate=11 Mb/s Tx-Power:20 dBm Sensitivity=0/3 RTS thr=2432 B Fragment thr=2432 B Encryption key:off Power Management:off Link Quality:100/100 Signal level:-72 dBm Noise level:-256 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
If the part after ESSID reads off/any
and the part after Access Point
is full of 0
s, try manually associating. Type iwconfig wlan0
essid
, and see if the lights on your card light up.
3) Check that the card has a valid IP address:
open up a terminal and type ifconfig
as the root user. Look for the
section that says inet addr
under the wlan0 section. Do you have a valid
IP address there, on the right subnet for your network? If so, try to
ping some things on your home network. Try to ping your wireless access
point or any other computers to figure out if you have any connectivity
at all.
4) Check your default route:
open up a terminal and type route -n
as the root user. Do you have
a line that starts with 0.0.0.0
? Under the Gateway
column, does it show you the address of your router?
5) Check your DNS: if you can ping local machines by their IP addresses, but you cannot see sites on the Web, it's possible you don't have correct settings for DNS.
If you need to ask for help on forums or mailing lists, listing the results of these steps will make it much easier for people to help you.
Adventurous Users Only!
So, what do you do if your Linux distribution doesn't ship ndiswrapper binaries?
Installing ndiswrapper from sources is always an option if you know your way around a terminal. To do this, you need to have the kernel sources installed and the development packages for your distribution that include the GNU C Compiler and other tools required to compile software. Remember, think twice before you press Enter if you're using the terminal with root permissions.
Download the ndiswrapper sources from the downloads page. Either extract the sources with ark or file-roller or from the command line with:
# tar xjf ndiswrapper-$version.tar.bz2
Replace $version
with the version of ndiswrapper you've
downloaded. Hint: the terminal can complete commands and filenames for
you. Try typing in ndis
and then press the Tab key.
Change into the directory you've just extracted:
# cd ndiswrapper-$version
Inside this directory are two files you should at least skim through: INSTALL and README. To compile and install ndiswrapper, issue the command as root:
# make install
About the Author
Jes Hall is a UNIX systems consultant and KDE developer from New Zealand. She's passionate about helping open-source software bring life-changing information and tools to those who would otherwise not have them.
- Login to post comments
Big thx for tutor :) all
Big thx for tutor :) all tips is easy to understand and to follow.
Greets Eugen
You can use ndiswrapper to
You can use ndiswrapper to get a great deal of cards working that don't have a native Linux driver.
Belkin Wireless G USB adapter n Ubuntu
Thankyou - followed you comments - copied from CDrom
with Belkin adapter - rebooted and it all came straight up.
How it should. Impressed. rgds Ted Osburn
How to disable USB wireless device?
I really managed to get my SIS 163u usb wireless device work with ndiswrapper. Please could someone tell me how to disable it?
ifdown wlan0 close the connection, but my device is still on (flashing light) and searches for networks. I 'd like to turn it off before I remove it.
Could you provide some help on this one?
Wifi Card
thankyou, this worked great, would you have any advice on a USB wifi card?
wifi
After many attempts over several weeks and still not able to establish a wireless connection, ran across your article. Followed all the applicable steps and had a connection within a few hours running SimplyMEPIS_3.4-1.rc1. Many Thanks Jes Hall
A big big thank you from me
A big big thank you from me too!
After the Driver - Debian, Ubuntu and Kubuntu
I set up a page for how to configure wireless networking under Debian, Ubuntu and Kubuntu that some may find useful. I don't cover actual driver installation, but I pick up where most of the driver instruction pages leave off... It requires hand-editing some files, but the resulting setup can be made to "just work".
Deb_Wifi
My site has no ads, seriously.
I configer
I configered , thanks , very useful feature.
ubuntu 5.10
Thank you for your site. It was the solution I was looking for. I will probably spend weeks researching.
right now i will look another feature.
I have a HP Compaq nx6125, with broadcom's BCM4318 Wi-fi.
it also have bluetooth, but hcitool dev says there are no devices.
All I found on google were success stories with usb bluetooth.
I'm trying to use my laptop's embeded bluetooth support.
Any sugestions?
thanks in advance
Mauro
Mendoza - Argentina
That's because
That's because, google sandboxes new sites, where you can possibly find what you need. If you go to the last pages, you'll find what you want. I found this site there, no problems.
Re: ubuntu 5.10
Sorry -- I don't use Bluetooth (although I do mention Bluetooth on my site, under the Opinion section).
Deb_Wifi
Awesome site, Gary!
That's exactly what I needed to "finish" my wireless networking setup on my HP zv5120us laptop. I'd gotten ndiswrapper working quite a while ago on Debian Unstable, but recently switched to Ubuntu 5.10 and had to get it set up again. I don't have anything like ifplugd or waproamd running, so I'd have to CTRL-C twice during the boot process to get it to stop trying to get an address via DHCP when no network connectivity exists. Then, once it finished booting, I'd manually load ndiswrapper and do 'ifup wlan0' to get networking going. Hopefully, when I get home this evening, I'll go through your instructions and have it "automagically" starting the appropriate networking based on whether or not a cable is plugged in, a wireless AP is available, etc.
Thanks! I'll report any problems I encounter.
BamaRob
Deb_Wifi
Thought I'd post a quick follow up...
When I got home this evening, I decided to try Gary's instructions on my Ubuntu 5.10 laptop. Everything seems to be configured properly, but when I tried 'sudo /etc/init.d/wpasupplicant start' I got:
Starting wpa_supplicant: wpa_supplicant v0.4.5
Copyright (c) 2003-2005, Jouni Malinen and contributors
This program is free software. You can distribute it and/or modify it
under the terms of the GNU General Public License version 2.
Alternatively, this software may be distributed under the terms of the
BSD license. See README and COPYING for more details.
This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/)
usage:
wpa_supplicant [-BddehLqqvwW] -i -c [-D] \
[-P] [-N -i -c [-D] ...]
drivers:
hostap = Host AP driver (Intersil Prism2/2.5/3)
prism54 = Prism54.org driver (Intersil Prism GT/Duette/Indigo)
madwifi = MADWIFI 802.11 support (Atheros, etc.)
atmel = ATMEL AT76C5XXx (USB, PCMCIA)
wext = Linux wireless extensions (generic)
ndiswrapper = Linux ndiswrapper
ipw = Intel ipw2100/2200 driver
wired = wpa_supplicant wired Ethernet driver
options:
-B = run daemon in the background
-d = increase debugging verbosity (-dd even more)
-K = include keys (passwords, etc.) in debug output
-t = include timestamp in debug messages
-h = show this help text
-L = show license (GPL and BSD)
-q = decrease debugging verbosity (-qq even less)
-v = show version
-w = wait for interface to be added, if needed
-W = wait for a control interface monitor before starting
-N = start describing new interface
No configuration found.
I double checked to make sure I had '/etc/default/wpasupplicant' and '/etc/wpa_supplicant.conf' configured properly.
So, for now, I'll keep doing it that way I've been doing it... When I have to reboot, CTRL-C during the boot process where it's trying to enable the network interfaces and get an address from DHCP, then once it boots, run 'sudo ifup wlan0' to bring up the interface.
Thanks anyway,
BamaRob
Not enough info...
BamaRob,
To be sure, I would need to see the "/etc/init.d/wpasupplicant" script file.
It appears that the script, "/etc/init.d/wpasupplicant" is not picking up the options specified in "/etc/default/wpasupplicant". Don't be afraid to look in the /etc/init.d/wpasupplicant file to see what it's trying to do. The ones I tested, do this...
[ -f /etc/default/wpasupplicant ] && . /etc/default/wpasupplicant
Will "source" the file, if it exists, which, in turn, sets "OPTIONS", and OPTIONS is used to start the wpa_supplicant executable (and the message you see is complaining about ... missing options. Thus completes the logic of my guess.
Thanks and Good Luck,
Gary Allen
WIFI with Linux Laptops
I have a HP ZV5000v laptop and got ndiswrapper working with Fedora Core3. I also do not have a problem with the touch pad. I had read that this was a problem and is fixed with a firmware update for the laptop from HP. I am also aware that you can add to your Linux system the Synaptics touchpad driver and get all the bells and whistles working and I had done this, but it was not integrated well enough into the system to leave it there and have it be troublefree. Hence, I just run the basic touch pad and I'm relatively happy. In re of WIFI, I do have it working, but it is not integrated in the Fedora system-config-network command GUI, so I cannot really manage it well. I end up doing the same as a prior poster - that is, having to recall the commands from shell history to get it back in service. I'm happy at home that I have a rj45 cable coming to my desk. All in all, I use my zv5000 for all sorts of stuff. I run VMware on it (oh - I run in 32 bit Fedora avoiding some hassles with dual 32/64 bit libraries and apt getting confused) and do my few Windows things, test out other Linux distros and also run Cedega to run games like Half-Life-2 and more. Oh - Americas Army for Linux plays pretty decently on it too. I am anxious to upgrade to Fedora 5 (when released) or maybe Ubuntu Linux and see if it all works better and is integrated. When it comes to buying a pc card for Linux, going to either Best-Buy or CompUSA, I just do not know what ones would work with stock Fedora - A clear list would REALLY be awesome IMHO. Oh - I've not come to clear understanding if my built-in Bluetooth will work or not and or is tied to the WIFI in some way. I want to get that going one of these days too now that I have a bluetooth enabled mobile phone and a bluetooth iPAQ.
Kas
Need An Online List Of Notebooks With Linux-Friendly WiFi
Xandros recognizes the Netgear 802.11g PC Card I plugged into my HP ze5185 notebook computer, but my wife's newer HP zv5000 notebook uses a Broadcom chipset that Linux doesn't know. The only recourse was ndiswrapper. I used the console setup. It's a little hassle, but it works very reliably with the Netgear wireless router and WEP128 encryption. If the next version of Xandros doesn't recognize the WiFi chipset, I'm going to need to automate the ndiswrapper commands so they run at startup instead of scrolling through the console history and manually running them in the proper order.
The zv5000 also has some keyboard and mouse controller that Linux doesn't like. The keyboard eventually started working on its own after a few initial boots (TuxMagic), but the built-in touch pad pointing device is dead, requiring an external USB mouse.
We really need a site where popular hardware is ranked for Linux compatibility. This would reduce the frustration factor when buying a new computer, only to find that big chunks of hardware don't work with Linux, or require a lot of effort to get them running. It would also encourage manufacturers to make Linux friendly hardware.
This is a much bigger deal for notebook PCs, because they tend to use weirder hardware than most desktop PCs. We need something similar to www.linuxprinting.org, but for notebooks. There's always http://www.linux-laptop.net but it needs more entries. It provides case studies, which are good, but it'd be more helpful if there was a synopsis of the data. It needs a database that can be queried online, so it's possible to input the hardware features you want and the distro you'd like to use, and see which notebooks are the most compatible, what works and what doesn't. Then, the individual user reports could be available as links once you've narrowed the search.
HP zv5000
I have an HP zv5120us and have had very good luck with the latest Ubuntu (5.10 Breezy Badger) recognizing all of the keys and the touchpad pointing device. I still had to muck around a bit with ndiswireless, but I got it working without too much trouble. If you're not dead set on Xandros, give Ubuntu a try. Or, boot an Ubuntu Live CD session, and if the hardware works, save the X configuration file(s) out to compare to what Xandros has.
Good luck,
BR
linux on laptops
I would suggest googling the laptop model, such as "ze4000 linux", or checking Linux on Laptops (www.linux-laptop.net). Although historically (such as six months ago) the centrino laptops were a total headaches, they are now working very well with Mandriva 2006 and most other major distros.
Your best bet may be to buy a slightly older model, which will have more information about it and how to get things working. You may save a bit, too, unless you are absolutely keen on the latest Yonah processor, etc.
Module
When I did all the steps and tried modprobe ndiswrapper I received: Failure. Module not found :( help!!!
With one of the versions of
With one of the versions of ndis i installed it set the module alias as wlan0,
so "modprobe wlan0" used to do the trick.
Not sure if this will help
Sorry also after using
Sorry also after using ndiswrapper -m to add the module alias to /etc/modprobe.conf
Check the contents of /etc/modprobe.conf or use:
$ grep wlan0 /etc/modprobe.conf to see if an alias has been set for ndiswrapper
This will show you what the module alias has been called.
Good luck
Great article! Perfect for
Great article!
Thanks!!!
Great article!
I have been trying off-and-on to get wireless working on my Mepis 3.3.1 box for several weeks, but to no avail. This article was the reason for my success. Oh, I still had a few hurdles to jump that were not covered (my usb dongle drivers were secreted away in an install shield cab file), but it provided a clear and concise roadmap to getting wireless working for me. Thank you Jes and thank you TUX.
iwconfig shows my wireless
iwconfig shows my wireless info under eth1 but when I do an ifconfig eth1 isn't listed. No wireless access, what could be the problem?
Sans - Yast?
what if we dont have Yast? I've tried that annoying text based program and it doesnt change anything and is quite annoying to understand. is there a universal program to install (possibly witha gui) that can help set it up?
Disable usb wireless device
I really managed to get my SIS 163u usb wireless device work with ndiswrapper. Please could someone tell me how to disable it?
ifdown wlan0 close the connection, but my device is still on (flashing light) and searches for networks. I 'd like to turn it off before I remove it.
Could you provide some help on this one?
Stop wifi device.
Have you tried "modprobe -r ndiswrapper" as root? I think this should poweroff the wifi adapter. Please correct me if I am wrong.