9

For esoteric reasons I have a server which only has WiFi access to the network.

By copying the necessary dpkg files on a removable drive I've managed to install wpa_supplicant.

The thing that's bugging me is that on other distributions configuring it can be done by editing /etc/wpa_supplicant/wpa_supplicant.conf. But this doesn't work on Ubuntu because the systemd service file starts up wpa_supplicant without specifying a configuration file. There is no -c specified in its arguments.

Even the Ubuntu man page says the most common way to start it is by specifying a config file...

In most common cases, wpa_supplicant is started with:

         wpa_supplicant -B -c/etc/wpa_supplicant.conf -iwlan0

Because this is a server there is no GUI installed and I'm not using network manager (AFAIK)

I have of course confirmed that shutting down the systemd service and manually starting the Daemon from the command line will work. And I can of course modify the .service file. But this feels like the wrong solution.

Can anyone tell me how I am supposed to configure wpa_supplicant on Ubuntu server?

2 Answers2

15

It is not necessary to manually configure wpa_supplicant.

Networking in recent Ubuntu server versions is managed by netplan. Check to see the name of your netplan file:

ls /etc/netplan

I will assume that the name of the file you found is 01-netcfg.yaml. Substitute your details here if not 01-netcfg.yaml.

We will amend the file to specify your details:

sudo nano /etc/netplan/01-netcfg.yaml

Change the file to read:

network:
  version: 2
  renderer: networkd
  wifis:
    wlx-----:
      dhcp4: yes
      dhcp6: yes
      access-points:
        "network_ssid_name":
          password: "**********"

Please substitute your wireless interface name here instead of wlx----. Please note that the access point name and password are enclosed in quotation marks ". Spacing, indentation, etc. are crucial, please proofread carefully twice.

Save (Ctrl+o followed by Enter) and exit (Ctrl+x) the text editor nano. Follow with:

sudo netplan generate
sudo netplan apply

If you instead prefer a static IP address for the server, you can find the template here:

cat /usr/share/doc/netplan/examples/wireless.yaml 
chili555
  • 61,330
1

In Ubuntu 20.04, wpa_supplicant uses DBus & unix domain sockets (like a pipe) to configure the daemon. Notice the "-u" & "-O" options on the command line for wpa_supplicant. It is done this way by secure design & system efficiency as it does not allow the passwords for the network connections to be exposed to the users of the system. This also makes for a more efficient programmatic interface for Gnome to configure the network settings as the socket file maps the configuration indirectly to shared memory instead of writing to a text file for all of the other applications to parse (i.e. less delay while changing settings & better coordination among processes).

To solve the problem described, you have several approaches that can be taken. It is just a matter of how much administration you want to do for the settings. You could: create another configuration file for wpa_supplicant (i.e. direct approach); modify the Netplan/yaml file for the individual network settings (i.e. indirect approach); or you could write a script which leverages the DBus programming interface (i.e. maintainable approach, as it doesn't depend on the development of the other tools). The first two are trivial solutions, but you'll gain more mastery & possibly earn more money if you learn to implement the last suggestion. Good luck!