标签 WiFi 下的文章

微软用 Rust 重写核心 Windows 代码

上个月,微软 Windows 操作系统安全总监 David Weston 宣布了 Rust 代码将进入 Windows 内核的消息。他表示:“在接下来的几周或几个月中,我们将实际上在内核中使用 Rust 启动 Windows,这真的很酷。” 软件项目中绝大部分的漏洞都属于内存安全错误。自 2006 年以来,微软在修复 Windows 中的漏洞中,约 70% 是内存安全漏洞。微软的基本目标是将内部 C++ 数据类型替换成 Rust。Windows 的 Rust 重写始于 2020 年的 DWriteCore,现在包含大约 15.2 万行的 Rust 代码和大约 9.6 万行的 C++ 代码。Windows 的 GUI Win32 GDI 正在移植到 Rust,目前已包含 3.6 万行的 Rust 代码。然而,在可预见的未来,用 Rust 语言重写整个 Windows 操作系统仍然不太可能发生。

消息来源:The Register
老王点评:微软带了一个好头啊。

基于区块链来共享空闲的 WiFi 接入点

东京有 500 万 WIFI 接入点,是该城市需求的 20 倍。日本电报电话公司(NTT)建议在不增加硬件的情况下,通过共享方案应对无线通信需求的增长。NTT 建议采用基于区块链的网络共享方案,询问 Wi-Fi 接入点运营者是否愿意分享带宽,允许随机网民接入。当他们连接时,将执行一个智能合约,使用以太坊授权证明来验证身份。作为回报,运营者将从连接中获得少许收入。

消息来源:The Register
老王点评:这个倒是一种好的利用方法。

谷歌计划在认证器中加入端对端加密功能

本周早些时候,谷歌认证器可以让用户选择将双因素认证代码与他们的谷歌账户进行同步,这使得在新设备上登录账户变得更加容易。虽然这是一个值得欢迎的变化,但它也带来了一些安全问题,因为黑客如果闯入某人的谷歌账户,有可能因此而获得其他账户的访问权。因此,安全研究人员建议,如果该功能支持端对端加密,黑客和其他第三方,包括谷歌,将无法看到这些信息。针对这样的批评,谷歌宣布 “计划在未来提供端对端加密”,但也表示 “离线使用应用程序的选项将仍然是一种选择”。

消息来源:The Verge
老王点评:确实,如果有了端到端加密,这个解决方案就完美了。

WiFi 6 提高了网络连通性,它在不久的将来有望为数万亿台设备组网,并且能够不间断而高效地工作。它虽然在 2019 年就取得了官方认证,但由于疫情原因,它的测试工作面临不少挑战。本文旨在对这项技术进行概述。

WiFi-6

WiFi 技术的下一代标准,称为 “WiFi 6”,也可以称为 “AX WiFi” 或 “802.11ax”。它是为满足指数级增长的设备组网需求而产生的,因此也可以用于 VR 和智能家居。它是现有的 802.11ac WiFi 标准的升级版,可以应对现有技术在容量、效率、覆盖范围和性能方面遇到的挑战。

Figure 1: WiFi 6

这项技术是在 2014 年进行研发,完成于 2018 年,由 IEEE 高性能无线网络研究组(HEW SG)发布。产品认证于 2019 年后期进行,此时三星 Galaxy Note 10 和 Ruckus R750 使用了这种技术。WiFi 6 运行于 1GHz 和 6GHz 波段,主要的频率为 2.4GHz-5GHz。

如今,每个家庭平均有九台设备需要连接 WiFi。WiFi 6 主要致力于改善网络质量,而不是提升某些设备的速度。

