2022年12月

谷歌现在能读懂医生的笔迹了

医生的处方就是天书,除了他们自己,谁也看不懂。许多科技公司都试图解决这个问题,但几乎没有成功。周一,谷歌在印度举行的年度会议上宣布,它正在与药剂师合作,解决医生的笔迹问题。这项功能将在 Google Lens 上推出,它可以处理用户提供的照片,该应用会检测并突出显示字条中提到的药品。

消息来源:techcrunch
老王点评:终于能读懂医生的天书了。

新的 Zstd 支持被合并进 Linux 6.2

Linux 内核中的 Zstd 代码已经有一年没有更新了,现在是 Zstd 1.4.10,这比上游的 Zstd 版本晚了好几年。在 Linux 6.2 中,Zstd 内核代码根据上游的 v1.5.2 版本进行了更新,以便与 Facebook 维护的上游代码接近一致。这应该意味着 Linux 内核中使用 Zstd 的压缩/解压的速度更快。Zstd 在 Linux 内核中被广泛使用,从压缩固件到透明文件系统的压缩。

消息来源:Phoronix
老王点评:这么重要的部分,我就不明白为什么 Linux 内核迟迟不更新。

自由版 Fedora 落幕

Freed-ora 是自由软件基金会拉丁美洲分会的一个项目,其目的是确保在 Fedora Linux 系统上安装完全自由软件的内核,并确保系统上没有安装非自由软件包。非自由软件包包括硬件的非开源固件和其他软件库的非自由软件包等。但 Freed-ora 没有多少人使用,其维护者也不再使用 Fedora,随着 Fedora 35 的结束,该项目也随着结束。

消息来源:Phoronix
老王点评:不是每个人都能坚守纯粹的自由。

这个树莓派教程用于制作一个可编程的 LED 灯光显示器,非常适合各种技能水平的人。

我喜欢圣诞装饰品和灯饰,因此很长一段时间以来我一直想做一个可编程的 LED 项目。最近,我制作了一个由 LED 灯、乒乓球和树莓派 Zero 组成的灯阵列。这个项目相对简单并且具有教学价值,因此我认为它非常值得分享。

整个彩灯由我设计,但其中一些灵感也来自 YouTube。你可以在我的 Git 存储库 中找到源代码和制作说明。

购物清单

  • 树莓派 Zero
  • 树莓派保护壳
  • 5V 2A 的电源线
  • 展架
  • 255 个乒乓球
  • 热熔胶枪和若干热熔胶棒
  • 烙铁
  • 焊锡丝
  • 22 AWG 0.35mm 实芯线
  • 10 米 WS2812(B) LED 灯带(每米 30 像素)
  • 万用表
  • 钢丝钳
  • 剥线钳

设计树莓派的灯光效果

这个设计是根据我展框的大小决定的。我在全球速卖通买到了每米 30 像素的灯带,它可以轻松地切成 0.5 米的长度,每条有 15 个 LED 灯。乒乓球的直径是 40 毫米,所以我测量并隔开 40 毫米划了线,LED 灯条放在每隔 40 毫米的中间部分,这就产生了 17 条线。因此我的灯光阵列是 15×17。你可以根据实际情况来调整尺寸。

为了给灯带和树莓派供电,我在电路板底部设置了数据线和电源线。我的 LED 灯不需要很多电,所以我使用树莓派 Zero 的 5V 输出 GPIO 为它们供电。当我以 50% 的亮度运行时,这个亮度已经足以在白天和晚上透过我的窗户看到。

布线

我从电路板的底部以之字形开始布线,这使得焊接非常容易,因为每行的末尾不必返回到每行的开头。

我的线路大致像这样(为清楚起见,这里进行了简化,实际上它一共有 17 行):

<---------------\
                |
/---------------/
|
\---------------< # 这里连接树莓派

使用树莓派制作显示屏

当设计和布线的工作完成后就可以开始制作显示屏了。

