3

How to setup of Raspberry Pi 3 B+ onboard WiFi for Ubuntu Server 18.04? In particular, with netplan?

Exiting answers, such as "How to use onboard wifi on Raspberry Pi 3 with Ubuntu Server 16.04?", no longer seem to apply since /etc/network/interfaces states that netplan has replaced ifupdown.

# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.

This is a clean install of the Ubuntu Server image for Raspberry Pi 3.

##### release ###########################
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic

##### kernel ############################
Linux 4.15.0-1034-raspi2 #36-Ubuntu SMP PREEMPT Fri Apr 5 06:21:41 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux

According to Ubuntu Wiki RaspberryPI the needed packages should already be in place.

Since 18.04.2 the linux-firmware and linux-firmware-raspi2 packages now contain the necessary files for the built-in WiFi on the Pi 3B and 3B+.

sudo lshw -C network

*-network:0 DISABLED      
   description: Wireless interface
   physical id: 2
   logical name: wlan0
   serial: b8:27:eb:69:f2:3b
   capabilities: ethernet physical wireless
   configuration: broadcast=yes driver=brcmfmac driverversion=7.45.18 firmware=01-6a2c8ad4 multicast=yes wireless=IEEE 802.11
*-network:1
   description: Ethernet interface
   physical id: 3
   logical name: eth0
   serial: b8:27:eb:3c:a7:6e
   size: 1Gbit/s
   capacity: 1Gbit/s
   capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
   configuration: autonegotiation=on broadcast=yes driver=lan78xx driverversion=1.0.6 duplex=full ip=172.16.76.7 link=yes multicast=yes port=MII speed=1Gbit/s

Netplan.io provides some general Netplan configuration examples.

To configure netplan, save configuration files under /etc/netplan/ with a .yaml extension (e.g. /etc/netplan/config.yaml), then run sudo netplan apply.

... yet, no guideance specific to a RaspberryPi. ...in particular, with respect to the existing /etc/netplan/50-cloud-init.yaml file on the RaspberryPi Ubuntu Server install.

##### Netplan config ####################

[/etc/netplan/50-cloud-init.yaml]

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}

network:
    version: 2
    ethernets:
        eth0:
            dhcp4: true
            match:
                macaddress: <MAC 'eth0' [IF1]>
            set-name: eth0

So, given the use of netplan and default generated .yaml file. How should one add a WiFi network SSID and password? And leave the existing wired ethernet in place?

  • The Raspberry Pi 3 B+ has some weird quirks with the Wireless/Bluetooth chipset. You may have better luck on a Raspberry Pi-specific exchange. – earthmeLon May 14 at 20:52
  • It looks like you may have used the image for the Raspi2, not the Raspi3 – Nmath May 14 at 23:11
  • 1
    @Nmath The installed image is ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xz specifically for raspi3 ... provided the ubuntu.com download is correct. Ubuntu information indicates that "linux-firmware-raspi2 packages now contain the necessary files for the built-in WiFi on the Pi 3B and 3B+". As such, information so far seems to indicates that the uname --kernel-version result of 4.15.0-1034-raspi2 is OK. ... and, hopefully, the current next step is more about using netplan on an Ubuntu RaspPi install. – l --marc l May 15 at 0:06
  • @earthmeLon Usually I don't cross post questions. It seemed that this issue is more Ubuntu centric with Ubuntu 18.04 switch to netplan. That said, after contemplating your suggestion, I did end up posting a Raspberry Pi variant of the "How to setup the Raspberry Pi 3 onboard WiFi for Ubuntu Server 18.04 with netplan?" question on the Raspberry Pi exchange. – l --marc l May 15 at 0:46
  • I'm not asking you to cross post. Just providing some details. No need to defend your choice to post here. Best of luck! – earthmeLon May 15 at 14:27
7

The steps below were found to provide a persistent WiFi setup using netplan with Ubuntu Server 18.04 ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xz image on a Raspberry Pi 3 B+.

Update system:

sudo apt update
sudo apt full-upgrade
sudo reboot

Determine interface names:

ip link show

# 1: lo: <LOOPBACK,UP,LOWER_UP> …
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> … state UP …
# 3: wlan0: <BROADCAST,MULTICAST> … state DOWN 

Determine your-cloud-init.yaml and open for editing.

cd /etc/netplan/
ls -l
# -rw-r--r-- 1 root root 666 May 15 22:00 50-cloud-init.yaml
### note your *cloud-init.yaml file name

### backup *cloud-init.yaml file
cp 50-cloud-init.yaml 50-cloud-init.yaml.bak
### edit *cloud-init.yaml
sudo nano 50-cloud-init.yaml

Add WiFi access information to your-cloud-init.yaml file.

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    version: 2
    ethernets:
        eth0:
            optional: true
            dhcp4: true
    # add wifi setup information here ...
    wifis:
        wlan0:
            optional: true
            access-points:
                "YOUR-SSID-NAME":
                    password: "YOUR-NETWORK-PASSWORD"
            dhcp4: true

Test, generate and apply the changed your-cloud-init.yaml config:

  • Testing: sudo netplan --debug try (continue even if successful)
  • Generate: sudo netplan --debug generate (provides more details in case of issues with the previous command)
  • Apply: sudo netplan --debug apply (if no issues during the previous commands)

Confirmation Test:

sudo reboot

### wait, then without the wired ethernet connected ... 
ssh ubuntu@wifi-ip-address

The above sequence was distilled from the "Raspberry Pi 3B/B+ Wireless Bridge using Ubuntu Server 18.04 ARM Image and Netplan" gist link mentioned by Larnu. The gist goes well beyond just enabling WiFi since its turns the Pi into a Bridge.


Some additional useful WiFi setup steps.

Set hostname.

sudo hostnamectl set-hostname my-server-name

sudo nano /etc/hosts

127.0.0.1 localhost
# add host name
127.0.0.1 my-server-name

sudo nano /etc/cloud/cloud.cfg

# Set preserve_hostname to true for persistance after reboot
preserve_hostname: true

Verify from local Raspberry Pi commandline.

hostnamectl
#   Static hostname: my-server-name
#         Icon name: computer
#        Machine ID: …
#           Boot ID: …
#  Operating System: Ubuntu 18.04.2 LTS
#            Kernel: Linux 4.15.0-1036-raspi2
#      Architecture: arm64

Enable mDNS.

If desired, enable Multicast DNS by installing Avahi. Avahi supports the mDNS/DNS-SD/RFC 3927/Zeroconf/Bonjour specification.

sudo apt install avahi-daemon 

Remotely check mDNS resolution from another computer.

ping my-server-name.local
ssh ubuntu@my-server-name.local

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.