WiFi 6的特点

  • 多用户、多输入、多输出(MU-MIMO): 路由器和多台设备可以同时通信。在 2.4GHz 和 5GHz 频率上,它支持四个同步的数据流,当这些数据流添加到一个用户时,可以从智能路由器接收到相当大的输入数据的带宽。
  • 1024-QAM: 这令 WiFi 6 的每个数据包能编码的字节数更多,吞吐量增加了 25%。它不仅提高了大业务量情况下的通信效率,也最大限度增加了传输速率。这在现代企业应用系统领域有很大的优势。
  • 正交频分复用(OFDM): 支持四倍的副载波,速度也提高了 11%。扩展的信号支持用户同时进行更多数据包传输。所以数据包之间的等待时间和延迟就减少了。
  • 增加的信道宽度: 80MHz 的波段加入了 160MHz 的信道通信,信道宽度增加了一倍。因此,路由器可以容纳更多用户,为每个用户提供更大的数据流。
  • 目标唤醒时间(TWT): 这是 WiFi 6 特有的。它支持每台设备独立协商发送和接收的唤醒时间。它可以增加总体睡眠时间,令电池寿命最大化。它还支持许多额外的网络选项,特别是对 IoT 设备的支持。
  • 提升安全性: 一切支持 WiFi 6 的设备都需要包含 WPA3 协议。它可以对未经验证的通信进行加密,针对暴力字典攻击提供了强大的密码保护,以及对敏感信息进行 192 位的加密,提升数据的可靠性。
  • 波束赋形: 借助八根天线,波束赋形能提高传输速率,通信范围也因直接定向到某个客户端而扩大。它对快速移动的、可能面临多用户、多输入、多输出的设备起到了支撑作用。波束赋形也有利于控制那些蓄意发出干扰信号的天线的传输。然后信号会被重新定向到新的目标。

支持 WiFi 6 的设备

到目前为止,路由器、中继器、网状网络和多数 WiFi 使用者还是以 WiFi 5 为标准。WiFi 6 是 2019 年推出的。一些支持 WiFi 5 的早期设备存在一些兼容性问题 —— 它们可以使用 WiFi 6 的网络,但得不到相应的支持服务。

WiFi 6 的路由器是向后兼容的。应该确保网络已经为此做好了准备。

WiFi 6 实现了较低的电量消耗,在任何场景(包括 IoT)下,都是个不错的选择。它减少了不必要的数据流动,还会通知设备何时将数据激活或令其睡眠。所以不必要的数据流动减少了,性能和电池寿命也提高了。

三星 Galaxy Note 10 和 Ruckus R750 是全球第一款经认证支持 WiFi 6 的智能手机和接入设备,苹果的最新款 iPhone 也紧随其后。WiFi 联盟已经确立了认证方案,正如人们预期的那样,等待入市的那些新款无线产品也开始申请认证了。下列设备已支持 WiFi 6:

  • iPhone 11 和之后的型号
  • 三星 Galaxy S10、S20、Note 10 和 Note 20
  • 配置 M1 处理器的苹果电脑
  • 智能电视
为了全面享受到 802.11ax 标准带来的改进,硬件和软件的功能都需要基于这种 WiFi 技术进行升级。

硬件测试

为了充分挖掘最新款设备的潜力,需要一台 WiFi 6 路由器来运行网络。几年前,这么做的成本很高,但现在我们有多种选择,甚至可以使用网格系统、游戏路由器、范围扩展器等等。只有在进行实际测试时,才可以购买最划算的设备。如今,在速度方面,TP-Link Archer AX6000 是最快的,它击败了所有的竞争者。这款路由器可以以 1523 Mbps 的速率无线传输数据,有效传输距离为 1.5米(5 英尺)。

很重要的一点,请务必记住,这些路由器提速,并不是在变魔术。理论上的最大速率 9.6 Gbps是实现不了的。这种理论上的最大速率,实际上也会被多台设备分摊掉。

WiFi 6 侧重于在连接设备密集的地方提供高质量的连接。它不会令单台设备的速率指数级增长,但会使相关的设备运行处于理想水平。

只有各大互联网服务提供商(ISP)的加速计划与 WiFi 6 路由器结合起来,才能体现它的真正潜力。真正的挑战是那些 ISP 承受的,因为它们需要铺设新型的光纤来利用这种下一代技术。存在一个重要的问题:当ISP 的通信速率变得更快,现有的硬件会变得多余吗?