我在展板上测量并绘制了线路。我的灯带背面有胶带,所以我只需要取下背衬并将其贴在展板上。我检查了每个灯带的位置和数据线的方向,以确保灯带可以按照树莓派的指令正确串联起来。

连接好所有灯带后,我剪下三段长度相同的电线,并将每个灯带末端的电源线、数据线和接地线连接到其上方。

Connect each light strip at the end of each line.

在线路连接完成后,我检查了每条灯带之间的电源线和地线之间的连接,以确保其连通性。我还检查了是否存在错误的桥接,所以我验证了电源线和地线之间的连接。我还进行了一些测试以确保所有灯都正常点亮(链路测试参阅 测试代码)。

完成上述工作后,我开始在乒乓球上剪洞,用剪刀刺入乒乓球的底部,然后剪一个小洞让 LED 灯穿进去。手工不太行,每个球都不太一样,但效果真的很好。我使用的每米 30 个像素的 LED 灯,所以每个 LED 之间有大约 30 毫米的空隙。一个乒乓球是 40 毫米宽,但我不打算开始单独焊接每一个 LED!我想,这是很重要的。首先,我并不擅长焊接(正如我的照片所显示的),而且无论如何,我想“好吧,它们是乒乓球。我可以把它们压在一起!”

我是这样做的:

在 LED 灯上滴上热熔胶,然后在 LED 上放了一个乒乓球并按住大约五秒钟,就粘好了一个乒乓球。粘贴下一个乒乓球时我只需要挤着上一个乒乓球,就能让所有乒乓球都变得整齐了。我对它的外观很满意。它还有一个很好的好处,就是掩盖了我糟糕的焊接工作;)

It's a tight fit, but the 40mm ping pong balls fit in a 30mm space just fine.

我继续为余下的乒乓球进行焊接。尽管这个过程中有几个乒乓球被压碎了,但最终还是顺利完成了制作。

255 LEDs and 255 ping pong balls in an array.

测试代码

测试代码需要确保所有部件都能正常工作,为此我使用了这个 Adafruit 指南,它以红、绿和蓝点亮每个 LED,然后依次进行循环。我在测试时使用它来确保我连接无误并且焊接正常。

在此之后,我在电子表格中设计了一个网格,将每个像素映射到一个网格位置。由于我的像素编号呈之字形排列,因此很难跟踪每个 LED(例如 A1 为 256,B1 为 226)。重新映射网格位置能使得我在构建图像时更容易。

在所有准备工作完成之后,我就可以在纸上和电子表格中设计图像,然后编码。于是我开始添加一些动画(使用循环并将像素变为一种颜色,然后变为另一种颜色)。

最终的结果还算顺利。

A Christmas gift in LED.

Reindeer painted with light.

An LED snowflake.

能玩一年的树莓派彩灯

我不确定这是否已经完全完成了。自从把它摆放到橱窗里,几乎每个晚上我都会添加一些新的图像和动画。我已经在考虑除夕夜的时候要做成什么样了。它不会像圣诞装饰品一起在圣诞节后被放进储藏室。我只需要在上面显示其它图案,就能使它成为一个能玩一年的彩灯!我的一个朋友推荐了像素版马里奥,这听起来是个好主意!

我的代码仍然需要完善。例如,我做了一些滚动文本,但当我为文本的每个位置重新绘制时却花了很多时间。我想我可以用循环做一些事情,或者图像库可以帮助更轻松地滚动字母,并使添加文本更容易,而不是在每一步打开和关闭每个像素。

这里有一张照片记录了我制作的全过程:LED 乒乓墙。

可以在此处观看它的运行视频:XMas 灯光展示。

这个彩灯最终的效果我非常满意。以后我也会尝试更多利用 LED 彩灯完成的项目。我也鼓励大家亲自动手制作一个这样的彩灯,它会比你想象中更简单。


via: https://opensource.com/article/22/11/raspberry-pi-holiday-light-display

