Warning: THE VOID WIKI IS DEPRECATED. It is no longer being maintained, contains outdated and incorrect information, and will eventually be shut down. Please refer to the Void Handbook, https://docs.voidlinux.org/, for the official documentation. If you can't find the information you're seeking, please raise an issue at https://github.com/void-linux/void-docs/issues

Network Configuration

From Void Linux Wiki
Jump to navigation Jump to search

Static IP

Static IP configuration can either be done through dhcpcd and its configuration file /etc/dhcpcd.conf, or iproute commands in /etc/rc.local (see below). If an ethernet interface was configured at the installer, the dhcpcd.conf file should look as follows:

# Static IP configuration.
interface eth0
static ip_address=192.168.1.2
static routers=192.168.1.1
static domain_name_servers=8.8.8.8 8.8.4.4

The dhcpcd service must be enabled in the default runlevel:

# ln -s /etc/sv/dhcpcd /var/service/

A simpler solution without the need of running the dhcpcd daemon would be to setup the network interface in the file /etc/rc.local via commands from the iproute package:

# Static IP configuration via iproute
ip link set dev eth0 up
ip addr add 192.168.1.2/24 brd + dev eth0
ip route add default via 192.168.1.1

Dynamic IP (DHCP)

This is handled by the dhcpcd package and its service. To acquire a lease for any known interface simply enable the dhcpcd system service:

# ln -s /etc/sv/dhcpcd /var/service/

DHCP per interface

The default dhcpcd runit service works in all available network interfaces, but sometimes only a single interface needs to be setup, in that case we'll make another service with some modifications:

# mkdir -p /etc/sv/dhcpcd-eth0
# vi /etc/sv/dhcpcd-eth0/run
       #!/bin/sh
       exec dhcpcd -B eth0
# chmod 755 /etc/sv/dhcpcd-eth0/run
# ln -s /run/runit/supervise.dhcpcd-eth0  /etc/sv/dhcpcd-eth0/supervise

This new runit service will only work for the eth0 device. Now you just need to symlink it to the current runlevel to enable and start it:

# ln -s /etc/sv/dhcpcd-eth0 /var/service/

You can find available network devices by executing

# ip link

Desktop Network Daemons (NetworkManager, wicd and connman)

These applications conflict with the methods mentioned above so before using NetworkManager, wicd or conmman make sure that dhcpcd and wpa_supplicant services are stopped and disabled:

# rm -f /var/service/<foo>

or for the per interface service; make sure that none of these services are started by default.

NetworkManager-openvpn issues

For those having issues with NetworkManager-openvpn not connecting, it seems that the nm-openvpn user is not added. Do so (make sure dbus, cgmanager and consolekit are installed):

# groupadd -r nm-openvpn
# useradd -r -g nm-openvpn -d / -s /sbin/nologin -c "Default user for running openvpn spawned by NetworkManager" nm-openvpn

This should take care of it, credits to AnAkkk on the Arch forums!

Wireless (default)

Wireless connections are handled by the wpa_supplicant package; it can handle multiple kinds of security against the APs: none, WEP, WPA-PSK (WPA Personal), WPA-EAP (WPA Enterprise) and more.

Copy the wpa_supplicant.conf file to match your network device:

$ cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant-<device>.conf

WEP

Just edit /etc/wpa_supplicant/wpa_supplicant-<device>.conf and add the following lines:

# Default configuration file for wpa_supplicant.conf(5).
ctrl_interface=/run/wpa_supplicant
ctrl_interface_group=wheel
eapol_version=1
ap_scan=1
fast_reauth=1
# Add your networks here.
network={
    ssid="MYSSID"
    key_mgmt=NONE
    wep_key0="YOUR AP WEP KEY"
    wep_tx_keyidx=0
    auth_alg=SHARED
}

WPA-PSK (WPA Personal)

For WPA-PSK we must generate the pre shared key with wpa_passphrase(8):

$ wpa_passphrase MYSSID key

Just append the resulting output from the above command to /etc/wpa_supplicant/wpa_supplicant-<device>.conf:

# Default configuration file for wpa_supplicant.conf(5).
ctrl_interface=/run/wpa_supplicant
ctrl_interface_group=wheel
eapol_version=1
ap_scan=1
fast_reauth=1
# Add here your networks.
network={
    ssid="MYSSID"
    #psk="YOUR AP KEY"
    psk=a8c34100ab4e5afac33cad7184d45a29ee0079001577d579bec6b74e4d7b5ac8
}

