In this tutorial, we’ll discuss the Network Manager package. Initially, we begin with an overview of the package and how we can install it. After that, we focus on the nmcli command. In practice, this is the Network Manager command-line interface.
2. Network Manager Components
Network Manager is a set of tools for configuring the network devices of a Linux machine. Crucially, it features the automatic configuration of network devices in a Linux machine through the Network Manager service. Of course, we can also manually configure in many ways.
First, there’s nmcli, the command-line interface of the Network Manager. Next, there’s a text-based user interface that runs in the terminal. Moreover, the package has a graphical user interface. Finally, there’s an API for third-party access.
3. Installation and Execution
To begin with, let’s install Network Manager. Of course, some Linux distributions come with the Network Manager package pre-installed. It’s usually in the form of a daemon that runs on startup.
In any event, we can install the Network Manager package via a package manager like apt or yum. For example, we can simply run the following command in Ubuntu:
$ sudo apt-get install network-manager
Note that the package name in Ubuntu is currently network-manager. Of course, it may differ between Linux distributions. For instance, the package is called NetworkManager in Red Hat Linux.
3.2. Service Execution
Importantly, we must ensure the service is up and running. Therefore, we may check with the systemctl status command under Ubuntu:
$ systemctl status NetworkManager ● NetworkManager.service - Network Manager Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-05-25 15:18:22 EEST; 42min ago
As a result, we see the active (running) status in the command’s output.
3.3. Relation With Other Network Services
Indeed, Network Manager may coexist with other network tools in a Linux system. However, we may not enable its service while other such services like networkd are running. Because of this, it’s best to stop or disable them beforehand to avoid conflicts.
3.4. Configuration Files
The configuration files of Network Manager reside in /etc/NetworkManager. Further, connection settings are stored in the system-connections subfolder. Most often, we’ll use the nmcli command to configure our network devices. Since it keeps the changes in configuration files, chances are we won’t have to edit any manually.
4. Displaying the Networking Status of a Linux Machine
It’s helpful to get a list of the network devices, connections, and the general networking status. For instance, network devices consist primarily of network cards, while connections are configurations assigned to a network device.
4.1. Displaying the List of All Network Devices
Let’s get the list of all network devices in our Linux machine with nmcli device:
$ nmcli device DEVICE TYPE STATE CONNECTION wlp5s0 wifi connected MY_WIRELESS_CONN enp0s3 ethernet unavailable -- lo loopback unmanaged --
Here, we see three devices in the output. The first one is an up and running Wi-Fi network adapter. The second one is an inactive ethernet adapter. On the last line, we see the loopback network interface.
4.2. Displaying the IP Address of a Device
The command nmcli device show prints properties like the IP Address of a device:
$ nmcli device show wlp5s0 GENERAL.DEVICE: wlp5s0 GENERAL.TYPE: wifi GENERAL.HWADDR: 00:18:DE:CE:4A:02 GENERAL.MTU: 0 GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: MY_WIRELESS_CONN 1 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/0 IP4.ADDRESS: 192.168.2.8/24 IP4.GATEWAY: 192.168.2.1 IP4.ROUTE: dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000 IP4.DNS: 192.168.2.1 IP4.DOMAIN: station IP6.ADDRESS: fe80::50d0:5ec7:546f:d9f0/64 IP6.GATEWAY:
Here, we’ve printed data about the device wlp5s0. In addition to the IP address, the command prints many other properties. Examples are the DNS server, MAC address, and gateway.
4.3. Displaying the List of Existing Connections
We can get the existing network connections with nmcli connection:
$ nmcli connection NAME UUID TYPE DEVICE MY_WIRELLESS_CONN db1479d2-3ddf-42de-8d54-754e17a4d93b 802-11-wireless wlp5s0
The command outputs one connection paired with the wireless adapter wlp5s0.
4.4. Displaying the Properties of a Connection
We can also print the properties of a connection:
$ nmcli connection show id my-ethernet connection.id: my-ethernet connection.uuid: b07d9672-0b01-4e8e-a7ff-b196ee8d95c0 connection.stable-id: -- connection.type: 802-3-ethernet connection.interface-name: -- connection.autoconnect: yes connection.autoconnect-priority: 0 connection.autoconnect-retries: -1 (default) connection.multi-connect: 0 (default) connection.auth-retries: -1 connection.timestamp: 0 ...
We used id my-ethernet to get the properties of that connection. For brevity, we exclude part of the output. Note that we can print all connections if we don’t set a specific id.
4.5. Displaying the Status of Wireless Adapters
The nmcli radio command prints the status of wireless adapters:
$ nmcli radio WIFI-HW WIFI WWAN-HW WWAN enabled enabled enabled enabled
As shown above, we observe that the wireless WAN (WWAN) and Wi-Fi adapters are enabled.
5. Configuring an Ethernet Adapter
Whereas WiFi is widely-used at home, ethernet adapters continue to be popular at work. Also, our computer may receive its network settings via DHCP from a work server. On the other hand, if there is no DHCP server, we have to set the network details like IP address, DNS Server, and default gateway on our own.
In all cases, we use the connection (shortened to con or just c) object of the nmcli command.
5.1. Configuring an Ethernet Adapter With a Static IP Address
We configure an ethernet adapter by creating a new connection with the nmcli connection add command:
$ nmcli connection add type ethernet ifname enp7s8 con-name my_ethernet ip4 192.168.2.138/24 gw4 192.168.2.1 Connection 'my_ethernet' (514c394d-0fe2-4c3c-80f5-693ba65b1db3) successfully added.
In the above example, we set several options.
First, we set the connection type to ethernet. Second, we set the interface name after ifname. Third, we set con-name to the name of our new connection. Next, ip4 specifies the IP address. Finally, the default IPv4 gateway is after gw4. Alternatively, we may set IPv6 details with the ip6 and gw6 options.
5.2. Configuring an Ethernet Adapter With a Dynamic IP Address
If a DHCP server is in place, we may create a new connection with a dynamic IP. Like in the previous section, we do it with the nmcli connection add command, but with fewer details:
$ sudo nmcli connection add type ethernet ifname enp7s8 con-name my_ethernet Connection 'my_ethernet' (cd4ff4e0-ade3-47a4-8e1b-16df2ce9f366) successfully added.
Notice that we didn’t set any IP address or default gateway.
5.3. Modifying a Connection
We use the modify sub-command to update the properties of a connection:
$ sudo nmcli connection modify my_ethernet ipv4.DNS 192.168.2.1
Here, we set the DNS server to the value 192.168.2.1. We may use the command nmcli connection show to get the list of available settings.
5.4. Enabling and Disabling Connections
Enabling and disabling connections is an important task of network configuration. So, let’s disable the connection we created:
$ nmcli connection down my_ethernet Connection 'my_ethernet' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
As a result, we disabled the connection with the sub-command down. On the other hand, to enable it again, we may use the sub-command up:
$ nmcli connection up my_ethernet Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
As we can see, we enabled the connection with id my_ethernet. The D-Bus active path appears in the command’s output. That is to say, the D-BUS API enables the use of our connection by other applications.
6. Configuring a Wireless Device
Still, many home users connect to the Internet through the Wi-Fi of their DSL router. In fact, the nmcli command is indeed helpful in that setup.
To do that, we can break the process into two tasks:
- list the wireless networks in our area
- connect to one of the listed wireless networks
Let’s go through both steps.
6.1. Listing Wireless Networks
First, we list wireless networks in our area with the nmcli device wifi list command:
$ nmcli device wifi list * SSID MODE CHAN RATE SIGNAL BARS SECURITY MY_WIRELESS_NET Infra 11 54 Mbit/s 100 ▂▄▆█ WPA1 WPA2 ANOTHER_WIRELLESS_NET Infra 52 54 Mbit/s 100 ▂▄▆█ WPA1 WPA2 YET_ANOTHER_WIR_NET Infra 6 54 Mbit/s 55 ▂▄__ WPA2
As can be seen, we get a list of networks. In it, each record contains the SSID, rate, signal power, and type of security among others.
6.2. Connecting to a Wireless Network
We may then connect to a wireless network with the nmcli device wifi connect command:
$ nmcli device wifi connect MY_WIRELESS_NET password 8ehdxhre5kkhb6g6 Device 'wlp5s0' successfully activated with 'a7c8fbf5-3e7d-456c-921b-d739de0e3c79'.
Here, we connect to the network with SSID MY_WIRELESS_NET.
In this article, we talked about the Network Manager package. First, we started with a brief description of the Network Manager. After that, we went through the installation process. Finally, we focused on the command-line interface of Network Manager and showed some common examples.