作者:Brian McCafferty 选题:lkxed 译者:Return7g 校对:wxy

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

不想让文档成为事后的想法?或许你该尝试一下全新的写作方式。

很多工程师与手工艺者都对他们使用的工具有特别的要求。为了顺利的完成工作,你需要最好的工具和使用它们的技巧。软件开发中最好的工具在应用到其他的数字创作领域中也可以是很强大的。 文档即代码 Docs as Code 的方式就是很好的例子。“文档即代码”意味着使用与代码开发相同的工具和工作流来撰写文档。文档即代码的支持者认为,这样的方式可以在降低写作者的工作量的同时,也带来了更好的文档。

文本格式与源文件控制

从传统的写作平台切换到文档即代码方式时,最主要的调整是将写作内容保存在基于文本的标记格式中。这一转变使得基于纯文本的工具都适用于文档写作。无论你选择 DocBook、Markdown 或者其他的标记语言,从只使用一种工具到使用一种标准格式配合多种工具是一种巨大的转变。

找到支持你的工作流程的工具是非常重要的。很多开发者在文档即代码项目中使用他们的 代码编辑器。因为他们已经是这些工具的高阶用户,一切都很顺利。而找到适合团队里其他专业人员,比如技术撰稿、编辑、信息架构师和文档产品责任人的工具可能需要一番努力。这里有一些选项可供参考:

  • 各种 优秀的 Markdown 编辑器 之一
  • 附带良好的预览工具的代码编辑器可能更适合非程序员
  • 流行的 Git 托管服务的网页界面尤其适用于偶尔有需要的贡献者

一旦内容以标记语言的格式安全地保存,就可以使用 Git 这样的版本控制进行管理。Git 相比大多数文档平台具有更多的功能:

  • 清晰详细的文档版本历史:谁在什么时候改变了什么。如果你有良好的提交信息惯例,你甚至可以了解到为什么会有这样的变更。
  • 简明的并行修改过程。在 Git 中使用分支工作意味着任何人可以做出他们想要的任何改变,并在最后合并所做的变更。
  • 先进的协作与审查工具。所有的源代码管理平台都被设计成支持详细审查每一个变更,并根据需要进行讨论,使每个人都确信这个变更可以继续进行。
  • 自动质量检查,比如拼写检查和链接检查。这不仅节省了时间,而且可以发现可能遗漏的错误。

源代码管理有很多优点。但要记住,如果你准备入门源代码管理,它有一定的学习曲线。这是一些有助于撰写者入门的优秀的 学习资源 和 文章。你也可以让具有好奇心的文档撰写者自行寻找对他们有用的学习材料,而不是请你的工程师来培训他们。(问我是怎么学会的? —— 当然是通过艰苦的方式!)

拉取请求和评审循环

所有的源代码管理平台都围绕 拉取请求 Pull Request 这一概念设计的,这有时也称为 合并请求Merge Request:有时候,某个人或某个团队先将一系列改变整合到一起,然后请求把这些修改拉到主项目中。不过从许多方面来说,在文档中一次处理多个变更比在代码中更容易。改变一篇文章中的某个地方,比更改代码并发现有其它几个地方依赖它,副作用更小。

最强大的协作工具是 diff,它可以通过一个易于理解的方式展示旧版本与新版本之间的差异。该工具有许多不同的版本,可以使比较视图更易于查看:双栏模式、行内模式,甚至是渲染过的 Markdown 模式。团队中的每一个成员都可以选择最适合他们的工具。举例而言,网页视图通常用于查看细微变更,而对于更大的变更,我习惯于使用 vimdiff 或 Meld 在本地浏览。

评审意见可以被添加到整个修改中,也可以添加到拟议的变更的个别行中。一些项目限制了行的最大长度,即硬换行,或者一行一句,以使得向文本的特定的部分添加注释更加容易。可以添加进一步的修改与评论,直到审查过程结束,修改被接受。由于拉取请求在项目仓库以队列形式展示,这是一种很好的方式,可以展示目前正在进行的任务以及需要进行检查操作的任务。diff 工具使得评审人员更方便地添加他们的思考。尤其是你在与技术受众工作时,你可以通过他们日常使用的工具获得来自他们的评论。