WiFi 6 的应用

  • 大型公共场所(LPV): 体育馆和会议中心是上千台设备同时联网的公共场所。WiFi 6 能改善参会者体验,增强消费者互动,还能提供附加服务,比如即时回放,订购餐食等。它还支持 LPV 业主开拓新的商业机会。
  • 交通枢纽: 公共交通站点也是人们需要同时联网的场所。OFDMA 和 BSS 这类明显具有 WiFi 6 色彩的技术为解决这种问题提供了必要的工具。
  • 物联网和智慧城市建设: WiFi 6 的能效令物联网设备可以进入休眠模式,并且可以在预定的间隔内开启信号发射器,以便在无需过多维护的情况下增加现场作业时间。
  • 教育机构: 大学校园内的图书馆、礼堂和报告厅内的日间 WiFi 使用密度是最高的,夜晚几乎没有人。WiFi 6 是这类场景的完美选项。

(LCTT 译注:相关产品推荐部分节略。)

面临的挑战

WiFi 6 不一定使速度更快,但它能确保在一定范围内的设备速率不会在未来几年变慢。虽然它面临三重挑战,但这些问题常常被忽视。

  • 需要对不支持的设备进行升级:即使 Wifi 6 向后兼容,但只能在最大限度使用这种技术时才能做得合理。这意味着每次都要更新设备。
  • 内部网络以外的速度和性能:WiFi 6 能为诸如云文件共享之类服务提供极好的连接性。然而,ISP 的相关资源也会影响速度和性能。
  • 覆盖范围问题:在各个国家,传输信号和带宽都是由法律规定上限的。因此,为了符合法律规定的上限,WiFi 6 的覆盖范围也是受限的。

尽管存在这些挑战,一些企业,像 Aruba、华硕、AT&T、Boingo、博通、思科、Comcast、CommScope、Cypress、Extreme Networks、英特尔、Netgear、Orange、高通、TP-Link 和小米,都在关注 WiFi 6 更多的可能性。


via: https://www.opensourceforu.com/2022/06/wifi-6-promises-much-more-than-faster-speeds/

作者:Sharon Katta 选题:lkxed 译者:cool-summer-021 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

本快速指南介绍了在 Arch Linux 和其他发行版中使用终端设置和连接 WiFi 所需的步骤。

本指南非常适合没有 GUI 只有终端且没有其他有线互联网连接可用的情况。这些步骤可帮助你手动检测无线网卡和设备,并通过终端密码验证连接到 WiFi 热点。

本指南使用 iwd(Net Wireless Daemon)通过终端连接到 WiFi。

在 Arch Linux 和其他发行版中使用终端连接到 WiFi

1、设置 iwd

iwd 包有三个主要模块:

  • iwctl:无线客户端
  • iwd:守护进程
  • iwmon:监控工具

在终端中输入:

iwctl

iwctl 提示符

如果找不到该命令,那么需要从 此处 下载安装包。

从任何其他具有互联网连接的系统/笔记本电脑获取帮助,以通过安装 USB 下载和安装软件包。

或者,如果你有一个可连接互联网的 USB 网卡,那么将其插入你的系统。并通过以下命令安装。

USB 网卡应该可以在 Arch 和当今大多数 Linux 系统中开箱即用,连接到互联网。

Arch:

pacman -S iwd

Debian、Ubuntu 和其他类似发行版:

sudo apt-get install iwd

Fedora:

sudo dnf install iwd

如果你看到了 iwctl 提示符(如下所示),那么继续下一步。

2、配置

运行以下命令以获取系统的无线设备名称

device list

iwctl – 设备列表

获取 WiFi 网络列表,请运行以下命令。在以下命令和所有其他命令中将 wlan0 替换为你的设备名称。

station wlan0 get-networks

iwctl – 可用网络

该命令为你提供具有安全类型和信号强度的可用 WiFi 网络列表。

3、连接

