Wi-Fi Connection on Linux: From Drivers to a Stable Signal

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-source or firmware-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.
📊 Which Linux distribution are you using?
Ubuntu/Debian
Arch/Manjaro
Fedora/RHEL
OpenSUSE
Another

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:

  1. Click on the network icon in the upper right corner of the screen.
  2. Select the desired network from the list.
  3. Enter your password and click Connect.
  4. If the network is not listed, click Other networks and 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:

  1. View the list of available networks:
    nmcli device wifi list
  2. Connect to the network (replace SSID And password):
    nmcli device wifi connect "SSID" password "password"
  3. 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:

  1. Find out the name of your Wi-Fi interface:
    ip link | grep wlan

    Usually it is wlan0, wlp3s0 or something similar.

  2. Generate config for wpa_supplicant:
    wpa_passphrase "SSID" "password" | sudo tee /etc/wpa_supplicant.conf
  3. Connect to the network:
    sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
  4. Obtain an IP address via DHCP:
    sudo dhclient wlan0

To automatically connect on boot, add to /etc/network/interfaces:

auto wlan0

iface wlan0 inet dhcp

wpa-conf /etc/wpa_supplicant.conf

⚠️ Warning: File /etc/wpa_supplicant.conf contains the password in clear text. Set access rights 600to restrict access:
sudo chmod 600 /etc/wpa_supplicant.conf

5. Troubleshooting connection issues

If Wi-Fi does not connect, follow the diagnostic algorithm:

  1. Check the driver:
    dmesg | grep -i firmware

    Errors of the form firmware: failed to load iwlwifi-9000-pu-b0-jf-b0-XX.ucode indicate missing firmware files. Install the package. firmware-iwlwifi (for Intel) or similar for your adapter.

  2. Make sure the interface is not blocked:
    rfkill list

    If the status Soft blocked: yes, unlock:

    rfkill unblock wifi
  3. 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.

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 instead WPA2Older 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) or sudo pacman -S iwd (Arch). Configured via iwd.config V /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 using iwd turn 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 version wpa_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:

  1. 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

  2. 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 get

    If necessary, set the correct region:

    sudo iw reg set RU
    (replace RU to your country code).
  • 🔧 For full support, an adapter firmware update may be required.