持续集成与部署

以纯文本形式提供你的文档的源代码有很多益处,你可以轻易找到每一个需要修改的位置,你可以使用现有的诸如 wc、grep 或 tree 之类的工具,来处理潜在的大型文档集。当你将这些与源代码管理平台结合起来之后,你可能获得更多的可用工具,并且它们都是开源的。

另一个工作流程上的巨大提升是持续部署的能力。简单来说,这意味着,每当一个拉取请求被合并到主项目中,项目可以直接自动化部署到位。如果这个变更足够好,就可以放进项目中,它也足够好到可以在放到文档网站上帮助你的读者。典型情况下,持续部署是配置在一台单独的自动化服务器上的,比如 Jenkins 或者 Git 钩子。不论哪种方式,基于文本的标记语言与文档即代码平台(通常是静态网页生成器,比如 Hugo 或 Sphinx)结合来生成文档网站,然后自动部署。

在部署之前,同样的自动化流程可以被用于对将要合并的拉取请求进行检查。在一个编程项目中,通过计算机自行进行代码检查、代码测试和其他的质量检查已经习以为常。通过类似 Vale 之类的工具可以对文本进行检查,文档项目也可以同样对待。你也可以添加其他的工具,比如添加一个链接检查器来确保文中所有的链接都是有效的。

用于文档流程的代码工具

被工程师们熟知并喜爱的工具都是非常好的工具,它们同时也可以用于其他类型的项目中。对于文档而言,它们提升了宝贵的效率,尤其是当你希望你的文档与你的团队同步推进的时候。上面讨论到的所有工具都是开源的,你可以亲自尝试,也可以为大型全球团队,亦或者介于两者之间的团队,部署它们。愿你的成文过程和编程过程一样顺畅。


via: https://opensource.com/article/22/10/docs-as-code

作者:Lorna Mitchell 选题:lkxed 译者:CanYellow 校对:wxy

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

Flickr 成立基金会希望将照片保存 100 年

新成立的 Flickr 基金会的目标是“确保 Flickr 将被保留给后代”,而不会像 MySpace 照片一样丢失。他们提到一个特别的集合 “Flickr Commons”,这是一个巨大的、不拘一格的、迷人的档案,它从世界各地收集图像和内容,它由策展人挑选和组织,允许人们访问从历史肖像到科学图像,以及其它等等各种图片。Flickr 希望它能使 “Flickr Commons” 运行到 100 年后。

消息来源:Pop Photo
老王点评:虽然不如北极种子计划宏伟,但是也是非常重要的计划。

Gmail 开始向部分用户提供端对端加密

Google 称其为 Gmail CSE。一旦启用,邮件主体、附件和内嵌图像都将在传输和储存前由客户端的浏览器进行加密,Google 服务器无法获得加密密钥,因此也无法对其进行解密。邮件的标题、时间戳和收件人名单不加密。目前该功能只提供给部分企业用户,暂时不提供给普通个人用户。

消息来源:谷歌
老王点评:这不就是 PGP/OpenGPG 做的事情吗?

3/4 的开发者正在积极寻找新的工作

根据 Stack Overflow 的开发者年度调查,74% 的开发者正在积极寻找新的角色或对新的机会持开放态度,积极求职者中比例最高的是 20-24 岁的人群(27%),而 45-54 岁的人只有 12%。调查显示 54% 的受访者表示在考虑新的机会时,更好的薪水是最大的动力。但阻止开发者寻找新工作的最大因素是灵活性(58%)。

消息来源:ZDNet
老王点评:找工作这事情其实就是,要么钱委屈,要么是心委屈。

即使是复杂的函数,也有几种方法可以单步调试,所以下次在排除代码故障时,可以尝试一下这些 GDB 技术。

