硬核观察 #486 “Windows 终端”成为 Windows 11 的默认终端程序

Summary: 更多：• Log4j 漏洞在 72 小时内发生超 84 万起攻击 • IBM POWER10 CPU 对开源不友好

IBM这老古董还不死同期仙童都上天了

windows 的UI越来越像KDE了。

![](/data/attachment/album/202112/15/182236bq6pu5rv3q5hh3yh.jpg)

![](/data/attachment/album/202112/15/182246ergbbrddcf5bsdu9.jpg)

### “Windows 终端”成为 Windows 11 的默认终端程序

2019 年微软发布了 “Windows 终端”，它受到了 Linux 上的终端程序的很多启发，支持标签等现代体验。微软不断为其添加了更多功能，包括丰富的颜色、表情符号，甚至为它设计了字体。更好的是，它是以 MIT 许可证 [开源](https://github.com/microsoft/terminal) 的。从 2022 年开始，微软将把 “Windows 终端” [作为](https://devblogs.microsoft.com/commandline/windows-terminal-as-your-default-command-line-experience/) Windows 11 上的默认终端程序。

>
> 老王点评：不管怎么说，微软拥抱（吞噬）开源以来，给开源世界添加了不少好东西。
>
>
>

![](/data/attachment/album/202112/15/182257c4i77yzg24577xwu.jpg)

### Log4j 漏洞在 72 小时内发生超 84 万起攻击

最近披露的 Log4j 漏洞已经 [波及全球](https://arstechnica.com/information-technology/2021/12/hackers-launch-over-840000-attacks-through-log4j-flaw/)，ESET 数据显示，该漏洞在美国、英国、土耳其、德国和荷兰被利用的数量最多。安全研究人员甚至观察到每分钟超过 100 次的 Log4j 攻击。广泛使用的 Java 框架，如 Apache Struts 等，极易受到 Log4j 漏洞的影响。黑客已经利用 Log4j 漏洞来接管受害者的计算机，以执行从加密货币挖矿、发送垃圾邮件、到通过大型僵尸网络发起 DDoS 攻击的任何事情。针对这个漏洞，Log4j 先后发布了 [两个补丁](https://www.zdnet.com/article/second-log4j-vulnerability-found-apache-log4j-2-16-0-released/) 来解决，而在最新的补丁中，对这个漏洞的解决方案是完全禁用 JNDI 功能。

>
> 老王点评：虽然完全禁用 JNDI 肯定会损失一些功能，但是目前看来只能这样。尽快打补丁吧。
>
>
>

![](/data/attachment/album/202112/15/182315v0ngm000jj0q7256.jpg)

### IBM POWER10 CPU 对开源不友好

虽然 POWER CPU 对开源友好，普遍受到自由软件社区的好评，但 IBM 最新一代的 POWER10 处理器却有可能改变这种局面。并不是所有的 POWER10 固件都是开源的，而且没有迹象表明这在短期内会改变。当涉及到 DDR 内存支持和 PCI Express 时，POWER10 仍然需要那些不开源的二进制固件。这为提供完全自由的 POWER 系统造成了 [困扰](https://www.phoronix.com/scan.php?page=news_item&px=POWER10-Blobs-Raptor)。

>
> 老王点评：说到底，开源对于很多企业来说，只是补充而不是根本。
>
>
>


Linux 黑话解释：什么是定时任务

Summary: 在本期的《Linux 黑话解释》系列文章中，你将了解到 Linux 中的定时任务（cron job）功能。

![](/data/attachment/album/202112/16/112554pna46aemuh84ta3m.jpg)

在本期的《Linux 黑话解释》系列文章中，你将了解到 Linux 中的<ruby> 定时任务 <rt>  cron job </rt></ruby>功能。你将通过学习编辑 `crontab` 文件来创建定时任务。

### 何为定时任务

`cron` 是一个用于按计划运行短小且快速的命令的实用命令行工具。该工具是一个方便、经典的系统管理工具，通过和其他工具结合使用可以自动运行各式各样的任务。比如，有些人通过把 `rsync` 和 `cron` 结合使用，在特定的时间自动创建每日备份和每周备份。也有些人使用 `cron` 来分析服务器日志，并且结合邮件系统功能，在日志检测到错误时自动发送告警邮件。

`cron` 就如同“瑞士军刀”一样，可以多场景多样化使用。尽可能发挥你的想象，去挖掘它的功能。

其实 `cron` 的使用很容易上手，只需要几秒钟。不过在我们开始上手之前，先来讨论下几个经常容易混淆的概念。

### cron、定时任务、crontab

有三个术语比较容易混淆：`cron`、定时任务和 `crontab`，让我们来看看它们的含义：

| 术语 | 含义 |
| --- | --- |
| `cron` | 这是安装在系统上的实际执行定时任务的 [守护进程](https://itsfoss.com/linux-daemons/)。 |
| 定时任务 | “任务”是指一段启动并运行的程序。`cron` 可以按照约定的时间计划运行各种任务，这样的任务通常叫做“定时任务”。 |
| [crontab](https://linuxhandbook.com/crontab/) | 这是一个文件，用于定义定时任务。一个 `crontab` 文件可以通过表格形式（每一行就是一个定时任务）定义多个定时任务。 |

来看一个简单例子：创建一个定时任务，每小时向 `crontabl_log.txt` 文件打印 `Linux is cool!`。

```
0 * * * *  echo "Linux is Cool!" >> ~/crontab_log.txt

```

是不是这么个简单定时任务的例子都让你感到惊恐，这是因为你需要懂得如何去读懂一个定时任务的属性。

我将在后文中讲述这个基础理论知识。

### 上手 cron

我们通过另一个例子来看看 `cron` 如何工作。

为了创建定时任务（或者说 `cron` 将要执行的命令任务），你只需要运行：

```
crontab -e

```

这将会打开一个文件，用于编辑定时任务：

![Crontab default view](/data/attachment/album/202112/16/112701lmadjd8ayppjtr1t.png)

其中，所有以 `#` 开头的行都是注释，用于指导你如何使用 `cron`，如果觉得没用可以删除它们。

我们将创建如下任务，作为我们的第一个定时任务：

```
* * * * * touch ~/crontab_test

```

让我快速看看该任务将会做什么：

定时任务都是以 “分钟 小时 天 月 周 命令” 形式呈现：

* 分钟：指该任务在哪一分钟会被执行。所以，该值为 `0` 则代表在每个小时开始时运行，`5` 则代表在每个小时的第 5 分钟会运行。
* 小时：指该任务在一天中的哪个小时会被执行，取值范围为 `0-23`。没有 `24` 的原因是 `23` 时的末尾是半夜 `11:59`，然后就是每天的开始 `0` 时。分钟的取值范围定义逻辑与之类似。
* 天：指一个月中的哪一天执行该任务，取值范围是 `1-31`（不同于前面的分钟和小时从 `0` 开始取值）。
* 月：指该任务在哪个月被执行，取值范围是 `1-12`。
* 周：指该任务在星期几被执行，从周日开始算起，取值范围是 `0-6`（分别对应周日、周一到周六）。
* 命令：是你想要运行的命令任务。

![](/data/attachment/album/202112/16/112702p1u1wj8c885wu1ye.png)

如果想对 “分钟 小时 天 月 周” 部分有更详细的理解，可以参考 [Crontab guru 网站](https://crontab.guru/)，该网站可以帮助你理解正在执行什么。

接着之前的例子 `* * * * * touch ~/crontab_test`，表示每分钟创建一次 `~/crontab_test` 文件。

让我们将该任务编辑进 `crontab` 然后看看执行结果：

![](/data/attachment/album/202112/16/112702iq7qqhh2efia75iq.png)

等到下一分钟，你就会发现你的家目录下多了文件 `crontab_test`:

![](/data/attachment/album/202112/16/112703zwui1voo51jzseww.png)

这便是 `cron` 的基础应用示例。

### 一个实用的定时任务示例

假设你想创建一个脚本，用于拷贝多个目录内容到一个路径并打包作为备份，该如何实现？

通过 `cron` 定时任务就可以很容易实现该功能。

请看如下脚本：

```
#!/usr/bin/bash
echo "Backing up..."
mkdir -p ~/.local/tmp/
tar -Pc ~/Documents/ -f ~/.local/tmp/backup.gz

```

该脚本做了如下事情：

1. 确保备份路径目录 `~/.local/tmp/` 存在。
2. 将目录 `~/Documents/` 下的所有内容打包至文件 `~/.local/tmp/backup.gz`。

我们先来手动运行该脚本，看看它到底如何工作。

首先，我们在家目录（`~`）下创建该脚本，命令为 `backup_script`，如下图所示：

![](/data/attachment/album/202112/16/112703q72e2hd2vdygs79l.png)

然后编辑 `backup_script` 脚本，写入上面那个脚本代码。

接着，赋予 `backup_script` 可执行权限：

![](/data/attachment/album/202112/16/112703h40zzwn7wrv0w0vy.png)

最后运行脚本 `~/backup_script`，进行功能验证：

![](/data/attachment/album/202112/16/112703fvsgudnyzfldnca9.png)

你可以通过运行命令 `tar -xf ~/.local/tmp/backup.gz -C <output_dir>` 来进行备份恢复，这里 `<output_dir>` 是指文件要恢复到的路径目录。

接下来，就可以用 `cron` 工具来进行定时任务运行该脚本了。

举个例子，假设需要每天的凌晨 3 点运行该备份脚本，你可以在 `crontab` 中输入如下命令：

```
* 3 * * * ~/backup_script

```

这样你就可以每天自动进行备份操作了。

### 后记

本文简单介绍了定时任务功能。尽管我不确定 Linux 桌面用户使用该功能多不多，但我知道定时任务功能被许多系统管理员广泛应用。如果你有什么想法，欢迎在评论区留言。

---

via: <https://itsfoss.com/cron-job/>

作者：[Hunter Wittenborn](https://itsfoss.com/author/hunter/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[jrglinux](https://github.com/jrglinux) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Python Beautiful Soup 刮取简易指南

>
> Python 中的 Beautiful Soup 库可以很方便的从网页中提取 HTML 内容。
>
>
>

![](/data/attachment/album/202112/16/142118cmffvtfrmh1h3ufv.jpg "Computer screen with files or windows open")

今天我们将讨论如何使用 Beautiful Soup 库从 HTML 页面中提取内容，之后，我们将使用它将其转换为 Python 列表或字典。

### 什么是 Web 刮取，为什么我需要它？

答案很简单：并非每个网站都有获取内容的 API。你可能想从你最喜欢的烹饪网站上获取食谱，或者从旅游博客上获取照片。如果没有 API，提取 HTML（或者说 <ruby> 刮取 <rt>  scraping </rt></ruby> 可能是获取内容的唯一方法。我将向你展示如何使用 Python 来获取。

**并非所以网站都喜欢被刮取，有些网站可能会明确禁止。请于网站所有者确认是否同意刮取。**

### Python 如何刮取网站？

使用 Python 进行刮取，我们将执行三个基本步骤：

1. 使用 `requests` 库获取 HTML 内容
2. 分析 HTML 结构并识别包含我们需要内容的标签
3. 使用 Beautiful Soup 提取标签并将数据放入 Python 列表中

### 安装库

首先安装我们需要的库。`requests` 库从网站获取 HTML 内容，Beautiful Soup 解析 HTML 并将其转换为 Python 对象。在 Python3 中安装它们，运行：

```
pip3 install requests beautifulsoup4

```

### 提取 HTML

在本例中，我将选择刮取网站的 [Techhology](https://notes.ayushsharma.in/technology) 部分。如果你跳转到此页面，你会看到带有标题、摘录和发布日期的文章列表。我们的目标是创建一个包含这些信息的文章列表。

网站页面的完整 URL 是：

```
https://notes.ayushsharma.in/technology

```

我们可以使用 `requests` 从这个页面获取 HTML 内容：

```
#!/usr/bin/python3
import requests

url = 'https://notes.ayushsharma.in/technology'

data = requests.get(url)

print(data.text)

```

变量 `data` 将包含页面的 HTML 源代码。

### 从 HTML 中提取内容

为了从 `data` 中提取数据，我们需要确定哪些标签具有我们需要的内容。

如果你浏览 HTML，你会发现靠近顶部的这一段：

```
<div class="col">
  <a href="/2021/08/using-variables-in-jekyll-to-define-custom-content" class="post-card">
    <div class="card">
      <div class="card-body">
        <h5 class="card-title">Using variables in Jekyll to define custom content</h5>
        <small class="card-text text-muted">I recently discovered that Jekyll's config.yml can be used to define custom
          variables for reusing content. I feel like I've been living under a rock all this time. But to err over and
          over again is human.</small>
      </div>
      <div class="card-footer text-end">
        <small class="text-muted">Aug 2021</small>
      </div>
    </div>
  </a>
</div>

```

这是每篇文章在整个页面中重复的部分。我们可以看到 `.card-title` 包含文章标题，`.card-text` 包含摘录，`.card-footer > small` 包含发布日期。

让我们使用 Beautiful Soup 提取这些内容。

```
#!/usr/bin/python3
import requests
from bs4 import BeautifulSoup
from pprint import pprint

url = 'https://notes.ayushsharma.in/technology'
data = requests.get(url)

my_data = []

html = BeautifulSoup(data.text, 'html.parser')
articles = html.select('a.post-card')

for article in articles:

    title = article.select('.card-title')[0].get_text()
    excerpt = article.select('.card-text')[0].get_text()
    pub_date = article.select('.card-footer small')[0].get_text()

    my_data.append({"title": title, "excerpt": excerpt, "pub_date": pub_date})

pprint(my_data)

```

以上代码提取文章信息并将它们放入 `my_data` 变量中。我使用了 `pprint` 来美化输出，但你可以在代码中忽略它。将上面的代码保存在一个名为 `fetch.py` 的文件中，然后运行它：

```
python3 fetch.py

```

如果一切顺利，你应该会看到：

```
[{'excerpt': "I recently discovered that Jekyll's config.yml can be used to"
"define custom variables for reusing content. I feel like I've"
'been living under a rock all this time. But to err over and over'
'again is human.',
'pub_date': 'Aug 2021',
'title': 'Using variables in Jekyll to define custom content'},
{'excerpt': "In this article, I'll highlight some ideas for Jekyll"
'collections, blog category pages, responsive web-design, and'
'netlify.toml to make static website maintenance a breeze.',
'pub_date': 'Jul 2021',
'title': 'The evolution of ayushsharma.in: Jekyll, Bootstrap, Netlify,'
'static websites, and responsive design.'},
{'excerpt': "These are the top 5 lessons I've learned after 5 years of"
'Terraform-ing.',
'pub_date': 'Jul 2021',
'title': '5 key best practices for sane and usable Terraform setups'},

... (truncated)

```

以上是全部内容！在这 22 行代码中，我们用 Python 构建了一个网络刮取器，你可以在 [我的示例仓库中找到源代码](https://gitlab.com/ayush-sharma/example-assets/-/blob/fd7d2dfbfa3ca34103402993b35a61cbe943bcf3/programming/beautiful-soup/fetch.py)。

### 总结

对于 Python 列表中的网站内容，我们现在可以用它做一些很酷的事情。我们可以将它作为 JSON 返回给另一个应用程序，或者使用自定义样式将其转换为 HTML。随意复制粘贴以上代码并在你最喜欢的网站上进行试验。

玩的开心，继续编码吧。

*本文最初发表在[作者个人博客](https://notes.ayushsharma.in/2021/08/a-guide-to-web-scraping-in-python-using-beautifulsoup)上，经授权改编。*

---

via: <https://opensource.com/article/21/9/web-scraping-python-beautiful-soup>

作者：[Ayush Sharma](https://opensource.com/users/ayushsharma) 选题：[lujun9972](https://github.com/lujun9972) 译者：[MjSeven](https://github.com/MjSeven) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #487 带有有安全缺陷的 Log4J 的火星直升机

Summary: 更多：• 明年有望在苹果 M1 芯片上见到日常可用的 Linux • 明年勒索软件的状况将更糟糕

人家都买M1了，还在乎你Linux?

来自120.230.61.196的 Chrome Mobile 75.0|Android 10 用户

![](/data/attachment/album/202112/16/194414bxy76ciydcyq6cuu.jpg)

![](/data/attachment/album/202112/16/194427b2hesabj5mm47hhs.jpg)

### 带有有安全缺陷的 Log4J 的火星直升机

灵巧号火星直升机在 12 月 5 日的第 17 次飞行中飞行了 30 分钟，这创造了新的记录。但在飞行结束时，直升机向地面下降时，飞行中的数据流意外地被切断。而之前 Apache 基金会曾骄傲地宣称灵巧号的软件里有 Log4J，因此人们怀疑是不是火星直升机也受到了该漏洞影响。不过，Log4J 漏洞披露于 12 月 9 日，而飞行活动发生在 5 日，这两个事件 [完全没有联系](https://www.theregister.com/2021/12/16/ingenuity_mars_helicopter_log4j_network/)。即便有可能，利用火星上的 Log4J 漏洞的概率也微乎其微：要攻击机器，必须将特别制作的文本发送到硬件上，并由有漏洞的库记录下来。要发生这种情况，除非内部人才能做到。

>
> 老王点评：虽然现在的飞行器处于隔离的网络环境中，但是也不好说完全不受到安全漏洞影响。而更可怕的是，将来跨越太空的网络攻击可能离我们不远了。
>
>
>

![](/data/attachment/album/202112/16/194437rzhuuxatabbunw99.jpg)

### 明年有望在苹果 M1 芯片上见到日常可用的 Linux

旨在为苹果 M1 芯片提供 Linux 支持的 Asahi Linux 项目已经完成了 [许多目标](https://asahilinux.org/2021/12/progress-report-oct-nov-2021/)。Linux 5.17 带来了更多的苹果 M1 驱动，但现在的状况还没有为最终用户做好准备。他们已经支持了触摸板和键盘，对音频播放、耳机插孔等也提供了补丁。不仅是原始的 M1，还有对最近的 M1 Pro 和 M1 Max 的支持工作。但仍需解决的工作包括 CPU 频率缩放、系统睡眠和 CPU 深度睡眠支持、完善 NVMe 存储、WiFi 驱动等补丁，以及 GPU 加速和各种固件问题。2022 年有望完成更多工作，以便在苹果 M1 硬件上形成一个日常可用的 Linux 系统。

>
> 老王点评：这就是开源的力量。但是我好奇的是，为什么苹果一直装聋作哑。
>
>
>

![](/data/attachment/album/202112/16/194445wgckccgdzddrcmdg.jpg)

### 明年勒索软件的状况将更糟糕

勒索软件现在是企业的主要威胁，而安全专家认为这种犯罪 [在未来将更严重](https://www.zdnet.com/article/ransomware-in-2022-were-all-screwed/)。在过去的几年里，勒索软件运营商从无组织的团伙和个人，发展到针对从中小企业到软件供应链的各个层面的、高度复杂的运营机构和各个独立团队间的合作。勒索软件感染不再是网络攻击的最终目标，已经成为旨在从受害组织那里获得勒索付款的一个组成部分。安全专家认为，勒索软件即服务（RaaS）将在 2022 年继续蓬勃发展，甚至可能进一步发展为一种订阅模式，即你付钱给犯罪团伙，让他们不要针对你。

>
> 老王点评：勒索软件攻击已经成为企业必须为之列支的风险之一了。
>
>
>


用开源的 Darktable 进行照片处理

Summary: 如果你拍摄的照片值得处理，那么你可以看看 Darktable 为你提供了什么。

如果你拍摄的照片值得处理，那么你可以看看 Darktable 为你提供了什么。

>
> 如果你拍摄的照片值得处理，那么你可以看看 Darktable 为你提供了什么。
>
>
>

![](/data/attachment/album/202112/17/110051ezze4uatt2d2f94e.jpg "Polaroids and palm trees")

很难说好照片是如何产生的。你必须在正确的时间出现在正确的地点。你必须准备好相机和构图的观察力。而这只是发生在相机里的部分。好的摄影还有另一个阶段，许多人都没有想到这一点。它曾经需要在 *暗房* 中的灯光和化学品，但在今天的数字工具中，后期制作发生在暗房软件中。最好的照片处理器之一是 [Darktable](https://www.darktable.org/)，我在 2016 年写了一篇 [介绍 Darktable](https://opensource.com/life/16/4/how-use-darktable-digital-darkroom) 的文章。那篇文章已经过去五年了，所以我想我应该重新审视一下这个应用，写一写它的一个高级功能：蒙版。

自从我最初写下这篇文章以来，Darktable 并没有什么变化，在我看来，这是一个真正好的应用的标志之一。一个稳定的界面和持续的优秀性能是人们对软件的所有要求，而 Darktable 依旧熟悉而强大。如果你是 Darktable 的新手，请阅读我的 [介绍性文章](https://opensource.com/life/16/4/how-use-darktable-digital-darkroom)，了解基础知识。

### 什么是蒙版？

在照片处理中，蒙版被用来限制你对图像的调整，使其只限于图像的一个区域。

直观地说，<ruby> 蒙版 <rt>  mask </rt></ruby> 是视觉艺术中的一种技术，用一种材料来遮挡另一种材料。如果你曾经在你的公寓或房子里画过一面墙，你可能使用过 *遮蔽胶带*（也叫油漆工胶带）来保护相邻的墙壁或造型不受杂乱笔触的影响。完成后，你剥去遮蔽胶带，你就有了漂亮的油漆直线。

<ruby> 模板 <rt>  stencil </rt></ruby>也是遮蔽的一种形式。

![A mask made of masking tape](/data/attachment/album/202112/17/110102my3f15bsgws85497.jpg "A mask made of masking tape")

（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）

这是一种在摄影中使用了一个世纪的技术，因此，数字摄影工具有一个类似的技术也是合理的。

### 在 Darktable 中使用蒙版

在这个例子中，我使用了 Flickr 用户 **bcnewdemocrats** 的创作共用照片。这是一张很好的照片，因为它有迷人的主题（两个孩子在他们非常耐心的父亲脸上涂抹 Holi 粉）。因为它是关于印度的五彩节，所以它在整个过程中都有色彩飞溅。

![Original photograph](/data/attachment/album/202112/17/110103arrbekkadmd0p9m2.jpg "Original photograph")

（bcnewdemocrats, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）

这是一张不需要改进的照片，但并不是所有的调整都需要剧烈变化才能产生显著效果。

色彩校正滤镜提供了一个特别明显的调整。在彩色摄影中，尤其是人物摄影中，一个常见的修正是添加 *琥珀色*（一种偏红的橙色）。人类肤色受益于琥珀色，因为我们把这种颜色与温暖和生命联系起来。

点击 “<ruby> 开启 <rt>  On </rt></ruby>” 按钮，激活 Darktable 窗口右侧的色彩校正调整面板。将中心点向上和向右拖动，给照片增加琥珀色。

![Color correction panel](/data/attachment/album/202112/17/110104qpomzoxpppmqqgmf.jpg "Color correction panel")

（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）

这样做之后，整张照片就会浸透在琥珀色里。

![Darktable global color correction](/data/attachment/album/202112/17/110104om14171p1w184wkw.jpg "Darktable global color correction")

（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）

在色彩校正面板的底部，点击 “<ruby> drawn & parametric mask <rt>  绘制和参数化蒙版 </rt></ruby>” 按钮。

![Apply mask button](/data/attachment/album/202112/17/110104keklk5qzltzenekf.jpg "Apply mask button")

（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）

在显示出来的工具栏中，你有几种蒙版形状可以选择。有圆、椭圆、路径、画笔、梯度，还有一个编辑现有蒙版的选项。为了简单起见，选择圆形，然后点击你的对象的脸。

![Circle mask](/data/attachment/album/202112/17/110105g544541y5hynu4yr.jpg "Circle mask")

（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）

你的色彩校正滤镜立即被限制在你的圆形蒙版的区域内，给你的主要对象一个令人愉快的琥珀色调，同时避开背景。

![Color correction within a circle mask](/data/attachment/album/202112/17/110105ctasttsjgunmssz1.jpg "Color correction within a circle mask")

（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）

你可以通过切换色彩校正滤镜的关闭和开启来看到区别。

### 复用蒙版

如果你想只对被摄者的脸部应用另一个滤镜，你不必为那个新的滤镜再创建一个蒙版。当你创建一个蒙版时，它会被添加到位于 Darktable 界面左边的 “<ruby> 蒙版管理器 <rt>  mask manager </rt></ruby>” 面板上。默认的名字是非常通用的，但你可以双击每个蒙版的名字来重命名它。

![Mask manager](/data/attachment/album/202112/17/110105km9sil2ldmeo12uz.jpg "Mask manager")

（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）

当你应用一个新的滤镜时，不是选择一个新的蒙版形状来创建，而是点击 “<ruby> 不使用蒙版 <rt>  no mask used </rt></ruby>” 下拉菜单来查看现有的蒙版列表，以及之前在同一个滤镜上一起使用过的自动分组的蒙版。选择你想用于新滤镜的蒙版或蒙版组。

![Selecting an existing mask](/data/attachment/album/202112/17/110105csqqaa1ktk1a4b7d.jpg "Selecting an existing mask")

（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）

### 更多蒙版

在 Darktable 中还有很多其他类型的蒙版和蒙版功能可以探索。你可以用路径和画笔工具创建复杂的形状。你也可以完全放弃使用形状，并根据色度和亮度值将过滤器限制在图像的某个区域。你可以调整蒙版的模糊度和扩散度等。在 Darktable 中进行的所有调整中，最好的一点是它们都是动态的、非破坏性的。如果你改变主意，你可以随时关闭它们，而且你实际上从未影响过图像数据本身。这并不奇怪，因为 Darktable 确实是一个强大的摄影工具，如果你拍摄的照片值得处理，你就应该看看 Darktable 为你提供了什么。

---

via: <https://opensource.com/article/21/12/open-source-photo-processing-darktable>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


在 Linux 终端使用 inxi 命令获取各种系统信息

Summary: 在本文中，我将展示使用 inxi 命令获取系统信息的常用操作。

这个软件功能也太丰富了吧

在本文中，我将展示使用 inxi 命令获取系统信息的常用操作。

![](/data/attachment/album/202112/17/134920bzuqfbwbqswcif33.jpg)

`inix` 是一个用于获取 Linux 系统信息的终端命令。能够获取软件和硬件的详细信息，比如计算机型号、内核版本、发行版号以及桌面环境等信息，甚至可以读取主存模块占用主板的哪块 RAM 卡槽等详细信息。

`inxi` 还可以用于监控系统中正在消耗 CPU 或者内存资源的进程。

在本文中，我将展示使用 `inxi` 命令获取系统信息的常用操作。

首先，我将展示下如何安装 `inxi` 命令。

### 在 Linux 上安装 inxi

`inxi` 是一个非常流行的工具，所以在大多数 Linux 发行版仓库中都可以轻松获取到该工具。不过还没有流行到各大 Linux 发行版默认就安装了该软件，所以需要我们自己安装一下。

在 Ubuntu/Debian 发行版系统中，安装命令：

```
sudo apt install inxi

```

在 Fedora/RHEL8-based 等发行版中，安装命令：

```
sudo dnf install -y epel-release
sudo dnf install -y inxi

```

在 `Arch Linux` 以及它的派生分支版本中，安装命令：

```
sudo pacman -S inxi

```

### 使用 inxi 获取系统信息

你可以在终端运行 `inxi` 命令来总体浏览下系统信息。

```
inxi

```

如下图所示，运行 `inxi` 命令可以简要浏览 CPU、时钟频率（`speed/min/max`）、内核（`Kernel`）、内存（`Mem`）、磁盘存储空间（`Storage`）、运行进程数量（`Procs`）以及 Shell 等信息。

![The default output of inxi command](/data/attachment/album/202112/17/134938gckyz33o3ybxggbs.jpg)

使用 `-b` 参数可以获取更为详细的系统信息。`-b` 参数会读取更多有关 CPU、驱动器、当前运行进程、主板 UEFI 版本、GPU、显示分辨率以及网络设备等详细信息。

```
inxi -b

```

![Detailed hardware and software information about machine as reported by inxi](/data/attachment/album/202112/17/134938wzhamzbmbl7b11lk.jpg)

类似 `-b` 参数使用方法，`inxi` 还有许多其他的参数可供使用。你可以综合使用这些参数来获取你关心的信息。

让我们看几个实例。

### 获取音频设备信息

使用 `-A` 参数可以获取有关音频（输出）设备信息，包括物理音频（输出）设备、声音服务器以及音频驱动等详细信息。

```
inxi -A

```

![Output of inxi command when “-A” flag is used](/data/attachment/album/202112/17/134938q3y2pjpsps3qpymq.jpg)

### 获取电池信息

使用 `-B` 参数，可以获取有关电池的信息（如果安装了电池）。你将读取到例如以 `Wh`（瓦特小时）为单位的当前电池电量和状况。

因为我使用的是台式机，所以这里仅仅作为一个示例，让我们看看使用 `inxi -B` 会输出什么。

```
Battery:   ID-1: BAT0 charge: 50.0 Wh (100.0%) condition: 50.0/50.0

```

### 获取 CPU 信息

`-C` 参数用于获取有关 CPU 的详细信息。比如包括 CPU 缓存大小、频率（单位 `MHz`，如果有多核，会显示每个核心的频率）、核心数、CPU 型号以及 CPU 是 32 位还是 64 位。

```
inxi -C

```

![Detailed CPU information displayed by inxi](/data/attachment/album/202112/17/134939ag2s0byetgbcarce.jpg)

注意，如果是在虚拟机中使用 `inix -C`，`inxi` 读取到的 `CPU` 的最大和最小频率可能异常。下面是一个在四核 Debian 11 虚拟机中使用 `-C` 参数的示例输出。

![An example output of using the “-C” flag in a Virtual Machine](/data/attachment/album/202112/17/134939u2isin8zhccrrhhn.jpg)

### 获取更多的系统信息

使用 `-F` 参数可以获取更详细的系统信息（类似 `-b` 参数，但会更为详细）。几乎囊括了所有层次的系统信息。

```
inxi -F

```

![](/data/attachment/album/202112/17/134939fcdz7eg4fsqf8plz.jpg)

### 获取图形显示相关信息

`-G` 参数可以获取和图形相关的信息。

它会显示所有的图形设备（GPU）、正在使用的 GPU 驱动（有助于检查是否使用 Nvidia 驱动还是 nouveau 驱动）、显示输出分辨率和驱动程序版本。

```
inxi -G

```

![](/data/attachment/album/202112/17/134940kkuiwcakzkkv1utm.jpg)

### 获取运行进程信息

`-I` 参数（大写字母 `i`）显示正在运行的进程、当前 shell 、内存（内存使用情况）以及 `inxi` 版本号等信息。

![inxi get running process info](/data/attachment/album/202112/17/134940p7ccatw7weemte8n.png)

### 获取内存信息

可能你已经猜到了，`-m` 参数可以获取与内存相关的信息。

它读取了如总可用内存、最大内存容量（硬件或 CPU 支持的）、主板物理内存插槽数、是否存在 ECC、插入的内存插槽，以及枚举每个插槽中运行的内存模块的大小和运行速度等信息。

```
inxi -m

```

要使用 `-m` 参数获取更详细的信息，例如最大容量、每个插槽的内存模块信息等，需要超级用户权限。

```
sudo inxi -m

```

![](/data/attachment/album/202112/17/134941vu61m9tqdxugq2gt.jpg)

如果只是希望简短的输出内存信息，可以使用 `-memory-short` 参数。

使用 `-memroy-short` 参数将会只显示总内存以及当前已使用的内存量。

### 查看正在使用的包存储库

当使用 `-r` 参数时，会列举当前正在使用的包管理仓库或者更新本地仓库缓存中的所有存储库列表。

![List of repositories in use](/data/attachment/album/202112/17/134941kfwpalmlftzwm916.png)

### 获取 RAID 设备信息

`-R` 参数用于获取所有 RAID 设备相关信息。

令人惊喜的是，它甚至显示了有关 ZFS RAID（默认情况下，多数 Linux 系统不包含该文件系统）的信息。它显示了 RAID 设备上文件系统的详细信息、状态（包含离线状态、总大小和可用大小等）。

```
inxi -R

```

![](/data/attachment/album/202112/17/134941pj8dni7qjdnw4d3n.jpg)

### 在 Linux 终端中查询天气（对，这是可以的）

利用 `-W` 参数，你可以查询地球上任何地方的天气情况。

`-W` 参数后面，需要携带以下中的任一一个体现位置的信息

* 邮政编码
* 纬度
* 城市（及州）、国家（不能含有空格，使用 “+” 替换空格）

```
inxi -W Baroda,India

```

![Use of the “-W” flag with inxi followed by the city,country location descriptor](/data/attachment/album/202112/17/134942ja1ue68kvor8ecsu.jpg)

### 监控系统资源使用情况

`inxi` 除了提供有关已安装的硬件和驱动的信息外，还可以用于资源监控。

使用 `-t` 参数可以显示进程信息。你还可以可选项 `-c` （用于 CPU）和 `-m`（用于内存）。这些选项结合使用可以按指定数量列出进程信息。

下面是一些使用 `-t` 参数监控资源信息的示例。

```
inxi -t

```

命令 `inxi -t` 默认效果等同于 `inxi -t cm5` 的效果。

![No difference in output of “inti -t” and “inxi -t cm5”](/data/attachment/album/202112/17/134942w2nsininwbwj2fsc.jpg)

```
inxi -t cm10

```

![](/data/attachment/album/202112/17/134942zwuo9ukw9t8f9b12.jpg)

偶尔需要监控资源使用情况时，该工具挺管用。如果需要更多的资源监控功能，则推荐使用 [专用系统资源监控工具](https://itsfoss.com/linux-system-monitoring-tools/)。

### 总结

对于需要诊断计算机问题以及获取那些并不熟悉的软硬件信息的人来说，`inxi` 工具是十分便利且有用的。它能识别那些消耗 CPU、内存的进程；可以检查是否安装了合适的图形驱动程序、主板 UEFI/BIOS 是否需要更新等等。

事实上，在 `inxi` 开源社区论坛上，我们要求那些寻求帮助的成员提供 `inxi` 命令输出内容以便判断他们当前正在使用什么样的系统环境。

我知道也有其他的工具可以读取 Linux 上的硬件信息，不过 `inxi` 同时能读取硬件和软件信息，这也是我喜欢它的地方所在。

你使用 `inxi` 或者其他工具么？欢迎在评论区留言分享交流。

---

via: <https://itsfoss.com/inxi-system-info-linux/>

作者：[Pratham Patel](https://itsfoss.com/author/pratham/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[jrglinux](https://github.com/jrglinux) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #488 谷歌称 NSO Pegasus 漏洞是“有史以来技术上最复杂的漏洞”

Summary: 更多：• 英特尔称，元宇宙需要 1000 倍的计算能力 • 龙芯处理器首次成功运行开源鸿蒙系统

![](/data/attachment/album/202112/17/151318lkpmpp4md6lpd7qq.jpg)

![](/data/attachment/album/202112/17/151359rr0er80hhr374rbe.jpg)

### 谷歌称 NSO Pegasus 漏洞是“有史以来技术上最复杂的漏洞”

谷歌安全团队在研究 NSO Pegasus 木马时 [大吃一惊](https://www.securityweek.com/google-says-nso-pegasus-zero-click-most-technically-sophisticated-exploit-ever-seen)，他们发现了一个从未见过的黑客利用方式，其中包括一个假装是 GIF 图像的 PDF 文件，文件中有一个虚拟 CPU，是由对像素进行布尔操作而构建。谷歌安全研究人员说“这是我们所见过的技术上最复杂的漏洞之一”。该漏洞有效地创造了“一种无法防御的武器”，这个漏洞在后台默默工作，甚至不要求目标点击链接或浏览恶意网站。“除了不使用设备之外，没有办法防止零点击漏洞的利用。”Pegasus 木马是通过 iMessage 进入设备的，黑客们只需要一个 AppleID 的电话号码就可以瞄准并植入窃听木马。

>
> 老王点评：抛开木马本身的恶意用途不说，这个木马的设计很有创意啊。
>
>
>

![](/data/attachment/album/202112/17/151408bc13pmp8v3xfcy6r.jpg)

### 英特尔称，元宇宙需要 1000 倍的计算能力

英特尔加速计算系统和图形组 [负责人说](https://www.businessinsider.in/tech/news/metaverse-vision-requires-1000x-more-computational-power-intel/articleshow/88316064.cms)，我们今天的计算、存储和网络基础设施根本不足以实现元宇宙愿景，它需要几个数量级的强大计算能力，以更低的延迟在多种设备形式中使用。

>
> 老王点评：这岂不是可以多卖很多芯片出去？
>
>
>

![](/data/attachment/album/202112/17/151427f65l8x7ipbkcpc55.jpg)

### 龙芯处理器首次成功运行开源鸿蒙系统

慧睿思通宣布，首次成功将 OpenHarmony 移植到龙芯平台。[Gitee 上的项目页面](https://gitee.com/guangzhou-huirui-stone-co-ltd_0/Loongson-1c300b-OpenHarmony) 显示，它基于最新的 OpenHarmony 3.0 版本，通过裁剪和精简版本，去掉不必要的组件，移植到了龙芯 1C300 处理器平台。由于 OpenHarmony 并不支持 MIPS 架构和基于 MIPS 的龙芯，此次移植克服了不少困难，但还有一些驱动未适配，网卡、FPU 功能等尚未实现。1C300 是一款高性价比的单芯片系统，内置浮点处理单元（FPU），支持多种类型内存，可应用于工控、物联网等领域。

>
> 老王点评：这对于鸿蒙和龙芯来说都是好事，但比我预期的要晚。
>
>
>


用 Jekyll 和 Git 展示你的源码

Summary: 我是如何通过链接每个页面回到其原始源代码来保持我的网站开放的。

我是如何通过链接每个页面回到其原始源代码来保持我的网站开放的。

>
> 我是如何通过链接每个页面回到其原始源代码来保持我的网站开放的。
>
>
>

![](/data/attachment/album/202112/18/093318uoud175bj4d55zz5.jpg "Text editor on a browser, in blue")

我是一个开源的超级粉丝。

我支持这项事业的一个小方法是从一开始就保持我的个人博客网站开放。我这样做的部分原因是让人们看到每个页面背后的变化历史。还因为当我开始使用 [Jekyll](https://opensource.com/article/21/9/build-website-jekyll) 时，我没有找到很多开源的 Jekyll 博客可以学习。我希望保持我的网站开放并公开我的尝试和错误，可以为其他人节省很多时间。

### Jekyll 的 page.path 变量

我实现这一目标的方法之一是将我发布的每一个条目链接到其原始的 [Markdown](https://opensource.com/article/19/9/introduction-markdown)。[Jekyll 的变量](https://jekyllrb.com/docs/variables/#page-variables) 中正好有一个需要的工具：`page.path`。这个变量包含每个页面的原始文件系统路径。官方的描述甚至强调了它的作用是链接回源！

在一篇文章的 Markdown 文件中打印 `{{page.path }}`，可以得到类似这样的结果：

```
_posts/2021-10-10-example.md

```

假设该文章的源代码存在于这个路径：

```
https://example.com/ayushsharma-in/-/blob/master/_posts/2021-10-10-example.md

```

如果你在任何文章的 `page.path` 前加上 `https://example.com/ayushsharma-in/-/blob/master/`，它就会生成一个返回其源码的链接。

在 Jekyll 中，生成这个完整的链接看起来像这样：

```
<a href="{{ page.path | prepend: site.content.blog_source_prefix }}" target="_blank">View source</a>

```

就是这么简单。

### Jekyll 和开放 Web

现代 Web 是一种错综复杂的多层次技术，但这并不意味着它必须让人摸不清。有了 Jekyll 的变量，你可以确保你的用户可以，了解更多关于你是如何建立你的网站的，如果他们愿意的话。

你可以在我的[个人博客](https://www.ayushsharma.in)上看到真实的例子：滚动到底部的查看源码链接。

本文改编自 [ayush sharma 的笔记](https://www.ayushsharma.in/2021/11/linking-jekyll-pages-back-to-their-git-source-code)，并经许可转载。

---

via: <https://opensource.com/article/21/12/reveal-source-code-jinja2-git>

作者：[Ayush Sharma](https://opensource.com/users/ayushsharma) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


为 Linux 用户准备的 FreeDOS 命令

>
> 如果你已经熟悉了 Linux 命令行，尝试这些命令有助于轻松地进入 FreeDOS 。
>
>
>

![](/data/attachment/album/202112/18/102331ubkem265eqz6u1mk.jpg "FreeDOS fish logo and command prompt on computer")

如果你已经尝试过 FreeDOS ，你可能已经被命令行所吓倒。DOS 命令可能稍微不同于你所使用的 Linux 命令行，因此，使用它的命令行上需要学习一些新的命令。

但是对于 Linux 用户来说，它不是一种 “全新的” 体验。在 FreeDOS 中，除了 DOS 命令之外，我们还包含一些已经熟悉的标准的 Unix 命令。因此，如果你已经熟悉了 Linux 命令行，尝试这些命令有助于轻松地进入 FreeDOS ：

### 在四周走走

在 FreeDOS 文件系统中使用 `cd` 命令来 *更改目录* 。在 FreeDOS 上的用法在 Linux 上的用法基本相同。要更改到一个名称为 `apps` 的子目录，输入 `cd apps` 。要回到先前的目录，输入 `cd ..` 。

在 FreeDOS 上导航浏览目录和路径是仅有的不同点，目录分隔符是 `\`（“反斜杠”）而不是你在 Linux 上使用的 `/` （“正斜杠”）。例如，让我们假设你在 `\devel` 目录之中，你想移动到 `\fdos` 目录。这两个目录相对于 *根* 目录而言是处于相同的 “层次” 之中的。因此，你可以输入 `cd ..\fdos` 来 “向后返回” 一个目录层次（使用 `..`） ，然后再 “转到” `fdos` 目录。

要更改到一个新的目录，你可以使用先前提到的反斜杠来替换需要给出的完整的路径。如果你已经深入了另外一个路径之中，并且只是像立即切换到新的位置，那么这会是非常方便的。例如，要更改到 `\temp` 目录，你可以输入 `cd \temp` 。

```
C:\>cd apps
C:\APPS>cd ..
C:\>cd devel
C:\DEVEL>cd ..\fdos
C:\FDOS>cd \temp
C:\TEMP>_

```

在 FreeDOS 中，像大多数的 DOS 系统一样，你可以在DOS 提示符中看到你的当前路径。在 Linux 上，你的提示符可能类似于 `$` 。在 FreeDOS 上，提示符会列出当前的驱动器及其当前的路径，接下来使用 `>` 作为提示符（看做 Linux 上的 `$`）。

### 列出和显示文件

在 Linux 上，列出当前目录中文件的标准命令是 `ls` 命令。在 FreeDOS ，它是一个不同的命令： `dir` 。但是你可以创建一个 *别名* 来获取一种与 `ls` 类似的行为。

要为另外一个命令创建一个别名，使用内置的 `alias` 命令。例如，使用此命令来为 `ls` 定义一个别名，这个别名将显示一个目录列表，与在 Linux 上使用 `ls` 类似：

```
C:\>alias ls=dir /one /w /b /l
C:\>ls
[apps]    command.com   [devel]  fdauto.bat   fdconfig.sys
[fdos]    kernel.sys    [src]    [temp]
C:\>

```

在 FreeDOS 上的命令选项格式与 Linux 稍微不同。在 Linux 上， 你使用一个连字符号（`-`）表示选项。但是在 FreeDOS 上，你使用一个正斜杠来表示选项。上面的 `alias` 命令使用斜杆杠字符 — 它们是 `dir` 的选项。`/one` 可选择项告诉 `dir` 以某种方式排序（`o`）：先按名称（`n`）再按扩展名（`e`）来排序一些文件和目录。`/w` 使用一个 “宽” 目录列表，`/b` 使用一种不带有 `dir` 通常提供的其它信息的 “裸” 显示，`/l` 指示 `dir` 以小写字母的形式显示文件和目录。

注意，针对于 FreeDOS 的 `dir` 命令的命令行选项与针对于 Linux 的 `ls` 命令的命令行选项截然不同，因此，你不能像你在 Linux 上一样精确地使用这个 `ls` 别名。例如，在 FreeDOS 上使用此别名输入 `ls -l` 将产生一条 “文件未找到” 的错误，因为底层的 FreeDOS 的 `dir` 命令不能找到一个名称为 `-l` 的文件。不过，对于基本的 “查看在我的系统上有哪些文件” 来说，这个 `ls` 别名已经足够帮助 Linux 用户开始使用 FreeDOS 了。

类似地，你可以为 FreeDOS 的 `type` 命令创建一个别名，来像 Linux 的 `cat` 命令一样工作。两个重新都会显示一个文本文件的内容。虽然 `type` 不支持你可能在 Linux 下使用的命令行选项，但是显示一单个文件的基本用法是相同的。

```
C:\FDOS>alias cat=type
C:\FDOS>cat version.fdi
PLATFORM=FreeDOS
VERSION=1.3-RC4
RELEASE=2021-04-30
C:\FDOS>

```

### 其它的类 Unix 命令

FreeDOS 包含一些精选的其它常见的类 Unix 命令，因此 Linux 用户将不会感觉到拘束。为在 FreeDOS 上使用这些 Linux 命令，你可能需要从 “FreeDOS Installer” - “My Package List Editor Software (FDIMPLES)” 软件包管理器来安装 “Unix Like Tools” 软件包。

![Installing the Unix-like package set](/data/attachment/album/202112/18/102340gsagggawwxlfxaxf.png "Installing the Unix-like package set")

（Jim Hall, CC-BY SA 4.0）

并不是所有的类 Unix 实用程序都能像在 Linux 上对应的实用程序一样 *一致地* 工作。这就是我们称其为 *类 Unix* 的原因。如果你将要使用一些深层次的命令行选项，你可能需要检查其兼容性，不过，对于典型的用法是没有问题的。开始在 FreeDOS 上使用这些类 Unix 命令：

`cal` 命令是标准的 Unix 的日历程序。例如，为显示当前月份的日历，只需要输入 `cal` 。为查看一个具体指定的月份，将月份和年份作为参数予以给定：

```
C:\>cal 6 1994

      June 1994
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

```

使用 `du` 命令来查看你的磁盘使用情况。这是 Linux 的 `du` 命令的简单版本，并且不支持路径以外的任何命令行选项。

```
C:\>du -s apps
usage: du (start path)
C:\>du apps
    158784 C:\APPS\FED
         0 C:\APPS
Total from C:\APPS is 158784
C:\>

```

`head` 命令显示一个文件的前几行。例如，这是一种确定一个文件是否包含正确数据的简单方法。

```
C:>head fdauto.bat
@ECHO OFF
set DOSDIR=C"\FDOS
set LANG=EN
set TZ=UTC
set PATH=%dosdir%\BIN
if exist %dosdir%\LINKS\NUL set PATH=%path%;%dosdir%\LINKS
set NLSPATH=%dosdir%\NLS
set HELPPATH=%dosdir%\HELP
set TEMP=%dosdir%\TEMP
set TMP=%TEMP%
C:\>

```

要查看一个完整的文件，使用 `more` 命令，在 FreeDOS 上的默认文件查看器。这将一次显示一屏的文件，然后在显示下一屏的信息前，打印一个按下一次按键的提示。`more` 命令是一个非常简单的文件查看器；在 Linux 上你可能已经使用过一个功能更全面的查看器，可以尝试一下 `less` 命令。`less` 命令提供 “向后” 滚动一个文件的能力，以防你错过一些东西。你还可以搜索具体指定的文本。

```
C:\>less fdauto.bat
@ECHO OFF
set DOSDIR=C"\FDOS
set LANG=EN
set TZ=UTC
set PATH=%dosdir%\BIN
if exist %dosdir%\LINKS\NUL set PATH=%path%;%dosdir%\LINKS
set NLSPATH=%dosdir%\NLS
set HELPPATH=%dosdir%\HELP
set TEMP=%dosdir%\TEMP
set TMP=%TEMP%
[...]

```

如果在你的程序路径变量（`PATH`）中有很多的目录，并且不确定某个程序是从哪里运行的，你可以使用 `which` 命令。这个命令将扫描程序路径变量，并且将打印出你正在查找的程序的完整的位置。

```
C:\>which less
less    C:\>FDOS\BIN\LESS.EXE
C:\>_

```

FreeDOS 1.3 RC4 包含其它的类 Unix 命令，你可能会在其它更特殊的情况下使用。这些命令包括：

* `bc`：任意精度数字处理语言
* `sed`：流编辑器
* `grep` 和 `xgrep`：使用正则表达式搜索一个文本文件
* `md5sum`：生成一个文件的一个 MD5 签名
* `nro`：简单排版，使用 nroff 宏
* `sleep`：暂停系统几秒钟
* `tee`：保存一个命令行流的副本
* `touch`：修改一个文件的时间戳
* `trch`：转换单个字符（像 Linux 的 `tr` 一样）
* `uptime`：报告你 FreeDOS 系统已经运行多长的时间

### 在你控制下的 FreeDOS

FreeDOS ，像 Linux 和 BSD 一样，是开源的。不管你是想通过学习一种新的命令行交互方式来挑战你自己，还是想再去熟悉令人舒适的类 Unix 工具，FreeDOS 都是一款有趣的值得尝鲜的操作系统。尝试一下！

---

via: <https://opensource.com/article/21/6/freedos-linux-users>

作者：[Jim Hall](https://opensource.com/users/jim-hall) 选题：[lujun9972](https://github.com/lujun9972) 译者：[robsean](https://github.com/robsean) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Linux 黑话解释：TTY 是什么？

好像看了点什么，又好像没看

在Linux Mint 20.3 Una上默认并非如此，所以按错了记得去按Ctrl+Alt+F7回到桌面。

![](/data/attachment/album/202112/18/155143cz6aplfi8i6elmll.jpg)

谈到 Linux 和 UNIX 时，你一定听说过 “TTY” 这个术语，但是，这玩意是什么？

作为一个桌面用户，它对你有用吗？你需要它吗？你能用它做什么？

在本文中，让我向你介绍这些，帮助你熟悉 Linux 中的 TTY。

注意：这个问题没有明确的答案，但它与过去的输入/输出设备的交互方式有关。因此，你必须了解一些历史，才能清楚地了解情况。

### “TTY” 背后的历史

一切始于 19 世纪 30 年代的<ruby> 电传打印机 <rt>  Teleprinter </rt></ruby>。

电传打印机可以让你通过电线发送或接受消息，它取代了摩尔斯电码通信，那是一种需要两个操作员才能有效地相互通信的方式。

一台电传打印机只需要一个操作员就可以轻松地传递消息。虽然它没有现代布局的键盘，但它的系统后来由 Donald Murray 在 1901 年进行了改良，包括了一个类似打字机的键盘。

Murray 电码减少了操作员发送消息的工作量。这才使得电传打印机在 1908 年有了发展成为商业<ruby> 电传打字机 <rt>  Teletypewriter </rt></ruby>的可能。TTY 即是电传打字机的缩写。

![二战期间在伦敦实际使用的电传打字机 | 图片来源于维基百科](/data/attachment/album/202112/18/155151h64ww5haa64q4sn6.jpg)

电传打字机和普通<ruby> 打字机 <rt>  typewriter </rt></ruby>的区别在于，电传打字机连接到通信设备，直接发送输入的消息。

[电传打字机使人类在没有计算机的情况下通过电线进行更快的通信成为可能](https://en.wikipedia.org/wiki/Teletype_Corporation#/media/File:What-is-teletype.jpg)。

从这时起，“TTY” 一词就存在了。

### （相对）现代的概念

现在，你一定想知道，它是如何进入现代计算机和 Linux 的？

最初是当电传打字机进入了市场，几年后半导体晶体管发展起来，然后演变成微处理器，为计算机的出现做好了准备。

最初的计算机没有键盘的概念，<ruby> 打孔卡 <rt>  Punch card </rt></ruby>就是输入的方法。

![一种插入计算机而不是通过键盘（TTY）输入的打孔卡计算机程序 | 图片来源于维基百科](/data/attachment/album/202112/18/155151d57wc8zxfyxfmoyf.jpg)

随着计算机的发展，批量输入的打孔卡最终被电传打字机取代，成为一种方便的输入/输出设备。

![1956 年的 LGP-30 计算机，附带 TTY](/data/attachment/album/202112/18/155151q33w0uldhuzwuiwt.jpg)

随着技术的进步，电传打字机被电子技术“虚拟化”了。因此，你不需要一个物理的、机械的 TTY，而是一个虚拟的电子 TTY。

早期的计算机甚至没有视频屏幕。字符被打印在纸上而不是显示在屏幕上。因此，你会看到“<ruby> 打印 <rt>  print </rt></ruby>”这个术语而不是“<ruby> 显示 <rt>  display </rt></ruby>”。随着技术的进步，视频显示后来被添加到终端中。

换句话说，你可能听说过把它们称为“视频终端”。或者，你可以称它们为“物理”终端。

后来，它们演变成具有更强的能力和功能的软件仿真的终端。

这就是所谓的“<ruby> 终端仿真器 <rt>  terminal emulator </rt></ruby>”，如 GNOME 终端或 Konsole，或者其他 [你在 Linux 上找到的各种终端仿真器](https://itsfoss.com/linux-terminal-emulators/)。

### 所以，Linux 中的 TTY 到底是什么？

在 Linux 或 UNIX 中，TTY 变为了一个抽象设备。有时它指的是一个物理输入设备，例如串口，有时它指的是一个允许用户和系统交互的虚拟 TTY（[参考此处](https://unix.stackexchange.com/questions/4126/what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con)）。

TTY 是 Linux 或 UNIX 的一个子系统，它通过 TTY 驱动程序在内核级别实现进程管理、行编辑和会话管理。

在编程的场景下，你还需要深入研究。但是考虑到本文的范围，这可能是一个容易理解的定义。

如果你好奇的话，你可以查看一个有点旧的资源（[TTY 揭秘](https://www.linusakesson.net/programming/tty/index.php)），它尽可能的澄清了 Linux 和 UNIX 系统中的 TTY 的各种技术细节。

事实上，每当你在系统中启动一个终端仿真器或使用任何类型的 shell 时，它都会与虚拟 TTY（也被称为<ruby> 伪 TTY <rt>  pseudo-TTY </rt></ruby>，即 PTY）进行交互。

你可以在终端仿真器中输入 `tty` 来找到相关联的 PTY。

### 如何在 Linux 中访问 TTY？

![](/data/attachment/album/202112/18/155152yzs5e7srkr4sc6xr.png)

在 Linux 中很容易访问 TTY。事实上，当我不知道它是什么时，我不小心打开了它，于是对要做什么、如何摆脱它感到恐慌。

在大多数 *发行版* 中，你可以使用以下键盘快捷键来得到 TTY 屏幕：

* `CTRL + ALT + F1` – 锁屏
* `CTRL + ALT + F2` – 桌面环境
* `CTRL + ALT + F3` – TTY3
* `CTRL + ALT + F4` – TTY4
* `CTRL + ALT + F5` – TTY5
* `CTRL + ALT + F6` – TTY6

你最多可以访问六个 TTY。但是，前两个快捷方式指向发行版的锁定屏幕和桌面环境。

![](/data/attachment/album/202112/18/155152r4728hl30lg1zfab.png)

而其他快捷方式将会让你进入一个命令行界面。

### 什么时候应该使用 TTY？

TTY 不仅是一个技术宝藏，即使像我这样不是开发人员的用户，它也很有用。

在图形桌面环境冻结的情况下，它应该可以派上用场。在某些情况下，从 TTY 重建桌面环境能帮助解决程序问题。

或者，你也可以选择在 TTY 中执行任务，例如更新 Linux 系统等。在这些情况下，你不希望显示问题中断你的进程。

最坏的情况是，如果图形用户界面失去响应，你可以进入 TTY 并重新启动计算机。

有些用户还喜欢在 TTY 的帮助下传输大文件（我不是其中之一）。

### Linux 中的 TTY 命令

![](/data/attachment/album/202112/18/155152wrr4z922wwog8wc0.png)

当你在终端模拟器中输入 `tty` 时，它将打印连接到标准输入的终端文件名，就像手册页描述的一样。

换句话说，要知道你连接的 TTY 编号，只需输入 `tty`。并且，如果有多个用户远程连接到 Linux 机器，你可以使用 `who` 命令来检查其他用户连接到的是哪个 TTY。

---

via: <https://itsfoss.com/what-is-tty-in-linux/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[MjSeven](https://github.com/MjSeven) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #489 IBM 和三星的新芯片设计可以使手机的电池寿命延长一周

Summary: 更多：• 自由软件基金会宣布实施新董事会成员协议和道德准则 • 苹果 macOS Monterey 12 性能仅次于 Clear Linux

晚一周炸?

![](/data/attachment/album/202112/18/190146z7o9k7ilwtvbpiki.jpg)

![](/data/attachment/album/202112/18/190203omzj15z4o7u2if9u.jpg)

### IBM 和三星的新芯片设计可以使手机的电池寿命延长一周

IBM 和三星 [宣布](https://www.theverge.com/2021/12/14/22834895/ibm-samsung-vtfet-transistor-technology-advancement-battery-life-smartphone-semiconductor) 了他们在半导体设计方面的最新进展：一种在芯片上垂直堆叠晶体管的新方法 VTFET。这种新的设计是可以让芯片比现在更密集地堆积晶体管。虽然我们离 VTFET 设计在实际消费芯片中的应用还有一段距离，但 IBM 和三星声称，VTFET 技术可以提升两倍的性能或降低 85% 的能源使用，使得手机电池可以超过一周不充电，或减少加密货币挖掘等计算密集应用的能源消耗。

>
> 老王点评：换句话说，这种立体布局的芯片，有可能继续保持摩尔定律的存在。
>
>
>

![](/data/attachment/album/202112/18/190214yqclhcdcqjejfnd5.jpg)

### 自由软件基金会宣布实施新董事会成员协议和道德准则

FSF 称经过 6 个月的顾问领导的审查提出的这些准则旨在帮助 FSF 的管理更加透明、更有责任感、更有道德。今年 3 月，FSF 创始人 RMS 宣布重返 FSF 董事会，这引发了轩然大波。此前，RMS 因一些争议性言论被赶出了 FSF。这次重返引发了开源社区对 FSF 的透明性和行为准则的关注，诸多开源组织和意见领袖表达了不同意见。作为回应，FSF 表示将制定旨在指导成员的责任、决策和活动的 [成员协议和道德准则](https://www.fsf.org/news/fsf-adopts-new-governance-framework-for-board-members)。

>
> 老王点评：至少这是 FSF 走向正规化和现代化的一个进步。
>
>
>

![](/data/attachment/album/202112/18/190243s02jo4iooufjvpdm.jpg)

### 苹果 macOS Monterey 12 性能仅次于 Clear Linux

Phoronix 在一台 2018 年 的Mac Mini 上对最新的 macOS Monterey 12 进行了 [性能测试](https://www.phoronix.com/scan.php?page=article&item=macos-12-linux&num=1)。在 120 多项基准测试中，英特尔的 Clear Linux 有 52% 的时间排名第一，其次是 macOS 12.1，有 30% 的时间排名第一，而最新的 Ubuntu 只有 16% 的时间排名第一。可以说，macOS 已经和 Linux 的性能相当了。由于苹果新的 M1 芯片尚不能很好的支持 Linux，因此本次测试还是在基于英特尔的 CPU 的 Mac 上测试的。

>
> 老王点评：作为英特尔家的发行版，Clear Linux 取得优势并不足为奇，想必在 M1 上测试的话，macOS 会获得更大优势。
>
>
>


ShardingSphere 分布式数据库简介

>
> Apache ShardingSphere 是一个开源的分布式数据库，它还有一个用户和开发人员需要的生态系统，为之提供了定制和云原生的体验。
>
>
>

![](/data/attachment/album/202112/19/093406msdyogai9rzo2rvo.jpg "Cloud and databsae incons")

Apache ShardingSphere 是一个开源的分布式数据库，它还有一个用户和开发人员需要的生态系统，为之提供了定制和云原生的体验。在加入 Apache 基金会的三年里，ShardingSphere 核心团队与社区一起努力工作，创建了一个开源的、强大的、分布式的数据库和一个支持性生态系统。

ShardingSphere 并不完全符合业界通常的简单分布式数据库中间件解决方案的模式。ShardingSphere 重新创建了分布式可插拔系统，使实际的用户实施方案得以蓬勃发展，并为社区和数据库行业贡献有价值的解决方案。

ShardingSphere 的目标是 *Database Plus* 概念。

### Database Plus

Database Plus 的出发点是在零散的数据库基本服务之上建立一个标准层和生态系统层。统一的、标准化的数据库使用规范为上层应用提供了保障，尽可能的减少了企业因底层数据库碎片化而面临的挑战。为了连接数据库和应用，它使用了流量和数据的渲染和解析。它为用户提供了增强的核心功能，如分布式数据库、数据安全、数据库网关和压力测试。

ShardingSphere 为 Database Plus 使用了可插拔的内核架构。这意味着模块化，这为用户提供了灵活性。它有几个不同的层：

* **基础层：** 提供各种访问终端和访问形式，满足用户在不同场景下的需求。
* **插件层：** 通过实现可扩展性提供基础设施支持。
* **功能层：** 提供各种满足用户需求的功能插件，使用户在选择和组合插件时具有高度的灵活性。
* **产品层：** 这是终端用户看到的层。这为他们提供了面向行业和特定场景的产品。换句话说，它为用户提供了适合他们所做的任何工作的工具。

![Database Plus platform](/data/attachment/album/202112/19/093417nusufvjmqcjqzqce.png "Database Plus platform")

（Trista Pan, [CC BY-SA 4.0](file:///Users/xingyuwang/develop/TranslateProject-wxy/translated/tech/tps:/creativecommons.org/licenses/by-sa/4.0)）

### 用 DistSQL 进行标准化的集群管理

Apache ShardingSphere 采用独特的 SQL 方言 DistSQL（分布式 SQL）来连接 ShardingSphere 生态系统的所有元素。作为 ShardingSphere 分布式数据库生态系统的标准交互语言，DistSQL 允许用户使用一个 SQL 命令来创建、修改或删除分布式数据库表或对其进行加密或解密。DistSQL 还支持分布式调度管理。

![DistSQL](/data/attachment/album/202112/19/093417yjnnnmpzdf4qaxxp.png "DistSQL")

（Trista Pan, [CC BY-SA 4.0](file:///Users/xingyuwang/develop/TranslateProject-wxy/translated/tech/tps:/creativecommons.org/licenses/by-sa/4.0)）

### 多访问终端

ShardingSphere JDBC 和 ShardingSphere Proxy 经过两年的打磨和测试，目前已经可以投入生产。许多社区用户提供了相关的生产社区案例。

多亏共享核心架构，以及不同的 ShardingSphere 适配器，如果用户的生产环境需要，可以选择混合适配器部署（如下图所示）。

![Hybrid deployment](/data/attachment/album/202112/19/093418arfmz8sfjw63ubbx.png "Hybrid deployment")

（Trista Pan, [CC BY-SA 4.0](file:///Users/xingyuwang/develop/TranslateProject-wxy/translated/tech/tps:/creativecommons.org/licenses/by-sa/4.0)）

### 分布式治理

在 ShardingSphere 生态系统中，计算和存储是分开的，因此具备对数据库进行分布式治理的能力，所以你可以维护许多存储节点、计算节点，实施断路器，并确保高可用性。

![Distributed governance](/data/attachment/album/202112/19/093418hua4d4tde5plpild.png "Distributed governance")

（Trista Pan, [CC BY-SA 4.0](file:///Users/xingyuwang/develop/TranslateProject-wxy/translated/tech/tps:/creativecommons.org/licenses/by-sa/4.0)）

### 使用 Grafana 监控

ShardingSphere 也有状态指标来监控你的基础设施。代理动态加载机制为你提供了指标和跟踪指标，方便您将 APM 系统与 Grafana 仪表板集成。

![Grafana dashboard](/data/attachment/album/202112/19/093419w151o5bobosvhoaq.png "Grafana dashboard")

（Trista Pan, [CC BY-SA 4.0](file:///Users/xingyuwang/develop/TranslateProject-wxy/translated/tech/tps:/creativecommons.org/licenses/by-sa/4.0)）

### 分布式社区的分布式数据库

社区正在继续优化 ShardingSphere，并整合新的想法和行业场景。社区构建了它，而开发的主要动力之一是用户反馈。这是开源的一个特点，但也是这个团队的实践方法。ShardingSphere 社区的核心团队成员很乐意指导任何对开源感兴趣的人，并为有兴趣帮助开发的学生提供实践问题。团队也希望有新的朋友或贡献者加入社区，促进思想的开放交流，创造一个真正的全球开发者社区。

---

via: <https://opensource.com/article/21/12/apache-shardingsphere>

作者：[Trista Pan](https://opensource.com/users/trista-pan) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


用 Linux 命令优化网页图片

Summary: 为网页上的缩略图和横幅图片生成经过调整和优化的图片。

为网页上的缩略图和横幅图片生成经过调整和优化的图片。

>
> 为网页上的缩略图和横幅图片生成经过调整和优化的图片。
>
>
>

![](/data/attachment/album/202112/19/100432i8qzjr6t22g68uoi.jpg "Digital creative of a browser on the internet")

以前我在处理网页工作时，我对图像敬而远之。处理和优化图像既不精确又费时。

后来我发现了一些命令，改变了我的想法。为了创建网页，我使用 Jekyll，所以我在说明中包括了它。然而，这些命令也可以用于其他静态网站生成器。

### Linux 上的图像命令

对我来说有用的命令是 `optipng`、`jpegoptim`，当然还有古老的 `imagemagick`。它们一起使处理图像变得容易管理，甚至可以自动化。

下面是我如何使用这些命令实现我的解决方案的概述。我把文章图片放在我的 `static/images` 文件夹中。在那里，我生成了所有 PNG 和 JPG 图片的两个副本：

1. 一个裁剪过的缩略图版本，尺寸为 422×316
2. 一个更大的横幅版本，尺寸为 1024×768

然后，我把每个副本（缩略图和横幅）放入自己的文件夹，并利用 Jekyll 的自定义变量来确定文件夹路径。下面我将更详细地介绍这些步骤中的每一步。

#### 安装

要跟上我的解决方案，请确保你已经安装了所有的命令。在 Linux 上，你可以使用软件包管理器安装 `optipng`、`jpegoptim` 和 `imagemagick`。

在 Fedora、CentOS、Mageia 和类似系统上：

```
$ sudo dnf install optipng jpegoptim imagemagick

```

在 Debian、Elementary、Mint 和类似系统上：

```
$ sudo apt install optipng jpegoptim imagemagick

```

在 macOS 上，使用 [MacPorts](https://opensource.com/article/20/11/macports) 或 [Homebrew](https://opensource.com/article/20/6/homebrew-mac)：

```
brew install optipng jpegoptim imagemagick

```

在 Windows 上，使用 [Chocolatey](https://opensource.com/article/20/3/chocolatey)。

### 为缩略图和横幅创建文件夹

安装完这些命令后，我在 `static/images` 下创建了新的文件夹。生成的缩略图放在 `img-thumbs`，横幅放在 `img-normal`。

```
$ cd static/images
$ mkdir -p img-thumbs img-normal

```

创建了文件夹后，我把所有的 GIF、SVG、JPG 和 PNG 文件复制到这两个文件夹。我把 GIF 和 SVG 原封不动地用于缩略图和横幅图片。

```
$ cp content/*.gif img-thumbs/; cp content/*.gif img-normal/
$ cp content/*.svg img-thumbs/; cp content/*.svg img-normal/
$ cp content/*.jpg img-thumbs/; cp content/*.jpg img-normal/
$ cp content/*.png img-thumbs/; cp content/*.png img-normal/

```

### 处理缩略图

为了调整和优化缩略图的大小，我使用了三个命令。

我使用 `ImageMagick` 的 `mogrify` 命令来调整 JPG 和 PNG 的大小。因为我希望缩略图是 422×316，所以命令看起来像这样:

```
$ cd img-thumbs
$ mogrify -resize 422x316 *.png
$ mogrify -format jpg -resize 422x316 *.jpg

```

现在我用 `optipng` 优化 PNG，用 `jpegoptim` 优化 JPG：

```
$ for i in *.png; do optipng -o5 -quiet "$i"; done
$ jpegoptim -sq *.jpg

```

在上述命令中：

* 对于 `optipng`，`-o5` 开关设置了优化的级别，0 是最低的。
* 对于`jpegoptim`，`-s` 剥离所有图像元数据，`-q` 设置安静模式。

### 处理横幅

我处理横幅图片的方法与处理缩略图的方法基本相同，除了尺寸外，横幅图片的尺寸为 1024×768。

```
$ cd ..
$ cd img-normal
$ mogrify -resize 1024x768 *.png
$ mogrify -format jpg -resize 1024x768 *.jpg
$ for i in *.png; do optipng -o5 -quiet "$i"; done
$ jpegoptim -sq *.jpg

```

### 配置 Jekyll 中的路径

`img-thumbs` 目录现在包含我的缩略图，`img-normal` 包含横幅。为了更轻松一些，我在Jekyll的 `_config.yml` 中把它们都设置为自定义变量。

```
content-images-path: /static/images/img-normal/
content-thumbs-images-path: /static/images/img-thumbs/

```

使用这些变量很简单。当我想显示缩略图时，我把 `content-thumbs-images-path` 加到图片上。当我想显示完整的横幅时，我在前面添加 `content-images-path`。

```
{% if page.banner_img %}
 <img src="{{ page.banner_img | prepend: site.content-images-path | \
prepend: site.baseurl | prepend: site.url }}" alt="Banner image for \
{{ page.title }}" />
{% endif %}

```

### 总结

我可以对我的优化命令做几个改进。

使用 `rsync` 只复制改变过的文件到 `img-thumbs` 和 `img-normal` 是一个明显的改进。这样一来，我就不会一次又一次地重新处理文件。将这些命令添加到 [Git 提交前钩子](https://opensource.com/life/16/8/how-construct-your-own-git-server-part-6) 或 CI 流水线中是另一个有用的步骤。

调整和优化图像以减少其大小，对用户和整个网页来说都是一种胜利。也许我减少图片尺寸的下一步将是 [webp](https://opensource.com/article/20/4/webp-image-compression)。

更少的字节通过电线传输意味着更低的碳足迹，但这是另一篇文章。目前，用户体验的胜利已经足够好了。

本文原载于[作者的博客](https://www.ayushsharma.in/2021/11/optimising-jpg-and-png-images-for-a-jekyll-blog)，已获授权转载。

---

via: <https://opensource.com/article/21/12/optimize-web-images-linux>

作者：[Ayush Sharma](https://opensource.com/users/ayushsharma) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #490 Log4j 发布新 2.17 补丁解决拒绝服务漏洞

Summary: 更多：• 素有“开源 Windows” 之称的 ReactOS 发布新版本 • 科学家们正在准备发射价值 100 亿美元的韦伯望远镜

![](/data/attachment/album/202112/19/143301yvvchuv5un2uz91v.jpg)

![](/data/attachment/album/202112/19/143311qwdnwzd39avhppxv.jpg)

### Log4j 发布新 2.17 补丁解决拒绝服务漏洞

由于在周二发布的 Log4j 2.16 版被发现一个 [拒绝服务](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45105) 的高危漏洞，Log4j 周五发布了新的版本。攻击者可以制作包含递归查找的恶意输入数据，导致堆栈错误，从而终止进程。此外，安全研究人员声称发现一种新的 Log4j [攻击载体](https://www.blumira.com/analysis-log4shell-local-trigger/)，可以通过私有网络甚至是本地回环地址上的监听端口来利用，即便是你的进程没有监听外部网络端口都有可能被利用。而谷歌也 [发布报告](https://security.googleblog.com/2021/12/understanding-impact-of-apache-log4j.html) 称 Maven 上有 8% 的软件包，多达 35,863 个可用的 Java 工件受到 Log4j 漏洞影响，而目前只有 5000 多个进行了修复。

>
> 老王点评：继续补吧。不过我觉得这个事情更大的意义在于，让人们反思开源基础设施贡献和回报不对等的问题。应该有一种机制评估某个基础设施的重要性，应该有一种机制来根据受益程度做出相应付出。这可能不仅仅是纯理想化的开源许可证问题。
>
>
>

![](/data/attachment/album/202112/19/143323ywmms8cssey89s9e.jpg)

### 素有“开源 Windows” 之称的 ReactOS 发布新版本

ReactOS 旨在实现与微软 Windows 的二进制兼容，它在一年半之后发布了一个大更新，嗯小版本号增加了一个数字，从 0.4.13 升级到了 [0.4.14](https://reactos.org/project-news/reactos-0414-released/)，带来了诸多新变化。

>
> 老王点评：看起来还不错，可以试试。
>
>
>

![](/data/attachment/album/202112/19/143345hizffl4icinf7h73.jpg)

### 科学家们正在准备发射价值 100 亿美元的韦伯望远镜

在经过多年的拖延，花费了超过 100 亿美元，该望远镜终于计划从法属圭亚那的一个欧洲发射场升空，前往距离月球另一侧 100 万英里的地方。但即使阿丽亚娜 5 号火箭将其送入轨道，在接下来的一个月里，它将得执行一系列有 344 个“单点故障”的操作，以展开镜面和防护膜。一旦出了问题，没有任何人类或机器人可以干预和救援。如果一切顺利，将使人类可以看到宇宙刚刚诞生一亿年时的光景。韦伯太空望远镜将是哈勃太空望远镜的继承者。[目前计划在 12 月 24 日发射](https://www.nytimes.com/2021/12/14/science/james-webb-telescope-launch.html)。

>
> 老王点评：这样看起来，太空工程的可靠性远远不高啊。
>
>
>


使用 Goxel 制作开源 3D 像素艺术

和sketchup有点像？

>
> 使用 Goxel 构建模型很有趣，就像没有锋利边缘的乐高、没有“爬行者”的 Minecraft 一样。
>
>
>

![](/data/attachment/album/202112/20/125417v2ws2so5g527lpgu.jpg "Pixel art in 3D with Goxel")

我喜欢乐高，这不是什么秘密，但我的乐高收藏现在离我很远，而且把满满一柜子的经典乐高套装在世界各地搬来搬去看起来也不太可行。为了解决这个问题，从 [在乐高 CAD 中建立模型](https://opensource.com/article/20/6/open-source-virtual-lego) 到 [在 Blender 中用乐高纹理对模型进行造型](https://opensource.com/article/20/7/lego-blender-bricker)，我做了很多虚拟化的工作。最近我发现了 [Goxel](https://goxel.xyz/)。这个简单得令人震惊的 3D 建模应用并没有自称是基于乐高的，也没提和乐高有什么关系。然而，用 3D 像素建立模型的感觉与用乐高积木建立模型的满足感惊人地相似。你可以把 Goxel 看作是一个像素绘画程序，但却是 3D 的。

Goxel 采取了一种独特的 3D 建模方法，它专门针对 <ruby> 低模 <rt>  low polygon </rt></ruby> 建模。如果你想雕刻出栩栩如生的模型，就不应该使用这个程序。但是，如果你喜欢 Minecraft 和其他低模艺术的美感，那么你应该试试 Goxel。

### 在 Linux 上安装 Goxel

你可以从 [Flathub](https://flathub.org/apps/details/io.github.guillaumechereau.Goxel) 将 Goxel 作为 [Flatpak](https://opensource.com/article/21/11/install-flatpak-linux) 安装在 Linux 上。

对于 Android、Windows macOS 和 iOS，请到 [Goxel 网站](https://goxel.xyz/) 下载安装程序。

Goxel 是开源的，在 GPLv3 许可下发布。

### 使用体素绘画

当你第一次启动 Goxel 时，在 Goxel 窗口的中间会有一个空的“空间”或容器。这就是你的画布。

![The Goxel canvas（Seth Kenlon, CC BY-SA 4.0）](/data/attachment/album/202112/20/125424mjqqq2wcu6z5yqq5.jpg "The Goxel canvas")

正是在这个容器中，且只有在这个容器中，你才能建立你的模型。在大多数三维建模应用中，<ruby> 深度感知 <rt>  depth perception </rt></ruby>是一种努力才能得到的技能，所以 Goxel 限制了你工作的空间，以防止你最终出现模型和模型部件彼此相距甚远的情况。Goxel 还限制你在一个严格的网格中移动。你可以沿 Y 轴上下移动，沿 X 轴左右移动，沿 Z 轴前后移动，但只能在一个三维像素（或称为 <ruby> 体素 <rt>  voxel </rt></ruby>）的片段中移动。不管用于什么意图和目的，Goxel 的体素就是用来建立模型的虚拟乐高砖块。

Goxel 中没有太多工具，这对一个三维建模应用来说是一个真正的特点。默认情况下，你已经激活了铅笔工具，所以你可以通过点击鼠标在体素容器内的任何地方立即开始建造。

![Hello from Goxel（Seth Kenlon, CC BY-SA 4.0）](/data/attachment/album/202112/20/125424llnbetuu0dnetuo2.jpg "Hello from Goxel")

试着点击容器周围，以查看添加体素的位置。Goxel 让你比较容易地看到你的铅笔即将添加体素的地方，可以把体素当作砖块，它假设当你靠近一个现有的体素时是准备把你的下一个体素连接到它。即便如此，在二维屏幕上实现三维也很困难。有时，体素会被添加到一个你没有意识到的地方。确保你的体素被添加到你想添加的地方的最好方法是经常旋转容器。你可以用键盘上的方向键来旋转容器，或者你可以点击并拖动鼠标中键。右击并拖动容器可在 Goxel 工作区中移动，而鼠标的滚轮可以放大和缩小。

### 平面标记

Goxel 还提供了另一个对齐体素的技巧，那就是以半透明和临时平面的形式提供指导。当你在你的容器中添加一个平面时，它会创建一种力场，使你的铅笔无法通过。

![Goxel planar guide（Seth Kenlon, CC BY-SA 4.0）](/data/attachment/album/202112/20/125425h7nhbh7bcnhbebb7.jpg "Goxel planar guide")

其结果是，你只能沿着两个轴线安全地作画，而不能沿着第三个轴线作画。你可以沿着网格轻推平面，这样你就可以分片添加体素，就像 3D 打印机向物理模型添加一样。

禁用平面控制中的 “<ruby> 可见 <rt>  Visible </rt></ruby>” 选项可以移除平面。

![Plane controls（Seth Kenlon, CC BY-SA 4.0）](/data/attachment/album/202112/20/125425cwkpwmi77ccfpfw7.jpg "Plane controls")

### Goxel 工具栏

顶部的工具栏包含七个按钮。从左到右：

* <ruby> 撤销 <rt>  Undo </rt></ruby>
* <ruby> 重做 <rt>  Redo </rt></ruby>
* <ruby> 删除所有的东西，且无需确认 <rt>  Delete everything without confirmation </rt></ruby>
* <ruby> 添加一个体素 <rt>  Add a voxel </rt></ruby>
* <ruby> 减去（删除）一个体素 <rt>  Subtract (remove) a voxel </rt></ruby>
* <ruby> 画一个体素 <rt>  Paint a voxel </rt></ruby>
* <ruby> 设置油漆颜色 <rt>  Set the paint color </rt></ruby>

你可以在单个体素上作画，也可以使用铅笔左边的形状工具，一次性添加体素区域。

除了用铅笔删除体素外，你还可以使用激光工具在体素出现在作为计算机显示器的 2D 屏幕上时对其进行调整。在形状工具的右边，把你的光标变成一个十字准线。把它指向你看到的体素，然后点击它来擦除。

### 极简主义的宁静

Goxel 追求简单，不仅在于它生产的内容，还在于它的生产方式。我在本文中只讨论了 Goxel 的绘图工具。虽然还有其他功能，例如控制光线的俯仰角和偏航角的能力、阴影的强度以及虚拟摄像机的位置，但该应用力求以最佳方式使事情变得简单自然。使用 Goxel 构建模型非常有趣，就像没有锋利边缘的乐高玩具，或者没有“爬行者”的 Minecraft。去使用 Goxel，并构建一些模型吧！

---

via: <https://opensource.com/article/21/12/3d-pixel-art-goxel>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


从 Linux 终端打印文件

Summary: 使用 lpr 命令在终端中打印文件。

使用 lpr 命令在终端中打印文件。

>
> 使用 lpr 命令在终端中打印文件。
>
>
>

![](/data/attachment/album/202112/20/135809an6s6bxyg7sjnwyq.jpg "Typewriter with hands")

[在 Linux 上打印很容易](https://opensource.com/article/21/8/setup-your-printer-linux)，但有时感觉要做很多工作，比如启动应用程序、打开文件、在菜单中找到打印选项，单击确认按钮等等。当你是一个终端用户时，通常希望使用简单的触发器执行复杂的操作。打印很复杂，但没有什么比 `lpr` 命令更简单了。

### 使用 lpr 命令打印

使用 `lpr` 命令在终端打印文件：

```
$ lpr myfile.odt

```

如果失败的话，你需要设置默认打印机或手动指定打印机。

### 设置默认打印机

根据我在 1984 年印刷的 Berkeley 4.2 手册的旧版本中找到的资料，`lpr` 命令会分页并将文件发送到打印机池，后者将数据传输到称为 <ruby> 行式打印机 <rt>  line printer </rt></ruby> 的东西。

![显示 LPR 命令信息的页面](/data/attachment/album/202112/20/135831cwuu53g81v7dh7dz.jpg)

现在，最初的 `lpr` 命令已经无法满足，因为现代计算机可以访问多台打印机，而且是那些比点阵行式打印机复杂得多的打印机。现在有一个称为<ruby> 通用 Unix 打印系统 <rt>  Common Unix Printing System </rt></ruby>（CUPS）子系统，可以跟踪你的计算机可以访问的所有打印机，计算机应该使用哪个驱动程序与每台打印机通信，默认使用哪台打印机等等。 CUPS 捆绑提供的 `lpr.cups` 或 `lpr-cups` 命令通常以符号链接到 `lpr`，允许你首先借助 CUPS 配置从终端打印。

使用 `lpr` 打印文件，你应该首先设置默认打印机。你可以在系统的打印机设置中设置：

![设置默认打印机对话框](/data/attachment/album/202112/20/135833oqbksdd60szckkhz.jpg)

或者，你也可以使用 `lpadmin` 命令设置：

```
$ sudo lpadmin -d HP_LaserJet_P2015_Series
$ lpstat -v
device for HP_LaserJet_P2015_Series: ipp://10.0.1.222:631/printers/HP_LaserJet_P2015_Series

```

### 使用环境变量设置

你不能在没有管理员账户的系统上设置默认打印机，因为更改打印机默认设置是一项特权任务。在 `lpr` 借助 CUPS 找到目标打印机前，它会在系统中查询 `PRINTER` [环境变量](https://opensource.com/article/19/8/what-are-environment-variables)。

在本例中，`HP_LaserJet_P2015_Series` 是打印机的名称。将 `PRINTER` 设置为该值：

```
$ PRINTER=HP_LaserJet_P2015_Series
$ export PRINTER

```

一旦设置了 `PRINTER` 变量，你就可以打印了：

```
$ lpr myfile.pdf

```

### 获取连接的打印机列表

你可以使用 `lpstat` 命令查看所有连接到系统接受打印任务的打印机：

```
$ lpstat -a
HP_LaserJet_P2015_Series accepting requests since Sun 1 Aug 2021 10:11:02 PM NZST
r1060 accepting requests since Wed 18 Aug 2021 04:43:57 PM NZST

```

### 打印到任意一台打印机

将打印机添加到系统后，并且现在你知道如何识别它们了，你可以打印到其中任何一台，无论你是否设置了默认打印机：

```
$ lpr -P HP_LaserJet_P2015_Series myfile.txt

```

### 如何定义打印机

CUPS 有一个友好的前端页面，可通过 Web 浏览器如 Firefox 访问。虽然它使用 Web 浏览器作为用户界面，但它实际上是在本机（一个称为 `localhost` 的位置）的 631 端口上提供服务。CUPS 管理连接到计算机的打印机，并将其配置存储在 `/etc/cups/priters.conf` 中。

`printers.conf` 文件包含详细描述计算机可以访问的打印设备的定义。不要直接编辑它，但如果你想这样做，你必须先停止 `cupsd` 守护进程。

一个典型的文件定义如下所示：

```
<Printer r1060>
  Info Ricoh 1060
  Location Downstairs
  MakeModel Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.6
  DeviceURI lpd://192.168.4.8
  State Idle
  StateTime 1316011347
  Type 12308
  Filter application/vnd.cups-raw 0 -
  Filter application/vnd.cups-raster 100 rastertogutenprint.5.2
  Accepting Yes
  Shared No
  JobSheets none none
  QuotaPeriod 0
  PageLimit 0
  KLimit 0
  OpPolicy default
  ErrorPolicy stop-printer
</Printer>

```

在本例中，打印机的名称是 `r1060`，即 “Ricoh Aficio 1060”。

`MakeModel` 属性是从 `lpinfo` 命令中提取的，该命令列出了系统上所有可用的打印机驱动程序。假设你知道要打印到 Ricoh Aficio 1060，那么你会发出以下命令：

```
$ lpinfo -m | grep 1060
gutenprint.5.2://brother-hl-1060/expert Brother HL-1060 - CUPS+Gutenprint v5.2.11
gutenprint.5.2://ricoh-afc_1060/expert Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.11

```

它会列出已安装的相关驱动程序。

`MakeModel` 属性是结果的后半部分。在本例中为 `Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.11`。

`DeviceURI` 属性标识打印机在网络上的位置（或物理位置，例如 USB 端口）。在本例中，它是 `lpd://192.168.4.8`，因为我使用 `lpd` 协议将数据发送到一台网络打印机。在我的另一个系统上，我有一个通过 USB 连接的 HP LaserJect 打印机，因此 `DeviceURI` 是 `hp:/usb/HP_LaserJet_P2015_Series?serial=00CNCJM26429`。

### 在终端中打印

将作业发送到打印机是一个简单的过程，只要你了解连接到系统的设备以及如何识别它们。在终端打印非常快速、高效，并且易于编写脚本或作为批处理作业完成。试试看！

---

via: <https://opensource.com/article/21/9/print-files-linux>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[MjSeven](https://github.com/MjSeven) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #491 Ruby on Rails 作者称其新版本是“一个人的框架”

Summary: 更多：• 2021 年至少有六起超过 1 亿美元的加密货币盗窃案 • 云计算使互联网更脆弱

![](/data/attachment/album/202112/20/161252tda8d5t8dhp0tipp.jpg)

![](/data/attachment/album/202112/20/161310g4a64ejt4jxktapj.jpg)

### Ruby on Rails 作者称其新版本是“一个人的框架”

Ruby on Rails 上周三发布了 [7.0 版本](https://rubyonrails.org/)，作者称这是他“一直渴望的版本，……是多年来在五个不同方面取得进展的高潮。”不过，作者最兴奋的是，7.0 更接近“[一个人的框架](https://world.hey.com/dhh/the-one-person-framework-711e6318)”的理想，“可以让一个人创建现代应用程序，并在此基础上建立一个有竞争力的业务”。Ruby on Rails 在官网宣传其可以让你边学边提高，“从入门到上市”。

>
> 老王点评：Ruby 和 Rails 相得益彰，虽然现在不是很流行了，但是 Ruby 的一些理念非常有趣，这个版本的理念也很有趣。
>
>
>

![](/data/attachment/album/202112/20/161325tuzbzoybne1xggnu.jpg)

### 2021 年至少有六起超过 1 亿美元的加密货币盗窃案

[据报道](https://www.nbcnews.com/tech/security/bitcoin-crypto-exchange-hacks-little-anyone-can-do-rcna7870)，在过去 12 个月中，至少有 20 次超过 1000 万美元从加密货币交易所或项目中被盗的案件，其中 6 起超过了 1 亿美元。这些窃案大多数没有抓住窃贼。有的交易所提前计划好了应急基金，如果被黑客攻击，它可以对客户进行赔偿，而有的干脆就倒闭跑路了。作为对比的是，根据美国联邦调查局的年度犯罪统计，去年银行抢劫案平均每次抢劫不到 5000 美元。

>
> 老王点评：以后的惊天大劫案就不再是抢银行了，而是在线抢劫了。
>
>
>

![](/data/attachment/album/202112/20/161356zh211369ddxx193c.jpg)

### 云计算使互联网更脆弱

在过去的三周里，亚马逊的云计算服务出现了两次重大故障，这导致了其他在线服务的广泛中断，比如视频流瘫痪、与互联网连接的吸尘器停止工作，甚至连宠物喂食器都关闭了。这些事情打破几十年来稳步提高的互联网速度和可靠性所强化的幻想。[专家认为](https://www.nbcnews.com/tech/tech-news/internet-outages-web-concentrations-power-rcna8942)，“‘云’从来就不是可持续的，它只是一个由集中式实体控制的集中式网络资源的委婉说法。”在短时间内出现多次故障，这是一个值得警惕的事情。企业在“云服务是有弹性的”假设前提上投入了很多，而一些公司现在正在考虑使用多云解决方案。

>
> 老王点评：确实，现在的云，其实更多是一个集中计算中心，其弹性并没有得到足够的保证。
>
>
>


使用 Ansible 在树莓派上部署 Mycroft AI 语音助手

>
> 使用本文中的这些 Ansible 剧本可以帮你获得更优的 Mycroft AI 体验。
>
>
>

![](/data/attachment/album/202112/21/135748sdbpuhu6p3duus32.jpg "Looking at a map")

Mycroft AI 是一款虚拟助手应用程序，可以响应语音请求并完成相应的任务，比如在互联网上搜索你需要的某些信息，或者下载你喜欢的博客等等。这是一款优秀的开源软件，不同于那些收集个人数据业务的公司的同款软件，Mycroft AI 注重于保护隐私以及提供平台灵活性。

Mycroft AI 使用 python 开发，可以安装于不同的硬件平台上。家喻户晓的树莓派便是一个非常热门的运行语音助手的硬件方案（不过不是唯一的方案）。方便的是，Mycroft 为树莓派提供了 [Picroft](https://mycroft-ai.gitbook.io/docs/using-mycroft-ai/get-mycroft/picroft) 镜像，虽然目前 Picroft 还有一些限制，比如不支持 64 位系统，不过不能阻止它成为一种优秀的解决方案。

### 树莓派 4，我选择的目标平台

树莓派在 Mycroft 社区中非常受欢迎，因为其性价比高，在教育行业中有着巨大的优势，并且由于 Mycroft 提供的便捷功能以及树莓派本身易于访问的输入/输出（GPIO）引脚等，为树莓派提供了有趣的扩展可能（比如，提供 [唤醒词 LED GPIO](https://github.com/smartgic/mycroft-wakeword-led-gpio-skill) 能力）。

树莓派 4B 具有足够的 CPU 算力以及内存来平稳运行 Mycroft。我使用的是 8G 内存的树莓派4B，运行 Raspberry Pi OS Bullseye 64-bit 系统，你可以从 [RaspberryPi.org](https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2021-11-08/2021-10-30-raspios-bullseye-arm64-lite.zip) 网站下载该系统镜像文件。

### 自动化这件事

构建你自己的 Mycroft AI 系统，必须要注意一些细节问题。根据我（一年以来）的初步经验，以下罗列了一些重要的技术细节点：

* 音频输出（扬声器配置）
* 音频输入（麦克风配置）
* 麦克风质量（以购买的实际硬件为准）
* 唤醒词响应（比如打招呼 “嘿，Mycroft”）
* 响应延迟（比如提问 “天气怎么样”）

这些并不是 Mycroft AI 的问题（LCTT 译注：难道软件平台就没有处理延时问题？），它们只能是你在选择硬件和配置操作时必须牢记关心的事情。树莓派本身能够运行 Mycroft AI，但有一些配置需要额外的注意下：

* CPU 调度器
* SD 卡性能
* PulseAudio 配置
* 网络延迟

我做了大量的研究和实践来解决上面列出这些令人头疼的注意点，最终我实现了我的“终极”目标 —— 最流畅的体验！

### Ansible 雪中送炭

我已经摸索出了最流畅的体验配置，但是如何确保在任何树莓派 4 板子上都能不遗漏每一个设置细节，然后达到重新部署这种流畅性体验的目标呢？

[Ansible](https://github.com/ansible/ansible) 能帮助你实现。Ansible 在设计上是幂等设计，这意味着它仅在需要时响应更改的请求。如果一切配置正确，Ansible 不会改变任何事情。这便是幂等设计的优美之处。

为了达到这一目的，我使用了两种 Ansible 场景角色工具：

* 一个用于配置和调整树莓派
* 一个用于安装和配置 Mycroft AI

### Ansible prepi 角色

[Ansible prepi role](https://github.com/smartgic/ansible-role-prepi) 应用了一些配置，以便让树莓派 4B 发挥更佳的性能以及为安装 Mycroft 做前提准备。

* 更新 Raspberry Pi OS 至最新版本
* 添加 Debian backports 仓库
* 使用 next 分支更新固件，该分支支持 5.15 版本内核以及边缘固件
* 使用测试版本更新 EEPROM，该版本支持边缘功能
* 设置 `initial_turbo` 用来加速启动过程
* 将树莓派超频至 2GHz
* 在 RAMDisck 上挂载 `/tmp`
* 优化 `/` 分区挂载选项，提升 SD 卡读/写性能
* 管理 I2C、SPI、UART 接口
* 设置 CPU 控制器至避免在空间内核函数之间发生上下文切换的模式，以便提升性能
* 安装和配置 PulseAduio（非系统范围）
* 新固件或者 EEPROM 安装后重启树莓派

### Ansible mycroft 角色

[Ansible mycroft role](https://github.com/smartgic/ansible-role-mycroft) 基于脚本 `dev_setup.sh` 从 Github 仓库获取并安装和配置 Mycroft AI，该脚本是 Mycroft 核心团队提供。

* 需要准备 Python3 环境
* 系统集成环境
* 额外的安装技能
* 安装 Boto3、py\_mplayer、pyopenssl 库
* 支持 IPC 的 RAMDisck
* 支持文件配置
* PulseAudio 优化
* 安全的 Mycroft 消息总线 websocket

我利用 [Ansible 剧本](https://github.com/smartgic/ansible-playbooks-mycroft) 来协调上面两个角色的使用。

### 个人配置需求

下面列举了一些个人配置的需求：

* 能上网的树莓派 4B 板子（或者更新的板子）
* [Raspberry Pi OS 64-bit](https://downloads.raspberrypi.org/raspios_arm64/images)
* Ansible 2.9（或者更新版本）
* 可正常工作的 SSH

推荐使用 [Etcher](https://opensource.com/article/18/7/getting-started-etcherio) 来烧录 Raspberry Pi OS 镜像至 SD 卡，你也可以使用你选择的镜像烧录工具。

我将树莓派超频来提升性能，不过这可能对你的硬件是一种潜在危险。在使用我的 Ansible 剧本配置之前，请先仔细阅读。你需要为你的每个配置选择负责。你将决定使用哪个固件、哪个 EEPROM。超频的话需要记得提供相应的冷却系统。

### 执行 Ansible 剧本

第一步，使用命令从 Github 获取 Ansible 剧本：

```
$ git clone https://github.com/smartgic/ansible-playbooks-mycroft.git

```

源码中，`requirements.yml` 文件中提供了该剧本的依赖角色列表，必须从 Ansible Galaxy 中检索这些依赖。

```
$ cd ansible-playbooks-mycroft
$ ansible-galaxy install -r requirements.yml
Starting galaxy role install process
- downloading role 'mycroft', owned by smartgic
- downloading role from https://github.com/smartgic/ansible-role-mycroft/archive/main.tar.gz
- extracting smartgic.mycroft to /home/goldyfruit/.ansible/roles/smartgic.mycroft
- smartgic.mycroft (main) was installed successfully
- downloading role 'prepi', owned by smartgic
- downloading role from https://github.com/smartgic/ansible-role-prepi/archive/main.tar.gz
- extracting smartgic.prepi to /home/goldyfruit/.ansible/roles/smartgic.prepi
- smartgic.prepi (main) was installed successfully

```

第二步，编辑仓库中的 Ansible 清单，设置需要管理的主机。

```
[rpi]
rpi4b01 ansible_host=192.168.1.97 ansible_user=pi

```

`[rpi]` 代表组，无需更改。该组有一个主机 `rpi4b01`，其 IP 地址为 `192.168.1.97`， 并创建 `pi` 作为 Linux（Raspberry Pi OS）上的默认用户。

现在比较棘手的部分到了：你希望每个选项怎么配置？这取决于你自己，下面是我的首选配置，供你参考：

```
# file: install-custom.yml
- hosts: rpi
  gather_facts: yes
  become: yes

  pre_tasks:
    - name: Install Python 3.x Ansible requirement
      raw: apt-get install -y python3
      changed_when: no
      tags:
        - always

  vars:
    # PREPI
    prepi_pi_user: pi
    prepi_hostname: mylovelypi
    prepi_firmware_update: yes
    prepi_overclock: yes
    prepi_force_turbo: yes
    prepi_cpu_freq: 2000
    prepi_pulseaudio_daemon: yes

    # MYCROFT
    mycroft_branch: dev
    mycroft_user: "{{ prepi_pi_user }}"
    mycroft_skills_update_interval: 2.0
    mycroft_recording_timeout_with_silence: 3.0
    mycroft_enclosure_name: picroft
    mycroft_extra_skills:
      - https://github.com/smartgic/mycroft-finished-booting-skill.git

  tasks:
    - import_role:
        name: smartgic.prepi

    - import_role:
        name: smartgic.mycroft

```

上面的配置内容需要保存在文件里（比如，`install-custom.yml`）。

现在关键步骤：运行你新创建的剧本。

```
$ ansible-playbook -i inventory install-custom.yml -k

```

`-k` 选项只有在不需要 SSH 密钥的时候才使用。在命令执行期间，树莓派可能会重启若干次。Ansible 剧本会自动处理这个问题，不必担心。

Ansible 配置完成后，你可以看到一条祝贺消息，提示你下一步需要做什么。

![Congratulations message (Gaëtan Trellu, CC BY-SA 4.0)](/data/attachment/album/202112/21/135800wt2tbea1tzjmxewo.png "Congratulations message")

### Ansible 让定制 Mycroft 变得更容易

这些 Ansible 剧本是我开始使用 Mycroft AI 后学到的经验教训。它们帮助我在任何一个地方都能构建、重构、定制、拷贝我的安装，并保持一致，这让我很省心！

读完此文，你有何意见、问题或疑虑？欢迎在 Twitter上 [@goldyfruit](https://twitter.com/goldyfruit)上和我交流，或者访问 [Mycroft 频道](https://chat.mycroft.ai/community/channels/general) 搜寻答案。

---

via: <https://opensource.com/article/21/12/mycroft-raspberry-pi-ansible>

作者：[Gaëtan Trellu](https://opensource.com/users/goldyfruit) 选题：[lujun9972](https://github.com/lujun9972) 译者：[jrglinux](https://github.com/jrglinux) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


2021 年的 12 件 Linux 大事

Summary: 现在，是时候回顾一下今年影响 Linux 和 Linux 用户的一些大事了。

现在，是时候回顾一下今年影响 Linux 和 Linux 用户的一些大事了。

>
> 现在，是时候回顾一下今年影响 Linux 和 Linux 用户的一些大事了。
>
>
>

![](/data/attachment/album/202112/21/180137wv3j567vyneym7vn.png)

2021 年即将结束。Linux 今年屡有大事，虽然并不全是好消息。

让我来分享一些来自 Linux 世界的大事，这些事件对普通的 Linux 用户，特别是桌面 Linux 用户有一定的影响。

### 1、RMS 重返自由软件基金会

<ruby> 自由软件基金会 <rt>  Free Software Foundation </rt></ruby>（FSF）的创始主席 [Richard Stallman（RMS）在 2019 年因媒体的抨击而被迫辞职](https://itsfoss.com/richard-stallman-controversy/)。然而，这位标志性的嬉皮士技术人在今年 3 月份的 LibrePlanet 活动中出人意料地 [宣布复出](https://news.itsfoss.com/richard-stallman-is-back-at-fsf/)。

虽然自由软件运动是 Stallman 在 80 年代发起的，并创立了自由软件基金会（FSF），但这次他是以董事会成员之一的身份回归的，而不是以主席的身份。

这段插曲使开源世界再次分裂。许多组织和开发者反对他的回归。但与此同时，Stallman 也得到了 [来自非美国开发者的压倒性支持](https://news.itsfoss.com/stallman-supporters-not-giving-up/)。

尽管 [Stallman 已经道歉](https://news.itsfoss.com/stallman-apologizes/)，但许多来自 GNOME 和<ruby> 开源推进计划 <rt>  Open Source Initiative </rt></ruby>的人 [主张撤换整个 FSF 董事会](https://news.itsfoss.com/stallman-return-revolt/)。

许多主要的赞助商因此断绝了与 FSF 的关系，但 FSF 在财政困难的情况下仍在坚持。2021 年即将结束，Stallman 仍然活跃在他 30 多年前创立的组织的董事会中。

### 2、Arch Linux 引入了一个安装程序

不过不是图形化的。

你可能已经知道，安装 Arch Linux 并不像安装 Ubuntu 或 Fedora 那样简单。没有图形化的安装程序。一切都必须通过命令行来完成，但即使是这样，你也必须参考一些文档。

Arch Linux 试图通过提供一个用来指导你的安装脚本来改善这种情况。

![](/data/attachment/album/202112/21/180138pcp9k9k9899hs1t4.png)

当然，它不像图形化的安装那么舒服，但至少有指导的 Arch Linux 安装总比没有好。

这个 [archinstall 脚本可以在较新的 Arch Linux ISO 中找到](https://news.itsfoss.com/arch-linux-easy-install/)，你可以在安装 Arch Linux 时在 TTY 中输入 `archinstall` 来使用它。

### 3、微软 Edge 浏览器登陆 Linux

![](/data/attachment/album/202112/21/180139zykbyv46b3oc36yo.png)

它已经测试一年多了，但在 2021 年我们终于看到了 [微软基于 Chromium 的 Linux 版 Edge 浏览器的最终稳定版](https://news.itsfoss.com/microsoft-edge-stable-release/)。

我知道一些 Linux 用户彻底反对接触任何微软的东西，这当然很好。它只是为 Linux 上长长的可用网页浏览器列表增加了一个选择。在 Windows 系统上使用 Edge 的人现在有能力在 Linux 上使用和同步他们的浏览器活动。

一些 [在 Linux 上安装了 Edge 浏览器](https://itsfoss.com/microsoft-edge-linux/) 的用户发现它出乎意料地好。就个人而言，比起其他浏览器，我还是更喜欢 Firefox，但如果 Edge 能把超高清或全高清的 Netflix 流媒体带到 Linux 上，它可能会成为我的辅助浏览器。

### 4、CentOS 替代品的崛起

红帽公司去年震惊了 Linux 世界，它决定 [干掉稳定的 CentOS，转而支持滚动发布的 CentOS Stream](https://itsfoss.com/centos-stream-fiasco/)。

这催生了 [几个 CentOS 替代发行版](https://itsfoss.com/rhel-based-server-distributions/)。其中获得了最多人气和 CentOS 市场份额的两个发行版是 Rocky Linux 和 Alma Linux。

[Rocky Linux 是由 Gregory M. Kurtzer 创建的](https://news.itsfoss.com/rocky-linux-announcement/)，他是 CentOS 的最初的创建者。

[Alma Linux](https://almalinux.org/) 是由 CloudLinux 创建的，它是一家提供了基于 CentOS 的服务器和内核补丁服务的企业。

这两个发行版已经占领了 CentOS 留下的市场。[红帽公司向小型企业免费提供 RHEL 许可证的计划](https://news.itsfoss.com/rhel-no-cost-option/) 并没有那么成功。

### 5、Steam Deck

Valve 发布了一款名为 Steam Deck 的掌上游戏设备。它产生了相当大的反响，预购即售罄。

它与 Linux 有什么关系？有两个：

首先，Steam Deck 运行在基于 Arch Linux 的定制 Steam OS 上。考虑到这些游戏将在基于 Linux 的操作系统上运行，这给桌面 Linux 上的游戏也带来了希望。

第二，Steam 声称所有的游戏（无论它们是否只在 Windows 上运行）都将可以在 Steam Deck 上运行。这个口号太大了，但是 [Steam 已经开始验证能在 Deck 上运行的游戏](https://news.itsfoss.com/steamdeck-verified/)。这可能意味着经过 Deck 验证的游戏在桌面 Linux 上应该也能正常运行。

![](/data/attachment/album/202112/21/180141natpcvz8ln0lt0l4.png)

### 6、反作弊引擎正式支持 Linux

对 Linux 玩家来说这是又一个 2021 年的大新闻。[Epic Games 为其 Easy-Anti Cheat 服务增加了完整的 Linux 支持，以及官方 SteamPlay（或 Proton）和 Wine 兼容性](https://news.itsfoss.com/easy-anti-cheat-linux/)。

Easy-Anti-Cheat 是 Epic 提供的业界领先的反作弊服务，可以防止多人 PC 游戏中的黑客攻击和作弊。

这是一个重大举措，因为 Linux 游戏玩家经常被禁止参与许多流行的多人游戏，如《堡垒之夜》、《战地》。随着反作弊支持的加入，在 Linux 上玩主流多人游戏变得更加容易。

### 7、GNOME 40

![](/data/attachment/album/202112/21/180142uw3s1g0ge3ji08fl.png)

[GNOME 40 是一个激进的版本](https://news.itsfoss.com/gnome-40-release/)。几乎和 GNOME 3 一样激进。

不，将版本号从 3.38 跳到 40 并不是关键因素。

GNOME 40 换成了三指轻扫的水平布局。这种水平方式使得第 40 版在用户界面和用户体验上与之前的版本有很大不同。

### 8、内核 5.15 中支持 NTFS

这可能看起来没什么，但 Linux 内核中对 NTFS 文件系统的适当驱动支持对许多人来说是件大事，特别是对于共享分区来说。

之前，NTFS 文件系统是在用户空间（FUSE）中借助 ntfs-3g 软件包使用的。这意味着数据的读取和写入速度很慢。

原生的驱动程序改善了 Linux 中 NTFS 文件系统的性能。

### 9、Linux 已经 30 岁了

![](/data/attachment/album/202112/21/180143eu4xg074m4q4q9hh.jpg)

Linux 内核比许多 Linux 用户都要老。它诞生于 1991 年 9 月，当时芬兰计算机科学专业的学生 Linus Torvalds 宣布了这个 “爱好项目”，它本应不是 “大而专业” 的。

Torvalds 以 Linux 项目作为他的毕业论文取得了他的硕士学位。Torvalds 不可能知道他的 “爱好” 将成为今天 IT 世界的支柱和一个成功的开源项目的代表。

### 10、Linus Tech Tips 对 Linux 桌面的实验

这是另一位将 Linux 推上风口浪尖的 Linus。

Linus Sebastian 是顶级的技术 YouTuber 之一，他开始挑战日常使用 Linux 30 天的目标。

一个拥有数百万订阅者的流行 YouTuber 使用了 Linux。这是一个前所未有的机会，是桌面 Linux 被数百万 Windows 用户看到的一次大公关。

但是它出了问题。实际上，是可怕的错误。

Linus Sebastian 在 Linux 上遇到了困难。他遇到了各种困难，[最后在试图安装 Steam 的时候毁掉了他的 Pop!\_OS 系统](https://news.itsfoss.com/more-linux-distros-become-linus-proof/)。

![](/data/attachment/album/202112/21/180143yaoyhqnjh6phdbhz.jpg)

我不知道 Torvalds 是否看到了那些视频，这个与他同名的人在他的造物中苦苦挣扎。

### 11、苹果的 M1 Mac 上的 Linux

一个苹果让世界认识了重力（尽管它已经存在）。一个苹果让世界认识了 ARM 处理器（尽管它也已经存在）。

苹果公司基于 ARM 的 M1 系列因其性能提升而在用户中大受欢迎。有一个专门的项目 [Asahi](https://asahilinux.org/) 正在努力使 Linux 可以在苹果 M1 设备上运行。

2021 年，Asahi Linux 取得了一些良好的进展。他们的工作也将使其他发行版受益。

![Arch Linux 与 KDE Plasma 在 M1 Pro MacBook 上运行](/data/attachment/album/202112/21/180144eb7bzs0nn3s0n8pl.jpg)

### 12、Windows 11 发布

为什么 Windows 11 的发布与 Linux 有关呢？因为不是所有的现有系统都有资格运行 Windows 11。这意味着当 Windows 10 支持结束时，将有一大批设备运行一个过时的操作系统。他们中的一些人会转移到 Linux。

不要认为我过于乐观。当 Windows XP 支持结束时，我已经看到了这种流亡。一些 Linux Mint 和 Zorin OS 用户曾经是 Windows XP 的移民。

![](/data/attachment/album/202112/21/180145g63zymcr5ii353a3.jpg)

### 让我们希望 2022 年对我们所有人都好一些

2020 年开始的 COVID-19 流行病在今年继续困扰着世界。看看 Omicron 变种的传播情况，2022 年的情况看起来也不太乐观。

但是，让我们不要太悲观，庆祝新的一年，希望明年对桌面 Linux 用户和其他所有人会更好。

---

via: <https://news.itsfoss.com/biggest-linux-stories-2021/>

作者：[Abhishek](https://news.itsfoss.com/author/root/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #492 在“我的世界”中构建的 8 位 CPU 可以运行自己的游戏

Summary: 更多：• TikTok 新推出的 Live Studio 直播软件被指抄袭 OBS • 开发者创建了一种开源的“相当不错的图像格式”

Tiktok 这么做 我一点都意外，这很中国！

来自湖北武汉的 Chrome Mobile iOS 96.0|iOS 15.1 用户

Tiktok 这么做 我一点都意外，这很中国！

Tiktok 这么做 我一点都意外，这很中国！

不意外

不意外

国内的直播站分发的直播工具全都是 OBS 改，一个个都没符合 GPL。<br />
而且OBS没有商业授权，最高级的赞助者 Youtube 和 Twitch 直接把自己的推流做进 OBS 里去了（OBS 的推流选项除了 rtmp 之类标准格式以外可以直接账号密码登录并直接推到 Youtube/Twitch，不需要复杂的配置也不存在意外泄漏推流密码的情况）。

希望能尊重一下开源软件，如果项目组不开心闭源收费了，那就太可惜了

![](/data/attachment/album/202112/21/192154xid3qy3znngix7ac.jpg)

![](/data/attachment/album/202112/21/192210oii9hvsg9n2iqvik.jpg)

### 在“我的世界”中构建的 8 位 CPU 可以运行自己的游戏

玩家花了七个月的时间在 “我的世界” 建造了一个名为 Chungus 2 的极其复杂的计算机 [CPU](https://www.pcworld.com/article/559794/8-bit-computer-processor-built-in-minecraft-can-run-its-own-games.html)。这并不是第一个在 “我的世界” 内虚拟构建的 CPU，但它很可能是最大和最复杂的，它模拟了一个 8 位 CPU，时钟速度为 1 Hz，内存为 256 字节。它使用 “我的世界” 游戏的物理引擎，在宏观上重现了真实处理器的结构，材料包括红石粉、火炬、中继器、活塞、杠杆和其他简单机器。如果将游戏内的每个 “块” 视作一米，那么在现实世界中重现这个 CPU 将大约有一个摩天大楼大小。当连接到其 32×32 “屏幕” 和 “控制器” 时，它可以玩俄罗斯方块、贪吃蛇等游戏，甚至还可以运行一个图形计算器。它的每个程序也都是在 “我的世界” 中虚拟构建的，可以像一个货运列车一样大小的卡带插入这台电脑。

>
> 老王点评：要是再继续发展到可以在这个计算机上玩“我的世界”，不知道会不会递归到爆？
>
>
>

![](/data/attachment/album/202112/21/192219jpplww2whwbq3blw.jpg)

### TikTok 新推出的 Live Studio 直播软件被指抄袭 OBS

上周，TikTok 推出了名为 Live Studio 的 Windows 直播软件，它旨在帮助人们实现高质量的直播推流，同时方便地整合游戏视频流、以及图像和文本等叠加图层。但著名的开源直播软件 OBS [指出](https://www.theverge.com/2021/12/20/22847213/tiktoks-live-studio-obs-open-source-policy) TikTok 的这个软件实质上是 OBS 项目的一个复刻。OBS 项目团队主动联系了 TikTok，但没有得到回应。OBS 软件采用 GPLv2 许可证开源，按许可证要求，使用了该软件代码的项目也必须以相同的许可来公开任何经过修改的源码。

>
> 老王点评：让我们看看 TikTok 如何说，是抵赖到底还是去买商业授权。
>
>
>

![](/data/attachment/album/202112/21/192229i1zjxrt6srak0tut.jpg)

### 开发者创建了一种开源的“相当不错的图像格式”

一位开发者认为 PNG、JPEG、MPEG、MOV 和 MP4 这些图形格式过于复杂，因而创建了一种新的文件格式，并给它起了一个响亮的名字：[“Quite OK Image Format”（QOI）](https://qoiformat.org/)。他已经将其发布到 GitHub 上。虽然作者承认 QOI 对图片的压缩效果不如优化后的 PNG 编码器，但他声称“无损压缩图片的大小与 PNG 相近，同时提供 20-50 倍的编码速度和 3-4 倍的解码速度”。最重要的是，他的编解码器的参考实现大约只有 300 行的 C 代码，而文件格式规范只有一页而已。

>
> 老王点评：看起来不错，或许在某些场景是个很好的选择。
>
>
>


好消息！80% 的 Steam 前 100 名游戏可以在 Linux 上运行了

很多游戏在Linux不能玩是因为反作弊系统不能用，如果steam deck反响好，新的反作弊系统推广开的话，一定会有更多游戏可以在Linux下完美运行的

推荐一下 GloriousEggroll/proton-ge-custom 这个 Fork 版，比原版支持更多游戏，更新很快，非常不错。

>
> 多亏了 Proton 和 Steam Play，可以在 Linux 上更好地玩游戏了。
>
>
>

![](/data/attachment/album/202112/22/101040c3hx8vst3fshssh5.png)

自从 [Steam 宣布 Proton 计划](https://itsfoss.com/steam-play-proton/) 以来，我有一种感觉，Linux 上的游戏将迎来好时光。我很高兴我没有看错。

根据 [ProtonDB 网站](https://www.protondb.com/)，在 Steam 上排名前 100 的游戏中，80% 都得到了黄金或更好的评价。这实际上意味着，这些游戏在 Linux 桌面上会运行得很好。

![ProtonDB 在 2021 年 12 月对 Steam 游戏的评级](/data/attachment/album/202112/22/101041e57g1jydvb3szd39.jpg)

如果你对各种评级感到困惑，下面是它的含义：

* 原生：游戏可以在 Linux 上原生运行
* 白金：开箱就能完美运行
* 黄金：调整后可完美运行
* 白银：运行时有小问题，但一般来说是可玩的
* 青铜：可以运行，但经常崩溃或有问题，不能舒适地玩
* 残缺：要么无法启动，要么根本无法玩

简单来说，如果一个纯 Windows 的游戏至少达到黄金级评分，你应该能够通过 Steam Play 在 Linux 上玩这个游戏。

如果你看一下统计数字，在 Steam 上排名前 1000 的游戏中，有超过 750 个现在可以在 Linux 上玩。然而，在写这篇文章的时候，Steam 前 10 名游戏中只有 4 个在 Linux 上运行良好。

![ProtonDB 对前 10 名 Steam 游戏的评分](/data/attachment/album/202112/22/101042kofheoi1x0yhxuhz.jpg)

### ProtonDB 评级的可靠性如何？

请注意，这些评级不是来自 Steam 本身。这些评级是基于游戏玩家在 Linux 上用 Proton 测试游戏时的报告。它提供了游戏表现的综合分数。

你可能想知道这些非官方的评级是否可靠？好吧，可能有很多因素，比如你的系统的 CPU、图形驱动等等。但是 ProtonDB 的评分可以帮助你确定你是否可以通过 Steam 在 Linux 上 [尝试一个纯 Windows 的游戏](https://itsfoss.com/steam-play/)。

### 到底什么是 Steam Play 和 Proton？

如果你是新手，让我快速回顾一下，以帮助你更好地理解本文。

Steam 是一个可以让你安装和启动游戏的平台和客户端。它可以在 Windows、Linux 和 macOS 上运行。而游戏也会正确地标记为它们所能使用的平台。

几年前，Steam 推出了一个新的开源工具，名为 Proton 。它底层使用了 WINE 和许多其他工具，以改善 Linux 上纯 Windows 游戏的兼容性。

这项功能在 Steam 平台上提供在 Steam Play 测试版中，你必须从设置中明确启用它。

自此之后，志愿者和 Linux 游戏社区一起创建了一个可以在 Linux 上玩的游戏数据库。它最终演变成一个基于玩家反馈的评级系统。

Steam 也有自己的 [手持设备 Steam Deck 的评级系统](https://news.itsfoss.com/steamdeck-verified/)。

就个人而言，我更喜欢在 PS4 上玩有完整故事情节的单人游戏（因为我至今没有 PS5）。但我正在考虑搭建一个小型的游戏设备，使用 Steam 在 Linux 上玩游戏，特别是在过去几年里，Linux 游戏有了很大的改进。

你如何看待 Steam 和 Linux 游戏的发展？

---

via: <https://news.itsfoss.com/linux-game-rise-prtondb-dec-21/>

作者：[Abhishek](https://news.itsfoss.com/author/root/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #493 一条“圣诞快乐”的短信拍卖了 10.7 万欧元

Summary: 更多：• 2021 年域名流量排行榜 TikTok 居首 • DuckDuckGo 将发布桌面浏览器

![](/data/attachment/album/202112/22/155629eebbg9jaccigjhjg.jpg)

![](/data/attachment/album/202112/22/155644b27b2hh899dnhu9f.jpg)

### 一条“圣诞快乐”的短信拍卖了 10.7 万欧元

周二，有史以来发出的第一条短信 “Merry Christmas” 作为 NFT 在巴黎一家拍卖行以 [10.7 万欧元](https://www.reuters.com/markets/commodities/merry-christmas-first-sms-sells-over-100000-euros-paris-auction-2021-12-21/) 的价格拍卖出售。这条短信是在 1992 年 12 月 3 日发出的，沃达丰的工程师从他的电脑上把短信发给了英国的一位经理，他们当时正在进行年终活动，所以他给他发送了“圣诞快乐”的信息。这位经理用他的 2 公斤重的无绳电话收到了这条短信。

>
> 老王点评：一些标志性的电子信息确实有历史意义和文物价值，但是铸造成 NFT 就能代表那条信息吗？
>
>
>

![](/data/attachment/album/202112/22/155656tk8kddce8k89zch4.jpg)

### 2021 年域名流量排行榜 TikTok 居首

虽然 [Alexa.com](http://alexa.com/) 消失了，但如果你需要一个域名排名，你可以从 Cloudflare 得到它。Cloudflare 发布了 [2021 年域名流量排行榜](https://blog.cloudflare.com/popular-domains-year-in-review-2021/)，Google.com 不幸落败，TikTok 夺得了首位，而在去年 TikTok 才排名第 7 名。今年大部分时候 Google.com 都牢牢占据首位，但在 2021 年 8 月之后，TikTok 在大多数日子里占据了领先地位。除了 TikTok.com 之外，前五名剩下的四个是：Google.com、Facebook.com、Microsoft.com、Apple.com。Cloudflare 称其排名依据 “来自 1.1.1.1 公共 DNS 解析器的汇总数据” 和其 “拥有的关于全球互联网流量模式的一系列数据”。

>
> 老王点评：看来美国人在疫情大流行之下，都没事去刷“美版抖音”了。
>
>
>

![](/data/attachment/album/202112/22/155716zrbju72qr6tum11r.jpg)

### DuckDuckGo 将发布桌面浏览器

这款 [桌面浏览器](https://spreadprivacy.com/duckduckgo-2021-review/) 将在默认情况下提供“强大的隐私保护”，你不必在任何隐藏的安全选项上进行设置。与其移动应用程序一样，该桌面浏览器也将配备相同的“Fire”按钮，一键即时清除所有的浏览历史、存储数据和标签。不过，和它的移动应用程序一样，它也没有自己的渲染引擎，而是采用操作系统说提供的引擎。换句话说，在 Windows 上，浏览器将使用 Edge / Chromium 渲染，在 macOS 上采用 Safari / Webkit。DuckDuckGo 称“对该浏览器的早期测试表明，它明显比 Chrome 浏览器更快”。

>
> 老王点评：如果采用同样的引擎而做的更好，那 Chrome 们在做啥？
>
>
>


着色器入门：符号距离函数！

![](/data/attachment/album/202112/22/162653fn58ajqa6d65e8f5.jpg)

大家好！不久前我学会了如何使用着色器制作有趣的闪亮旋转八面体：

![](/data/attachment/album/202112/22/162753xkts4sa64pmkkdo4.gif)

我的着色器能力仍然非常基础，但事实证明制作这个有趣的旋转八面体比我想象中要容易得多（从其他人那里复制了很多代码片段！）。

我在做这件事时， 从一个非常有趣的叫做 [符号距离函数教程：盒子和气球](https://www.shadertoy.com/view/Xl2XWt) 的教程中学到了“符号距离函数”的重要思路。

在本文中，我将介绍我用来学习编写简单着色器的步骤，并努力让你们相信着色器并不难入门！

### 更高级着色器的示例

如果你还没有看过用着色器做的真正有趣的事情，这里有几个例子：

1. 这个非常复杂的着色器就像一条河流的真实视频：<https://www.shadertoy.com/view/Xl2XRW>
2. 一个更抽象（更短！）有趣的着色器，它有很多发光的圆圈：<https://www.shadertoy.com/view/lstSzj>

### 步骤一：我的第一个着色器

我知道你可以在 shadertoy 上制作着色器，所以我去了 <https://www.shadertoy.com/new>。它们提供了一个默认着色器，如下图所示：

![](/data/attachment/album/202112/22/162755wkbdb426ekm4dbkb.gif)

代码如下：

```
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    // 规范像素坐标 (从 0 到 1)
    vec2 uv = fragCoord / iResolution.xy;

    // 随时间改变像素颜色
    vec3 col = 0.5 + 0.5 * cos(iTime + uv.xyx + vec3(0, 2, 4));

    // 输出到屏幕
    fragColor = vec4(col, 1.0);
}

```

虽然还没有做什么令人兴奋的事情，但它已经教会了我着色器程序的基本结构！

### 思路：将一对坐标（和时间）映射到一个颜色

这里的思路是获得一对坐标作为输入（`fragCoord`），你需要输出一个 RGBA 向量作为此坐标的颜色。该函数也可以使用当前时间（`iTime`），图像从而可以随时间变化。

这种编程模型（将一对坐标和时间映射到其中）的巧妙之处在于，它非常容易并行化。我对 GPU 了解不多，但我的理解是，这种任务（一次执行 10000 个微不足道的可并行计算）正是 GPU 擅长的事情。

### 步骤二：使用 `shadertoy-render` 加快开发迭代

玩了一段时间的 shadertoy 之后，我厌倦了每次保存我的着色器时都必须在 shadertoy 网站上单击“重新编译”。

我找到了一个名为 [shadertoy-render](https://github.com/alexjc/shadertoy-render) 命令行工具，它会在每次保存时实时查看文件并更新动画。现在我可以运行：

```
shadertoy-render.py circle.glsl

```

并更快地开发迭代！

### 步骤三：画一个圆圈

接下来我想 —— 我擅长数学！我可以用一些基本的三角学来画一个会弹跳的彩虹圈！

我知道圆的方程为（`x^2 + y^2 = 任意正数`！），所以我写了一些代码来实现它：

![](/data/attachment/album/202112/22/162756aswj2ws1ot8zs2z5.gif)

代码如下：（你也可以 [在 shadertoy 上查看](https://www.shadertoy.com/view/tsscR4)）

```
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    // 规范像素坐标 (从 0 到 1)
    vec2 uv = fragCoord / iResolution.xy;
    // 绘制一个中心位置依赖于时间的圆
    vec2 shifted = uv - vec2((sin(iGlobalTime) + 1) / 2, (1 + cos(iGlobalTime)) / 2);
    if (dot(shifted, shifted) < 0.03) {
        // 改变像素颜色
        vec3 col = 0.5 + 0.5 * cos(iGlobalTime + uv.xyx + vec3(0, 2, 4));
        fragColor = vec4(col, 1.0);
    } else {
        // 使圆之外的其他像素都是黑色
        fragColor = vec4(0,0, 0, 1.0);
    }
}

```

代码将坐标向量 `fragCoord` 与自身点积，这与计算 `x^2 + y^2` 相同。我还在这个圆圈的中心玩了一点花活 – 圆心为 `vec2（（sin（iGlobalTime） + 1）/ 2，（1 + cos（faster）） / 2`，这意味着圆心也随着时间沿另一个圆移动。

### 着色器是一种学习数学的有趣方式！

我觉得有意思的（即使我们没有做任何超级高级的事情！）是这些着色器为我们提供了一种有趣的可视化方式学习数学 - 我用 `sin` 和 `cos` 来使某些东西沿着圆移动，如果你想更直观地了解三角函数的工作方式， 也许编写着色器会是一种有趣的方法！

我喜欢的是，可以获得有关数学代码的即时视觉反馈 - 如果你把一些东西乘以 2，图像里的东西会变得更大！或更小！或更快！或更慢！或更红！

### 但是我们如何做一些真正有趣的事情呢？

这个会弹跳的圆圈很好，但它与我见过的其他人使用着色器所做的非常奇特的事情相去甚远。那么下一步要做什么呢？

### 思路：不要使用 if 语句，而是使用符号距离函数！

在我上面的圆圈代码中，我基本上是这样写的：

```
if (dot(uv, uv) < 0.03) {
    // 圆里的代码
} else {
    // 圆外的代码
}

```

但问题（也是我感到卡住的原因）是不清楚如何将它推广到更复杂的形状！编写大量的 `if` 语句似乎不太好用。那人们要如何渲染这些 3d 形状呢？

所以！<ruby> 符号距离函数 <rt>  Signed distance function </rt></ruby> 是定义形状的另一种方式。不是使用硬编码的 `if` 语句，而是定义一个 **函数**，该函数告诉你，对于世界上的任何一个点，该点与你的形状有多远。比如，下面是球体的符号距离函数。

```
float sdSphere( vec3 p, float center )
{
  return length(p) - center;
}

```

符号距离函数非常棒，因为它们：

* 易于定义！
* 易于组合！如果你想要一个被切去一块的球体, 你可以用一些简单的数学来计算并集/交集/差集。
* 易于旋转/拉伸/弯曲！

### 制作旋转陀螺的步骤

当我开始时，我不明白需要编写什么代码来制作一个闪亮的旋转东西。结果表明如下是基本步骤：

1. 为想要的形状创建一个符号距离函数（在我的例子里是八面体）
2. 光线追踪符号距离函数，以便可以在 2D 图片中显示它（或沿光线行进？我使用的教程称之为光线追踪，我还不明白光线追踪和光线行进之间的区别）
3. 编写代码处理形状的表面纹理并使其发光

我不打算在本文中详细解释符号距离函数或光线追踪，因为我发现这个 [关于符号距离函数的神奇教程](https://www.shadertoy.com/view/Xl2XWt) 非常友好，老实说，它比我做的更好，它解释了如何执行上述 3 个步骤，并且代码有大量的注释，非常棒。

* 该教程名为“符号距离函数教程：盒子和气球”，它在这里：<https://www.shadertoy.com/view/Xl2XWt>
* 这里有大量符号距离函数，你可以将其复制粘贴到代码中（以及组合它们以制作其他形状的方法）：<http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm>

### 步骤四：复制教程代码并开始更改内容

我在这里使用了久负盛名的编程实践，即“复制代码并以混乱的方式更改内容，直到得到我想要的结果”。

最后一堆闪亮的旋转八面体着色器在这里：<https://www.shadertoy.com/view/wdlcR4>

动画出来的样子是这样的：

![](/data/attachment/album/202112/22/162757mg44ginpiyn5m88g.gif)

为了做到这一点，我基本上只是复制了关于符号距离函数的教程，该函数根据符号距离函数呈现形状，并且：

* 将 `sdfBalloon` 更改为 `sdfOctahedron`，并使八面体旋转而不是在我的符号距离函数中静止不动
* 修改 `doBalloonColor` 着色功能，使其有光泽
* 有很多八面体而不是一个

### 使八面体旋转！

下面是我用来使八面体旋转的代码！事实证明这真的很简单：首先从 [这个页面](http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm) 复制一个八面体符号距离函数，然后添加一个 `rotate` 使其根据时间旋转，然后它就可以旋转了！

```
vec2 sdfOctahedron( vec3 currentRayPosition, vec3 offset ){
    vec3 p = rotate((currentRayPosition), offset.xy, iTime * 3.0) - offset;
    float s = 0.1; // s 是啥?
    p = abs(p);
    float distance = (p.x + p.y + p.z - s) * 0.57735027;
    float id = 1.0;
    return vec2( distance,  id );
}

```

### 用一些噪音让它发光

我想做的另一件事是让我的形状看起来闪闪发光/有光泽。我使用了在 [这个 GitHub gist](https://gist.github.com/patriciogonzalezvivo/670c22f3966e662d2f83) 中找到的噪声函数使表面看起来有纹理。

以下是我如何使用噪声函数的代码。基本上，我只是随机地将参数更改为噪声函数（乘以 2？3？1800？随你！），直到得到喜欢的效果。

```
float x = noise(rotate(positionOfHit, vec2(0, 0), iGlobalTime * 3.0).xy * 1800.0);
float x2 = noise(lightDirection.xy * 400.0);
float y = min(max(x, 0.0), 1.0);
float y2 = min(max(x2, 0.0), 1.0);
vec3 balloonColor = vec3(y, y + y2, y + y2);

```

编写着色器很有趣！
---------

上面就是全部的步骤了！让这个八面体旋转并闪闪发光使我很开心。如果你也想用着色器制作有趣的动画，希望本文能帮助你制作出很酷的东西！

通常对于不太了解的主题，我可能在文章中说了至少一件关于着色器的错误事情，请让我知道错误是什么！

再说一遍，如下是我用到的两个资源：

1. “符号距离函数教程：盒子和气球”：<https://www.shadertoy.com/view/Xl2XWt>（修改和玩起来真的很有趣）
2. 可以将大量符号距离函数复制并粘贴到你的代码中：<http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm>

---

via: <https://jvns.ca/blog/2020/03/15/writing-shaders-with-signed-distance-functions/>

作者：[Julia Evans](https://jvns.ca/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Starryi](https://github.com/Starryi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


马上改用 Firefox 的 5 个理由

Summary: 19 年前，Mozilla Firefox 发布了 0.1 版。

没一个吸引人的。

你怎么看待火狐中国特色版呢？

千万别用

一直再用firefox,直接到releases.mozilla.org 下载, 特色版就算了

总感觉 Firefox 的界面很粗糙，调整不到喜欢的形状

爱一个人不需要理由，但讨厌一个人却需要。

启动又慢， 界面又丑。网页一多就卡。相比chrome还有一定差距。

>
> 19 年前，Mozilla Firefox 发布了 0.1 版。
>
>
>

![](/data/attachment/album/202112/23/163609yryosyby5s8o7uss.jpg "red panda")

*开源朗读者 | 淮晋阳*

Mozilla Firefox 是一个让我对开源大开眼界应用程序。这肯定不是转折点，而是几个开源应用程序逐渐吸引我注意力，这是累积效应的的一小部分。并且这最终导致我转向 Linux，并且从未回头。自从切换到 Firefox（这发生在我有意识地转向开源之前）以来，我一直是一个狂热的 Firefox 用户。我的手机一直是 Firefox OS 的手机，直到这个项目被放弃。不过，有趣的是，我并不特别地认为自己是 Firefox 的 *粉丝* 。我从那时到现在一直在使用 Firefox，是因为从许多方面来说它都是最佳的浏览器。接下来是我认为应该马上 [改用 Firefox](http://getfirefox.org) 的五个原因。

### 1、Firefox 专注隐私

Firefox 的维护者是 [Mozilla 基金会](https://foundation.mozilla.org/en/)，这是一个完全不以你的个人数据为动机的非营利组织。Mozilla 不关心你搜索的内容、访问的网站或你网站上使用的时间。这不是 Mozilla 的商业模式，但它显然是许多其他流行浏览器的商业模式。

即使你不反对浏览器以隐私为由跟踪你的活动，你可能也曾有过这样的经历：只是一次性购买过某件不寻常的礼物，就导致你访问的每个网站都试图向你出售该物品。互联网很大，所以有时根据用户的兴趣来重组它似乎是一个好主意。我承认，如果我所有的搜索都可以“开源”给它们，可能会提供更相关的结果。但话又说回来，我宁愿主动选择这种优化，而不是让它以及许多其他未知因素一起，在我的控制之外为我做出决定。

![Firefox 中的隐私 (Seth Kenlon, CC BY-SA 4.0) ](/data/attachment/album/202112/23/163706ircavccs9gvz5zys.jpg)

Mozilla 的数据政策是这样的: [尽量少拿、保持安全、毫无隐藏。](https://blog.mozilla.org/en/products/firefox/firefox-data-privacy-promise/)

不止如此，Firefox 还提供了帐户 [监控](https://monitor.firefox.com)，这是 Mozilla 的一项可选服务，如果你的任何在线帐户因大规模数据泄露而受到损害，它就会提醒你。另外，Mozilla 使用开源的 Wireguard 提供付费 VPN 服务，因此无论何时何地你都可以安全浏览。

### 2、Firefox 可以使用容器

很难相信的是，曾经有一段时间，当时领先的网页浏览器没有标签页功能。在上世纪 90 年代末和本世纪 00 年代初，当你想同时访问两个网页时，你必须打开两个单独的浏览器窗口。Firefox（以及之前的 Mozilla 浏览器）是标签页界面的早期使用者。

标签页是现在浏览器的标配，但是通过 Firefox 的扩展，标签页界面的功能有了有趣的新变化。由 Mozilla 自己开发的 [Firefox 多帐户容器插件](https://github.com/mozilla/multi-account-containers#readme) 可以将每个标签页变成浏览器中的一个隔离的“容器”。

![Firefox 中的容器化标签页 (Seth Kenlon, CC BY-SA 4.0)](/data/attachment/album/202112/23/163707i7glg1d6p4a1j61b.jpg)

例如，假设你的雇主使用谷歌应用，但你信不过谷歌接触你的个人信息。你可以使用多账户容器插件来隔离你的工作活动，以便谷歌仅触及你的职业生活，而无法访问你日常生活的任何部分。

你甚至可以使用两个不同的帐户打开同一个网站，此外由于标签页是用颜色标识的，因此无论你是要隔离网站还是只是在浏览器中添加新的视觉提示，这都很有帮助。

### 3、Firefox 的用户界面设计

尽管我们人类可能对新事物更感兴趣，但在熟悉又可靠的东西中我们能找到更多的舒适感。多年以来，Firefox 不断更新其界面，并且拥有了相当多的创新，而这些创新现在已经成为非官方的行业标准。但就总体来说，它一直保持不变。Firefox 的用户界面保留了你认为理所当然的所有标准惯例。

当你下载文件时，系统会提示你选择让 Firefox 如何处理该文件。根据你的选择，你可以在适当的应用程序中打开文件或将其保存到硬盘驱动器。你可以选择让 Firefox 记住你的选择并作为你将来的选择，或者让它继续提示你。

![Firefox用户界面设计 (Seth Kenlon, CC BY-SA 4.0)](/data/attachment/album/202112/23/163707e66tt2mpae1l866q.png)

当你需要应用程序菜单时，可以在现代的“汉堡包式”的菜单中找到它，或者你可以按 `Alt` 键在 Firefox 的窗口顶部显示传统菜单。

无论你是否是 Firefox 的长期用户，Firefox 中的一切都看起来很熟悉，因为它建立在多年的用户界面设计经验之上。在它可以创新的地方，它就会去创新，但是如果这些创新会违反直觉，它就会废弃这种创新。

### 4、Firefox 的开发者工具

回溯万维网的早期，你可以浏览到任何网站并查看其源代码。仅仅这样做几次就很有可能学习到 HTML 的知识。一切都是公开的、透明的、显而易见的，而且相对简单的。

互联网已经逐渐演变成为一个强大的 [基于云的超级计算机](https://www.redhat.com/en/products/open-hybrid-cloud)，现在从网站中提取有意义的上下文有时需要的不仅仅是其底层标记的文本转储。为了确保每个人都可以对网站的功能进行逆向工程（和正向工程），Firefox 在浏览器中集成了一套功能强大的开发工具。

![开发者工具 (Seth Kenlon, CC BY-SA 4.0) ](/data/attachment/album/202112/23/163708dssb4dmwzpbj4zmq.jpg)

虽然这最初是基于 Firefox 的创新（在 2006 年推出的 [Firebug](https://getfirebug.com/)），但现在许多浏览器都有开发者工具功能。然而，并非所有的开发者工具都一样，正是 Firefox 的开发者面板使 Firefox 成为我进行网页设计和用户体验测试的首选浏览器。

### 5、Firefox 是开源的

最为重要的是，Firefox 是完全开源的。这是一个优秀的浏览器，并且对你毫无隐藏。除了保持互联网开放，教育人们了解互联网，并推广日常工作的开源解决方案之外，它没有别有用心的动机。

![Firefox 是开源的 (Seth Kenlon, CC BY-SA 4.0)](/data/attachment/album/202112/23/163709hrw0ffvf0aaiwggc.jpg)

你可以为 Firefox 做出贡献。你可以对你不喜欢的部分提交报告。你可以看到与互联网交互时运行的代码。几十年来，Firefox 一直在支持开放互联网。它忠于其自身的原则，并且可以说已经迫使几个竞争对手走向开源。如果 Firefox 没有抬高公众的期望，它们可能不会选择开源。

Firefox 是现代互联网上的具有影响力的力量，它是一款优秀的浏览器。Firefox 可以在你的桌面和移动设备上运行，因此想让自己轻松一点，[就安装个 Firefox 吧](http://getfirefox.com)。

---

via: <https://opensource.com/article/21/9/switch-to-firefox>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[leo314159](https://github.com/leo314159) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Fly-Pie：一个为鼠标操作为主的用户提供的有趣菜单启动器

挺有趣

>
> Fly-Pie 是一个用于 GNOME 的独特的菜单启动器，以操作鼠标为主的用户可以用它进行一些操作。
>
>
>

应用启动器可以方便地快速切换到一个活动窗口，启动新的应用，等等。

[Ulauncher](https://itsfoss.com/ulauncher/) 就是这样一个应用启动器，如果你的 Linux 发行版没有提供一个开箱即用的，那么你可以使用它。

如果这已经激起了你的兴趣，你会发现 Fly-Pie 更有趣！以操作鼠标为主的用户总是把一只手放在鼠标上而不是依赖键盘进行导航，Fly-Pie 就是为他们量身定做的应用启动器。

![](/data/attachment/album/202112/23/173056fz0pb84s1m921c40.png)

### Fly-Pie：可定制的菜单，作为 GNOME shell 扩展使用

是的，不幸的是，Fly-Pie 只针对 GNOME 用户。我不确定是否有类似的东西适用于 KDE 或其他桌面环境。如果你知道的话，请在评论区提出你的建议。

Fly-Pie 主要为快捷方式、应用、媒体控制、最大化/最小化窗口、工作区导航提供了视觉上的互动图标，并且，比传统应用启动器更多的选项。

![](/data/attachment/album/202112/23/173056cfuf2k0mjfr0uvtf.png)

你可以进一步展开子菜单和下下级菜单。所以，你可以有很多的用例，它应该能发挥鼠标或触摸板的强大导航功能。

![](/data/attachment/album/202112/23/173057etsypss33r6r6ss7.png)

最重要的是它是高度可定制的。你可以选择背景图片、颜色、自定义图标、分支菜单等。

让我来重点介绍它的一些功能。

### Fly-Pie 的特点

![](/data/attachment/album/202112/23/173057aj5kh88nzejhibgc.png)

如果你是一个以鼠标或触摸板操作为主的用户，Fly-Pie 为你提供了令人兴奋的导航能力。显而易见，如果你是一个有经验的键盘用户，这并不适合你（但你应该试一下！）。

以下是你可以期待的 Fly-Pie 的一些主要功能：

* 使用键盘快捷键启动 Fly-Pie 菜单
* 能够在菜单上添加媒体控制和工作区导航
* 添加自定义图标，为你的桌面定制个性化的菜单
* 添加喜爱的应用，以便快速访问
* 关闭一个应用程序窗口
* 一目了然地检查正在运行的应用，并导航到该窗口
* 自定义菜单的出现和消失的动画
* 如果你想让它一直作为覆盖层留在你的屏幕上，能够调整不透明度
* 调整连接子菜单的跟踪线
* 你可以根据你的鼠标和触摸板的敏感度，设置一个阈值或笔触角度来定制用户体验
* 细致的控制来改变颜色，定制图标等
* 能够定制子菜单和下下级菜单
* 检查实时预览，以便在使用前轻松定制和测试菜单
* 通过绘画手势选择项目

![](/data/attachment/album/202112/23/173058rwc58vq0ca9blflt.png)

除了这些功能外，它还增加了一个成就功能，以鼓励用户探索菜单工具的各种使用情况。

下面是开发者在 YouTube 上播放的一段官方视频，展示了它的操作：

### 在 Linux 中安装 Fly-Pie

考虑到它是一个 GNOME 扩展，你必须得首先 [进行设置，以便能够在你的 Linux 发行版上使用 GNOME 扩展](https://itsfoss.com/gnome-shell-extensions/)。

设置完成后，你就可以前往 [Fly-Pie 的 GNOME 扩展页面](https://extensions.gnome.org/extension/3433/fly-pie/) 并轻松地安装该扩展。

你应该能够在该页面卸载它并访问设置。如果你感兴趣，可以探索它的 [GitHub 页面](https://github.com/Schneegans/Fly-Pie)，了解更多信息。

它的 GitHub 页面还包括了帮助你探索其所有功能的文档。

### 关于使用 Fly-Pie 菜单启动器的想法

Fly-Pie 菜单并不完全是为了取代应用启动器。然而，根据你的使用情况，它可以作为一个基于覆盖层的菜单或一个以鼠标操作为主的启动器来访问选项/应用，非常方便。

尽管它是可定制的，但原版看起来是最好的，可以很容易地与你在 Linux 桌面上的任何类型的主题融合在一起。

令人印象深刻的是，它可以找到细微的调整来定制图标、缩放、颜色、透明度等等。如果你愿意，你可以试试。

考虑到我不是一个使用键盘导航的人，Fly-Pie 看起来是一个有用的 GNOME 扩展，可以节省时间，并为桌面体验增加一个独特的点。

即使你认为这不适合你，我也会建议你试一试，看看它是如何工作的，它确实很有趣。

你对 Fly-Pie 有什么看法？欢迎在下面的评论中分享你的想法。

---

via: <https://itsfoss.com/fly-pie/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[校对者ID](https://github.com/%E6%A0%A1%E5%AF%B9%E8%80%85ID)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #494 美国互联网协会宣布倒闭

Summary: 更多：• AWS 本月第三次出现故障 • 开源游戏 SuperTux 历时一年半发布新版本

![](/data/attachment/album/202112/23/185817a9viic9c85yzgtjk.jpg)

![](/data/attachment/album/202112/23/185827jktfil3ft3x73i43.jpg)

### 美国互联网协会宣布倒闭

由于微软、亚马逊、谷歌、苹果和 Meta 等互联网巨头之间的关系日益紧张，已成立 9 年的美国“互联网协会”（IA）宣布将在今年年底关闭。此前，微软和 Uber 等公司都撤回了资金支持，留下了巨大的资金缺口。微软是美国“互联网协会”的最大贡献者之一，每年支付 80 万美元至 100 万美元的会费。分析人士认为，微软希望与硅谷同行保持距离，以免遭反垄断指控。

>
> 老王点评：微软几乎参加了所有主要科技组织，偏偏放弃了这个组织，只是为了保持距离有点说不过去。
>
>
>

![](/data/attachment/album/202112/23/185836va75pam2gk72iksy.jpg)

### AWS 本月第三次出现故障

AWS 今天因停电再次遇到了 [问题](https://www.theverge.com/2021/12/22/22849780/amazon-aws-is-down-outage-slack-imgur-hulu-asana-epic)，Slack、Imgur 和 Epic 商店等服务受到影响。AWS 将这些问题归咎于单个数据中心的停电，影响到 AWS 美国东 1 区的一个可用区。故障发生 12 个小时后，AWS 标明问题已经解决，但这种恢复并不一定能解决所有受影响的服务器的一切问题。这是 AWS 本月以来第三次出现故障，本月早些时候发生的两起故障导致了大量平台和产品瘫痪。

>
> 老王点评：虽然 AWS 引领了云计算的发展，并拥有最大的云计算市场份额，但是屡次出现故障已经影响了人们对 AWS 的信心。这是大规模云计算的必然结局么？
>
>
>

![](/data/attachment/album/202112/23/185856jb96lz6wtto9leb7.jpg)

### 开源游戏 SuperTux 历时一年半发布新版本

受《超级马里奥》启发的知名开源视频游戏《[SuperTux](https://www.supertux.org/news/2021/12/23/0.6.3)》发布了 0.6.3，增强了游戏性，引入了游泳、跳墙能力、新的雪砖、一些新的游戏对象等等。它可以被编译成 WebAssembly，这样它就可以在现代网页浏览器中运行了。

>
> 老王点评：看起来还不错，可以玩一下试试，这是 Linux 上早期少有的独占游戏。
>
>
>


在 FreeDOS 中使用批处理文件

>
> 编写你自己的简单程序来自动执行通常需要大量输入的任务的批处理文件，是一种极好的方法。
>
>
>

![](/data/attachment/album/202112/24/102751sldikuebf7z4u64l.jpg "Computer screen with files or windows open")

在 Linux 上，创建 *shell 脚本* 来自动执行重复的任务是很常见的。类似地，在开源版的旧式 DOS 操作系统 [FreeDOS](https://www.freedos.org/) 上，你可以创建一个包含数个 FreeDOS 命令的 *批处理文件* 。然后，你就可以运行你的批处理文件来按顺序执行每个命令。

你可以使用一个 ASCII 文本编辑器来创建批处理文件，诸如 FeeDOS 的 Edit 应用程序。在你创建一个批处理文件后，你可以使用一个文件名称加上扩展名 `.bat` 来保存它。文件名称应该是唯一的。如果你使用 FreeDOS 的一个命令的名称作为你自己的文件名称，那么可能将会执行 FreeDOS 的命令，而不会是你的批处理文件。

实际上，所有的内部的和外部的 FreeDOS 命令都可以在一个批处理文件中使用。在你创建一个批处理文件时，你其实就是在编写一个程序。FreeDOS 批处理文件可能没有结构化编程语言的功能，但是对于耗时短暂却重复乏味的任务来说，它是非常方便的。

### 注释你的代码

对于任何程序员来说，学习的第一个好习惯都应该是：在一个程序中放置注释来解释该代码正在做什么。这是一件非常容易完成的事情，但是你需要仔细，不要傻傻地让操作系统来执行你的注释。避免出现这种情况的方法是在一个注释行的开头处放置 `REM`（“remark” 的缩写） 。

FreeDOS 忽略以 `REM` 开头的代码行。但是任何查看源文件代码（即你在你的批处理文件中所编写的文本）的人都可以读取你的注释并理解它在做什么。这也是一种临时性禁用一个命令而不需要删除它的一种方法。只需要打开你的批处理文件来进行编辑，在你想要禁用行的开头处放置 `REM` ，并保存它。在你想要重新启用这个命令时，只需要打开文件来进行编辑和移除 `REM` 。这种技巧有时被称为 “注释掉” 一个命令。

### 开始设置

在你开始编写你自己的批处理文件前，我建议在 FreeDOS 中创建一个临时目录。这将会为你提供一个处理批处理文件的安全空间，不会意外地删除、移动，或重命名重要的系统文件或目录。在 FreeDOS 上，你可以使用 `MD` 命令来 [创建一个目录](https://opensource.com/article/21/2/freedos-commands-you-need-know) ：

```
C:\>MD TEMP
C:\>CD TEMP
C:\TEMP>

```

FreeDOS 的 `ECHO` 命令会控制当你运行一个批处理文件时在屏幕上显示的东西。例如，这里是一个简单是单行批处理文件：

```
ECHO Hello world

```

如果你创建这个文件并运行它，你将看到在屏幕上显示的句子。从命令行中完成这项操作的最快的方法是：使用 `COPY` 命令来从你的键盘中（`CON`）获取输入，并将其放置到文件 `TEST1.BAT` 之中。接下来，按下组合键 `Ctrl+Z` 来停止复制过程，按下你键盘上的 `Return` 或 `Enter` 按键来返回一个提示。

在你的临时目录中尝试创建这个文件为 `TEST1.BAT` ，接下来运行它：

```
C:\TEMP>COPY CON TEST1.BAT
CON => TEST1.BAT
ECHO Hello world
^Z

C:\TEMP>TEST1
Hello world

```

当你想要显示一段文本时，这可能很有用。例如，在一个程序完成它的任务时，你可能会在你的屏幕上看到一条告诉你需要等待的消息，或者在一个网络环境中时，你可能会看到一条登录消息。

如果你想要显示一个空行怎么办？你可能会认为 `ECHO` 命令本身就可以达到目的，但是单独一个 `ECHO` 命令只会询问 FreeDOS 来响应 `ECHO` 是打开还是关闭：

```
C:\TEMP>ECHO
ECHO is on

```

获取一个空白行的方法是在 `ECHO`后紧接着使用一个 `+`符号：

```
C:\TEMP>ECHO+

C:\TEMP>

```

### 批处理文件变量

变量是一个存储你需要你的批处理文件临时记住的信息的位置。这是编程的一个重要的功能，因为你不能总是知道你的批处理文件需要使用什么样的数据。这里有一个用于演示的简单示例。

创建 `TEST3.BAT` ：

```
@MD BACKUPS
COPY %1 BACKUPS\%1

```

变量是使用百分比符号和随后的数字表示的，因此，这个批处理文件将在你的当前目录中创建一个 `BACKUPS` 子目录，然后将复制变量 `%1` 到 `BACKUPS` 文件夹之中。这个变量是什么？当你运行批处理文件时，变量由你决定：

```
C:\TEMP>TEST3 TEMP1.BAT
TEST1.BAT => BACKUPS\TEST1.BAT

```

你的批处理文件已经复制 `TEST1.BAT` 到一个名称为 `BACKUPS` 的子目录，因为在你运行批处理文件时，你标识这个文件为一个参数。你的批处理文件将把 `%1` 替换为 `TEST1.BAT` 。

变量是按位置的。变量 `%1` 是你提供给命令的第一个参数，变量 `%2` 是第二个参数，以此类推。假设你创建一个批处理文件来列出一个目录的内容：

```
DIR %1

```

尝试运行它：

```
C:\TEMP>TEST4.BAT C:\HOME
ARTICLES
BIN
CHEATSHEETS
GAMES
DND

```

这像预期一样的工作。但是下面这个却失败了：

```
C:\TEMP>TEST4.BAT C:\HOME C:\DOCS
ARTICLES
BIN
CHEATSHEETS
GAMES
DND

```

如果你尝试它，你将得到第一个参数（`C:\HOME`）的列表，而得不到第二个参数（`C:\DOCS`）的列表。这是因为你的批处理文件仅查找一个变量（`%1`），此外，`DIR` 命令也仅能获取一个目录。

此外，当你运行一个批处理文件时，你也不需要为其具体指定扩展名 —— 除非你运气相当不好地为批处理文件选取了一个与 FreeDOS 外部命令或类似命令相同的名称。当 FreeDOS 执行命令时，它按下面的顺序执行：

1. 内部命令
2. 带有 \*.COM 扩展名的外部命令
3. 带有 \*.EXE 扩展名的外部命令
4. 批处理文件

### 多个参数

好的，选择重新编写 `TEST4.BAT` 文件来使一个命令可以获取两个参数，以便你可以看到这是如何工作的。首先，使用 `EDIT` 应用程序来创建一个简单的名称为 `FILE1.TXT` 的文本文件。在其中放置一段某种类型（例如，“Hello world”）的语句，并在你的 `TEMP` 工作目录中保存文件。

接下来，使用 `EDIT` 来更改你的 `TEST4.BAT` 文件：

```
COPY %1 %2
DIR

```

保存它，然后执行命令：

```
C:\TEMP\>TEST4 FILE1.TXT FILE2.TXT

```

在运行你的批处理文件时，你会看一个你的 `TEMP` 目录的目录列表。在列出的文件之中，你有 `FILE1.TXT` 和 `FILE2.TXT` ，它们是由你的批处理文件所创建的。

### 嵌套批处理文件

批处理文件的另一个功能是能够 “嵌套” ，这意味着一个批处理文件可以在另外一个批处理文件中被调用和运行。为查看这是如何工作的，从一对简单的批处理文件开始：

第一个文件被称为 `NBATCH1.BAT` ：

```
@ECHO OFF
ECHO Hello
CALL NBATCH2.BAT
ECHO world

```

第一行 （`@ECHO OFF`） 轻轻地告诉批处理文件在你运行它时仅显示命令 （而不是命令本身） 的输出。你可能会在前面的示例中注意到这里有很多关于批处理文件正在做什么的反馈；在这种情况下，你正在允许你的批处理文件仅显示结果。

第二个批处理被称为 NBATCH2.BAT ：

```
echo from FreeDOS

```

使用 `EDIT` 来创建这两个文件，并在你的 TEMP 子目录中保存它们。运行 `NBATCH1.BAT` 来查看会发生什么：

```
C:\TEMP\>NBATCH1.BAT
Hello
from FreeDOS
world

```

你的第二个批处理文件将在第一个批处理文件之中通过 `CALL` 命令来执行，它将提供在你 “Hello world” 信息中间的字符串 “from FreeDOS” 。

### FreeDOS 脚本

编写你自己的简单程序来自动执行通常需要大量输入的任务的批处理文件，是一种极好的方法。你使用的 FreeDOS 越多, 你将越熟悉它的命令，在你熟知命令后，在一个批处理文件中列出它们仅是一件使你的 FreeDOS 系统让你生活轻松的事情。尝试一下！

---

via: <https://opensource.com/article/21/3/batch-files-freedos>

作者：[Kevin O'Brien](https://opensource.com/users/ahuka) 选题：[lujun9972](https://github.com/lujun9972) 译者：[robsean]](<https://github.com/robsean>) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


7 个最好的 Linux 滚动发行版

Summary: 让我们来看看一些最好的滚动发布的 Linux 发行版。

gentoo如果官方更新了profile，想用的话也得手动干预吧

让我们来看看一些最好的滚动发布的 Linux 发行版。

![](/data/attachment/album/202112/24/121027sioukeih5bmp5c5l.jpg)

林林总总的 Linux 发行版可以根据它们的特点、功能、预期用户群等分为不同的类别。在这篇文章中，我将列出一些最好的滚动发布的 Linux 发行版。

你知道什么是 [滚动发布的发行版](https://itsfoss.com/rolling-release/) 吗？这些发行版不会等待 6 个月或更长时间才发布一个新的版本，提供给你更新的 Linux 内核、桌面环境和其他主要软件组件。它们会在这些组件发布后很快就进行更新。你不必将你的发行版从一个主要版本升级到下一个版本，因为你的发行版会定期得到升级。

现在你已经知道了，让我们来看看一些最好的滚动发布的 Linux 发行版。

### 你可以在桌面上使用的最佳滚动发行版

是的，这个列表主要是针对桌面用户。这里列出的一些发行版可能有服务器版本，但这不是这里的重点。

请注意，这并不是一个排名表。

#### 1、openSUSE Tumbleweed

![OpenSUSE Tumbleweed](/data/attachment/album/202112/24/121104r6jz66z6mkprnho0.png)

老派的 openSUSE 多年来一直按部就班地顺着版本号发布他们的系统。但在几年前，他们决定改变他们的产品，创建了 [openSUSE Leap 和 Tumbleweed](https://itsfoss.com/opensuse-leap-vs-tumbleweed/)。

openSUSE Leap 采用的是版本式发布，每隔几年就会有一个新的版本，而 Tumbleweed 则是滚动式发布，新的软件在发布后不久就会出现在这个系统中。

[openSUSE Tumbleweed](https://get.opensuse.org/tumbleweed/) 对于那些想留在红帽 RPM 阵营的人来说是一个很好的选择。openSUSE 有多样化的生态系统，它有一个巨大的软件库，Zypper 和 YaST 为你的软件包管理提供了很多选择。

#### 2、Arch Linux

![Arch Linux](/data/attachment/album/202112/24/121104e4xz0m1p1shmtbqp.png)

毋庸置疑，[Arch Linux](https://archlinux.org/) 是最流行的滚动发布版本。它几乎就是滚动发布的同义词。

[Arch Linux](https://itsfoss.com/why-arch-linux/) 在 Linux 用户中具有崇高地位的原因有很多。我认为这更多是与 [安装 Arch Linux](https://itsfoss.com/install-arch-linux/) 后的成就感有关，因为即使是安装程序，它都很别人不一样。

Arch 在其软件库中正式提供了一大批软件。而 [AUR 则通过社区的努力，几乎使所有其他的 Linux 软件都可以使用](https://itsfoss.com/aur-arch-linux/)。

如果你对 Linux 有一定的经验，想挑战自己的水平，这是一个不错的选择。

#### 3、Manjaro Linux

![Manjaro Linux](/data/attachment/album/202112/24/121105crzxlylbhppah4g8.png)

[Manjaro](https://manjaro.org/) 基本上是免除了所有麻烦的 Arch Linux。

它是基于 Arch Linux 的，所以它具有 Arch Linux 的大部分优点。你可以得到 Pacman 和 AUR 的滚动发布模式。同时，Manjaro 有图形化的安装程序、基于 GUI 的软件包管理器和其他图形化工具来改善你的桌面体验。

Manjaro 更容易安装，也更容易使用。对于那些想舒适地呆在 Arch 领域的人来说是个不错的选择。

注意: 还有 [许多其他基于 Arch Linux 的优秀发行版](https://itsfoss.com/arch-based-linux-distros/)，但我无法将其列入此列表中。如果你愿意，你可以试试 Garuda Linux、[EndeavourOS](https://endeavouros.com/) 和其他许多基于 Arch 的发行版。

#### 4、Solus Linux

![Solus Linux](/data/attachment/album/202112/24/121105satqqg3glqqq95eb.png)

和 Manjaro 一样，[Solus](https://getsol.us/home/) 也是一个 “谨慎” 的滚动发行版。与 Manjaro 不同的是，它不是基于 Arch 的。它是从头开始创建的，使用的是 [eopkg 软件包管理器](https://itsfoss.com/eopkg-commands/)。Solus 因创造了现代而直观的 Budgie 桌面环境备受赞誉。

像其他滚动发布的发行版一样，一旦你安装了 Solus，你就不需要升级到下一个版本的发行版（也可以像 ISO 刷新一样进行全新安装，带有更新的软件包）。

万一有欠缺的软件包也可以用 Snap 应用程序来补足。

如果你想要一些不同的东西，但又不至于复杂到让你感到不舒服，那么 Solus 是一个不错的选择。

#### 5、Debian Testing

![Debian](/data/attachment/album/202112/24/121105ahp1b5v5u91vhjpp.png)

你没有想到吧？Debian 以其对稳定性的关注而闻名，以至于其稳定的有时就像是陈旧，因为它提供的软件版本已经相当老旧。

但那是针对稳定分支的。Debian 有几个分支，其中一个叫做 Testing 分支。

看起来 Testing 是某种测试版、不稳定的版本，但这并不完全正确。[Debian Testing](https://wiki.debian.org/DebianTesting) 其实是下一个 Debian 稳定版本。实际的开发分支是 Debian Unstable（即 Sid）。Debian Testing 介于不稳定版和稳定版分支之间，它会在稳定版之前添加新的功能。

有些人在配置 Debian 时，在源列表中加入 `testing`。这使得他们的 Debian 系统永远停留在测试阶段。这是一种滚动发布的模式，Debian 用户可以不必离开舒适的 APT 和 deb 软件包管理系统。

#### 6、Void Linux

![Void Linux](/data/attachment/album/202112/24/121105kwncilaqw4gi6wnm.png)

这是一个不寻常的、不太出名的发行版。[Void](https://voidlinux.org/) 也是从头开始创建的，也就是说，它不是基于 Arch、Red Hat 或 Debian。

它是滚动发布的，但不像 Arch 那样激进。它优先考虑的是稳定性。这意味着当新的版本发布时，你不需要升级版本，但你也不会在最新的桌面环境版本一发布就得到它。

与其他发行版不同的另一点是，它使用 [runit](http://smarden.org/runit/) 作为初始化系统。

总的来说，如果你是一个有经验的 Linux 用户，Void 是一个不错的选择。

#### 7、Gentoo Linux

![Gentoo Linux](/data/attachment/album/202112/24/121105l67072zotp33oaot.png)

另一个是你的同行们警告过的 [专家级 Linux 发行版](https://itsfoss.com/advanced-linux-distros/) 之一。

[Gentoo](https://www.gentoo.org/) 不是每个人都能享用的茶或咖啡（无论你喜欢哪一种）。从安装到配置再到软件包管理都需要一定的专业知识和时间。

但是它有一个小众的专家用户群，他们会在编译一切需要的组件时废寝忘食。

如果你觉得其他发行版都不够有挑战性，Gentoo 可能是你的选择。

### 你对滚动发布的发行版有什么建议？

正如我之前提到的，我在这里特意将其他基于 Arch 的发行版排除在外，否则列表中就只有 Arch 的衍生产品了。

但你可以自由地投出你的推荐，即使它是基于 Arch 的。评论区都是你的。

---

via: <https://itsfoss.com/best-rolling-release-distros/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #495 开源 2D 绘图软件 Krita 5.0 发布

Summary: 更多：• systemd 发布重大更新版本 250 • 暴露了客户源代码的 Azure 漏洞已经存在 4 年

Krita的开发力度比gimp强多了

虽然是款绘图软件，但也支持图片编辑，一直在用，重要的是比 GIMP 好看。

![](/data/attachment/album/202112/24/174906uig9oizir2oqmiwm.jpg)

![](/data/attachment/album/202112/24/174917in1p8yvf741ips17.jpg)

### 开源 2D 绘图软件 Krita 5.0 发布

Krita 发布了 5.0，带来了 [大量更新](https://krita.org/en/krita-5-0-release-notes/)，但与之前的 4.x 和 3.x 版本的文件存在部分不兼容。主要更新包括：修改了它对画笔/渐变/调色板的处理，所以它现在更快，使用的内存少得多，而且更稳定。Krita 5.0 还对渐变进行了改进，重写了涂抹笔刷引擎，对动画系统进行了大修，现在有了一个内置的故事板编辑器，一个可以将绘画过程制成视频的录像机等等。

>
> 老王点评：这是 Linux 上引以为傲的绘图应用之一，虽然它也支持 Linux 之外的操作系统。
>
>
>

![](/data/attachment/album/202112/24/174931jqdtpf6ya8pp2jyy.jpg)

### systemd 发布重大更新版本 250

systemd 250 是一个重大的版本，带来了非常多的 [更新改进](https://github.com/systemd/systemd/blob/main/NEWS)。其中一些我感兴趣的地方有：

* 支持加密和认证的凭证，可以是存储在 `/var` 的密钥，也可以是系统上的 TPM2 芯片，当服务启动时，凭证会被自动解密。
* 支持长按系统上的电源、重启或暂停键，并可以对其行为进行设置。
* 可以限制服务能访问的文件系统和网络接口。
* `/dev` 默认的最大节点数从 64k 提高到了 1M；`/tmp` 默认的最大节点数从 400k 提高到 1M。
* 改进对各种 TPM 2.0 模块的支持。
* 对 LoongArch 架构的初步支持。

>
> 老王点评：不管你喜欢不喜欢，systemd 现在已经成为 Linux 上的初始化系统的标准。
>
>
>

![](/data/attachment/album/202112/24/174947gnnwn5cgzxww9fn5.jpg)

### 暴露了客户源代码的 Azure 漏洞已经存在 4 年

[该漏洞](https://therecord.media/microsoft-notifies-customers-of-azure-bug-that-exposed-their-source-code/) 至少从 2017 年 9 月起就暴露了他们 Azure Web 应用的源代码。该漏洞存在于 Azure 云的一项允许客户从源代码库中部署网站和 Web 应用的功能中。通过这种方法部署的所有 PHP、Node、Ruby 和 Python 应用程序都受到影响。而且只有部署在基于 Linux 的 Azure 服务器上的应用程序受到影响，但不包括那些托管在 Windows 服务器系统上的应用程序。而最危险的暴露情况是，暴露的源代码包含一个 .git 配置文件，该文件本身包含其他客户系统的密码和访问令牌，如数据库和 API。

>
> 老王点评：如果你是相关用户，请尽快处置。
>
>
>


在 Linux 上用 Markdown 编写你的电影剧本

>
> Fountain markdown 技术只需要一个纯文本编辑器，如 Atom、Kate、Gedit 或类似的编辑器，它可以导出一个正确格式的 HTML 或 PDF 剧本。
>
>
>

![](/data/attachment/album/202112/25/102630gl455tbmkq9lq5ty.jpg "Typewriter in the grass")

剧本是一部电影的蓝图，过去它是在打字机上撰写的。你买台打字机就可以写剧本，可以写好多好多剧本。而现在没人用打字机写剧本了，因为打字机不再流行。

不过，令人费解的是，随着写作技术变得 “越好”，写剧本就越难。在剧本领域有严格的格式化规则，以帮助电影拍摄中的助理导演（AD）估计每个场景需要拍摄多长时间。你可能认为电脑会比在打字机上的完全手工过程更容易做到。然而，流行的计算机却用昂贵的软件来限制作家，这些软件已经嵌入了好莱坞文化。如果你没有合适的软件，你就会被告知，你永远不可能成为一个正式的编剧。

不过，所有这些都随着开源软件的出现而改变，写剧本的最简单方法之一就是根本不使用特殊的软件。[Fountain](http://fountain.io) markdown 技术只需要一个纯文本编辑器，如 [Atom](https://opensource.com/article/20/12/atom)、[Kate](https://opensource.com/article/20/12/kate-text-editor)、[Gedit](https://opensource.com/article/20/12/gedit)，或类似的，它可以导出一个正确格式的 HTML 或 PDF 剧本。

### 安装 Fountain

Fountain 不需要安装，因为它不是软件；它是一套你在写作时使用的规则。你在写作时已经遵循了一些规则，比如你把句子的第一个字母大写，用句号来结束每句话，等等。当你用 Fountain 写作时，只需要添加一些专门针对剧本的新规则。

### 片段

在剧本中，每个场景都由一行大写字母划定，以 `INT.` 或 `EXT.` 开头，然后是一个地点、一个破折号，以及一天中的时间。这些说明被称为 “片段”。方便的是，这也是 Fountain 的规则，所以不用记住什么新的东西就可以创建一个片段。

```
EXT. CASTLE COURTYARD - DAY

```

### 动作

当演员被要求执行一个特定的动作时，剧本中就会包含动作文本。这是正常的普通文本，完全按照你在书中写的文字来写。所有正常的规则都适用，所以对动作文本不用特别记什么规则。

```
A wizard wanders out of a great stone door. She approaches the center of the courtyard and pauses. Something's caught her eye.

It's a book. She leans down and picks it up.

```

### 对话

剧本中的对话格式是从左右边距缩进的。对于普通观众来说，它可能看起来是居中的，但实际上它是左对齐的。采用这种格式是为了帮助演员定位他们的台词，并使得剧本给口语对话留出更多的空间，因为在电影中，口语对话往往占据了大部分的时间。

在 Fountain 中，对话的规则是用大写字母写出说话的角色的名字。然后在下一行，正常写出对话内容。

```
WIZARD

I can sense your power. Grep? Sed? What strange terms!

```

当你导出你的剧本时，对话会被调整为适当的格式。

### 转场

现在这种做法已经不流行了，但传统上，在剧本中会有一些特殊的转场迹象，因为在很久以前，一些转场是要花很多钱的。今天，你仍然可以在剧本中看到转场，但它往往更多的是作为一组场景（或者，经典的整个电影<ruby> 淡出 <rt>  FADE OUT. </rt></ruby>）的一种标点符号，而不是对编辑的实际指示。

要在 Fountain 中创建一个过渡，在你的文本前加上大于号（`>`）。

```
>ANGLE ON:

The book's title page. It reads "Introduction to Linux."

>FADE OUT.

```

### 更多的规则

你可以在你的剧本中使用许多其他的 Markdown 约定，比如用星号来斜体、加粗和给文字加下划线。在 Fountain 中还有更多的规则来处理边缘情况和风格上的例外，但这四条规则在大多数情况下是你所需要的。

不过，Fountain 的简单性表明，一百年前的剧本格式设计得多么好。它有一个标准的结构，使人的眼睛很容易解析，这种可预测性也能很好地转化为计算机的解析。

### 输出和渲染

一旦你写完了，你就可以使用渲染程序将你的剧本导出为适当的格式。有 [几个渲染器可用](https://fountain.io/apps)，但我最喜欢的是 Atom 编辑器。要配置 Atom 以适当的格式显示 Fountain 预览文件，并在完成后将其导出为 PDF，请进入“编辑” 菜单，选择 “偏好”，并点击左侧面板中的 “安装” 链接。在搜索栏中，输入 “fountain” 来安装由开发者 *superlou* 发布的 Fountain 插件。

![为 Atom 安装一个 Fountain 插件 (Seth Kenlon, CC BY-SA 4.0)](/data/attachment/album/202112/25/102641g968z37078657b0j.jpg "Install a Fountain plugin for Atom")

在安装时，你会被提示同意安装它的一些依赖项。一旦安装完毕，你可以进入 “软件包” 菜单，选择 “Fountain”，然后查看你的剧本预览或导出 PDF 版本。

Emacs 也有一个 Fountain 模式 ，它还可以在你输入时执行一些基本的格式化。

![Emacs 中的 Fountain 模式 (Seth Kenlon, CC BY-SA 4.0)](/data/attachment/album/202112/25/102641hv9mlxx5lv2eomek.jpg "Fountain-mode in Emacs")

无论你使用什么文本编辑器，你总是可以使用专门的应用程序来渲染你的剧本。有一个叫 `Screenplain` 的 Python 模块我觉得很好用。要安装它，请在终端键入以下内容：

```
$ python3 -m pip install 'screenplain[PDF]' --user

```

这样将一个剧本渲染成 PDF：

```
$ screenplain --format pdf myscreenplay.fountain > script.pdf

```

![渲染后的 Fountain 文件 (Seth Kenlon, CC BY-SA 4.0)](/data/attachment/album/202112/25/102642xrnsu6r7qfbv9f6r.jpg "A rendered Fountain file")

### 开源的电影剧本

Fountain 是方便的。你可以撰写你的剧本，而不需要特别复杂的应用程序。

Fountain 是省钱的。你可以撰写你的剧本而不需要昂贵的软件。

Fountain 是灵活的。你可以在你用来写作的应用程序中进行创作。

Fountain 是适宜保存的。你不会因为一个应用程序过时了，或者没有商业支持了，或者因为你买不起而不能访问你的作品。

使用 Fountain 有很多很好的理由，但最重要的一点是它能帮助你专注于创作。如果你心中酝酿了一部电影，就用 Fountain 来写。这是通向可能是一个非常令人兴奋的旅程的第一步。

---

via: <https://opensource.com/article/21/12/linux-fountain>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出