Starting wpa_supplicant

You can now enable the dhcpcd service, which has a hook to start wpa_supplicant, and use the wpa_cli(8) command to see details of this AP connection.

Note: Behaviour changed in dhcpcd-6.10.0-1: The hook is not enabled by default anymore.

Check which version you are using ($ dhcpcd --version). If you're using 6.10.0-1 or newer you have to enable the wpa_supplicant hook:

$ sudo ln -s /usr/share/dhcpcd/hooks/10-wpa_supplicant /usr/libexec/dhcpcd-hooks
Note: Not sure if the following driver option in dhcpcd works anymore. Add -Dwext to your command if you find you have issues.
$ sudo wpa_supplicant -B -i<interface> -c<path/to/conf> -Dwext

If you happen to need a special driver (option -D) you can edit /etc/dhcpcd.conf and add a line like env wpa_supplicant_driver=wext.

After enabling this hook, don't forget to restart dhcpcd:

$ sudo sv restart dhcpcd

If wpa_supplicant is still not starting after this, try starting it from the command line with

$ sudo wpa_supplicant -i <device> -c /etc/wpa_supplicant/wpa_supplicant-<device>.conf

to see if you get any errors.

Wireless (NetworkManager)

Install required packages:

# xbps-install NetworkManager network-manager-applet gnome-icon-theme inetutils-ifconfig gnome-keyring

If you want messages about the state:

# xbps-install xfce4-notifyd

Remove dhcpcd and wpa_supplicant services:

# rm -fr /var/service/dhcpcd
# rm -fr /var/service/wpa_supplicant

Include new services:

# ln -s /etc/sv/NetworkManager /var/service
# ln -s /etc/sv/dbus /var/service

The nm-applet requires some privileges, so, in the same way explained above (NetworkManager-openvpn issues):

# groupadd -r nm-applet
# useradd -r -g nm-applet -d / -s /sbin/nologin -c "Default user for running nm-applet spawned by NetworkManager" nm-applet

Start nm-applet in the desktop manager start file:

nm-applet &

The applet should show up in the system tray. If your desktop manager doesn't have one, look for stalonetray or trayer-srg which are included in Void Linux.

Connecting to hotel / restaurant / airport hotspots via the command line

Oftentimes, wifi hotspots in various public places don't have an accompanying WPA / WEP key. They require you to connect to their ESSID, obtain an IP address, and subsequently log in via a web interface of some sort. Here are two ways that will allow you to log into these networks.

Method 1: one-time connection

If you don't foresee yourself connecting to this network more than once, the following method is an effective way to connect to the establishment's network temporarily:

Step 1: stop the current dhcpcd service if it's running

$ sudo sv stop dhcpcd

Step 2: bring up your wireless NIC

$ sudo ip link set <device> up

Replace <device> with the name assigned to your wireless card. If you don't know its name, you can use the ip a or ip link command.

Step 3: connect to the ESSID of the establishment

$ sudo iw dev <device> connect -w "AwesomeHotel"

The -w option waits until the connection either succeeds or an error occurs.

Step 4: obtain an IP address from the network

$ sudo dhcpcd <device>

You should now be able to fire up your favourite web browser and log into the network normally.

Method 2: saving the connection

If you're staying at a hotel for a few days, you might want to save the connection details for the duration. This method uses the wpa_cli command to store the ESSID of the hotel in the /etc/wpa_supplicant/wpa_supplicant-<device>.conf file. This assumes that you have the wpa_supplicant service running. This won't work if the service isn't up. Once connected, the dhcpcd service will obtain an IP from the network if it too is running.

Step 1: start wpa_cli in interactive mode

$ sudo wpa_cli

At this point, wpa_cli will tell you which interface it's working on and greet you with a > prompt. If you want to specify the interface, simply include its name with the -i switch when starting wpa_cli:

$ sudo wpa_cli -i <device>

You might also see a bunch of unsolicited messages fly by as you move on to step 2.

Step 2: connect to the network and save the ESSID

> add_network
12
> set_network 12 ssid "The_hotel_SSID"
> set_network 12 key_mgmt NONE
> enable_network 12
> save_config
> quit

Enjoy your stay!

See also

  • dhcpcd(8), dhcpcd-run-hooks(8)