连接到 WiFi 网络,请使用上述 get-networks 命令中的 WiFi 接入点名称运行以下命令。

station wlan0 connect

出现提示时输入你的 WiFi 密码。

使用 iwctl 连接到 WiFi

如果一切顺利,你现在可以连接到互联网。

使用指南

如下所示,你可以使用简单的 ping 命令检查连接。ping 回复成功的数据包传输表示连接稳定。

ping -c 3 google.com

你还可以使用以下命令检查连接状态。

station wlan0 show

iwd/var/lib/iwd 中保存 .psk 后缀的配置文件,其中带有你的接入点名称。此文件包含使用你的 WiFi 网络的密码和 SSID 生成的哈希文件。

CTRL+D 退出 iwctl 提示符。

总结

我希望本指南可以帮助你通过终端连接到互联网。当你没有其他方式连接到 WiFi 时,这会有所帮助。例如,如果你在独立系统(不是 VM)中安装 Arch Linux,那么需要连接到互联网以通过终端使用 pacman 下载软件包。

如果你遇到任何问题,请在下面的评论栏中指出错误消息。


via: https://www.debugpoint.com/connect-wifi-terminal-linux/

作者:Arindam 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

实现一个 WiFi 扫描器玩玩~

去年夏天,我和妻子变卖了家产,带着我们的两只狗移居了夏威夷。这里有美丽的阳光、温暖的沙滩、凉爽的冲浪等你能想到的一切。我们同样遇到了一些意料之外的事:WiFi 问题。

不过,这不是夏威夷的问题,而是我们租住公寓的问题。我们住在一个单身公寓里,与房东的公寓仅一墙之隔。我们的租房协议中包含了免费的网络连接!好耶!只不过,它是由房东的公寓里的 WiFi 提供的,哇哦……

说实话,它的效果还不错……吧?好吧,我承认它不尽如人意,并且不知道是哪里的问题。路由器明明就在墙的另一边,但我们的信号就是很不稳定,经常会自动断开连接。在家的时候,我们的 WiFi 路由器的信号能够穿过层层墙壁和地板。事实上,它所覆盖的区域比我们居住的 600 平方英尺(大约 55 平方米)的公寓还要大。

在这种情况下,一个优秀的技术人员会怎么做呢?既然想知道为什么,当然是开始排查咯!

幸运的是,我们在搬家之前并没有变卖掉树莓派 Zero W。它是如此小巧便携! 我当然就把它一起带来了。我有一个机智的想法:通过树莓派和它内置的 WiFi 适配器,使用 Go 语言编写一个小程序来测量并显示从路由器收到的 WiFi 信号。我打算先简单快速地把它实现出来,以后再去考虑优化。真是麻烦!我现在只想知道这个 WiFi 是怎么回事!

谷歌搜索了一番后,我发现了一个比较有用的 Go 软件包 mdlayher/wifi,它专门用于 WiFi 相关操作,听起来很有希望!

获取 WiFi 接口的信息

我的计划是查询 WiFi 接口的统计数据并返回信号强度,所以我需要先找到设备上的接口。幸运的是,mdlayher/wifi 包有一个查询它们的方法,所以我可以创建一个 main.go 来实现它,具体代码如下:

package main

import (
    "fmt"
    "github.com/mdlayher/wifi"
)

func main() {
    c, err := wifi.New()
    defer c.Close()

    if err != nil {
        panic(err)
    }

    interfaces, err := c.Interfaces()

    for _, x := range interfaces {
        fmt.Printf("%+v\n", x)
    }
}

让我们来看看上面的代码都做了什么吧!首先是导入依赖包,导入后,我就可以使用 mdlayher/wifi 模块就在 main 函数中创建一个新的客户端(类型为 *Client)。接下来,只需要调用这个新的客户端(变量名为 c)的 c.Interfaces() 方法就可以获得系统中的接口列表。接着,我就可以遍历包含接口指针的切片(变长数组),然后打印出它们的具体信息。

