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

Difference between revisions of "Network Configuration"

From Void Linux Wiki
Jump to navigation Jump to search
m (Duncaen moved page Network Configuration - to Network Configuration without leaving a redirect)
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Static IP ==
As this wiki is deprecated, and will soon disappear, please refer to [https://docs.voidlinux.org/config/network/index.html the "Network" section of the Void Handbook].
Static IP configuration can either be done through <code>dhcpcd</code> and its configuration file {{path|/etc/dhcpcd.conf}}, or iproute commands in {{path|/etc/rc.local}} (see below). If an ethernet interface was configured at the installer, '''dhcpcd.conf''' should look as follows:
# Static IP configuration.
interface eth0
static ip_address=
static routers=
static domain_name_servers=
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 {{path|/etc/rc.local}} via commands from the {{pkg|iproute2}} package:
# Static IP configuration via iproute
ip link set dev eth0 up
ip addr add brd + dev eth0
ip route add default via
== Dynamic IP (DHCP) ==
This is handled by the {{pkg|dhcpcd}} package and its service. To acquire a lease for any known interface, simply enable the <code>dhcpcd</code> system service:
# ln -s /etc/sv/dhcpcd /var/service/
=== DHCP per interface ===
The default <code>dhcpcd</code> 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 <code>service</code> with some modifications:
<pre># mkdir -p /etc/sv/dhcpcd-eth0
# vi /etc/sv/dhcpcd-eth0/run</pre>
<pre>      #!/bin/sh
      exec dhcpcd -B eth0</pre>
<pre># chmod 755 /etc/sv/dhcpcd-eth0/run
# ln -s /run/runit/supervise.dhcpcd-eth0  /etc/sv/dhcpcd-eth0/supervise</pre>
This '''new''' runit service will only work for the <code>eth0</code> 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 <code>NetworkManager</code>, <code>wicd</code> or <code>conmman</code> make sure that <code>dhcpcd</code> and <code>wpa_supplicant</code> 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.
== Wireless (default) ==
Wireless connections are handled by the {{pkg|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 <code>wpa_supplicant.conf</code> file to match your network device:
$ cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant-<device>.conf
=== Enabling a wireless interface ===
First you need to enable a wireless interface through which to connect to your wireless network.
To view the available networks interfaces on your computer, run:
$ sudo ip link show
This will give you a list of all available interfaces. Wireless interface should be named "wlp2s0" by default, but check the command's output to corroborate this either way, just in case.
To enable this interface, run:  
$ sudo ip link set up <interface_name>
=== WEP encryption ===
For WEP encrypted wireless networks, just edit {{path|/etc/wpa_supplicant/wpa_supplicant-<device>.conf}} and add the following lines:
<pre># Example default configuration file for wpa_supplicant.conf(5).
# Add your networks here.
    wep_key0="YOUR AP WEP KEY"
=== WPA-PSK encryption (WPA Personal) ===
For <code>WPA-PSK</code> encrypted networks, we must generate the <code>pre shared key</code> with {{man|8|wpa_passphrase}}. To do this, run the following command:
$ wpa_passphrase <MYSSID> <key>
Then, just append the resulting output from the above command to {{path|/etc/wpa_supplicant/wpa_supplicant-<device_name>.conf}}:
<pre>wpa_passphrase <MYSSID> <key> >> /etc/wpa_supplicant/wpa_supplicant-<device_name>.conf</pre>
The resulting file should look like the one below.
<pre># Example default configuration file for wpa_supplicant.conf(5).
# Add here your networks.
    #psk="YOUR AP KEY"
This configuration file will be used in the following steps to start <code>wpa_supplicant</code>.
=== Starting <code>wpa_supplicant</code> through <code>dhcpcd</code> hooks===
You can enable the <code>dhcpcd</code> service, which has a hook to start wpa_supplicant, and use the {{man|8|wpa_cli}} command to see details of this AP connection.
Check which version you are using with
$ dhcpcd --version
If you're using and old version you may need to enable the <code>wpa_supplicant</code> 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.
<pre>$ sudo wpa_supplicant -B -i<interface_name> -c<path/to/configuration/file> -Dwext</pre>}}
If you happen to need a special driver (option -D) you can edit {{path|/etc/dhcpcd.conf}} and add a line like <code>env wpa_supplicant_driver=wext</code>.
After enabling this hook, don't forget to restart <code>dhcpcd</code>:
$ sudo sv restart dhcpcd
If <code>wpa_supplicant</code> 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.
=== Starting <code>wpa_supplicant</code> manually ===
Alternatively, you can start wpa_supplicant manually, and run dhcpcd afterwards on your interface to establish the connection without configuring the dhcpcd hook:
$ sudo wpa_supplicant -B -i <interface_name> -c <path/to/configuration/file>
$ sudo dhcpcd <interface_name>
Test the connection afterwards with:
$ ping <arbitrary website>
== Wireless (NetworkManager, no window manager present) ==
Install NetworkManager:
$ sudo xbps-install NetworkManager
Create {{path|/etc/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules}} such that it contains:
polkit.addRule(function(action, subject) {
  if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) {
    return polkit.Result.YES;
For example, by using {{man|1|vi}}:
$ sudo vi /etc/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules
Add yourself to the `network` group:
$ sudo gpasswd -a $USER network
Disable dhcpcd and wpa_supplicant services:
$ sudo rm -fr /var/service/dhcpcd
$ sudo rm -fr /var/service/wpa_supplicant
Enable and start new services:
$ sudo ln -s /etc/sv/NetworkManager /var/service
$ sudo ln -s /etc/sv/dbus /var/service
Connect to a wireless network using nmtui:
$ nmtui
== Wireless (NetworkManager, X11) ==
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
Disable dhcpcd and wpa_supplicant services:
# rm -fr /var/service/dhcpcd
# rm -fr /var/service/wpa_supplicant
Enable and start new services:
# ln -s /etc/sv/NetworkManager /var/service
# ln -s /etc/sv/dbus /var/service
Start <code>nm-applet</code> 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 {{pkg|stalonetray}} or {{pkg|trayer-srg}}, which are available in Void Linux.
=== Captive Portal Detection ===
NetworkManager supports connectivity detection in captive portals. In Void Linux this is off by default. You can enable it by creating this file:
{{hc|File: /etc/NetworkManager/conf.d/10-connectivity.conf|
response&#61;NetworkManager is online
Then restart the NetworkManager:
# sv restart NetworkManager
== Wireless (Connman) ==
Main article: [[Connman]].
Install required packages:
# xbps-install -S connman
Disable the dhcpcd and wpa_supplicant services:
# rm -rf /var/service/dhcpcd
# rm -rf /var/service/wpa_supplicant
Enable and start the connmand service:
# ln -s /etc/sv/connmand /var/service
If you want an applet or tray icon:
# xbps-install -S connman-gtk
# xbps-install -S cmst
Using the interactive CLI connmanctl, connect to a wireless access point, replacing "wifi_<uniqueid>" with whichever corresponds to the access point you wish to connect to. Tab can be used to autocomplete:
# connmanctl
> enable wifi
> agent on
> scan wifi
> services
> connect wifi_<uniqueid>
> exit
== 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 <code>ip a</code> or <code>ip link</code> commands.
==== Step 3: connect to the ESSID of the establishment ====
$ sudo iw dev <device> connect -w "AwesomeHotel"
The <code>-w</code> 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 of your stay. This method uses the {{man|8|wpa_cli}} command to store the ESSID of the hotel in the {{path|/etc/wpa_supplicant/wpa_supplicant-<device>.conf}} file. This assumes that you have the <code>wpa_supplicant</code> service running. This won't work if the service isn't up. Once connected, the <code>dhcpcd</code> 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, <code>wpa_cli</code> will tell you which interface it's working on and greet you with a <code>></code> prompt. If you want to specify the interface, simply include its name with the <code>-i</code> switch when starting <code>wpa_cli</code>:
$ 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
> set_network 12 ssid "The_hotel_SSID"
> set_network 12 key_mgmt NONE
> enable_network 12
> save_config
> quit
Enjoy your stay!
== See also ==
* {{man|8|dhcpcd}}, {{man|8|dhcpcd-run-hooks}}

Latest revision as of 14:33, 13 June 2020

As this wiki is deprecated, and will soon disappear, please refer to the "Network" section of the Void Handbook.