调试器 是一个可以运行你的代码并检查问题的软件。GNU Debugger(GBD)是最流行的调试器之一,在这篇文章中,我研究了 GDB 的 step 命令和其他几种常见情况的相关命令。step 是一个被广泛使用的命令,但它有一些人们不太了解的地方,可能会使得他们十分困惑。此外,还有一些方法可以在不使用 step 命令的情况下进入一个函数,比如使用不太知名的 advance 命令。

1、无调试符号

考虑以下这个简单的示例程序:

#include <stdio.h>


int num() {
    return 2;
}

void bar(int i) {
    printf("i = %d\n", i);
}


int main() {
    bar(num());
    return 0;
}

如果你在没有 调试符号 debugging sysbols 的情况下进行编译(LCTT 译注:即在使用 gcc 编译程序时没有写 -g 选项),然后在 bar 上设置一个断点,然后尝试在这个函数内使用 step 来单步执行语句。GDB 会给出一个 没有行号信息 no line number information 的错误信息。

gcc exmp.c -o exmp
gdb ./exmp
(gdb) b bar
Breakpoint 1 at 0x401135
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, 0x0000000000401135 in bar ()
(gdb) step
Single stepping until exit from function bar,
which has no line number information.
i = 2
0x0000000000401168 in main ()

2、stepi 命令

但是你仍然可以在没有行号信息的函数内部单步执行语句,但要使用 stepi 命令来代替 step。stepi 一次只执行一条指令。当使用 GDB 的 stepi 命令时,先做 display/i $pc 通常很有用,这会在每一步之后显示 程序计数器 program counter 的值和相应的 机器指令 machine instruction :

(gdb) b bar
Breakpoint 1 at 0x401135
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, 0x0000000000401135 in bar ()
(gdb) display/i $pc
1: x/i $pc
=> 0x401135 <bar+4>: sub $0x10,%rsp

在上述的 display 命令中,i 代表机器指令,$pc 表示程序计数器寄存器(即 PC 寄存器)。

使用 info registers 命令,来打印寄存器的内容,也是十分有用的。

(gdb) info registers
rax 0x2 2
rbx 0x7fffffffdbc8 140737488346056
rcx 0x403e18 4210200
(gdb) print $rax
$1 = 2
(gdb) stepi
0x0000000000401139 in bar ()
1: x/i $pc
=> 0x401139 <bar+8>: mov %edi,-0x4(%rbp)

3、复杂的函数调用

在带调试符号的 -g 选项,重新编译示例程序后,你可以使用行号在 main 中 bar 调用上设置断点,然后再单步执行 bar 函数的语句:

gcc -g exmp.c -o exmp
gdb ./exmp
(gdb) b exmp.c:14
Breakpoint 1 at 0x401157: file exmp.c, line 14.
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, main () at exmp.c:14
14 bar(num());

接下来,用 step,来单步执行 bar() 函数的语句:

(gdb) step
num () at exmp.c:4
4 return 2;

函数调用的参数需要在实际的函数调用之前进行处理,bar() 函数的参数是 num() 函数,所以 num() 会在 bar() 被调用之前执行。但是,通过 GDB 调试,你怎么才能如愿以偿地进入 bar() 函数呢?你可以使用 finish 命令,并再次使用 step 命令。

(gdb) finish
Run till exit from #0 num () at exmp.c:4
0x0000000000401161 in main () at exmp.c:14
14 bar(num());
Value returned is $1 = 2
(gdb) step
bar (i=2) at exmp.c:9
9 printf("i = %d\n", i);

4、tbreak 命令

tbreak 命令会设置一个临时断点。如果你不想设置永久断点,那么这个命令是很有用的。举个例子?,你想进入一个复杂的函数调用,例如 f(g(h()), i(j()), ...),在这种情况下,你需要一个很长的 step/finish/step 序列,才能到达 f 函数。如果你设置一个临时断点,然后再使用 continue 命令,这样就不需要以上的序列了。为了证明这一点,你需要像以前一样将断点设置在 main 的 bar 调用上。然后在 bar 上设置临时断点。当到达该临时断点后,临时断点会被自动删除。