注意到 %+v 中有一个 + 了吗?它意味着程序会详细输出 *Interface 结构体中的属性名,这将有助于我标识出我看到的东西,而不用去查阅文档。

运行上面的代码后,我得到了机器上的 WiFi 接口列表:

&{Index:0 Name: HardwareAddr:5c:5f:67:f3:0a:a7 PHY:0 Device:3 Type:P2P device Frequency:0}
&{Index:3 Name:wlp2s0 HardwareAddr:5c:5f:67:f3:0a:a7 PHY:0 Device:1 Type:station Frequency:2412}

注意,两行输出中的 MAC 地址(HardwareAddr)是相同的,这意味着它们是同一个物理硬件。你也可以通过 PHY: 0 来确认。查阅 Go 的 wifi 模块文档PHY 指的就是接口所属的物理设备。

第一个接口没有名字,类型是 TYPE: P2P。第二个接口名为 wpl2s0,类型是 TYPE: Stationwifi 模块的文档列出了 不同类型的接口,以及它们的用途。根据文档,P2P(点对点传输) 类型表示“该接口属于点对点客户端网络中的一个设备”。我认为这个接口的用途是 WiFi 直连 ,这是一个允许两个 WiFi 设备在没有中间接入点的情况下直接连接的标准。

Station(基站)类型表示“该接口是具有 控制接入点 controlling access point 的客户端设备管理的 基本服务集 basic service set (BSS)的一部分”。这是大众熟悉的无线设备标准功能:作为一个客户端来连接到网络接入点。这是测试 WiFi 质量的重要接口。

利用接口获取基站信息

利用该信息,我可以修改遍历接口的代码来获取所需信息:

for _, x := range interfaces {
    if x.Type == wifi.InterfaceTypeStation {
        // c.StationInfo(x) returns a slice of all
        // the staton information about the interface
        info, err := c.StationInfo(x)
        if err != nil {
            fmt.Printf("Station err: %s\n", err)
        }
        for _, x := range info {
            fmt.Printf("%+v\n", x)
        }
    }
}

首先,这段程序检查了 x.Type(接口类型)是否为 wifi.InterfaceTypeStation,它是一个基站接口(也是本练习中唯一涉及到的类型)。不幸的是名字出现了冲突,这个接口“类型”并不是 Golang 中的“类型”。事实上,我在这里使用了一个叫做 interfaceType 的 Go 类型来代表接口类型。呼,我花了一分钟才弄明白!

然后,假设接口的类型正确,我们就可以调用 c.StationInfo(x) 来检索基站信息,StationInfo() 方法可以获取到关于这个接口 x 的信息。

这将返回一个包含 *StationInfo 指针的切片。我不大确定这里为什么要用切片,或许是因为接口可能返回多个 StationInfo?不管怎么样,我都可以遍历这个切片,然后使用之前提到的 +%v 技巧格式化打印出 StationInfo 结构的属性名和属性值。

运行上面的程序后,我得到了下面的输出:

&{HardwareAddr:70:5a:9e:71:2e:d4 Connected:17m10s Inactive:1.579s ReceivedBytes:2458563 TransmittedBytes:1295562 ReceivedPackets:6355 TransmittedPackets:6135 ReceiveBitrate:2000000 TransmitBitrate:43300000 Signal:-79 TransmitRetries:2306 TransmitFailed:4 BeaconLoss:2}

我感兴趣的是 Signal(信号)部分,可能还有 TransmitFailed(传输失败)和 BeaconLoss(信标丢失)部分。信号强度是以 dBm( 分贝-毫瓦 decibel-milliwatts )为单位来报告的。

简短科普:如何读懂 WiFi dBm

根据 MetaGeek 的说法:

  • -30 最佳,但它既不现实也没有必要
  • -67 非常好,它适用于需要可靠数据包传输的应用,例如流媒体
  • -70 还不错,它是实现可靠数据包传输的底线,适用于电子邮件和网页浏览
  • -80 很差,只是基本连接,数据包传输不可靠
  • -90 不可用,接近“ 背景噪声 noise floor

