切换NetworkManager

在Ubuntu桌面和服务器版本,默认使用不同的网络配置工具:

  • 桌面版本使用NetworkManager (NetworkManager适合桌面GUI使用)

  • 服务器版本使用 netplan网络配置 来配置 systemd-networkd (不过netplan也支持NetworkManager作为后端)

在部署树莓派集群时,我采用完全字符模式运行,虽然安装的 NVIDIA Jetson 是NVIDIA L4T的Ubuntu桌面版本,我还是切换成netplan进行配置,不仅统一管理,而且节约了NetworkManager占用的资源。

备注

Jetson Nano的Ubuntu版本netplan使用不如树莓派Ubuntu 20.04,很多管理操作命令方法和netplan官方文档不同,所以我最后放弃了在Jetson Nano的Ubuntu 18.04上使用netplan,返回直接使用NetworkManager进行管理 - 配置无线方法参考 MacBook Pro上运行Ubuntu

停用Network Manager并激活systemd-networkd

  • 禁用NetworkManager:

    sudo systemctl stop NetworkManager
    sudo systemctl disable NetworkManager
    sudo systemctl mask NetworkManager
    
  • 启动和激活 systemd-networkd

    sudo systemctl unmask systemd-networkd.service
    sudo systemctl enable systemd-networkd.service
    sudo systemctl start systemd-networkd.service
    
  • netplan配置位于 /etc/netplan 目录,如果这个目录不存在,首先创建。然后针对网卡添加配置

举例,添加dhcp配置:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: yes

备注

我采用配置是静态IP地址配置,采用 netplan网络配置 配置方法,不再重复。

  • 完成配置后,执行以下命令生效:

    sudo netplan apply
    

反向操作:激活NetworkManager关闭systemd-networkd

以下操作可以反向关闭netplan,重新使用NetworkManager,不过这种方式不建议在Ubuntu server上使用。

  • 停止 systemd-networkd 服务:

    sudo systemctl disable systemd-networkd.service
    sudo systemctl mask systemd-networkd.service
    sudo systemctl stop systemd-networkd.service
    
  • 安装NetworkManager:

    sudo apt-get install network-manager
    
  • /etc/netplan 目录下将配置文件 .yaml 中配置修改成使用 NetworkManager 作为 renderer

    network:
      version: 2
      renderer: NetworkManager
    
  • 然后使用netplan命令生成NetworkManager的后端特定配置文件:

    sudo netplan generate
    
  • 启动NetworkManager服务:

    sudo systemctl unmask NetworkManager
    sudo systemctl enable NetworkManager
    sudo systemctl start NetworkManager
    

备注

虽然可以在Ubuntu Server版本上通过NetworkManager管理网络,但是从Ubuntu Server 18.04开始,服务器版本已经全面采用 systemd-networkd 并使用 netplan网络配置 来替代NetworkManager配置网络。所以,不建议在服务器上使用NetworkManager。

备注

Cockpit “Cannot refresh cache whilst offline” 报错处理 需要采用NetworkManager来避免问题,或者配置 PackageKit 不使用NetworkManager

参考