(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, main () at exmp.c:14
14 bar(num());
(gdb) tbreak bar
Temporary breakpoint 2 at 0x40113c: file exmp.c, line 9.

在调用 bar 的时候遇到断点,并在 bar 上设置临时断点后,你只需要使用 continue 继续运行直到 bar 结束。

(gdb) continue
Continuing.
Temporary breakpoint 2, bar (i=2) at exmp.c:9
9 printf("i = %d\n", i);

5、disable 命令

类似地,你也可以在 bar 上设置一个正常的断点,然后执行 continue,然后在不再需要第二个断点时,使用 disable 命令禁用这个断点,这样也能达到与 tbreak 相同的效果。

(gdb) b exmp.c:14
Breakpoint 1 at 0x401157: file exmp.c, line 14.
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, main () at exmp.c:14
14 bar(num());
(gdb) b bar
Breakpoint 2 at 0x40113c: file exmp.c, line 9.
(gdb) c
Continuing.
Breakpoint 2, bar (i=2) at exmp.c:9
9 printf("i = %d\n", i);
(gdb) disable 2

正如你所看到的,info breakpoints 命令在 Enb 列下显示为 n,这意味着这个断点已被禁用。但你也能在再次需要这个断点时,再启用它。

(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000401157 in main at exmp.c:14
breakpoint already hit 1 time
2 breakpoint keep n 0x000000000040113c in bar at exmp.c:9
breakpoint already hit 1 time
(gdb) enable 2
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040116a in main at exmp.c:19
breakpoint already hit 1 time
2 breakpoint keep y 0x0000000000401158 in bar at exmp.c:14
breakpoint already hit 1 time

6、advance 命令运行程序到指定的位置

另一个进入函数内部的方法是 advance 命令。你可以简单地用 advance bar,来代替 tbreak bar ; continue。这一命令会将程序继续运行到指定的位置。

advance 命令的一个很棒的地方在于:如果程序并没有到达你试图进入的位置,那么 GDB 将在当前函数运行完成后停止。因此,程序的执行会受到限制:

Breakpoint 1 at 0x401157: file exmp.c, line 14.
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, main () at exmp.c:14
14 bar(num());
(gdb) advance bar
bar (i=2) at exmp.c:9
9 printf("i = %d\n", i);

7、skip 命令

进入 bar 函数的另一种方式是使用 skip num 命令:

(gdb) b exmp.c:14
Breakpoint 1 at 0x401157: file exmp.c, line 14.
(gdb) skip num
Function num will be skipped when stepping.
(gdb) r
Starting program: /home/ahajkova/exmp
Breakpoint 1, main () at exmp.c:14
14 bar(num());
(gdb) step
bar (i=2) at exmp.c:9
9 printf("i = %d\n", i);

请使用 info skip 命令,来了解 GDB 跳过了哪些函数。num() 函数被标记为 y,表示跳过了 num() 函数:

(gdb) info skip
Num Enb Glob File RE Function
1 y n <none> n num

如果不再需要 skip,可以禁用(并稍后重新启用)或完全删除它。你可以添加另一个 skip,并禁用第一个 skip,然后全部删除。要禁用某个 skip,必须指定其编号(例如,skip disable 1),如果没有指定,则会禁用所有的 skip。启用或删除 skip 的工作原理相同:

(gdb) skip bar
(gdb) skip disable 1
(gdb) info skip
Num Enb Glob File RE Function
1 n n <none> n num
2 y n <none> n bar
(gdb) skip delete
(gdb) info skip
Not skipping any files or functions.

GDB 的 step 命令

使用 GDB 的 step 命令是调试程序的一个有用工具。即使是复杂的函数,也有几种方法可以单步调试这些函数,所以下次你在排除代码问题的时候,可以尝试一下这些 GDB 技术。


via: https://opensource.com/article/22/12/gdb-step-command

作者:Alexandra 选题:lkxed 译者:chai001125 校对:wxy

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

想要在固件级别检查启动顺序或电源设置? 你可以在系统启动时按 F2、F10 或 Del 按键访问 UEFI 设置。

这种方法的问题是你可能不知道确切的键,并且必须警惕在正确的时间按下这些键。

Mr. Bean

如果你不想像上面 Gif 中的憨豆先生,你可以从 Linux 中的 Grub 引导加载器 页面访问 UEFI 设置。

uefi firmware settings grub linux

当你打开 Linux 系统时,你会看到这个页面。Fedora 和 Ubuntu 等大多数 Linux 发行版都使用 Grub,它们允许你像这样从 Grub 页面访问 UEFI 设置。

如果你没有看到此页面,或你的发行版不使用 Grub 怎么办? 仍然有一些方法可以从 Linux 中访问 UEFI 设置。

在你了解如何操作之前,请 确保你的系统使用的是 UEFI。

另一件重要的事情。你的系统重启才能进入 UEFI 设置。你无法从操作系统中访问和修改固件设置。

从 Linux 启动到 UEFI 设置

此方法仅适用于具有 systemd 的 Linux 发行版。这意味着这种方法适用于任何基于 Ubuntu、Debian、Fedora 和任何主流的基于 Arch 的发行版,包括 Manjaro 和 EndeavourOS。

确保你的 Linux 发行版使用 systemd 仍然是一个好主意。使用给定的命令,如果它返回 systemd,你就可以开始了:

ps --no-headers -o comm 1

how to know if i am using systemd on linux?

当你发现你的发行版正在使用 systemd,你可以使用给定的命令启动到 UEFI 设置:

systemctl reboot --firmware-setup

让我首先分解使用的选项:

  • reboot:顾名思义,它将重启你的系统。
  • --firmware-setup: 当此选项与 reboot 一起使用时,它会指示系统固件启动进入固件设置界面。

就是这样! 一个命令,你将进入 UEFI 设置。我知道 Windows 允许 从 Windows 中启动进入 UEFI 固件设置。很高兴在 Linux 中看到类似的东西。

创建桌面快捷方式以启动到 UEFI 设置(可选)

如果你经常发现自己启动进入 UEFI 设置,并且不记得所有命令,你可以通过创建桌面快捷方式让你的生活更轻松。这将使你可以通过单击桌面图标启动到 UEFI。

不过,对于大多数 Linux 用户来说,这是不必要的,也不是必需的。只有当你觉得有必要时才去做。该方法需要 在命令行中编辑文件。

首先,使用给定的命令为 UEFI 设置创建桌面快捷方式文件:

sudo nano /usr/share/applications/uefi-reboot.desktop

并将以下内容粘贴到文件中:

[Desktop Entry]
Name=UEFI Firmware Setup (Reboot)
Comment=Access the motherboard configuration utility
Exec=systemctl reboot --firmware-setup
Icon=system-restart
Terminal=false
Type=Application
Categories=System;Settings;

create a desktop shortcut to boot into uefi settings

完成后,保存更改并退出 nano 文本编辑器。

现在,你将在系统菜单中找到 UEFI 固件设置的快捷方式:

boot into uefi firmware from system menu

完成了!一种进入 UEFI 设置的巧妙方法。

总结

访问启动设置的经典方法对某些人来说可能有点不方便。Grub 页面可能不会显示旧版本的 UEFI 选项。

这就是 systemd 方法的亮点所在。当我的系统崩溃并且我的功能键没有响应时,我发现这种方法是救命稻草,这是启动到 UEFI 所必需的(我当时就是这么想的!)。

我希望你发现它同样有用。


via: https://itsfoss.com/access-uefi-from-linux/

作者:Sagar Sharma 选题:lkxed 译者:geekpi 校对:wxy

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