注意:dBm 是对数尺度,-60 比 -30 要低 1000 倍。

使它成为一个真的“扫描器”

所以,看着上面输出显示的我的信号:-79。哇哦,感觉不大好呢。不过单看这个结果并没有太大帮助,它只能提供某个时间点的参考,只对 WiFi 网络适配器在特定物理空间的某一瞬间有效。一个连续的读数会更有用,借助于它,我们观察到信号随着树莓派的移动而变化。我可以再次修改 main 函数来实现这一点。

var i *wifi.Interface

for _, x := range interfaces {
    if x.Type == wifi.InterfaceTypeStation {
        // Loop through the interfaces, and assign the station
        // to var x
        // We could hardcode the station by name, or index,
        // or hardwareaddr, but this is more portable, if less efficient
        i = x
        break
    }
}

for {
    // c.StationInfo(x) returns a slice of all
    // the staton information about the interface
    info, err := c.StationInfo(i)
    if err != nil {
        fmt.Printf("Station err: %s\n", err)
    }

    for _, x := range info {
        fmt.Printf("Signal: %d\n", x.Signal)
    }

    time.Sleep(time.Second)
}

首先,我命名了一个 wifi.Interface 类型的变量 i。因为它在循环的范围外,所以我可以用它来存储接口信息。循环内创建的任何变量在该循环的范围外都是不可访问的。

然后,我可以把这个循环一分为二。第一个遍历了 c.Interfaces() 返回的接口切片,如果元素是一个 Station 类型,它就将其存储在先前创建的变量 i 中,并跳出循环。

第二个循环是一个死循环,它将不断地运行,直到我按下 Ctrl + C 来结束程序。和之前一样,这个循环内部获取接口信息、检索基站信息,并打印出信号信息。然后它会休眠一秒钟,再次运行,反复打印信号信息,直到我退出为止。

运行上面的程序后,我得到了下面的输出:

[chris@marvin wifi-monitor]$ go run main.go
Signal: -81
Signal: -81
Signal: -79
Signal: -81

哇哦,感觉不妙。

绘制公寓信号分布图

不管怎么说,知道这些信息总比不知道要好。让树莓派连接上显示器或者电子墨水屏,并接上电源,我就可以让它在公寓里移动,并绘制出信号死角的位置。

剧透一下:由于房东的接入点在隔壁的公寓里,对我来说最大的死角是以公寓厨房的冰箱为顶点的一个圆锥体形状区域......这个冰箱与房东的公寓靠着一堵墙!

我想如果用《龙与地下城》里的黑话来说,它就是一个“ 沉默之锥 Cone of Silence ”。或者至少是一个“ 糟糕的网络连接之锥 Cone of Poor Internet ”。

总之,这段代码可以直接在树莓派上运行 go build -o wifi_scanner 来编译,得到的二进制文件 wifi_scanner 可以运行在其他同样的ARM 设备上。另外,它也可以在常规系统上用正确的 ARM 设备库进行编译。

祝你扫描愉快!希望你的 WiFi 路由器不在你的冰箱后面!你可以在 我的 GitHub 存储库 中找到这个项目所用的代码。


via: https://opensource.com/article/21/3/troubleshoot-wifi-go-raspberry-pi

作者:Chris Collins 选题:lkxed 译者:lkxed 校对:turbokernel

本文由 LCTT 原创编译,Linux中国 荣誉推出

在本教程中,你将学习如何在 Ubuntu 中从终端连接到无线网络。如果你在使用 Ubuntu 服务器时,无法访问常规的桌面环境,这将对你非常有帮助。

我的家用电脑主要使用桌面 Linux。我也有多台 Linux 服务器用于托管网站以及开源软件,如 NextcloudDiscourse、Ghost、Rocket Chat 等。

我可以使用 Linode 在云端几分钟内快速部署 Linux 服务器。但最近,我在我的树莓派上安装了 Ubuntu 服务器。这是我第一次在物理设备上安装服务器,我不得不做一些额外的事情来通过命令行将 Ubuntu 服务器连接到 WiFi。

