Learn through the super-clean Baeldung Pro experience:
>> Membership and Baeldung Pro.
No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.
Last updated: March 25, 2025
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.
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.
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.
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.
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.
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.
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.
In practice, a connection deals with IP and link-layer details. For example, there are IP addresses, DNS servers, and gateway settings.
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.
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[1]: 192.168.2.8/24
IP4.GATEWAY: 192.168.2.1
IP4.ROUTE[1]: dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000
IP4.DNS[1]: 192.168.2.1
IP4.DOMAIN[1]: station
IP6.ADDRESS[1]: 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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
Let’s go through both steps.
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.
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.