Connecting to Wi-Fi on Linux can seem like a daunting task, especially if you're used to the automatic settings of Windows or macOS. However, with the right approach, the process becomes simple and logical. The main problem lies in the variety of distributions and network managers—what works in Ubuntu 24.04, may not work in Arch Linux without additional settings.
In this article, we'll cover all possible methods for connecting to a wireless network, from graphical interfaces to manual configuration via the terminal. You'll learn how to check for drivers, configure NetworkManager or wpa_supplicant, as well as solve common connection issues. We'll pay special attention to diagnostics, as the problem often lies not in the Linux settings, but in the router or ISP.
1. Check hardware compatibility
Before setting up a connection, make sure your Wi-Fi adapter is supported by Linux. Most modern adapters (e.g., Intel AX200 or Qualcomm Atheros QCA6174) work "out of the box", but some models (especially from Broadcom or Realtek) require installation of proprietary drivers.
To check if the adapter is present, run the following in the terminal:
lspci | grep -i network
lsusb | grep -i wireless
If the command returned the name of your adapter (for example, Network controller: Intel Corporation Wi-Fi 6 AX200) - the driver is installed. If the output is empty or contains the words unclaimed - additional configuration will be required.
- 🔍 Intel — usually work without problems, the drivers are included in the Linux kernel.
- ⚠️ Broadcom — often require installation
bcmwl-kernel-sourceorfirmware-b43-installer. - 🛠️ Realtek — may require drivers from repositories or GitHub (for example,
rtl8821ce-dkms). - 📡 USB adapters — check the model compatibility on the manufacturer’s website.
⚠️ Please note: Some laptops (eg. Dell XPS 13 9310 or Lenovo ThinkPad P1) use adapters with support Wi-Fi 6E, which may not work in older kernel versions (below 5.15). Update your system before configuring.
2. Connecting via the graphical interface (NetworkManager)
The easiest way is to use the built-in network manager. Most distributions (Ubuntu, Fedora, Linux Mint) have it installed by default. NetworkManager with a graphical interface nmtui or an icon in the system tray.
Instructions for GNOME/KDE/XFCE:
- Click on the network icon in the upper right corner of the screen.
- Select the desired network from the list.
- Enter your password and click
Connect. - If the network is not listed, click
Other networksand enter the SSID manually.
For minimalist environments (eg. i3 or Openbox) may require launch nm-applet manually:
nm-applet --indicator &
The adapter is detected in the system|Network Manager is running (sudo systemctl status NetworkManager)|The router is turned on and distributing the SSID|The Wi-Fi password is correct-->
| Distribution | Command to launch GUI | Alternative manager |
|---|---|---|
| Ubuntu/Debian | nmtui or a tray icon |
wicd (obsolete) |
| Arch/Manjaro | nm-connection-editor |
connman (for minimalists) |
| Fedora/RHEL | nmtui or gnome-control-center network |
NetworkManager-tui |
| OpenSUSE | yast2 lan |
wicked (for servers) |
3. Setting up Wi-Fi via the terminal (nmcli)
If the graphical interface is not available or you prefer the terminal, use the utility nmcli — console client for NetworkManagerThis method is universal and works on most distributions.
Step-by-step instructions:
- View the list of available networks:
nmcli device wifi list - Connect to the network (replace
SSIDAndpassword):nmcli device wifi connect "SSID" password "password" - Check your connection status:
nmcli connection show
For hidden networks, add a flag hidden yes:
nmcli device wifi connect "MyHiddenNetwork" password "12345678" hidden yes
To keep the connection after a reboot, use:
nmcli connection modify "SSID" connection.autoconnect yes
4. Manual connection via wpa_supplicant
If NetworkManager disabled or unavailable (for example, on server distributions), use wpa_supplicant — a standard tool for managing Wi-Fi in Linux. This method requires superuser privileges and basic knowledge of working with configuration files.
Setup steps:
- Find out the name of your Wi-Fi interface:
ip link | grep wlanUsually it is
wlan0,wlp3s0or something similar. - Generate config for
wpa_supplicant:wpa_passphrase "SSID" "password" | sudo tee /etc/wpa_supplicant.conf - Connect to the network:
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf - Obtain an IP address via DHCP:
sudo dhclient wlan0
To automatically connect on boot, add to /etc/network/interfaces:
auto wlan0iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant.conf
⚠️ Warning: File/etc/wpa_supplicant.confcontains the password in clear text. Set access rights600to restrict access:sudo chmod 600 /etc/wpa_supplicant.conf
5. Troubleshooting connection issues
If Wi-Fi does not connect, follow the diagnostic algorithm:
- Check the driver:
dmesg | grep -i firmwareErrors of the form
firmware: failed to load iwlwifi-9000-pu-b0-jf-b0-XX.ucodeindicate missing firmware files. Install the package.firmware-iwlwifi(for Intel) or similar for your adapter. - Make sure the interface is not blocked:
rfkill listIf the status
Soft blocked: yes, unlock:rfkill unblock wifi - Check your router settings:
- 🔒 Make sure your router isn't using
802.11r(Fast Transition) - some drivers do not support it. - 📶 Try changing the Wi-Fi channel from automatic to a fixed one (for example, 6 or 11 for 2.4 GHz).
- 🔄 Disable MAC address filtering if it is enabled.
- 🔒 Make sure your router isn't using
Critical error: If your Wi-Fi stopped working after upgrading your Linux kernel (for example, from 6.1 to 6.5), you most likely need to reinstall the drivers for your adapter. Use DKMS packages (for example, rtl8821ce-dkms) to avoid problems during upgrades.
What to do if Wi-Fi connects but there is no internet access?
1. Check if you have received an IP address: ip a show wlan0If the address is of the type 169.254.x.x — DHCP didn't work.
2. Make sure your router is distributing DNS. Try manually entering Google's DNS: echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf.
3. Disable VPN or proxy if configured.
4. Check the routes: ip routeIf there is no default route, add one: sudo ip route add default via 192.168.1.1 (replace IP with your router's address).
6. Speed and stability optimization
Even if Wi-Fi is connected, speed may be slow due to interference or suboptimal settings. Here's how to improve your connection:
- 📶 Frequency selection: In urban areas, 5 GHz is often faster, but less stable over distance. For 2.4 GHz, choose the least crowded channel (use
sudo iwlist wlan0 scanning | grep Frequency). - 🔄 Power saving mode: Disable it for the adapter:
sudo iwconfig wlan0 power off - 🛡️ Encryption: If the router supports
WPA3, use it insteadWPA2Older devices may require a rollback.WPA2-PSK (AES). - 🔗 MTU: If websites open partially, reduce MTU to 1400:
sudo ifconfig wlan0 mtu 1400
To apply settings permanently (for example, disabling power saving), create a file /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf with the line:
[connection]
wifi.powersave = 2
7. Alternative tools: iwd and connman
If NetworkManager seems too cumbersome, consider alternatives:
- 🅰️ iwd (Intel Wireless Daemon): A lightweight daemon from Intel, optimized for modern adapters. Installed via
sudo apt install iwd(Debian/Ubuntu) orsudo pacman -S iwd(Arch). Configured viaiwd.configV/etc/iwd/. - 🔗 connman: A connection manager for embedded systems. Suitable for minimalist environments. Installation:
sudo apt install connman. - 🐧 wicd: An outdated but still functional manager with a simple interface. Not recommended for newer systems.
Example of connection via iwd:
sudo iwctl[iwd]# device list
[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks
[iwd]# station wlan0 connect "SSID"
⚠️ Caution: When usingiwdturn it off NetworkManagerto avoid conflicts:sudo systemctl disable --now NetworkManager
FAQ: Frequently Asked Questions about Wi-Fi on Linux
My Wi-Fi adapter isn't detected in Linux. What should I do?
1. Check the output lspci -k | grep -A 3 -i network. If there is a note next to the adapter Kernel driver in use: none — the driver is not loaded.
2. Install proprietary drivers:
- For Broadcom:
sudo apt install firmware-b43-installer(Debian/Ubuntu). - For Realtek RTL88x2:
sudo pacman -S rtl8821ce-dkms-git(Arch).
3. If the adapter is new (for example, Intel AX210), update the kernel to version 5.15+.
How to connect to Wi-Fi without a password (open network)?
For open networks use:
nmcli device wifi connect "SSID" --ask
When prompted for a password, simply click Enter. IN wpa_supplicant create a config without a section psk:
network={ssid="SSID"
key_mgmt=NONE
}
⚠️ Be careful: open networks are unsafe. Use a VPN.
Why does Wi-Fi work in Windows but not in Linux?
The reasons may be as follows:
- 🔧 Windows uses proprietary drivers, while Linux uses open-source ones. Install the closed-source drivers for your adapter.
- 📡 The router uses non-standard settings (for example, encryption
WPA3-Enterprise) that are not supported by your versionwpa_supplicant. - ⚡ The Wi-Fi adapter for Linux is disabled in the BIOS (rare, but occurs on some laptops) HP or Lenovo).
Try downloading a Live distribution (for example, Ubuntu 24.04) and check if Wi-Fi works there. If so, the problem lies with your main system settings.
How to set up Wi-Fi on a server without a graphical interface?
On server distributions (for example, Ubuntu Server or Debian without a GUI) use wpa_supplicant + dhclient, as described in Section 4.
To automatically connect on boot:
- Create a file
/etc/systemd/system/wifi.service:[Unit]Description=Wi-Fi Connection
After=network.target
[Service]
ExecStartPre=/sbin/iwconfig wlan0 essid "SSID"
ExecStart=/sbin/wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
ExecStartPost=/sbin/dhclient wlan0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target - Activate the service:
sudo systemctl enable wifi.service
Is it possible to use Wi-Fi 6E on Linux?
Yes, but with some reservations:
- ✅ Adapters Intel AX200/AX210 And Qualcomm FastConnect 6800 supported in kernels 5.15+.
- ⚠️ 6 GHz channels (Wi-Fi 6E) may not work in some countries due to regulatory restrictions. Check your settings.
regulatory domain:sudo iw reg getIf necessary, set the correct region:
(replacesudo iw reg set RURUto your country code). - 🔧 For full support, an adapter firmware update may be required.