This guide will concentrate on how to setup wifi on Arch Linux using netctl command line tool. Netctl is a CLI-based tool used to configure and manage network connections via profiles on Arch Linux. This command should be provided by the base packages that you install when setting up your Arch Linux box for the first time.
If for any reason the command doesn't exist on your system, you can get it by running the command:
$ sudo pacman -S netctl
Then test if it is happy and ready to be used using:
$ netctl --help
netctl require some other dependencies to work fine, please install them using the commands:
$ sudo pacman -S wpa_supplicant dhclient dialog
If you often use PPPoE, also add the package ppp. The dialog is important for the auto-generation of WiFi profiles using ncurses driven menu.
On Arch Linux, all the network profiles managed by netctl are located under the directory /etc/netctl. If you list the contents of this directory, you'll find:
# ls /etc/netctl examples hooks interfaces wlp1s0-hackers_zone
From this example, wlp1s0-hackers_zone is the name of my active wireless connection profile. The naming convention is interface-SSID. So in this case, my wireless interface is wlp1s0 and the WiFI SSID name is hackers_zone.
Automatically generate WiFi Profile with wifi-menu
If you need to setup your profile without manually editing files, then this part is for you. You need the dialog package installed for this to work. The command to use is wifi-menu -o . It will generate the profile file in /etc/netctl/. Note that you need to run this as root user.
$ sudo wifi-menu -o
This will give you a menu with list of available networks in your proximity. Select the one you want to connect to and give it a name and authenticate,
Upon completing setup, you will be automatically connected to the network. Change it or connect to a different network by re-running the same command. Your new network profile will be located on /etc/netctl directory.
Manually define WiFi Profile - DHCP
A manually defined WiFi Profile with WPA authentication looks like below.
# sudo cat /etc/netctl/wlp1s0-hackers_zone Description='My WiFi Profile' Interface=wlp1s0 Connection=wireless Security=wpa ESSID=hackers_zone IP=dhcp Key=Password@345\!
wlp1s0 with your wireless interface name as shown by # ip link show command
hackers_zone with your wireless network name
Password@345\! with the password of your WiFi, Note that you need to use \ to escape special characters.
Starting wireless network profile with netctl
Now that you have the network configured, you may want to check a list of available profiles first:
start it using the command:
$ sudo netctl start [PROFILE]
$ sudo netctl start wlp1s0-hackers_zone
This should bring the profile to service.
Some other useful netctl command are:
$ sudo netctl stop [PROFILE] --> Stops a profiles
$ sudo netctl stop-all --> Stop all profiles
$ sudo netctl restart [PROFILE] --> Restart a profile
$ sudo netctl switch-to [PROFILE] --> Switch to Profile
$ sudo netctl is-active [PROFILE] --> Check whether Profile is active
$ sudo netctl enable [PROFILE] --> Enable Profile to start on boot
Enabling a profile
A profile can be enabled to start at boot by using:
$ sudo netctl enable [PROFILE]
This will create and enable a systemd service that will start when the computer boots. Changes to the profile file will not propagate to the service file automatically. After such changes, it is necessary to reenable the profile:
# netctl reenable [PROFILE]
After enabling a profile, it will be started at next boot if the wireless access point used in a profile is in range respectively.
Static IP Profile
This example is for a profile which uses a static IP address. It is common for Ethernet connection since most wireless networks uses dhcp server/client model.
# cat /etc/netctl/my_static_profile Interface=enp1s0 Connection=ethernet IP=static Address=('192.168.1.10/24') Gateway=('126.96.36.199') DNS=('192.168.1.1')
You can then manage the profile using netctl commands.
netctl is an advanced network management tool. It also support hooks in /etc/netctl/hooks/ and per interface hooks in /etc/netctl/interfaces/. You can set any option in a hook/interface that you can in a profile. We covered the basics you need for more advanced configurations.