March 7, 2013

The Wonderful World of Arch (Part 5) [Wireless]

This isn't really a continuation - it's more just my notes on getting wireless working with a Broadcom Wireless chip.

*** LONG ***

First thing first - do *another* system upgrade (I am assuming you are logged in as a normal user and have sudo installed - also assuming you have wired access):

sudo pacman -Syu

This ensures that you have the latest linux headers - required for broadcom wireless.
At this point, I would usually redirect you to the Arch Wiki, but I won't. Unfortunately, the wiki is kind of contradictory about broadcom chips. I'm going to post what worked for *me*. I can't promise that it will work for you, but hopefully it'll give you a good start.

I have a little aside to make now: Installing packages from the AUR (Arch User Repository).

To install a package from the AUR, open a browser (you can install one with pacman: sudo pacman -S chromium). Any browser from here will work. And search google with the string "AUR [package]". Either download the tarball in-browser or wget it from terminal.

cd to the directory the tarball downloaded to and run

tar -xzvf [archive name]

to untar the archive and cd to the directory created. Then run

makepkg

...this will create a *.pkg.tar.xz file which can be installed with

sudo pacman -U [package name].pkg.tar.xz

...this will install the new package.

***NOTE*** You can take a shortcut for installing things from the AUR with a package like aurget. The usage is very similar to that of pacman, hwoever it does not need to be run as root.

Step 1:
Install firmware
Begin by installing b43-fwcutter:

sudo pacman -S b43-fwcutter

Then install b43-firmware from the AUR.

Step 2:
Install broadcom-wl (the wireless driver [proprietary])from the AUR.
Remove b43 and ssb from the kernel with rmmod:

sudo rmmod b43
sudo rmmod ssb



***NOTE*** b43 and ssb may not be loaded - this is okay.

Load wl:

sudo modprobe wl

Check that lib80211 was loaded by wl with lsmod.

sudo lsmod | less

(hit q to exit) If not loaded, load it with

sudo modprobe lib80211

..and update dependencies

sudo depmod -a


Step 3:
Make the module load at boot by creating a file for each module in /etc/modules-load.d with the naming convention [module name].conf
Inside that file, write the module name. For example if you wanted to load wl at boot you would do

sudo nano /etc/modules-load.d/wl.conf

and write wl in the file. Save and exit nano.

You need to load wl, lib80211, and virtio-net at boot.

Configuring Wireless
For configuring wireless, I've chosen to configure everything manually rather than using a network manager like netcfg.
wireless_tools should already be installed. If for some reason it isn't, use pacman to install it.
Additionally, you should install iw and wpa_supplicant, both with pacman.

At this point, you should still be connected to your wired network. You can run ip addr to see the names and connection statuses of each of your interfaces. Make note of the interface that has no ip address - that is your wireless interface. From here on out, replace [interface] with the name of your interface.

***NOTE*** If trying to connect to an ad-hoc network, use "sudo iw [interface] set type ibss" to set your interface to ad-hoc.

Activate the interface with

sudo ip link set [interface] up

...and scan for wireless networks with

sudo iw dev [interface] scan | less

Take note of the SSID, and look for anything referring to WPA or WEP - it will be important when you configure the wireless connection.
The next part is dependent on what kind of security is on the network. Instructions can be found here.
Information on configuring wpa_supplicant.conf can be found here. I can't walk you through this is because it will be different for every network. If you're having trouble, some google-fu will definitely help.
Instead of running

sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf

...you should use

sudo wpa_supplicant -Dwext -i[interface] -c/etc/wpa_supplicant.conf -B

-D specifies the driver to use, -i specifies the interface, and -c specifies the configuration file.

From here, you're ready to grab an IP address with

sudo dhcpcd[interface]

...and check that it worked with

ip addr

If you see a line beginning with inet, you have an ip and everything is working!

The next (and final!) step is to configure the network to start at boot.
Create the "/etc/systemd/system/network.service" file with a text editor and make it like this:

[Unit]
Description=Network Connectivity
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-[interface].device
After=sys-subsystem-net-devices-[interface].device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/ip link set dev [interface] up
ExecStart=/usr/sbin/wpa_supplicant -Dwext -i[interface] -c/etc/wpa_supplicant.conf -B
ExecStart=/sbin/dhcpcd [interface]

[Install]
WantedBy=multi-user.target


Save, and enable with

sudo systemctl enable network

...and reboot! Remove your ethernet cable and wireless should come up on boot! You can check by issuing ip addr.
Congratulations on your fully functioning Arch install!

No comments:

Post a Comment