为什么我的Wi-Fi适配器在16.04中不显示为wlan0?

我刚刚在一个单独的硬盘上安装了Ubuntu 16.04,我注意到两个奇怪之处:

  • 而在14.04(在我的主硬盘上)我的USB Wi-Fi加密狗显示为wlan0 ,在16.04它显示为wlx112233445566 。 (真正的MAC编辑)

  • 此外,使用hw ether参数更改MAC地址在16.04上不起作用。

这是lsusb的相关输出:

 Bus 008 Device 002: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter 

任何人都可以了解这里发生的事情吗?

截至最近,Ubuntu(以及systemd )现在使用了一种名为Predictable Network Interface Names的东西。 从本质上讲,这意味着非永久性网络接口(即USB接口)现在具有enxwlx (或类似)forms的名称,因此任何依赖于该特定设备的脚本和系统都将100%有信心它正在瞄准正确的设备。

其他命名约定将允许通过物理位置或任何其他forms的永久识别值来引用设备。 具体来说,这些值中的任何一个都可用于生成接口名称(最佳选择):

  • 包含固件/ BIOS的名称为板载设备提供了索引号(例如: eno1
  • 包含固件/ BIOS的名称提供PCI Express热插拔插槽索引号(例如: ens1
  • 包含硬件连接器的物理/地理位置的名称(例如: enp2s0
  • 包含接口MAC地址的名称(例如: enx78e7d1ea46da
  • 经典,不可预测的内核本地ethX命名(例如: eth0

在过去,接口名称没有以“理智”的方式分配 – 一些系统使用伪永久名称( wlan1用于具有此MAC的设备),其他系统以先到先得的方式分配它们。 如果您仍然喜欢这种处理方式(或者只是讨厌持久性名称,因为systemd正在这样做),可以通过在引导参数中添加net.ifnames=0来反转它。

您仍然可以使用连接编辑器伪造设备的MAC地址,但是由于MAC地址是设备的标识符/名称的一部分,因此hw ether将不再起作用。

可以通过将net.ifnames = 0添加到引导参数来反转它。

这还不足以改变USB接口的名称……你还需要玩80-net-setup-link.rules

1)将当前规则复制到/etc/udev/rules.d/目录

 sudo cp /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/ 

2)创建一个符号链接,将其发送到/dev/null以禁用它:

 sudo ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules 

有关更多信息,请查看此主题: 如何恢复USB wifi接口名称(从wlxXXXXXXXXXXXX到wlanX)?

我认为它就像设计变更一样简单,数字现在不同了。 这不是错。 例如,我的LAN在14.04中是eth0(并且仍然在其他一些发行版中),但在16.04中是enp0s25。

这个命名约定对性能没有影响,我不担心它。

编辑:Kaz Wolfe给出了更彻底的解释。