This is something that I already dealt with about a year back but it has come again to hunt me. A year back I tried to make use of an old laptop (An IBM T23 to be exact) and install linux on it. The laptop doesn’t have any internal wifi card so I went with an old wifi usb drive. But that thing was already hard to use on windows so getting it to work on linux was a whole different story. First I needed ndiswrapper to get the windows driver to work. But that didn’t do the trick so I went ahead and asked on the Arch linux forums. In the end I dug up a solution which worked for me back then.
A year later I dig up another laptop (An IBM T41 this time) and tried the same procedure. Sadly the thing that did the trick last time wasn’t the whole solution. After some more careful reading of my old thread I put together what is needed to get a wifi pci card or a wifi usb drive to work on an old ibm with linux:
First you need ndiswrapper. For Arch it’ll look like this:
$ sudo pacman -S ndiswrapper
If you have issues running ndiswrapper later you might need the linux headers:
$ sudo pacman -S linux-header
Next up we need to install the driver:
$ sudo nidswrapper -i <driver>.inf
The *.inf file is usually distributed with the driver, sometimes it’s inside the *.exe which means you’ll need to extract it using cabextract.
Now you want to plug in the device of which you just installed the driver and run
$ ndiswrapper -l
This will list all installed drivers and wether or not the device is present. If it says so the driver is correct and the device is recognized. Now with most devices the last thing you want to do is load ndiswrapper on startup using
$ sudondiswrapper -ma
And since this is your first time using it you’ll have to load it manually once:
$ sudo modprobe nidswrapper
Now the device should be ready to use and you can connect to your network using a network mananger or wpa_supplicant. But for me this wasn’t all that was needed. What I need to do is disable ipv6 by editing /etc/sysctl.d/40-ipv6.conf
net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.<wifi device>.disable_ipv6=1
You can find the device name by typing ip link and for me it was the last listed device. The next thing to do is add these two lines to /etc/dhcpcd.conf
noipv6rs noipv6 # Also comment out the line that says something like 'ipv4all'
Now this command has to be executed on every startup:
$ sudo dhcpcd <wifi device> --nohook mtu # Once again get the wifi device with ip link
Now finally we’ll generate a wpa_supplicant config using
# wpa_passphrase <Networkname> <network password> /home/<username>/wifi.conf
You can get your exact Network name by scanning for networks over:
$ sudo pacman -S wifi-menu $ sudo wifi-menu
Don’t use wifi-menu to connect (It’ll probably not work, but you can try).
Finally we can use the config to connect via wpa_supplicant:
sudo wpa_supplicant -D wext -B -i <wifi device> -c /home/<username>/wifi.conf
And that’s it, wasn’t all that hard, right? 😛