在本教程中,我将展示在 Ubuntu Linux 中使用终端连接到 WiFi 的步骤。你应该:

  • 不要害怕使用终端编辑文件。
  • 知道 wifi 接入点名称 (SSID) 和密码。

在 Ubuntu 中从终端连接到 WiFi

当你使用 Ubuntu 桌面时,连接到 WiFi 是很容易的,因为你有图形用户界面,可以很容易地做到这一点。但当你使用 Ubuntu 服务器时就不一样了,因为你只能使用命令行。

Ubuntu 使用 Netplan 工具来轻松配置网络。在 Netplan 中,你可以创建一个包含网络接口描述的 YAML 文件,然后在 netplan 命令行工具的帮助下,生成所有需要的配置。

让我们看看如何使用 Netplan 从终端连接到无线网络。

步骤 1:确定你的无线网络接口名称

有几种方法可以识别你的网络接口名称。你可以使用 ip 命令、过时的 ipconfig 命令或查看这个文件:

ls /sys/class/net

这应该会展示所有可用的网络接口(以太网、WiFi 和环回)。无线网络接口名称以 w 开头,通常命名类似 wlanXwlpxyz

[email protected]:~$ ls /sys/class/net
eth0 lo wlan0

记下这个接口名。你将在下一步使用它。

步骤 2:编辑 Netplan 配置文件中的 wifi 接口详细信息

Netplan 配置文件在 /etc/netplan 目录下。如果你查看这个目录的内容,你应该看到类似 01-network-manager-all.yml50-cloud-init.yaml 等文件。

如果是 Ubuntu 服务器,你应该有 50-cloud-init.yaml 文件。如果是桌面计算机,应该是 01-network-manager-all.yml 文件。

Linux 桌面计算机的 Network Manager 允许你选择一个无线网络。你可以在它的配置中硬编码写入 WiFi 接入点。这可以在自动掉线的情况下(比如挂起)时帮助到你。

不管是哪个文件,都可以打开编辑。我希望你对 Nano 编辑器有一点熟悉,因为 Ubuntu 预装了它。

sudo nano /etc/netplan/50-cloud-init.yaml

YAML 文件对空格、缩进和对齐方式非常敏感。不要使用制表符,在看到缩进的地方使用 4 个空格(或 2 个,以 YAML 文件中已经使用的为准)代替。

基本上,你需要添加以下几行,引号中是接入点名称(SSID) 和密码(通常):

wifis:
    wlan0:
        dhcp4: true
        optional: true
        access-points:
            "SSID_name":
                password: "WiFi_password"

再说一次,保持我所展示的对齐方式,否则 YAML 文件不能被解析,它会抛出一个错误。

你的完整配置文件可能是这样的:

# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. 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:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    version: 2
    wifis:
        wlan0:
            dhcp4: true
            optional: true
            access-points:
                "SSID_name":
                    password: "WiFi_password"

我觉得很奇怪,尽管有消息说更改不会在实例重启后保留,但它仍然可以工作。

不管怎样,用这个命令生成配置:

sudo netplan generate

现在应用它:

sudo netplan apply

如果你幸运的话,你应该连上网络。尝试 ping 一个网站或运行 apt 更新命令。

然而,事情可能不会那么顺利,你可能会看到一些错误。如果是这种情况,请尝试一些额外的步骤。

可能的故障排除

当你使用 netplan apply 命令时,你有可能在输出中看到类似这样的错误。

Failed to start netplan-wpa-wlan0.service: Unit netplan-wpa-wlan0.service not found.
Traceback (most recent call last):
  File "/usr/sbin/netplan", line 23, in <module>
    netplan.main()
  File "/usr/share/netplan/netplan/cli/core.py", line 50, in main
    self.run_command()
  File "/usr/share/netplan/netplan/cli/utils.py", line 179, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/apply.py", line 46, in run
    self.run_command()
  File "/usr/share/netplan/netplan/cli/utils.py", line 179, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/apply.py", line 173, in command_apply
    utils.systemctl_networkd('start', sync=sync, extra_services=netplan_wpa)
  File "/usr/share/netplan/netplan/cli/utils.py", line 86, in systemctl_networkd
    subprocess.check_call(command)
  File "/usr/lib/python3.8/subprocess.py", line 364, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['systemctl', 'start', '--no-block', 'systemd-networkd.service', 'netplan-wpa-wlan0.service']' returned non-zero exit status 5.

可能是 wpa_supplicant 服务没有运行。运行这个命令:

sudo systemctl start wpa_supplicant

再次运行 netplan apply。如果它能解决这个问题,那就太好了。否则,使用下面的命令关闭 Ubuntu 系统

shutdown now

重新启动 Ubuntu 系统,登录并再次生成和运行 netplan apply

sudo netplan generate
sudo netplan apply

现在可能会显示警告(而不是错误)。这是警告而不是错误。我检查了正在运行的 systemd 服务,发现 netplan-wpa-wlan0.service 已经在运行了。可能是因为它已经在运行了,而且 netplan apply 更新了配置文件(即使没有任何改变),所以显示了警告。

Warning: The unit file, source configuration file or drop-ins of netplan-wpa-wlan0.service changed on disk. Run 'systemctl daemon-reload' to reload units.

这并不重要,你可以通过运行 apt update 来检查网络是否已经正常工作。

我希望你能够在本教程的帮助下,在 Ubuntu 中使用命令行连接到 WiFi。如果你仍然遇到困难,请在评论区告诉我。


via: https://itsfoss.com/connect-wifi-terminal-ubuntu/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

开源如此火热,但研究表明该领域已不再增长

Blekinge 理工学院的 Michael Dorner 等人近期发布的一项报告指出:开源领域已不再增长。该团队研究了过去 25 年中出现的超 224,000 个开源项目发现,自 2016 年以来,活跃的开源项目数量一直在萎缩,而贡献者和提交者的数量也自 2013 年的峰值以来有所减少。自 2011 年以来,代码行数的增长就开始持续放缓;2015 年之后,代码行数则完全停止增长。同时,提交量也在随时间的增长而下降。2015 年之后,提交量进入自由落体状态,跌回了 2007 年时的水平。

来源:开源中国

拍一拍:如果这是真的,背后是原因是什么?是开源社区不敌开源企业么?

英特尔回应 Linus Torvalds 对 AVX512 的批评

上个月 Linus Torvalds “让 Intel AVX-512 去死”的言论引起热议。Linus 称 Intel 的 AVX-512 指令集是“功率病毒”,其创建目的单纯只是为了使 Intel 公司的 CPU 硬件在基准测试中跑分更高。Intel 首席架构师 Raja Koduri 对 Linus 的说法进行了回应,社区之所以喜欢 AVX-512,是因为它可以带来巨大的性能提升。他承认 Linus 的部分批评可能是有道理的,但他表示对 AVX512 等指令集的批评并不会改变 Intel 的方向,表示理解 Torvalds 的担心,理解第一代 AVX512 对处理器频率的影响,称每一代都在取得进步。

来源:solidot

拍一拍:“你说的有道理,那又如何。”

Ubuntu 正在考虑使用 Intel 的 IWD 提供更好的 WiFi 支持

Intel 的开源团队一直在开发 IWD,以替代 WPA\_Supplicant,而最近 Ubuntu 开发人员发现它已经实现 WPA\_Supplicant 的大部分功能,并且水平相当。IWD 具有更快的网络发现能力、更可靠的漫游、更少的系统资源占用,同时它利用现代 Linux 内核功能,提供了对企业安全功能的支持,并可以支持多个客户端,还能简化网络管理。

来源:开源中国

拍一拍:Ubuntu 社区需要评估 IWD 的稳定性和可用性,不管怎么说,多一个可选的竞品才能有更好的软件出现。