使用 logrotate 命令轮转和归档日志

Summary: 使用此 Linux 命令保持日志文件更新。

可以

使用此 Linux 命令保持日志文件更新。

>
> 使用此 Linux 命令保持日志文件更新。
>
>
>

![](/data/attachment/album/202110/22/113833i6ikk4dzdm3y3hkk.jpg "Logs stacked up and to the right in front of a green tree forest")

日志非常适合找出应用程序在做什么或对可能的问题进行故障排除。几乎我们处理的每个应用程序都会生成日志，我们希望我们自己开发的应用程序也生成日志。日志越详细，我们拥有的信息就越多。但放任不管，日志可能会增长到无法管理的大小，反过来，它们可能会成为它们自己的问题。因此，最好将它们进行裁剪，保留我们需要的那些，并将其余的归档。

### 基本功能

`logrotate` 实用程序在管理日志方面非常出色。它可以轮转日志、压缩日志、通过电子邮件发送日志、删除日志、归档日志，并在你需要时开始记录最新的。

运行 `logrotate` 非常简单——只需要运行 `logrotate -vs state-file config-file`。在上面的命令中，`v` 选项开启详细模式，`s` 指定一个状态文件，最后的 `config-file` 是配置文件，你可以指定需要做什么。

### 实战演练

让我们看看在我们的系统上静默运行的 `logrotate` 配置，它管理我们在 `/var/log` 目录中找到的大量日志。查看该目录中的当前文件。你是否看到很多 `*.[number].gz` 文件？这就是 `logrotate` 正在做的。你可以在 `/etc/logrotate.d/rsyslog` 下找到此配置文件。我的配置文件如下：

```
/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                reload rsyslog > /dev/null 2>&1 || true
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages

{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                reload rsyslog > /dev/null 2>&1 || true
        endscript
}

```

该文件首先定义了轮转 `/var/log/syslog` 文件的说明，这些说明包含在后面的花括号中。以下是它们的含义：

* `rotate 7`: 保留最近 7 次轮转的日志。然后开始删除超出的。
* `daily`: 每天轮转日志，与 `rotate 7` 一起使用，这意味着日志将保留过去 7 天。其它选项是每周、每月、每年。还有一个大小参数，如果日志文件的大小增加超过指定的限制（例如，大小 10k、大小 10M、大小 10G 等），则将轮转日志文件。如果未指定任何内容，日志将在运行 `logrotate` 时轮转。你甚至可以在 cron 中运行 `logrotate` 以便在更具体的时间间隔内使用它。
* `missingok`: 如果日志文件缺失也没关系。不要惊慌。
* `notifempty`: 日志文件为空时不轮转。
* `compress`: 开启压缩，使用 `nocompress` 关闭它。
* `delaycompress`: 如果压缩已打开，则将压缩延迟到下一次轮转。这允许至少存在一个轮转但未压缩的文件。如果你希望昨天的日志保持未压缩以便进行故障排除，那么此配置会很有用。如果某些程序在重新启动/重新加载之前可能仍然写入旧文件，这也很有帮助，例如 Apache。
* `postrotate/endscript`: 轮转后运行此部分中的脚本。有助于做清理工作。还有一个 `prerotate/endscript` 用于在轮转开始之前执行操作。

你能弄清楚下一节对上面配置中提到的所有文件做了什么吗？第二节中唯一多出的参数是 `sharedscripts`，它告诉 `logrotate` 在所有日志轮转完成之前不要运行 `postrotate/endscript` 中的部分。它可以防止脚本在每一次轮转时执行，只在最后一次轮转完成时执行。

### 看点新的东西

我使用下面的配置来处理我系统上的 `Nginx` 的访问和错误日志。

```
/var/log/nginx/access.log
/var/log/nginx/error.log  {
        size 1
        missingok
        notifempty
        create 544 www-data adm
        rotate 30
        compress
        delaycompress
        dateext
        dateformat -%Y-%m-%d-%s
        sharedscripts
        extension .log
        postrotate
                service nginx reload
        endscript
}

```

上面的脚本可以使用如下命令运行：

```
logrotate -vs state-file /tmp/logrotate

```

第一次运行该命令会给出以下输出：

```
reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508250'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding logs to compress failed
glob finding old rotated logs failed
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

```

第二次运行它：

```
reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508280'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

```

第三次运行它：

```
reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508316'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

```

状态文件的内容如下所示：

```
logrotate state -- version 2
"/var/log/nginx/error.log" 2021-08-27-9:0:0
"/var/log/nginx/access.log" 2021-08-27-9:11:56

```

* [下载 Linux logrotate 备忘单](https://opensource.com/downloads/logrotate-cheat-sheet)

本文首发于[作者个人博客](https://notes.ayushsharma.in/2017/01/fiddling-with-logrotate)，经授权改编。

---

via: <https://opensource.com/article/21/10/linux-logrotate>

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

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


硬核观察 #432 微信允许搜索引擎索引公众号内容了？不，是 bug

Summary: 更多：• 交通摄像头将 T 恤上的字母识别为汽车 • 树莓派史上首次涨价

更多：• 交通摄像头将 T 恤上的字母识别为汽车 • 树莓派史上首次涨价

![](/data/attachment/album/202110/22/164510y1hzd6ktkz17kyid.jpg)

### 微信允许搜索引擎索引公众号内容了？不，是 bug

![](/data/attachment/album/202110/22/164523qu4qjzqjkg68zd44.jpg)

一直以来，微信公众号的内容是不允许外部搜索引擎的爬取和索引的。而据 [路透社报道](https://cn.reuters.com/article/tencent-wechat-google-bing-1022-idCNKBS2HC0CQ?il=0)，微信公众号上的内容和视频已经向外部搜索引擎开放。但是，这实际上是个 bug，是腾讯意外删除了微信域名下的 [robots.txt](https://web.archive.org/web/*/http://mp.weixin.qq.com/robots.txt)。这个文件是一个指导搜索引擎可索引范围的行业默认规则。现在该文件 [已经恢复](https://mp.weixin.qq.com/robots.txt) 禁止外部搜索引擎爬取的状态。

>
> 老王点评：看，这才是信息孤岛，开放是要允许出去，也允许进来。
>
>
>

### 交通摄像头将 T 恤上的字母识别为汽车

![](/data/attachment/album/202110/22/164542v88ygd31gti35v8g.jpg)

英国《每日邮报》[报道称](https://www.dailymail.co.uk/news/article-10101699/Couple-KN19-TER-number-plate-hit-90-fine-thanks-woman-Knitter-bus-lane.html)，萨里郡的一名男子最近收到一张 90 英镑罚单：理由是他在 120 英里外的巴斯市驾车驶入了公交车道。因为没有做过这样的事，他仔细查看了打印在罚单上的照片证据。他惊讶地发现，照片上是一个正在走路的女人。因为她的 T 恤前襟有 KNITTER 的字样。被识别为车牌 KN19TER。

>
> 老王点评：真不靠谱的 AI，问题是，谁来给 AI 把关呢？
>
>
>

### 树莓派史上首次涨价

![](/data/attachment/album/202110/22/164602sqem9e3z23pxz0xm.jpg)

去年 2 月，树莓派 4 2GB 版的价格从 45 美元“永久”降至 35 美元，1GB 型号的产品则停产。但由于全球供应链的短缺，[树莓派贸易公司宣布](https://www.raspberrypi.com/news/supply-chain-shortages-and-our-first-ever-price-increase/) 2GB 版的树莓派重新回到 45 美元，而 1GB 版则以之前的 35 美元价格重新回来了。该公司表示涨价只是暂时的，他们今年只能设法达成 2020 年约 700 万台的出货量。主要短缺的是树莓派 Zero 和树莓派 4 2GB。

>
> 老王点评：全球供应链紧张可见一斑。
>
>
>


MX Linux 21 稳定版发布

>
> 基于 Debian 的 MX Linux 21 现已经推出，带来了一些不错的改进。
>
>
>

![](/data/attachment/album/202110/23/103528cbbbubhvmw7bbpm7.png)

[MX Linux](https://mxlinux.org/) 是一个基于 Debian 的 Linux/GNU 发行版，旨在追求优雅、稳定和性能。

我们之前报道过它的 [尚处于测试阶段的新 Fluxbox 版](https://news.itsfoss.com/mx-linux-21-fluxbox-beta-release/)，但现在稳定版出来了。让我们来探讨一下 MX Linux 21 “Wildflower” 的新内容。

### MX Linux 21 主要亮点

![](/data/attachment/album/202110/23/103531myocjbvv8eih2err.png)

MX Linux 21 基于 Debian 11 “Bullseye”，运行 Linux 5.10LTS 内核。在这次的新更新中，你可以发现一些新的应用和对当前应用的升级。

![](/data/attachment/album/202110/23/103532kcn7myc78np88s8h.png)

“Wildflower” 系列包括一个带有 Fluxbox 1.3.7 的新版本，它可以使旧电脑重新焕发活力。补充一下，Fluxbox 是一个窗口管理器，可以在高端计算机上无缝工作，但资源占用很少。

它的安装程序有一个新的分区选择区，支持 LVM（逻辑卷管理器）。

![MX Linux 21 有一个漂亮的图形化安装程序](/data/attachment/album/202110/23/103531myocjbvv8eih2err.png)

当启动系统时，无论你是使用<ruby> 临时启动 <rt>  live boot </rt></ruby>还是持久化使用，你都可以选择使用新的 UEFI 临时系统启动菜单，而不是旧的控制台菜单。

对于桌面环境，Xfce 4.16 和 KDE Plasma 5.20 都是最新版本。

然而，还没有 Xfce 版。

它新提供的一个方便的工具是在管理任务中默认使用管理员密码。然而，如果你不需要它，你可以把它关掉。

### 其他改进

* 安装程序和临时系统已经更新到最新版本。
* 大部分的翻译仍在进行中。另一方面，有些部分的翻译工作完成的很好的。
* 默认软件包集现在包括 [Mesa Vulkan](https://www.mesa3d.org/) 驱动。
* 对某些 Realtek 硬件的 Wi-Fi 有了更好的支持。
* 已默认启用 Debian 安全库。
* Xfce 有了一些改进，其中之一是为 Thunar 文件管理器增加了一个 samba 共享插件。
* KDE 对其文件管理器 Dolphin 进行了修复。

![](/data/attachment/album/202110/23/103531myocjbvv8eih2err.png)

### 总结

MX Linux 21 是它目前最新的稳定版本。更加优雅，性能更强，因此更加适合作为日常使用。

尽管与其他流行的选择相比，MX Linux 是一个相对较新的 Linux/GNU 发行版，但它在提供一个由 Debian、MX 存储库和 [antiX Linux](https://antixlinux.com/) 支持的完整操作系统方面有很大的潜力。

你可以参考 [官方公告](https://mxlinux.org/blog/mx-21-wildflower-released/) 了解更多细节。

* [下载 MX Linux 21](https://mxlinux.org/download-links/)

你对这个版本有什么看法？你碰巧在使用 MX Linux 吗？请在下面的评论中分享你的想法。

---

via: <https://news.itsfoss.com/mx-linux-21-release/>

作者：[Omar Maarof](https://news.itsfoss.com/author/omar/) 选题：[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/) 荣誉推出


4 个用来擦除数据的 Linux 工具

Summary: 用这些开源工具从你的硬盘驱动器中擦除数据。

用这些开源工具从你的硬盘驱动器中擦除数据。

>
> 用这些开源工具从你的硬盘驱动器中擦除数据。
>
>
>

![](/data/attachment/album/202110/23/113918sdojp6sj0odgis16.jpg "Tools in a cloud")

保持数据安全的最好方法之一是只向加密的硬盘驱动器写入数据。在一个标准的硬盘上，只要把硬盘挂载就可以查看数据，就像 U 盘一样，甚至可以用 [Scalpel](https://www.redhat.com/sysadmin/find-lost-files-scalpel) 和 [Testdisk](https://www.redhat.com/sysadmin/recover-partition-files-testdisk) 等工具显示和恢复已删除的数据。但是在一个加密的驱动器上，如果没有解密密钥（通常是你在挂载驱动器时输入的密码），数据是无法被读取的。

加密可以在你安装操作系统时建立，有些操作系统甚至可以在安装后的任何时候激活加密功能。

但是，当你卖掉一台电脑或更换一个一开始就没有被加密的驱动器时，你该怎么办呢？

与从一开始就加密你的数据相比，最好的办法是在你用完硬盘后删除数据。

### 负责任的看管者

我经常被要求帮助客户升级一台旧电脑。无一例外，他们更愿意帮助我回收它们，使它们能被别人使用。我很乐意翻新这些旧电脑，用较新的固态驱动器来改装它们，极大地提高性能。

然而，把一个旧驱动器扔进垃圾桶并不是一个好主意。它需要被擦除，然后被妥善处理。我没有把硬盘留在原来的电脑里，而是把它们取出来，放在一个硬盘盒里，然后把它们连接到我的 Linux 电脑上。有几个 Linux 工具可以很容易地完成这个任务。其中一个是 **Gnu Shred**。

### GNU Shred

```
$ sudo shred -vfz /dev/sdX

```

Shred 有许多选项：

* `-n` - 覆盖的次数。默认是三次。
* `-u` - 覆盖并删除。
* `-s` - 要粉碎的字节数。
* `-v` - 显示扩展信息。
* `-f` - 必要时强制改变权限以允许写入。
* `-z` - 最后用 0 覆盖来隐藏粉碎。

使用 `shred --help` 获取更多信息

### ShredOS

ShredOS 是一个<ruby> 即用 <rt>  Live </rt></ruby> Linux 发行版，它的唯一目的是清除驱动器的全部内容。它是在一个名为 DBAN 的类似发行版停止维护后开发的。它使用 `nwipe` 应用，它是 DBAN 的 `dwipe` 的一个分叉。你可以通过下载 32 位或 64 位镜像，并在 Linux 和 macOS 上使用 `dd` 命令将其写入驱动器来制作一个可启动的 USB 驱动器：

```
$ sudo dd if=shredos.img of=/dev/sdX bs=4M status=progress

```

另外，你可以在 Linux、macOS 和 Windows 上使用 [Etcher](https://opensource.com/article/18/7/getting-started-etcherio) 工具烧录。

### dd 命令

清除驱动器的一个常见方法是使用 Linux 的 `dd` 命令。几乎所有的 Linux 安装都安装了 `dd` 工具。确保该驱动器没有被挂载。

```
$ sudo umount /dev/sdXY -l

```

如果你想在整个目标磁盘上写零，执行以下命令。这可能需要一个整个通宵。

```
$ sudo dd if=/dev/urandom of=/dev/sdX bs=10M

```

**警告**：请确保你知道你在系统中的位置，并以正确的驱动器为目标，这样你就不会意外地删除自己的数据。

### Nvme-cli

如果你的计算机包含一个较新的 NVMe 驱动器，你可以安装 [nvme-cli](https://opensource.com/article/21/9/nvme-cli) 程序，并使用 `sanitize` 选项来清除你的驱动器。

`nvme sanitize help` 命令提供了选项列表：

* `--no-dealloc`、`-d` - 净化后不解除分配。
* `--oipbp`、`-i` - 每次覆写后反转模式。
* `--owpass=`、`-n` - 覆写次数。
* `--ause`、`-u` - 允许无限制净化退出。
* `--sanact=`、`-a` - 净化动作。
* `--ovrpat=`、`-p` - 覆写模式。

下面是我使用的命令：

```
$ sudo nvme sanitize /dev/nvme0nX

```

这里的警告与格式化过程相同：首先备份重要的数据，因为这个命令会擦除这些数据！

### 信息管理

你保存在计算机上的信息是很重要的。它属于你，也属于其他任何人。当你卖掉一台电脑或处理一个硬盘时，确保你已经用这些很棒的工具之一清除了你的数据。

---

via: <https://opensource.com/article/21/10/linux-tools-erase-data>

作者：[Don Watkins](https://opensource.com/users/don-watkins) 选题：[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/) 荣誉推出


硬核观察 #433 一位数学老师将微积分课程放在 P 站上大获成功

Summary: 更多：• 卡马克为已停产的 VR 头盔推送解锁版操作系统 • 智能助手收集了很多数据

![](/data/attachment/album/202110/23/195256e2pt31alalll0ql6.jpg)

### 一位数学老师将微积分课程放在 P 站上大获成功

![](/data/attachment/album/202110/23/195319kpipyi1i21i7yqql.jpg)

YouTube 上的教学视频市场已经饱和，一位数学教师 [决定](https://boingboing.net/2021/10/22/this-math-teacher-puts-calculus-lessons-on-pornhub.html) 将自己的微积分课程视频上传到一个大型视频网站 P 站。他的频道中放了 200 多个明显不性感的黑板课程，涉及微分方程等主题，但是获得了 160 万浏览量，付费课程年收入达到了 25 万美元以上。有用户表示数学期末考试要用到。他的微积分视频包括了三个部分，第一部分是免费的，第二和第三部分则要付费。

>
> 老王点评：这可是要叫“老师”的。
>
>
>

### 卡马克为已停产的 VR 头盔推送解锁版操作系统

![](/data/attachment/album/202110/23/195331yf05x72zccopmern.jpg)

开发了《DOOM》游戏的神级程序员约翰•卡马克加入了 Oculus 公司，并推动该公司为其已经停产的 Oculus Go 头盔显示器推出了一个 [解锁版的操作系统更新](https://arstechnica.com/gaming/2021/10/john-carmack-pushes-out-unlocked-os-for-defunct-oculus-go-headset/)，允许对超过 200 万台现有设备进行“完全 root 访问”。他在上个月 [宣布](https://twitter.com/ID_AA_Carmack/status/1441496416463904768) 了这一更新计划，说这是他“多年来一直在推动的事情”。解锁可以让这些硬件在未来继续保持完整的功能，比如“二十年后更新到最新版本”。运行解锁操作系统的硬件将不再检查内核级别的签名，开发者可以为它创建新的底层软件。

>
> 老王点评：如果每个硬件都能自由，那即便过时，也能发挥很多很好玩的作用。
>
>
>

### 智能助手收集了很多数据

![](/data/attachment/album/202110/23/195354qflh9hh3hh9kfuz3.jpg)

根据 [Reviews.org](http://reviews.org/) 的 [一项调查](https://www.reviews.org/home-security/smart-assistant-privacy-what-data-is-collected-and-how-to-protect-yourself/)，亚马逊的 Alexa 收集了 48 个可能的数据点中的 37 个；三星的 Bixby 收集了 34 个数据点，而微软的 Cortana 是 32个，苹果的 Siri 30 个，谷歌的智能助理只收集了 28 个。所有这五项服务都收集你的姓名、电话号码、设备位置和 IP 地址；你的联系人的姓名和号码；你的互动历史；以及你使用的应用程序。76% 的美国人报告说他们使用智能助手，但 61% 的人担心这些程序和设备总是在后台听他们说话。

>
> 老王点评：家里有个“人”一直悄悄等你叫它，这其实挺可怕的。
>
>
>


helloSystem：一款类似 Mac 的 FreeBSD 系统

Summary: Simon 从上世纪 80 、90 年代更为简单的操作系统中获得了灵感，特别是 早期的 MacOS，比如 System 1。

![](/data/attachment/album/202110/24/104504nee2uo4mcez2oece.jpg)

最近，helloSystem 的开发者发布了他们操作系统的最新版本。helloSystem 是一个较新的项目，希望以 FreeBSD 为基础创建一个简单易用的操作系统。让我们来看看这对你我意味着什么。

### helloSystem 简介

![helloSystem 的关于屏幕](/data/attachment/album/202110/24/104504ih0wsrk37sfrutfs.jpg)

你们中的大多数人可能以前从未听说过 [helloSystem](https://github.com/helloSystem/hello)。该项目是由 [AppImage 的创建者](https://itsfoss.com/appimage-interview/) [Simon Peter](https://github.com/probonopd) 在去年年初启动的。Simon 的目标是创建一个“友好的 [自由桌面](https://medium.com/@probonopd/bring-back-the-ease-of-80s-and-90s-personal-computing-393738c5e2a1) 操作系统，重点是简单、简约优雅和可用性。”

Simon 从上世纪 80 、90 年代更为简单的操作系统中获得了灵感，特别是 **早期的 MacOS**，比如 [System 1](https://github.com/helloSystem/hello/wiki#design-principles)。如果你只是看一下系统运行的截图，你可能会想说，“我不明白这有什么好大惊小怪的。有一堆 Linux 发行版或主题，看起来就像 MacOS。”

该项目不仅仅是看起来像 MacOS，它想回归到更简单、更容易使用的设计。据 [其网站](https://hellosystem.github.io/docs/) 上讲，“helloSystem 是一个面向创作者的桌面系统，注重简单、优雅和实用性。它的设计遵循 ‘少而精’ 的理念。它的目的是为 ‘普通人’ 提供一个系统，欢迎从 Mac 切换过来的人”。你可以通过观看 Simon 在 [FOSDEM 21](https://fosdem.org/2021/schedule/event/hello_bsd/) 上的演讲，了解更多关于他对 helloSystem 计划的想法。

就像 [Suckless 项目](https://suckless.org/sucks/) 一样，Simon 创建了一个 “[欢迎和不欢迎的技术](https://github.com/helloSystem/hello/wiki/Welcome-and-unwelcome-technologies)” 列表。被批准的技术清单包括：

* Qt
* mDNSResponder
* Python
* Go

![helloSystem 的欢迎屏幕](/data/attachment/album/202110/24/104505vz7s807k3x7saff5.jpg)

“不受欢迎的技术”清单包括 Simon 认为“太复杂或被认为不美观”的东西。这些技术包括：

* 触摸
* btrfs
* Gnome
* GTK
* 客户端窗口装饰
* Wayland
* Pipewire
* XDG 桌面规范
* 与原始字体在度量上兼容的字体，但不试图在视觉上与原始字体相似
* 最终用户应用程序的包管理器
* 配置文件、IP 地址
* D-Bus
* 通过限制用户或应用程序可以做的事情而提供的安全性
* Polkit
* 大写锁定键
* 本地文件的 URI

![在 helloSystem 上安装 Inkscape](/data/attachment/album/202110/24/104505e1xd1501nheknd1x.jpg)

### helloSystem 如何工作

我最好解释一下 helloSystem 的工作方式。就像 MacOS 一样，桌面在屏幕顶部有一个全局菜单，底部有一个 Dock。与 MacOS 的 Finder 一样，helloSystem 也有一个文件管理器（名为 Filer），它也负责窗口管理。

在左上方，你会发现一个 “<ruby> 系统 <rt>  System </rt></ruby>” 菜单，你可以用它来访问应用程序。（你也可以在左上角的搜索框中输入应用程序的名称。）helloSystem 只安装了几个开箱即用的基本应用程序。如果你点击一个未安装的应用程序，helloSystem 会下载并安装该应用程序的 AppImage。

helloSystem 基于 FreeBSD 12.2。它默认启用了 ZFS。它没有密码或用户账户系统，但这并不意味着他们无视安全。据 [其网站](https://github.com/helloSystem/hello/wiki/Welcome-and-unwelcome-technologies) 讲，“这并不是说一般的安全问题不重要。而是说它需要以一种不会限制设备的合法用户（所有者）真正 ‘拥有’ 该设备的方式来实现。”

### 最新版本中的新功能

![helloSystem 的实用程序窗口](/data/attachment/album/202110/24/104506gfwb77elz3xub7zb.jpg)

最新版本的 helloSystem 包括不少图形方面的更新和小的变化，包括：

* 从 Openbox 切换到 KWin 窗口管理器
* 合理的窗口标题居中
* 当窗口被拖到屏幕边缘时，会缩放到一定大小，类似于 “Aero Snap”。
* 简化了 “<ruby> 桌面设置 <rt>  Desktop Settings </rt></ruby>” 的用户界面；现在更改会立即应用
* 移除文件管理器中的标签以简化用户界面
* 为菜单添加新的电池小程序，以显示电池充电量
* 桌面上的垃圾箱图标不再有 “<ruby> 移动到垃圾箱 <rt>  Move to Trash </rt></ruby>” 的上下文菜单项
* 最小化窗口和取消最小化窗口时的动画
* 窗口大小调整时的动画
* 调整内核配置以优化声音
* 简化了文件管理器中的 “<ruby> 获取信息 <rt>  Get Info </rt></ruby>” 对话框

你可以在 [这里](https://github.com/helloSystem/ISO/releases/tag/r0.6.0) 看到其余的变化。你也可以从同一个链接下载最新的 .iso 文件。试一试，让我们知道你的想法。

---

via: <https://news.itsfoss.com/hellosystem-towards-first-release/>

作者：[John Paul Wohlscheid](https://news.itsfoss.com/author/john/) 选题：[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/) 荣誉推出


Hello World：程序员们节日快乐！

Summary: 祝各位程序员们节日快乐！也祝这一天过生日的同学们生日快乐！

祝各位程序员们节日快乐！也祝这一天过生日的同学们生日快乐！

![](/data/attachment/album/202110/24/111425rb1odpzd3d53dvbk.jpg)

祝各位程序员们节日快乐！也祝这一天过生日的同学们生日快乐！

祝大家身体健康！心灵自由！幸福快乐！

![](/static/image/common/1024.svg)


硬核观察 #434 在开源社区的强烈抗议下，微软放弃了有争议的 .NET 变化

Summary: 更多：• 阿里巴巴/蚂蚁的 OceanBase 因集赞而引发社区批评 • 76 岁的 EFF 共同创始人被踢出董事会

![](/data/attachment/album/202110/24/125035o4lcv68jblic4cxd.jpg)

### 在开源社区的强烈抗议下，微软放弃了有争议的 .NET 变化

![](/data/attachment/album/202110/24/125054fqk4q5669kq6z77w.jpg)

本周早些时候，微软因为商业利益原因在即将发布的 .NET 6 中 [删除](https://github.com/dotnet/sdk/pull/22217) 了“热重载”部分功能，从而 [激怒](https://github.com/dotnet/sdk/pull/22262) 了 .NET 开源社区。该功能允许开发者在应用运行时修改源代码，并立即看到结果。这是一个许多人一直期待在 VS Code 和多个平台上使用的功能。直到微软在最后一刻做出了一个有争议的 [决定](https://devblogs.microsoft.com/dotnet/update-on-net-hot-reload-progress-and-visual-studio-2022-highlights/)，将其锁定在 Visual Studio 2022，这是一个仅限于 Windows 平台的付费产品。据透露，最后一刻的改变是由微软开发者部门的负责人 Julia Liuson 做出的，是一个以商业利益为考量的举措。在引起开源社区的巨大抗议后，微软现在已经推翻了这一改变。微软官方轻描淡写地 [表示](https://devblogs.microsoft.com/dotnet/net-hot-reload-support-via-cli/)“无意中最终删除了源代码”，但是也承认“有时我们不能正确地处理这个问题，……我们能做的就是从我们的错误中学习”

>
> 老王点评：虽然有时候商业企业会支持开源，但是商业企业从本质上和开源的目标是不一致的。因此，有时候企业能“慷慨”地支持开源，有时候又因眼前的利益而将开源当成抹布。
>
>
>

### 阿里巴巴/蚂蚁的 OceanBase 因集赞而引发社区批评

![](/data/attachment/album/202110/24/125117z9lkd8ku38heeek9.jpg)

昨天，蚂蚁旗下的再次开源的 OceanBase 数据库发起了一个 [活动](https://www.zhihu.com/question/494108102/answer/2184918236)，邀请程序员们为其 GitHub 仓库点赞，并根据收集到的点赞数而给予从贴纸到手办的不同奖品。这一活动引发了开源社区的大量 [批评](https://www.zhihu.com/question/494108102/answer/2184934080)，阿里巴巴集团副总裁、阿里云计算平台事业部负责人贾扬清对此在知乎上进行了回应，承认“除了搞烂一个社区活跃度指标之外，完全没有意义”，“我们在负责设计开源评判的制度，没设计好自然执行会出问题”，并表态“这种瞎搞绝对是要认真处理的”。最后表达了希望留待日后评判的意思。也有开源界意见人士对此评论，“上有所好，下必盛焉”。阿里在自己的宣传上就将点赞数列为重要成绩。

>
> 老王点评：以任何硬性指标来判断一个开源项目，只要有 PKI 驱动，就会有或主动、或被动的迎合指标的做法。可是没有指标、模型来评判，也就无法成功指导开源项目的发展。抛开主观的看法，我认为，开源项目需要一个更复杂均衡的模型，一个弹性可适应的模型。
>
>
>

### 76 岁的 EFF 共同创始人被踢出董事会

![](/data/attachment/album/202110/24/125133czc472kl0t2o9w7g.jpg)

电子前沿基金会（EFF）在周五 [发布声明除名](https://www.eff.org/deeplinks/2021/10/john-gilmore-leaves-eff-board-becomes-board-member-emeritus) 了 [John Gilmore](https://en.wikipedia.org/wiki/John_Gilmore_(activist))，并给他留了一个名誉董事的角色。除名原因是“我们在如何进行最佳沟通和合作方面意见不一”，无法就 Gilmore 负责的方向达成一致。Gilmore 于 1990 年共同创立了 EFF，并在此后的 31 年里一直在 EFF 里担任职位。Gilmore 曾帮助发起了伯恩斯坦诉司法部案，该案的结果是法院裁定软件源代码是受美国第一修正案保护的言论，美国政府阻止其发布的法规是违宪的。这一裁决使得 1999 年 Web 浏览器、网站以及 PGP 和 Signal 等软件使用自己选择的加密方式成为合法。他也是一系列的 GNU 软件和 RFC 的作者或共同作者。

>
> 老王点评：究竟是老一代自由软件领袖跟不上新时代，还是他们所建立的事业偏离了他们的理想？
>
>
>


用 smem 命令获取内存使用统计信息

Summary: smem 命令允许你快速查看你的网页应用的内存使用情况。

smem 命令允许你快速查看你的网页应用的内存使用情况。

>
> smem 命令允许你快速查看你的网页应用的内存使用情况。
>
>
>

![](/data/attachment/album/202110/25/101843emjjkmvk88gvyqgv.jpg "Programming at a browser, orange hands")

在我的编程工作中，我经常需要了解网页应用的内存使用情况。在深入研究细节和浏览器剖析工具之前，一个粗略的估计通常就足够了。

为了了解 Linux 或 macOS 上的内存使用情况，人们通常使用 [top](https://linux.die.net/man/1/top) 或 [htop](https://linux.die.net/man/1/htop)。我很想看到一个单一的数字：一个进程占用了多少内存。但这些工具所显示的统计数据可能很难理解。对于网页浏览器来说，它甚至更加复杂，因为它们经常运行许多独立的进程。它们在 `top` 输出中显示为一个长长的列表，每一个都有自己的单独指标。

![Memory usage using htop](/data/attachment/album/202110/25/101853izcyy0bttz1ltbx2.png "Memory usage using htop")

### smem 命令

幸运的是有 [smem](https://linux.die.net/man/8/smem)，另一个用于查看内存使用统计的命令行工具。用你选择的包管理器安装它，例如：

```
sudo apt install smem

```

要获得 [Firefox](https://www.mozilla.org/en-US/firefox/) 的总内存使用量，请执行：

```
smem -c pss -P firefox -k -t | tail -n 1

```

这些开关做了什么？

* `-c` 开关指定要显示的列。我只对 `pss` 列感兴趣，它显示一个进程分配的内存。
* `-P` 开关过滤进程，只包括那些名字里有 `firefox` 的进程。
* `-k` 开关显示以 MB/GB 为单位的内存使用情况，而不是单纯的字节数。
* `-t` 开关显示总数。
* `tail -n 1` 过滤器只输出最后一行，也就是总数的地方。

输出是非常简单的：

```
$ smem -t -k -c pss -P firefox | tail -n 1
4.9G

```

开门见山！而且，经过又一天忙碌的工作，打开了 50 多个选项卡，Firefox 仍然只使用 5 GB。看看吧，Google Chrome。

#### 用一个脚本更容易

为了方便起见，我创建一个名为 `memory-use` 的小脚本，它将进程名称作为参数。我把所有的脚本都放在 `~/bin` 里，所以：

```
echo 'smem -c pss -P "$1" -k -t | tail -n 1' > ~/bin/memory-use && chmod +x ~/bin/memory-use

```

现在我可以很容易地测量任何应用的内存使用：

```
memory-use firefox
memory-use chrome
memory-use slack

```

#### 还有更多！

该工具不仅可以显示总的内存使用情况。它甚至可以生成图形输出。

比如：

```
smem --pie name -c pss

```

显示类似这样的内容：

![Pie chart output from smem](/data/attachment/album/202110/25/101854lvgfcmc3ikkeb6mh.png "Pie chart output from smem")

关于更多的细节，我建议查看 [smem 手册页](https://linux.die.net/man/8/smem)。

你可以在 <https://linoxide.com/memory-usage-reporting-smem/> 上找到另一个很棒的教程。

希望你喜欢!

本文最初发表在[作者的博客](https://letsdebug.it/post/26-measure-application-memory-use-on-linux/)上，并经许可转载。

---

via: <https://opensource.com/article/21/10/memory-stats-linux-smem>

作者：[Tomasz Waraksa](https://opensource.com/users/tomasz) 选题：[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 系统中的僵尸进程

![](/data/attachment/album/202110/25/110222ygkl8gutsl8s6o6l.jpg)

>
> 这是一个关于如何寻找 Linux 系统僵尸进程并杀死它们的小知识。你也可以从中了解到关于进程和僵尸进程的一些知识。
>
>
>

在了解僵尸进程之前，让我们来复习一下什么是 Linux 进程。

简而言之，[进程](https://tldp.org/LDP/tlk/kernel/processes.html) 是一个程序的运行实例。它可能运行在前端（比如有交互的进程），也可能运行在后端（比如无交互或自动运行的进程）。它可能是一个父进程（运行期间创建了其他进程），也可能是一个子进程（由其他进程所创建）。

在 Linux 系统中，除 PID 为 0 的第一个 `init` 进程（或 `systemd`）外，其余进程都有父进程。进程也可以拥有自己的子进程。

不相信？可以试试在终端中使用 `pstree` 命令查看进程的树型结构，你能看到系统各个进程的“家族树”。

### Linux系统里的僵尸进程是什么？

子进程死亡后，它的父进程会接收到通知去执行一些清理操作，如释放内存之类。然而，若父进程并未察觉到子进程死亡，子进程就会进入到“<ruby> 僵尸 <rt>  zombie </rt></ruby>”状态。从父进程角度看，子进程仍然存在，即使子进程实际上已经死亡。这就是“<ruby> 僵尸进程 <rt>  zombie process </rt></ruby>”（也被称为“<ruby> 已消失进程 <rt>  defunct process </rt></ruby>”）是如何产生并存在于系统中的。

这里有一个来自 [Turnoff.us](https://turnoff.us/geek/zombie-processes/) 的关于僵尸进程的非常有趣的看法：

![Image credit: Turnoff.us](/data/attachment/album/202110/25/110223e8pmlipzlfuj3fc8.jpg)

### 你真的需要关心僵尸进程吗？

重点要说的是，僵尸进程并没有像它的名称那样看起来可怕。

但如果系统的内存已经所剩不多或者有太多的僵尸进程在吃掉内存，问题会变得糟糕。同样，大部分 Linux 系统进程最大 PID 设置为 32768，如果过多僵尸进程导致其他重要任务没有 PID 可用，你的系统会发生崩溃。

这是真实可能发生的，它有一定的概率，特别当存在一个编码糟糕的程序开始大量产生僵尸进程的时候。

在这种情况下，找到并杀死僵尸进程是一个明智的做法。

### 如何找到僵尸进程

Linux 系统中的进程可能处于如下状态中的一种：

* `D` = 不可中断的休眠
* `I` = 空闲
* `R` = 运行中
* `S` = 休眠
* `T` = 被调度信号终止
* `t` = 被调试器终止
* `Z` = 僵尸状态

那如何查看进程和它的当前状态呢？一个简单的方法是在终端中使用 [top 命令](https://linuxhandbook.com/top-command/)。

![Top command show processes and their status](/data/attachment/album/202110/25/110223ofb9ha7vf65eeqbe.png)

正如你在上面截图中看到的，截图中共有 250 个任务（进程），其中 1 个处在 “<ruby> 运行中 <rt>  running </rt></ruby>” 状态，248 个进程处于 “<ruby> 休眠 <rt>  sleep </rt></ruby>” 状态，还有一个处于 “<ruby> 僵尸 <rt>  zombie </rt></ruby>” 状态。

现在问题进入下一步，如何杀死 “僵尸” 进程？

### 如何找到并杀死一个僵尸进程？僵尸进程能被杀死吗？

僵尸进程已经死了，要如何才能杀死一个已经死亡的进程呢？

在僵尸电影中，你可以射击僵尸的头部或烧掉它们，但在这里是行不通的。你可以一把火烧了系统来杀死僵尸进程，但这并不是一个可行的方案。

一些人建议发送 `SIGCHLD` 给父进程，但这个信号很可能会被忽略。还有一个方法是杀死父进程来杀死僵尸进程，这听起来很野蛮，但它却是唯一能确保杀死僵尸进程的方法。

首先，通过在终端中 [使用 ps 命令](https://linuxhandbook.com/ps-command/) 我们列举僵尸进程，得到它们的进程 ID：

```
ps ux | awk '{if($8=="Z+") print}'

```

`ps ux` 命令输出的第 8 列显示了进程状态。上述命令只会打印所有处在 Z+ 状态（表示僵尸状态）的进程。

确认了进程 ID 后，我们可以得到它的父进程 ID：

```
ps -o ppid= -p <child_id>

```

你也可以将上述两个命令结合在一起，直接得到僵尸进程的 PID 及其父进程的 PID：

```
ps -A -ostat,pid,ppid | grep -e '[zZ]'

```

现在你得到了父进程 ID，使用命令行和得到的 ID 号 [终于可以杀死进程了](https://itsfoss.com/how-to-find-the-process-id-of-a-program-and-kill-it-quick-tip/)：

```
kill -9 <parent_process_ID>

```

![Killing parent process](/data/attachment/album/202110/25/110224zd2sx1odn2n747x2.png)

再次运行 `ps` 命令或 `top` 命令，你可以验证僵尸进程是否已经被杀死。

恭喜！现在你知道怎么清理僵尸进程了。

---

via: <https://itsfoss.com/kill-zombie-process-linux/>

作者：[Marco Carmona](https://itsfoss.com/author/marco/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[zengyi1001](https://github.com/zengyi1001) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #435 苹果的 Safari 浏览器正在阻碍 Web 发展

Summary: 更多：• GNU 工具链开始提供 LoongArch 支持 • 大规模 DDoS 攻击导致韩国电信全网关闭 40 分钟

![](/data/attachment/album/202110/25/190031do3z7cc5jwcjj75z.jpg)

### 苹果的 Safari 浏览器正在阻碍 Web 发展

![](/data/attachment/album/202110/25/190041mqrz62iiiierqq9j.jpg)

Safari，或者更确切地说，为其提供动力的 WebKit 引擎，[已经远远落后于竞争对手](https://www.theregister.com/2021/10/22/safari_risks_becoming_the_new_ie/)。根据 [Web 平台测试仪表板](https://wpt.fyi/compat2021?feature=summary&stable)，基于 Chrome 的浏览器支持 94% 的测试套件，火狐浏览器支持 91%，但 Safari 只支持 71%。在桌面上，这并不重要，因为用户可以随时切换到谷歌浏览器。然而，在 iOS 设备上，这是不可能的。由于苹果应用商店的规定，每个 iPhone 用户都是一个 Safari/WebKit 用户，无论他们使用 Safari 还是 Chrome。此外，相对于其它浏览器几周的更新周期，苹果可能需要六个月才更新一次 Safari。这意味着简单的错误修复也要等很久才能真正登陆用户的设备。

>
> 老王点评：看来 Safari 有成为新 IE 的潜力，甚至 IE 都做不到在 Windows 平台独占。
>
>
>

### GNU 工具链开始提供 LoongArch 支持

![](/data/attachment/album/202110/25/190112mqm1dq6wo6yu1815.jpg)

除了龙芯在为他们的 LoongArch CPU 架构提供 Linux 内核支持外，GNU 工具链也 [开始接受](https://www.phoronix.com/scan.php?page=news_item&px=GNU-Binutils-LoongArch) 对 LoongArch 的支持。GCC 对 LoongArch 的支持还没有被合并，但 GNU Binutils 中已经有了初始的 LoongArch 补丁集合。不久前，GNU Binutils 的 Git 仓库中出现了 LoongArch 对操作码、LD 链接器、GNU 汇编器、Binutils 和 BFD 的支持。

>
> 老王点评：日拱一卒，很高兴看到龙芯团队在默默推动。
>
>
>

### 大规模 DDoS 攻击导致韩国电信全网关闭 40 分钟

![](/data/attachment/album/202110/25/190126rdqtoqdh2zqpqkzp.jpg)

[周一上午 11 点左右](https://www.zdnet.com/article/large-ddos-attack-shuts-down-south-korean-telcos-nationwide-network/)，韩国电信的用户无法访问互联网，持续时间大约 40 分钟。在此期间，用户无法使用信用卡、交易股票或访问在线应用程序。一些大型商业网站在网络中断期间也被关闭。该公司表示，其网络在全国范围内的临时关闭是由 DDoS 攻击造成的。韩国政府部门正与之配合调查，但没有证实是 DDoS 攻击，而与此同时，韩国的另外两个主要电信运营商 SK 电信和 LG Uplus 没有受到影响。

>
> 老王点评：一次干倒了国家级电信，现在的 DDoS 攻击真是愈演愈烈了。
>
>
>


使用 Rust 进行嵌入式开发

Summary: Rust 的高性能、高可靠性和高生产力使它适合于嵌入式系统。

Rust 的高性能、高可靠性和高生产力使它适合于嵌入式系统。

>
> Rust 的高性能、高可靠性和高生产力使它适合于嵌入式系统。
>
>
>

![](/data/attachment/album/202110/26/103848djcdhjk0d2z1hc52.jpg "Ferris the crab under the sea, unofficial logo for Rust programming language")

在过去的几年里，Rust 在程序员中获得了热情的追捧。技术潮流来来去去，所以很难将仅仅因为某项新技术而产生的兴奋与对某项技术的优点的兴奋区分开来，但我认为 Rust 是一种真正设计良好的语言。它的目标是帮助开发者建立可靠和高效的软件，而且它从一开始就是为这个目的设计的。你可能听过一些 Rust 的关键特性，在这篇文章中，我会证明这些特性正是 Rust 也恰好适合嵌入式系统的原因。比如：

* 高性能：它速度快，内存利用率高
* 可靠性：在编译过程中可以消除内存错误
* 生产力：很棒的文档，友好的编译器，有用的错误信息，以及一流的工具化。它有一个集成的包管理器和构建工具，智能的多编辑器支持自动补完和类型检查、自动格式化等等。

### 为什么使用 Rust 进行嵌入式开发？

Rust 的设计是为了保证安全和高性能。嵌入式软件会出现的问题主要是内存的问题。从某种程度上说，Rust 是一种面向编译器的语言，所以你可以确保在编译时安全使用内存。以下是使用 Rust 在嵌入式设备上开发的一些好处：

* 强大的静态分析
* 灵活的内存
* 无畏的并发性
* 互操作性
* 可移植性
* 社区驱动

在这篇文章中，我使用开源的 [RT-Thread 操作系统](https://github.com/RT-Thread/rt-thread) 来演示如何使用 Rust 进行嵌入式开发。

### 如何在 C 语言中调用 Rust

在 C 代码中调用 Rust 代码时，你必须将 Rust 源代码打包成静态库文件。当 C 代码编译时，将其链接进去。

#### 用 Rust 创建一个静态库

在这个过程中，有两个步骤：

1、使用 `cargo init --lib rust_to_c` 在 Clion 中建立一个 `lib` 库。在 `lib.rs` 中加入以下代码。下面的函数计算两个类型为 `i32` 的值的总和并返回结果：

```
#![no_std]
use core::panic::PanicInfo;

#[no_mangle]
pub extern "C" fn sum(a: i32, b: i32) -> i32 {
    a + b
}

#[panic_handler]
fn panic(_info:&PanicInfo) -> !{
    loop{}
}

```

2、在你的 `Cargo.toml` 文件中添加以下代码，以告诉 Rustc 要生成什么类型的库：

```
[lib]
name = "sum"
crate-type = ["staticlib"]
path = "src/lib.rs"

```

#### 交叉编译

你可以针对你的目标平台进行交叉编译。假设你的嵌入式系统是基于 Arm 的，步骤很简单：

```
$ rustup target add armv7a-none-eabi

```

生成静态库文件：

```
$ cargo build --target=armv7a-none-eabi --release --verbose
Fresh rust_to_c v0.1.0
Finished release [optimized] target(s) in 0.01s

```

#### 生成头文件

你也需要头文件：

1、安装 [cbindgen](https://github.com/eqrion/cbindgen)。`cbindgen` 工具会从 Rust 库中生成一个 C 或 C++11 的头文件：

```
$ cargo install --force cbindgen

```

2、在你的项目文件夹下创建一个新的 `cbindgen.toml` 文件。

3、生成一个头文件：

```
$ cbindgen --config cbindgen.toml --crate rust_to_c --output sum.h

```

#### 调用 Rust 库文件

现在你可以对你的 Rust 库进行调用了。

1、把生成的 `sum.h` 和 `sum.a` 文件放到 `rt-thread/bsp/qemu-vexpress-a9/applications` 目录下。

2、修改 `SConscript` 文件并添加一个静态库：

```
   from building import *

   cwd     = GetCurrentDir()
   src     = Glob('*.c') + Glob('*.cpp')
   CPPPATH = [cwd]

   LIBS = ["libsum.a"]
   LIBPATH = [GetCurrentDir()]

   group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH, LIBS = LIBS, LIBPATH = LIBPATH)

   Return('group')

```

3、在主函数中调用 `sum` 函数，得到返回值，并 `printf` 该值：

```
   #include <stdint.h>
   #include <stdio.h>
   #include <stdlib.h>
   #include <rtthread.h>
   #include "sum.h"

   int main(void)
   {
       int32_t tmp;

       tmp = sum(1, 2);
       printf("call rust sum(1, 2) = %d\n", tmp);

       return 0;
   }

```

4、在 RT-Thread [Env](https://www.rt-thread.io/download.html?download=Env) 环境中，使用 `scons` 来编译项目并运行：

```
$ scons -j6
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
[...]
scons: done building targets.

$ qemu.sh
 \ | /
- RT -     Thread Operating System
 / | \     4.0.4 build Jul 28 2021
2006 - 2021 Copyright by rt-thread team
lwIP-2.1.2 initialized!
[...]
call rust sum(1, 2) = 3

```

### 加、减、乘、除

你可以在 Rust 中实现一些复杂的数学运算。在 `lib.rs` 文件中，使用 Rust 语言来实现加、减、乘、除：

```
#![no_std]
use core::panic::PanicInfo;

#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
    a + b
}

#[no_mangle]
pub extern "C" fn subtract(a: i32, b: i32) -> i32 {
    a - b
}

#[no_mangle]
pub extern "C" fn multiply(a: i32, b: i32) -> i32 {
    a * b
}

#[no_mangle]
pub extern "C" fn divide(a: i32, b: i32) -> i32 {
    a / b
}

#[panic_handler]
fn panic(_info:&PanicInfo) -> !{
    loop{}
}

```

构建你的库文件和头文件，并把它们放在应用程序目录中。使用 `scons` 来编译。如果在链接过程中出现错误，请在官方 [Github 页面](https://github.com/rust-lang/compiler-builtins/issues/353) 中找到解决方案。

修改 `rtconfig.py` 文件，并添加链接参数 `--allow-multiple-definition`：

```
       DEVICE = ' -march=armv7-a -marm -msoft-float'
       CFLAGS = DEVICE + ' -Wall'
       AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -D__ASSEMBLY__ -I.'
       LINK_SCRIPT = 'link.lds'
       LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,system_vectors,--allow-multiple-definition'+\
                         ' -T %s' % LINK_SCRIPT

       CPATH = ''
       LPATH = ''

```

编译并运行 QEMU 来看看你的工作。

### 在 Rust 中调用 C 语言

Rust 可以在 C 代码中调用，但是如何在你的 Rust 代码中调用 C 呢？下面是一个在 Rust 代码中调用 `rt_kprintf` C 函数的例子。

首先，修改 `lib.rs` 文件：

```
    // The imported rt-thread functions list
    extern "C" {
        pub fn rt_kprintf(format: *const u8, ...);
    }

    #[no_mangle]
    pub extern "C" fn add(a: i32, b: i32) -> i32 {
        unsafe {
            rt_kprintf(b"this is from rust\n" as *const u8);
        }
        a + b
    }

```

接下来，生成库文件：

```
$ cargo build --target=armv7a-none-eabi --release --verbose
Compiling rust_to_c v0.1.0
Running `rustc --crate-name sum --edition=2018 src/lib.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type staticlib --emit=dep-info,link -C opt-level=3 -C embed-bitcode=no -C metadata=a
Finished release [optimized] target(s) in 0.11s

```

而现在，要运行代码，将 Rust 生成的库文件复制到应用程序目录中，然后重新构建：

```
$ scons -j6 scons: Reading SConscript files ... scons: done reading SConscript files. [...]
scons: Building targets ... scons: done building targets.

```

再次运行 QEMU，可以在你的嵌入式镜像中看到结果。

### 你可以拥有这一切

在你的嵌入式开发中使用 Rust，你可以获得 Rust 的所有功能，而不需要牺牲灵活性或稳定性。今天就在你的嵌入式系统上试试 Rust 吧。关于嵌入式 Rust 的过程（以及 RT-Thread 本身）的更多信息，请查看 RT-Thread 项目的 [YouTube 频道](https://www.youtube.com/channel/UCdDHtIfSYPq4002r27ffqP)。请记住，嵌入式也可以是开放的。

---

via: <https://opensource.com/article/21/10/rust-embedded-development>

作者：[Alan Smithee](https://opensource.com/users/alansmithee) 选题：[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/) 荣誉推出


GitUI: 用 Rust 编写的 Git 的快速命令行客户端

Summary: 如果你常用终端，又想要 Git 的舒适性，我为你准备了一个好工具。

如果你常用终端，又想要 Git 的舒适性，我为你准备了一个好工具。

![](/data/attachment/album/202110/26/111605achvngqr6ix6vv0p.jpg)

[基本的 Git 命令](https://itsfoss.com/basic-git-commands-cheat-sheet/) 对于通常的克隆、添加、提交推送已经足够好了。

但如果你在一个有多个贡献者的大型项目上工作，你可能需要将事情可视化。GUI 工具可以让你更好地了解 `diff`、`stash` 和 `blame` 的情况。

但是，如果你常用终端，又想要 Git 的舒适性，我为你准备了一个好工具。

它叫 GitUI，它提供了类似于 Git GUI 的用户体验和舒适度，但就在你的终端中。它是可移植的、快速的、自由而开源的。

### GitUI：一个基于终端的 Git 工具

[GitUI](https://github.com/Extrawurst/gitui) 并不是第一个用于 Linux 终端的 Git 客户端。那么，是什么让 GitUI 与其他类似项目如 [lazygit](https://github.com/jesseduffield/lazygit) 或 [tig](https://jonas.github.io/tig/) 不同？

GitUI 的开发者在项目的 README 文件中分享了一些基准数据。

| 名称 | 时间 | 内存（GB） | 二进制（MB） | 冻结 | 崩溃 |
| --- | --- | --- | --- | --- | --- |
| gitui | 24 s | 0.17 | 1.4 | 否 | 否 |
| lazygit | 57 s | 2.6 | 16 | 是 | 有时 |
| tig | 4 m 20 s | 1.3 | 0.6 | 有时 | 否 |

*GitUI、LazyGit 和 Tig 之间的比较。*

这种优化大部分来自于 Rust 语言的使用。

**注意：该程序处于早期开发阶段，还没有为生产做好准备。**

### 在 Linux 上安装 GitUI

不用说，你应该已经 [在你的系统上安装了 Git](https://itsfoss.com/install-git-ubuntu/)。

要使用 GitUI，首先需要 [为你的 Linux 发行版安装 Rust 支持](https://itsfoss.com/install-rust-cargo-ubuntu-linux/)。

在终端中，使用以下命令：

```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

```

![Installing Rust on Linux](/data/attachment/album/202110/26/111616fygydi5uwwiyyrnr.png)

当你被要求选择时，请选择选项 1。当脚本完成安装后，用这个命令正确设置配置：

```
source $HOME/.cargo/env

```

现在你已经安装了 Rust 和它的包管理器 Cargo，使用 Cargo 命令来安装 GitUI：

```
cargo install gitui

```

然后你就可以使用 GitUI了，只需在终端输入 `gitui` 就可以运行了。我做了一些示例文件来测试 Git 和 GitUI。

![Starting gitui on terminal](/data/attachment/album/202110/26/111617b8l00of2zay9egoy.png)

值得一提的是，这个界面有一个快速而直观的纯键盘控制。一切都很简单，只需输入正确的字母即可将文件暂存、提交、分支或推送到 git 仓库中。

真正让我兴奋的是，你不仅可以做之前的四个动作，还可以**编辑**每个文件，**拉取**它，**追溯** 它，在其中**导航**等等，这一切都无需退出界面。 很棒，不是吗？

![More functions inside the interface](/data/attachment/album/202110/26/111617ioe13ez64fsv764s.png)

祝贺你! 现在你知道了如何安装 GitUI 以及它在你的终端中的样子。

如果你喜欢这个项目，请在 [GitHub](https://github.com/Extrawurst/gitui) 上点赞它的仓库。如果你使用其他工具来管理 Git，请在评论区提出你的建议。

---

via: <https://itsfoss.com/gitui/>

作者：[Marco Carmona](https://itsfoss.com/author/marco/) 选题：[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/) 荣誉推出


硬核观察 #436 Linux 用户提交了更多、更好的错误报告

Summary: 更多：• 英特尔的 CPU 扳回一局 • 韩国电信澄清是路由错误导致中断

更多：• 英特尔的 CPU 扳回一局 • 韩国电信澄清是路由错误导致中断

![](/data/attachment/album/202110/26/134025md1ppf8lbj8b1ssb.jpg)

### Linux 用户提交了更多、更好的错误报告

![](/data/attachment/album/202110/26/134041o41xhskek1ktjmtg.jpg)

一个独立开发者发现了一个 [有趣的情况](https://www.pcgamer.com/indie-dev-finds-that-linux-users-generate-more-better-bug-reports/)。虽然他的游戏只有 5.8% 的买家在 Linux 上玩，但他们产生了超过 38% 的错误报告。这也不是因为 Linux 平台的错误更多。在 Linux 用户提交的大约 400 个错误报告中，只有 3 个是针对 Linux 平台的。而且，这些错误报告本身的质量也相当高，包括软件和操作系统版本、日志和复制的步骤。

>
> 老王点评：这可能就是 Linux 用户的特征吧，他们已经熟悉了报错和规范的报错方式了。我不知道对此是该哭还是该笑。
>
>
>

### 英特尔的 CPU 扳回一局

![](/data/attachment/album/202110/26/134053ro5u4ao4uxqav4nc.jpg)

随着英特尔第 12 代 Alder Lake 移动处理器的即将到来，苹果的 M1 SoC 在 Geekbench 速度基准上的统治可能很快就会结束。[基准测试结果显示](https://wccftech.com/intel-alder-lake-mobility-cpu-benchmarks-leaked-faster-than-the-apple-m1-max-smokes-amd-5980hx-11980hk/?utm_source=dlvr.it&utm_medium=twitter)，英特尔的这款预发布的移动 CPU 以微弱优势超过了苹果的旗舰产品 10 核 M1 Max，而后者还集成了 32 核 GPU 和 64GB 的统一内存。但英特尔的 Alder Lake 移动处理器以更大的优势击败了 AMD 的顶级移动 CPU Ryzen 5980HX。

>
> 老王点评：差距很小，但这个结果对英特尔来说很重要。
>
>
>

### 韩国电信澄清是路由错误导致中断

![](/data/attachment/album/202110/26/134116zp98y908piou108z.jpg)

昨天我们 [报道过](/article-13920-1.html)，韩国电信全网中断了 40 分钟，最初怀疑是大规模 DDoS 攻击导致的。但在仔细检查后发现，该公司发现 [原因是路由错误](https://www.zdnet.com/article/kt-clarifies-routing-error-caused-outage-instead-of-ddos-attack/)。韩国电信尚未公布是什么导致了路由错误，以及这如何导致了中断，预计将在晚些时候公布。

>
> 老王点评：我怀疑是人工操作错误导致的，这种骨干网上的操作都这样弱不禁风么？
>
>
>


在 OpenTTD 中玩模型火车

Summary: 想玩实体模型火车，却没有足够大的空间？试试 OpenTTD 中的虚拟火车吧。

想玩实体模型火车，却没有足够大的空间？试试 OpenTTD 中的虚拟火车吧。

>
> 想玩实体模型火车，却没有足够大的空间？试试 OpenTTD 中的虚拟火车吧。
>
>
>

![](/data/attachment/album/202110/27/100255emc3x33icci0cacc.jpg "Old train")

我父亲一直很喜欢火车模型，我记得我小时候，曾看着他在圣诞树周围建了一整条轨道。当 [乐高](https://opensource.com/article/20/6/open-source-virtual-lego) 火车套装发布时，因其便利性和固有可扩展性，我们转而投向了乐高火车的怀抱。多年来，我们热衷于建造和改装乐高火车及单轨轨道。我经常想象，未来我会有一个车库或地下室，专门用于微型景观和电动汽笛火车。强调一下，我沉迷于另一个爱好的可能性非常低，所以当发现 *虚拟* 模型铁路可以为我提供相同的满足感时，我很开心。我的虚拟爱好引擎是 [OpenTTD](http://openttd.org)，这是一款基于名为 **Transport Tycoon Deluxe** 的 90 年代老游戏的开源模拟游戏。

### 安装 OpenTTD

你可以在 [openttd.org/downloads](https://www.openttd.org/downloads/openttd-releases/latest.html) 下载适用于 Linux、macOS 和 Windows 的 OpenTTD。

如果你正使用 Debian Linux 或其衍生产品，甚至是[在使用 Chromebook](https://opensource.com/article/21/2/chromebook-linux)，你可以下载 `.deb` 包。使用 `apt` 命令安装它：

```
$ sudo apt install ./openttd*deb

```

如果你在使用其他 Linux 发行版，请下载通用安装程序，并使用 [tar 命令](https://opensource.com/article/17/7/how-unzip-targz-file)解压缩包：

```
$ tar xvf openttd-x.yy.z-linux*.tar.xz

```

OpenTTD 已经在 Linux、macOS 和 Windows 的 [Steam](https://store.steampowered.com/app/1536610/OpenTTD/) 中上架（Steam 是一个非开源的，但是很常见的跨平台游戏客户端）。

### 启动 OpenTTD

如果你安装了 OpenTTD，可以从应用程序菜单启动它。

如果你是下载了通用包，可以切换到游戏目录，使用本地的 `openttd` 命令启动游戏：

```
$ cd openttd*
$ ./openttd &

```

首次启动 OpenTTD 时，游戏会提示必须下载图像集，在 Steam 版中会自动安装，但在独立应用程序中需要单击一下鼠标。无论如何，因为 OpenTTD 是开源的，经过了很好的改进，所以在默认图像之外，你最终还会下载的还有很多其他图像。

下载图像集后，你会看到一个古色古香的小型界面。我觉得 640x480 的界面有点小，虽然旧图像界面确实更有年代感（那时计算能力还比较弱），但一些适配现代屏幕的轻度升级还是很好用的。因此，你的第一步操作就是点击“<ruby> 检查在线内容 <rt>  Check online content </rt></ruby>”按钮。

### 加载模组

“<ruby> 内容下载 <rt>  Content downloading </rt></ruby>”界面是一个查看已通过审查的 OpenTTD <ruby> 模组 <rt>  mod </rt></ruby>的窗口，可以提供个性化的改进图像界面、全新音乐、火车模型和地图名称。我使用了新西兰全套配置，所以对我来说，生成的所有城市都很熟悉，尽管 2020 年我转而开始使用“辐射 3”套装了。模组 *非常多*，可以使用右上角的搜索栏来缩小选择范围。

下面是一些个人认为必备的模组：

* **abase** - 高分辨率图像。将近 300 MB，这可能是你玩此游戏需要的最大一次下载（游戏本身只有 50 MB）。
* **OpenSFX** - 一个声音合集。让你能听到城市中的交通声、船运的喇叭声以及很棒的火车汽笛声。
* **Town names** - 城镇名称。默认的城市名称很有趣，但我认为记一些本地化的名称更容易。
* **Trains** - 火车模组。OpenTTD 有一组运行良好的默认火车模型，但如果你已经是一名火车观察员，那你可能会喜欢下载一些额外的火车模型。我使用的是 NZR 火车合集，但还有很多火车也是可用的，包括来自英国、美国、奥地利、比利时、捷克共和国的车，以及按字母表顺序排列的许多其他火车。
* **Beginner tutorial** - 新手教程。是一个帮你学习游戏及界面的引导场景。

### 游戏引擎默认值

下载新素材后，你需要将它们设置为默认值。有两个设置的地方：游戏引擎默认值、游戏内脚本与素材。

![OpenTTD main menu](/data/attachment/album/202110/27/100341hk4b55r5kfdzfzbj.jpg "OpenTTD menu")

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

单击“<ruby> 游戏选项 <rt>  Game Options </rt></ruby>”按钮。 在游戏选项屏幕中，调整以下设置：

* 将<ruby> 屏幕分辨率 <rt>  screen resolution </rt></ruby>设置为你喜欢的界面尺寸。
* 将<ruby> 基础图像集 <rt>  base graphics set </rt></ruby>设置为 **abase**。
* 将<ruby> 基础声音设置 <rt>  base sounds set </rt></ruby>设置为 **OpenSFX**。

关闭游戏选项屏幕。你的改动会自动保存。

### 游戏选项

在主菜单界面，单击“<ruby> NewGRF 设置 <rt>  NewGRF Settings </rt></ruby>”按钮。

![NewGRF settings window](/data/attachment/album/202110/27/100342pk0gntaosokdtczd.jpg "The NewGRF settings menu")

*NewGRF 设置菜单（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

未活动的模组显示在 NewGRF 设置窗口的下半部分。要激活一个未活动的模组，请选择它并单击左下角的“<ruby> 添加 <rt>  Add </rt></ruby>”按钮。选择要激活的模组后，再单击“<ruby> 应用 <rt>  Apply </rt></ruby>”按钮。

### 教程

如果你下载了“<ruby> 初学者教程 <rt>  Beginner tutorial </rt></ruby>”场景，可以通过它来学习 OpenTTD。开始教程请单击主菜单屏幕顶部附近的“<ruby> 播放场景 <rt>  Play scenario </rt></ruby>” 按钮，然后选择该教程并开始。

初学者教程有着游戏界面的完整浏览流程，全部完成需要花费一些时间。

### 快速开始

现在我们快速介绍一下，此处你要了解以下内容：车辆出自仓库，一切活动都需要时间表。记住这两条规则，你可以立即开始建造火车（以及道路、海港和机场）。

#### 建造车站

要在两个城市之间建立一条简单的铁路线，请单击顶部图标栏中的铁路轨道图标。

![New icon bar - railway option](/data/attachment/album/202110/27/100342ebb8el38xngbba4d.jpg "The new icon bar - railway option")

*新建图标栏——铁路选项（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

铁路以车站开始和结束，所以我通常在预定线路的两端各放置一个车站。单击火车站图标（将鼠标悬停在其上方可查看其标签）。一个火车站要服务于一个地区，其作用范围必须与该地区尽量多地重叠。要查看车站的覆盖范围，请通过单击车站对话框底部的“<ruby> 开启 <rt>  On </rt></ruby>”按钮以启用<ruby> 覆盖区域高亮 <rt>  Coverage area highlight </rt></ruby>功能。

![Station coverage window](/data/attachment/album/202110/27/100342juxo12xukct1ho1k.jpg "Station coverage information window")

*车站覆盖信息窗口（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

黑色网格表示覆盖范围，而白色网格显示车站的物理占据范围。当你将鼠标悬停在一个区域上时，车站的覆盖范围所需耗材会在弹出窗口中列出。从简单的开始，创建一个单轨 4 辆车的站台。在地图上的两个城市之间重复执行此操作两次。

![create station menu](/data/attachment/album/202110/27/100343g08qpqozjztjj3sz.jpg "The create station menu")

*创建车站菜单（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

### 铺设铁轨

接下来，用铁轨连接车站。 OpenTTD 的等距视图需要一些时间来适应，但是在单击铁路图标并在地图上单击拖动之后，你就开始大概有所了解了。X-rail 图标提供了“自动轨道”模式，该模式会根据用户单击的方块位置对齐轨道。

铺设导轨时要细心。OpenTTD 是不可撤回的，所以一旦点击一个正方形，轨道就会被构造出来。你必须使用炸药图标来移除导轨。和现实生活中一样，没有撤消按钮。

### 火车车库

火车来自<ruby> 车库 <rt>  depot </rt></ruby>。因此，要在铁路上添加火车，必须在沿线的某处添加一个车库。单击车库图标并在现有铁路附近放置。将车库连接到现有轨道，以确保你的火车可以从车库到达适当线路的（在此简单示例中，线路是唯一的）。

![create depot menu](/data/attachment/album/202110/27/100343tko4e84ie94oj4ot.jpg "Create depot menu")

*建造车库菜单（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

### 模型火车

终于，你可以将虚拟模型火车添加到虚拟铁路中了。要创建火车，请单击车库。

单击站点窗口底部的“<ruby> 新建车辆 <rt>  New Vehicle </rt></ruby>”按钮，会列出可用的火车引擎和汽车。列表会部分取决于你从可下载内容中添加的模型。一般来说，发动机分为三种：蒸汽发动机、柴油发动机和电动发动机。游戏内时间从 1950 年开始，所以早期你只有蒸汽可选。随着时间推进，你会获得可用于升级的创新型新模型。

![create train menu](/data/attachment/album/202110/27/100343z5iit6yeye5r75v6.jpg "The create train menu")

*创建火车菜单（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

现在创建一个简单的火车，其中包括一节引擎、一节客车和一节邮车。如果想添加其他类型的车厢，请单击站点以确认它们的可提供车型（由其覆盖区域决定）

### 创建火车时刻表

现在有了铁路和火车，还需要创建一个火车时刻表。时间表与车辆关联，因此无论何时添加新车，都要记得添加时间表，以让新车投入使用。

要为火车添加时刻表，请单击其车库列表中列车左侧的编号。这样可以打开火车视口，窗口右侧会有按钮。单击箭头图标即可查看该列车的时刻表。

![create schedule menu](/data/attachment/album/202110/27/100344dnd729bub6cxb652.png "The create schedule menu")

*创建时刻表菜单（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

要创建时间表，请单击时间表窗口底部的“<ruby> 前往 <rt>  Go To </rt></ruby>”按钮，然后单击要设置成第一个目的地的车站。然后点击下一站。你可以在时间表中选择一个停靠点，浏览“<ruby> 满载 <rt>  Full load </rt></ruby>”和“<ruby> 卸载 <rt>  Unload </rt></ruby>”下拉菜单中的选项，以此调整装卸要求，并且可以在“<ruby> 无停靠 <rt>  Non-stop </rt></ruby>”下拉菜单中调整路线（如果开发了新路线）。选项有很多，随着城市发展和地图完善，你可能需要随时调整策略。

但是现在，单击火车视口底部的红色“<ruby> 已停止 <rt>  Stopped </rt></ruby>”按钮，让火车投入使用吧！

![train moving from station to station](/data/attachment/album/202110/27/100344p5xt8ulqqdtrdxdz.jpg "Train in service")

*在役中的火车（Seth Kenlon, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

### 试试 OpenTTD 吧

OpenTTD 是一个模拟器，同时也是一个游戏，所以确实会有一些限制，比如你可能想要优化的预算和参数。例如，你可以单击一个城市、农场或工厂，了解其可接受的进出口类型。你可以通过单击 OpenTTD 窗口右下角的预算按钮来借钱。它不仅仅是一个虚拟的火车集合游戏。你还可以建造道路、机场、海港等。记得所有车辆都需要车库和时间表，你就在实现虚拟企业的路上成功了一半。

OpenTTD 有着活跃而热情的社区，以及[详细的维基](https://wiki.openttd.org/en/)，并且有大量的资源和教程在线可用。下载游戏并试试吧！

---

via: <https://opensource.com/article/21/9/model-trains-openttd>

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

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


Mark Text：我最喜欢的 Markdown 编辑器

>
> Mark Text 拥有的工具使得撰写 Markdown 变得容易，同时又提供了一个不会打扰我的简单的界面。
>
>
>

![](/data/attachment/album/202110/27/141244m9os557ss7au6oas.jpg "Typewriter keys in multicolor")

几年前，当我开始使用 Jupyter 笔记本时，我接触到了 Markdown 格式。许多作者都知道 Markdown，但这是我不熟悉的一种技能。

Markdown 是一种标准的文本写作方式，在这种方式中，你可以用精简的符号来标记你想要的文本样式。例如，你不用点击一个按钮来使一个词变粗体，而是用两个星号（`**word**`）包围这个词。这有两种效果：

* 当作为纯文本查看时，视觉上显示出强调的文本
* 如果有一个好的文本转换器或渲染器（如 Pandoc 或一个好的 Markdown 文本编辑器），就会显示为加粗。

Markdown 最大的优点之一是它的大部分符号都是直观的，并且来自我们大多数人已有的习惯。它使得用星号强调单词，用字符标记标题以区分它们等等变得很自然。

每个人都对它评价很高，但我不确定为什么我需要学习和使用 Markdown。然而，我是一个好奇的人，我开始探索 Markdown，以及它如何在我的写作中发挥作用。

### 学习 Markdown

我很喜欢在学习时使用 [Markdown 速查表](https://opensource.com/downloads/cheat-sheet-markdown)。我发现 Markdown 是一个很好的工具，可以写任何内容，而且我很喜欢甚至不需要一个专门的 Markdown 编辑器这一点。任何文本编辑器都可以写 Markdown，因为 Markdown 使用标准文本来表示样式。我开始使用简单的编辑器，如 Vim 或 gedit（或任何其他编辑器），并查阅这个速查表以记住简单的格式化规则。

今年我一直在写日记，作为组织我的想法和学习更多关于 Markdown 的方法。我最近尝试了 [Ghostwriter](https://wereturtle.github.io/ghostwriter/) 文本编辑器，这是一个优秀的编辑器，有一些额外的 Markdown 特定功能。Markdown 现在已经变得非常流行了，许多编辑器都加入了语法高亮、提示和其他使 Markdown 编写变得容易的功能，或者将其作为重点。它们不是必须的功能，但当你拥有它们时，还是很好的。

### 尝试 Mark Text

在阅读一个博客时，我发现了 [Mark Text](https://marktext.app/)。Mark Text 使写 Markdown 变得很容易，同时提供了一个简单的界面，而且又不影响我。Mark Text 有六个主题，三个浅色和三个深色主题。深色主题对我来说更容易使用。它的 [用户文档](https://github.com/marktext/marktext/blob/master/docs/README.md) 非常好，而且也提供了 Markdown 的 [语法帮助](https://github.com/marktext/marktext/blob/master/docs/MARKDOWN_SYNTAX.md)。

### Markdown 的实时预览

Mark Text 以简洁的界面提供了实时预览功能。它支持 [Commonmark](https://commonmark.org/) 规范、Github 风格的 Markdown 规范，以及 Pandoc Markdown。据其网站说，Mark Text 还支持 KaTex、front matter 和 emoji 等 Markdown 扩展。它还可以输出 HTML 和 PDF 文件。

Mark Text 有各种编辑模式，如打字模式、源代码模式和专注模式。添加图片是一件很容易的事，因为你可以简单地从剪贴板上复制和粘贴它们。

在 Mark Text 窗口的左上方有一个弹出窗口，显示迄今为止输入的字符和段落数量。作为一个作家，这真的很有帮助。

从 Mark Text 窗口左上方的菜单或使用 `Ctrl+S` 保存文件很容易。事实上，Mark Text 的菜单对任何习惯于基本文本编辑器或文字处理器的人来说都是友好和熟悉的。

![Mark Text 文件菜单](/data/attachment/album/202110/27/141318ya6p3ppzkq1w83mb.png "Mark Text file menu")

我喜欢 Mark Text 用简单的快捷键支持各种格式，包括表格块、图表、行内格式、数学公式块和其他代码块。

你可以从以下链接中为你的操作系统下载 Mark Text：

* [Linux](https://github.com/marktext/marktext/releases/latest/download/marktext-x86_64.AppImage)
* [macOS](https://github.com/marktext/marktext/releases/latest/download/marktext.dmg)
* [Windows](https://github.com/marktext/marktext/releases/latest/download/marktext-setup.exe)

Mark Text 以 [MIT](https://github.com/marktext/marktext/blob/develop/LICENSE) 许可证开源。你可以随时 [下载](https://github.com/marktext/marktext/releases) 最新的版本。

另外，你可以用 `brew install --cask mark-text` 在 macOS 上安装 Mark Text，在 Windows 上用 [Chocolatey](https://chocolatey.org/) 输入 `choco install marktext` 来安装它。

Mark Text 一直在寻找赞助商和开发者。该项目有一个给贡献者的 [指南](https://github.com/marktext/marktext/blob/develop/CONTRIBUTING.md)。此外，你可以在 Patreon 和 Open Collective 上支持该项目。

---

via: <https://opensource.com/article/21/10/mark-text-markdown-editor>

作者：[Don Watkins](https://opensource.com/users/don-watkins) 选题：[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/) 荣誉推出


硬核观察 #437 《沙丘》的剧本是在 MS-DOS 中完成的

Summary: 更多：• 日本政务部门坚持使用软盘 • 微软在 Windows 10 中强制安装 PC 健康检查应用程序

![](/data/attachment/album/202110/27/152810fa958oaa4oig9iaz.jpg)

### 《沙丘》的剧本是在 MS-DOS 中完成的

![](/data/attachment/album/202110/27/152826r7ssus7lklusfu97.jpg)

《沙丘》的剧作家 Eric Roth 在过去三十年一直用 MS-DOS 程序 [Movie Master 完成剧本写作](https://www.vice.com/en/article/wxdeay/the-dune-screenplay-was-written-in-ms-dos)。他说，“这一半是迷信，一半是对变化的恐惧。”他在 2018 年写下了《沙丘》的剧本，并在 2020 年的一个播客上解释说他仍在使用 Movie Master。这意味着《沙丘》也是用 MS-DOS 程序写的。Movie Master 有 40 页的页数限制，Eric Roth 认为这有利于他组织剧本。根据 2014 年发布的一则采访视频，他在 Windows XP 中通过一个 DOS 窗口启动 Movie Master 3.09，在一个古老的米黄色机械键盘上写剧本。

>
> 老王点评：虽然说能完成工作的都是好工具，但是我觉得恐惧变化才是老一代人的心理感受。
>
>
>

### 日本政务部门坚持使用软盘

![](/data/attachment/album/202110/27/152846q6o6jujj1753z1cq.jpg)

按照之前的计划，今年底日本多家银行都会淘汰 3.5 寸软盘，但是日本的地方政府部门 [并不乐意](https://screenrant.com/japan-tokyo-phasing-out-floppy-disks-maintenance-data-loss-risks/)，在他们的争取下，该计划延期了 5 年，直到 2026 年之前他们还可以继续用软盘为客户服务。一个地方政府部门给出的理由是，过去多年的经验显示软盘及软驱几乎从未损坏过或者丢失数据，该地区长期以来一直都在使用软盘来保存员工的福利信息。此外，他们还表示政府部门的软盘库存充足，可以使用很多年，而软盘差不多在十年前就停产了。当然，要让银行继续支持软盘，他们需要每年多付出 5000 美元的费用。

>
> 老王点评：看来守旧的不仅仅是老年人，还有老年人工作的机构。
>
>
>

### 微软在 Windows 10 中强制安装 PC 健康检查应用程序

![](/data/attachment/album/202110/27/152901e3o1h0itmc0cz4xp.jpg)

“PC 健康检查”是微软与 Windows 11 一起发布的一个新的诊断工具，它的主要用途是分析设备的硬件，检查它是否与 Windows 11 兼容。然而，微软已经开始使用新的 KB5005463 更新在 Windows 10 设备上 [强制安装这个应用程序](https://www.bleepingcomputer.com/news/microsoft/microsoft-is-force-installing-pc-health-check-in-windows-10/)。虽然微软表示可以删除该应用，但是用户不得不无数次地卸载该应用程序，因为在下一次检查更新时，该应用程序又会被重新安装。更糟糕的是，当试图卸载 KB5005463 时，Windows 10 表示该更新没有安装。

>
> 老王点评：看来微软为了让符合条件的人升级到 Windows 11，真是耗尽了心血啊。
>
>
>


如何在 Linux 下将网页转换为 PDF 文件

Summary: 在这里，我将提到这两种方法来帮助你完成工作。

在这里，我将提到这两种方法来帮助你完成工作。

![](/data/attachment/album/202110/28/111738tncncbml6jwcz6s8.jpg)

当你将某些资源存档或用于教育目的时，将网页保存为 PDF 是很方便的。

但是，你如何在 Linux 中把一个网页转换成 PDF？

你可以选择使用每个 Linux 发行版上的网页浏览器（GUI），或者使用终端将网页变成 PDF 文件。

在这里，我将提到这两种方法来帮助你完成工作。

### 方法 1：使用网页浏览器将网页转换为 PDF 文件

尽管我在本教程中使用的是 Mozilla Firefox，但你也可以用任何 [可用于 Linux 的最佳浏览器](https://itsfoss.com/best-browsers-ubuntu-linux/) 做同样的事情。

![](/data/attachment/album/202110/28/111807iuvumpvtfgm5rrmr.png)

1、加载你想转换的网页。

2、在浏览器菜单中找到“**打印**”选项，或使用键盘快捷键 `Ctrl + P`。

3、默认情况下，它应该让你把它保存为 PDF。你需要点击“保存”，然后选择目的地并保存网页。

![Save webpage as PDF in Mozilla Firefox](/data/attachment/album/202110/28/111808uwjawr8u91ajfbo1.png)

这种简单方法的一个主要问题是，它包括页面上的所有元素。这可能包括评论、页脚等。你可以用一个 PDF 编辑器来删除部分内容，但这是一个额外的任务。

更好的选择是利用一个浏览器扩展，如 [Print Friendly](https://www.printfriendly.com/)。它允许你在下载 PDF 之前编辑和删除网页的部分内容。

### 方法 2：使用终端将网页转换为 PDF 或图片

你可能已经知道，你可以 [在 Linux 终端浏览互联网](https://itsfoss.com/terminal-web-browsers/)，甚至 [使用命令行下载文件](https://itsfoss.com/download-files-from-linux-terminal/)。这并不奇怪，因为你可以在终端中做更多的事情，包括将网页下载为 PDF。

一个灵巧的开源命令行工具 `wkhtmltopdf` 和 `wkhtmltoimage` 可以帮到你，让你把任何 HTML 网页转换成 PDF 或图像文件。

它使用 Qt WebKit 渲染引擎来完成这个任务。你可以浏览它的 [GitHub页面](https://github.com/wkhtmltopdf/wkhtmltopdf) 了解更多信息。

你应该能够从你的 Linux 发行版的默认仓库中安装它。对于基于 Ubuntu 的发行版，你可以输入以下命令：

```
sudo apt install wkhtmltopdf

```

无论你想把它转换为 PDF 还是图像文件，它的使用都是非常直接的：

![](/data/attachment/album/202110/28/111808nmympbkwrgl3lwzv.png)

要将一个网页转换成 PDF，请输入：

```
wkhtmltopdf URL/domain filename.pdf

```

比如，类似于这样：

```
wkhtmltopdf linuxmint.com mint.pdf

```

你可以选择使用 `https://linuxmint.com` 这样完整的 URL 或使用域名，如上面的例子所示。

默认情况下，生成的文件将保存在主目录下。

在转换网页时，你还可以得到一些好玩的选项。

例如，你可以**对 PDF 文件应用灰度过滤器**，在同一文件中**制作多个页面副本**，以及在转换过程中**排除**图像。

灰度过滤器不一定对每个网页都有效，但你可以用命令试试：

```
wkhtmltopdf -g google.com googlepage.pdf

```

要在同一个 PDF 文件中复制多个页面，命令是：

```
wkhtmltopdf --copies 2 linuxmint.com mint.pdf

```

而且，如果你想排除网页中的图像，只需输入：

```
wkhtmltopdf --no-images linuxmint.com mint.pdf

```

此外，如果你想把一个网页转换为图像，命令是这样的：

```
wkhtmltoimage linuxmint.com mint.png

```

注意，与使用浏览器的 GUI 方法不同，通过终端使用这些工具有其局限性。它似乎不能成功转换利用任何 `<iframe>` 代码片段的网页。

像我们的网站，甚至 DuckDuckGo 都没有转换为 PDF 或图像。然而，简单的 HTML 网站，如 [Linuxmint.com](http://Linuxmint.com)、[Ubuntu.com](http://Ubuntu.com)、[Google.com](http://Google.com) 则非常有效。

### 总结

使用浏览器将网页保存为 PDF 似乎是个好办法。但是，如果你想有更多的选择并通过终端，`wkhtmltopdf` 工具应该会派上用场。

你喜欢如何在 Linux 中把网页转换为 PDF？欢迎在评论中分享你的想法。

---

via: <https://itsfoss.com/convert-webpage-pdf-linux/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[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 平板电脑可供选择

![](/data/attachment/album/202110/28/180114mism33m44sibmsc9.jpg)

有很多 [基于 Linux 的笔记本电脑](/article-13672-1.html)，也有 [预装了 Linux 的迷你 PC](https://itsfoss.com/linux-based-mini-pc/)，而市场上还有一些 [基于 Linux 的智能手机](/article-13711-1.html)。

那平板电脑呢？有没有一些不错的基于 Linux 的平板电脑？这可能不能用一句话说清楚。

许多仅使用 Linux 的系统制造商专注于制造台式电脑。这主要是由于触摸设备上的 Linux 体验与安卓和 iOS 提供的体验相距甚远。

但这是否意味着你不能在平板电脑上使用 Linux？并非如此。对于早期尝试用户和 DIY 爱好者来说，还有一些选择的。让我们来看看在这些 Linux 平板电脑中，你有哪些选择。

### Ubuntu Touch

![BQ 平板电脑上的 Ubuntu Touch 操作系统](/data/attachment/album/202110/28/172722ryjylnnfjdmx3nia.jpg)

好吧！这不是一个平板电脑，而是一个操作系统。但它确实让你可以在一些旧的安卓平板电脑上安装一个适合触摸操作的 Ubuntu 版本。

注意“一些”这个词。Ubuntu Touch 官方 [支持](https://devices.ubuntu-touch.io/) Nexus 7、联想 M10、Xperia Z4 和 BQ Aquaris 平板。你甚至可以尝试在你的其他平板电脑上安装 Ubuntu Touch。它可能无法 100% 工作，但仍然非常有用。

[Ubuntu Touch](https://ubuntu-touch.io/) 是 Ubuntu 团队的一个项目，但是他们 [在 2017 年中止了它](https://itsfoss.com/ubuntu-unity-shutdown/)。[UBports](https://ubports.com/) 承担了继续这个项目的责任，他们在有限的资源下做的很棒。

总而言之，如果你喜欢各种实验，想让你的旧安卓平板电脑获得新生，Ubuntu Touch 可能是你的周末项目。

### PineTab

![PineTab](/data/attachment/album/202110/28/172723lwqchszh6oisigbh.jpg)

Pine64 始于其单板计算机 Pine A64，以作为 [树莓派的替代品](https://itsfoss.com/raspberry-pi-alternatives/)。随着时间的推移，它推出了几个 Pine 品牌的产品。这份名单里包括低调的 [PineTime 智能手表](https://itsfoss.com/pinetime-linux-smartwatch/)、PineBook 笔记本电脑、PinePhone 智能手机和 PineTab 平板电脑。

这些 Pine 设备通常价格低廉，并允许用户对这些小设备进行完全控制。这种可魔改的特性帮助它聚集了一大批开源 DIY 爱好者的粉丝。

[PineTab](https://pine64.com/product/pinetab-10-1-linux-tablet-with-detached-backlit-keyboard/?v=0446c16e2e66) 基本上使用了与带有触摸屏和键盘的 Pine64 单板计算机相同的组件。它不是看起来最漂亮的平板电脑，也不打算成为这样的。

它的规格很一般，有一个高清 IPS 电容式触摸屏、全志 A64 芯片组、四核 CPU 和 2GB 内存。

它无法与 iPad 或 Galaxy Tab 竞争，但它允许你安装你选择的发行版，并按你的要求进行配置。

请记住，Pine 的库存有限，所以如果你能看到这个设备可以购买，那你很幸运。

### PineNote

![PineNote](/data/attachment/album/202110/28/172724eh0plmm9bg0ql27g.jpg)

另一个 Pine 设备，与你在上一节看到的 PineTab 略有不同。

PineTab 是一款用于浏览互联网、使用应用程序和玩游戏的 Linux 平板电脑，而 [PineNote](https://www.pine64.org/pinenote/) 是用来做笔记和阅读书籍和文件的。

它有一个电子墨水显示屏，你可能在 Kindle 等电子书阅读器上见过。除了电子书阅读器之外，PineNote 还可以你用 Wacom 笔做笔记。

PineNote 拥有四核 Rockchip、多点触控电子墨水面板、4GB 内存和 128GB eMMC 存储。它也是为数不多的价格高于通常的 399 美元的平板点之一。

请记住，PineNote 正处于早期开发阶段，只接受开发者的订单。

### RasPad

![RasPad](/data/attachment/album/202110/28/172725ecwcc4ccnwc4vdnq.jpg)

[RasPad](https://raspad.com/products/raspadv3) 是一个用于树莓派设备的套件，可以把它变成一个基于触摸功能的设备。与普通的平板不同，这不是一个扁平的设备，而是有一个楔形的身体。这使得它更容易在办公桌上使用。

RasPad 是专门为树莓派设备创建的，你可以轻松使用它的大部分端口。它有一个专门的 RasPad 操作系统，但你可以自由使用常规的树莓派操作系统或 Ubuntu 或任何其他适合树莓派的操作系统。在选择操作系统时请考虑触控友好性。

请记住，树莓派设备不包括在套件中。你必须要单独购买。

### 你的选择是什么？

我知道我们离一个优秀的 Linux 平板电脑还很远，但它们至少可以和市场上的安卓平板电脑竞争。至少我们有一些可用的选择，这也是一线希望。

你是否已经拥有以上列出的设备之一了？你的体验如何？

如果你只能选择其中之一，那么你选择哪一款 Linux 平板电脑？

---

via: <https://itsfoss.com/linux-tablets/>

作者：[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/) 荣誉推出


硬核观察 #438 中国建造了两台性能速度远超美国竞争对手的量子计算机

Summary: 更多：• 中国超算率先突破百亿亿次大关 • 字节跳动开源的 Semi Design，承认早期参考了阿里的 Ant Design

![](/data/attachment/album/202110/28/193341efmyzvkk5vzfenoc.jpg)

### 中国建造了两台性能速度远超美国竞争对手的量子计算机

![](/data/attachment/album/202110/28/193348kourc6crwp3qop6a.jpg)

根据最近发表在同行评议杂志《物理评论快报》和《科学通报》上的一项 [论文](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.127.180501)，中国建造了两台性能速度远超美国竞争对手的量子计算机。

第一台 “祖冲之 2 号”是三个月前完成的，它是一台 66 量子比特的可编程超导量子计算机，比谷歌的 55 量子比特的“悬铃木”快 1000 万倍，令人难以置信，[成为世界上最快的机器](https://interestingengineering.com/chinas-new-quantum-computer-has-1-million-times-the-power-of-googles)，也是两年来第一个击败谷歌的机器！

另外一台 “九章 2 号” 可以在一毫秒内计算出世界上最快的传统计算机需要 30 万亿年才能完成的任务。它是一种不同的量子计算机，使用光子来运行，但是应用场景较少。比当今最大的传统计算机快 100 sextillion 倍，即 1 后面有 23 个零。

>
> 老王点评：除了说“卧槽”啥也说不出来了。
>
>
>

### 中国超算率先突破百亿亿次大关

![](/data/attachment/album/202110/28/193406l55pe8o1e81ej3re.jpg)

ExaFLOPS 代表每秒运行浮点运算百亿亿次（Exascale），即 1 的后面有 18 个零。

据报道，这两台性能 [突破百亿亿次大关](https://www.nextplatform.com/2021/10/26/china-has-already-reached-exascale-on-two-separate-systems/) 超算分别是：

无锡国家超算中心的神威太湖之光，它最初使用申威 SW26010 处理器，由上海高性能集成电路设计中心设计，超算由 40,960 个节点构成，总共 10,649,600 个核心，此次升级后处理器核心数翻了一番，峰值性能达到 1.3 ExaFLOPS，持续性能 1.05 ExaFLOPS，功耗 35 兆瓦。

第二台是广州国家超算中心的天河三号，使用基于 Armv8 架构的飞腾 2000+ (FTP) 处理器，峰值性能达到 1.3 ExaFLOPS，Rmax 性能超过 1 ExaFLOPS。

>
> 老王点评：和第一条比起来没那么震撼，但是实用性更强。率先突破百亿亿次并不算太意外，不过我觉得最重要的是它们都使用的是国产 CPU。
>
>
>

### 字节跳动开源的 Semi Design，承认早期参考了阿里的 Ant Design

![](/data/attachment/album/202110/28/193422ztisij4l450430jf.jpg)

字节跳动 [开源](https://github.com/DouyinFE/semi-design/blob/main/README-zh_CN.md) 了它使用的设计系统和 UI 库 Semi Design，采用 MIT 许可证。但它的代码中很快被发现有阿里巴巴设计系统 Ant Design 的痕迹。字节跳动的工程师随后发表了 [致歉声明](https://github.com/DouyinFE/semi-design/issues/70)，承认早期使用了 Ant Design 的文案，但现在的版本与 Ant Design 相差巨大。

>
> 老王点评：平心而论，很多项目都会借鉴已有的开源项目，但是开源前一定遵循相关的许可证要求。
>
>
>


树莓派 Zero 2 W 来了！

>
> 树莓派 Zero W 的继任者来了！仅售 15 美元，它包括一些承诺的升级和改进。
>
>
>

![](/data/attachment/album/202110/29/095720ccva6ffj4yf7sn64.png)

树莓派 Zero W 是最实惠的包括了无线和蓝牙连接的单板计算机之一。

虽然 [树莓派 Zero 与树莓派 Zero W](https://itsfoss.com/raspberry-pi-zero-vs-zero-w/) 之间有一些区别，但考虑到它们分别以 5 美元和 10 美元的价格推出，两者都是靠谱的选择。

现在，树莓派在大约 6 年后推出了这个系列的继任者，即树莓派 Zero 2 W，售价为 **$15**。

即使 [树莓派提高了价格](https://news.itsfoss.com/raspberry-pi-price-hike/)，我想说 15 美元买一块改进了多线程性能的新一代电路板应该是个不错的选择。

让我们来看看它有什么优点和新的东西。

### 树莓派 Zero 2 W 的规格

![](/data/attachment/album/202110/29/095721eozkvt121vze300e.jpg)

树莓派 Zero 2 W 使用了在树莓派 3 发布版中使用的相同芯片。

虽然频率略微降低到了 1GHz，它仍然能够保证其性能是原来树莓派 Zero 的 5 倍。

下面是它的规格：

* 博通 BCM2710A1，四核 64 位SoC（Arm Cortex-A53 @ 1GHz）
* 512MB LPDDR2 SDRAM
* 2.4GHz IEEE 802.11b/g/n 无线网络、蓝牙 4.2，BLE
* 1×USB 2.0 接口，带 OTG
* 与 HAT 兼容的 40 针 I/O 针脚
* MicroSD 卡插槽
* mini HDMI 接口
* 复合的视频和复位引脚焊点
* CSI-2 相机连接器
* H.264，MPEG-4 解码（1080p30），H.264 编码（1080p30）
* OpenGL ES 1.1，2.0 图形

看看这些规格，考虑到它的外形尺寸，它足够令人印象深刻。不要忘了，他们增加了更多的铜覆层来处理升级后的处理器产生的热量。

![](/data/attachment/album/202110/29/095721fh39945ja0j4bk3j.jpg)

此外，无线电路是用金属屏蔽密封的，这应该使它容易用于商业终端产品。

如果你已经有了树莓派 Zero 的外壳，那么它应该很有可能适用于 Zero 2 W。

根据 [官方公告](https://www.raspberrypi.com/news/new-raspberry-pi-zero-2-w-2/)，树莓派提到：

>
> 与 Zero 相比，确切的性能提升因工作负载而异，但对于多线程的 [sysbench](https://github.com/akopytov/sysbench) 来说，它几乎正好是五倍的速度。
>
>
>

小巧的外形和性能的提升应该使它成为安全摄像机和许多其他物联网项目的理想板卡。你可以了解一下我们的 [树莓派 Zero W 的 DIY 项目](https://itsfoss.com/raspberry-pi-zero-projects/) 清单，看看有什么灵感。

### 一个新的 USB 电源

![](/data/attachment/album/202110/29/095722r6oy9b9kveycbts2.png)

除了新的电路板，树莓派还推出了一个改进的 USB 电源，峰值电流为 2.5A。

该电源配备了一个 micro USB 接口，而不是 USB-C。尽管这不是为新的 Zero 2 W 准备的，而是为树莓派 3B 或 3B+ 准备的。

### 可用性 & 价格

![](/data/attachment/album/202110/29/095723a6p9r1fr9quwrrrf.jpg)

树莓派基金会已经澄清，他们在 2026 年 1 月之前不会停产树莓派 Zero 和 Zero W。

因此，如果你想省钱做实验，你可以继续使用旧板。

新的 Zero 2 W 将在官方经销商处以 15 美元的价格出售。目前供货范围仅限于英国、欧盟、美国、加拿大和香港。

它应该在 11 月在澳大利亚和新西兰上市，在接下来的几个月里会有更多国家加入。

* [树莓派 Zero 2 W](https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/)

你对最新的微型树莓派 Zero 2 W 有什么看法？欢迎在下面的评论中分享你的想法。

---

via: <https://news.itsfoss.com/raspberry-pi-zero-2-w-launch/>

作者：[Ankush Das](https://news.itsfoss.com/author/ankush/) 选题：[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/) 荣誉推出


如何在使用 Xfce 桌面环境的 Xubuntu 上安装主题

>
> 这是一个循序渐进的初学者教程，展示了如何在 Xubuntu 和其他使用 Xfce 桌面环境的 Linux 发行版中安装主题和图标。
>
>
>

![](/data/attachment/album/202110/29/103958hrv6vruu163zrtvr.png)

在 Xubuntu 上安装主题与 Ubuntu 或其他 Linux 发行版类似。你把主题文件放在 `~/.themes` 文件夹中，然后用一个工具来改变它。

然而，考虑到 Xubuntu 使用 [Xfce 桌面环境](https://xfce.org/)，一些选项或用户界面看起来会有所不同。这就是为什么我创建了这个教程，用适当的截图来展示步骤。

### 在 Xubuntu（Xfce）中安装新主题

开始前，你需要在主目录下创建一个 `.themes` 文件夹。注意文件夹名称前的点（`.`）。它很重要，可以从正常的视图中隐藏该文件夹。

要检查你是否已经有了它，你可以 [启用查看隐藏文件](https://itsfoss.com/hide-folders-and-show-hidden-files-in-ubuntu-beginner-trick/)，然后在它不存在的时候创建它。

![](/data/attachment/album/202110/29/104003n1opsjln1blpbj1d.png)

完成后，你需要下载一个主题。

1、你可以在 [Xfce-look](https://www.xfce-look.org/browse?cat=138&ord=latest) 门户网站上浏览 XFCE 主题。你所要做的就是下载存档（压缩）文件。

2、接下来，你需要 [解压缩文件](https://itsfoss.com/unzip-linux/)，如下面的截图所示。

![](/data/attachment/album/202110/29/104003y53gti52bo2pt2m2.png)

3、解压后，你会发现出现一个文件夹，你要复制它。

![](/data/attachment/album/202110/29/104004agawwgwgfvy712jy.png)

4、然后你要把这个文件夹粘贴到你最初创建的 `.themes` 目录中。

![](/data/attachment/album/202110/29/104004lm9xmderk91mam1e.png)

5、最后，你需要到外观设置中找到它，并选择它/应用它以使其生效。

![](/data/attachment/album/202110/29/104004pbnbzhrfonu0n0cz.png)

正如你在下面的截图中注意到的，新的主题已经被添加和应用：

![](/data/attachment/album/202110/29/104004tytgaaa0tmkbpje6.png)

除了主题之外，如果你需要定制你的 Xubuntu 桌面的图标，你需要在主目录中创建另一个 `.icons` 文件夹。

就像你安装主题一样，你将不得不遵循一个类似的过程来应用图标主题。

为了给你一个例子，让我在这里强调这些步骤：

### 在 Xubuntu（Xfce） 中添加图标主题

你可以浏览同样的 [xfce-look portal](https://www.xfce-look.org/browse?cat=132&ord=latest) 来寻找完整的图标主题。

或者，你可以寻找一些最好的 [可用于 Ubuntu 的图标主题](https://itsfoss.com/best-icon-themes-ubuntu-16-04/)，它们应该也适用于 Xubuntu。

一旦你找到了你喜欢的，就下载它，并按下面的方式解压。

![](/data/attachment/album/202110/29/104005j2yc9pz5cclcoolo.png)

接下来，你需要把这个文件夹复制并粘贴到 `.icons` 文件夹中。

![](/data/attachment/album/202110/29/104005cjv9jgzj68vf996x.png)

现在，你可以回到外观设置中，找到列在“图标”下的可用图标。

为了向你展示区别，**我把默认的 Xubuntu 主题改为 adwaita-dark**，你可以在这里看到：

![](/data/attachment/album/202110/29/104007sog1tb04e7xxb1xz.png)

**注意**：一些图标或主题文件可能包含有不同变体的嵌套文件夹。你会注意到它们并没有出现在外观工具中。如果是这种情况，直接将内部文件夹复制到 `~/.themes` 或 `~/.icons` 文件夹中。

### 总结

通过对风格和图标的调整，你可以 [定制你的 Xubuntu 体验](https://itsfoss.com/customize-xfce/) 以融入你的品味。

你是喜欢默认的 Xubuntu 外观还是使用不同的主题/图标来定制它的外观？请在评论中告诉我你的想法。

---

via: <https://itsfoss.com/install-themes-xfce-xubuntu/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[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/) 荣誉推出


硬核观察 #439 三年半后，X.Org 服务器重焕新生

Summary: 更多：• 国家鼓励金融部门拥抱自由和开源软件 • 微软放弃 Electron

更多：• 国家鼓励金融部门拥抱自由和开源软件 • 微软放弃 Electron

![](/data/attachment/album/202110/29/155906a7b93ve392vyb5i3.jpg)

### 三年半后，X.Org 服务器重焕新生

![](/data/attachment/album/202110/29/155916jobrpxlz2qhpb3jj.jpg)

X.Org 服务器的上一个版本 1.20 发布于 2018 年，三年半后，在新的维护者的努力下 [发布](https://lists.x.org/archives/xorg/2021-October/060799.html) 了新的版本 1.21 —— 哦不，现在流行飙版本号了，新版本号为 21.1.0。虽然 Wayland 有很多优势，但是 X.Org 服务器仍然被广泛使用，Wayland 对这些使用 X.Org 服务器的应用的兼容还不够好，而且 X.Org 服务器也有一些 Wayland 所没有的独特优势。去年，X.Org 服务器项目的长期维护者说它几乎被放弃了，它能复活要感谢新的维护者 Kanapickas，他在 7 月份站出来 [接过了开发维护工作](https://www.theregister.com/2021/09/22/xorg_server_21_1_0/)。有用户评价说，“不是所有的英雄都穿斗篷”。

>
> 老王点评：很多开源项目不是软件老了，而是维护软件的人老了啊。
>
>
>

### 国家鼓励金融部门拥抱自由和开源软件

![](/data/attachment/album/202110/29/155937pr31qo8iimed5d36.jpg)

据报道，[该文件](http://www.cac.gov.cn/2021-10/27/c_1636928705274546.htm) “鼓励金融机构将开源技术应用作为提高核心技术自主可控能力的重要手段”，“积极参与开源生态建设，依法合规分享开源技术应用经验，共享开源技术研究成果”。并提出“金融机构应当遵循开源技术相关法律和许可要求，合规使用开源技术”。文件要求遵循安全可控、合规使用、问题导向和开放创新等原则，并着重指出金融机构要“在操作系统、数据库、中间件等基础软件领域和云计算、大数据、人工智能、区块链等新兴技术领域加快生态建设”。

>
> 老王点评：向来比较保守的金融部门能主动拥抱开源，可见开源已经成为了一种普遍共识。
>
>
>

### 微软放弃 Electron

![](/data/attachment/album/202110/29/155951duvp0g0i0w8ditwt.jpg)

在 Electron 上运行的 Teams 已经成为占用内存和降低计算机速度的代名词，微软甚至 [专门解释](https://docs.microsoft.com/en-us/microsoftteams/teams-memory-usage-perf) 了为什么 Teams 占用这么多内存。最近，[微软宣布](https://twitter.com/rishmsft/status/1408085784016539653)，Teams 将转向他们自己的 Edge Webview2 渲染引擎，放弃 Electron 以寻求性能提升。据介绍，转型后，Teams 的内存消耗将减少 2 倍，它将被称为 Teams 2.0。有很多知名的应用程序都是由 Electron 驱动的，该框架可以帮助 Web 开发者将他们的 Web 应用转到桌面平台。但每个 Electron 应用程序的后台都有一个唯一的 Chrome OS 实例，运行两个以上的此类应用程序会耗尽主机的性能。

>
> 老王点评：Electron 开发的应用就和 Java 开发的桌面应用一样臃肿笨重。这种跨平台的代价不菲啊。
>
>
>


现可下载微软 Edge 的 Linux 稳定版了

![](/data/attachment/album/202110/30/085644x57izzq4kqeq7zi4.png)

>
> 微软 Edge 的 Linux 最终版本终于亮相了。对于涉足 Linux 的 Windows 用户来说，这似乎是一个值得考虑的选择。
>
>
>

早在 5 月，[微软就启动了 Linux 版的 Edge 的公开测试](https://news.itsfoss.com/microsoft-edge-beta/)。

现在，就在正式宣布之前，其稳定版已经被推送到官方仓库。

![](/data/attachment/album/202110/30/085645mapwoip1j1px3wk1.png)

注意：微软 Edge 不是一个开源的浏览器，但它基于开源的组件。我们报道这个是因为它可以用于 Linux。

### 微软 Edge 的 Linux 版本：有什么值得喜欢的？

![](/data/attachment/album/202110/30/085645h2ckykmnmxx722c0.png)

微软 Edge 基于开源的 Chromium，这一点并不奇怪。所以，是的，它只是又一个 [基于 Chromium 的 Linux 浏览器](https://news.itsfoss.com/chrome-like-browsers-2021/)。

然而，与谷歌 Chrome 浏览器相比，微软 Edge 提供了良好的用户体验和一些对 Windows 用户来说可能很方便的额外功能。

根据我在 Windows 10 上的经验，与谷歌 Chrome 浏览器相比，微软 Edge 似乎性能更好，但我还没有为此比较过任何基准。

那么，它对 Linux 是否有用？有什么理由让你去尝试吗？

当然，如果你不喜欢使用微软的服务，那就完全是另一回事了。但是，总的来说，微软 Edge 看起来是一个有前途的基于 Chromium 的浏览器，具有一些有用的功能。

一些可用于 Linux 的关键功能包括：

* 睡眠标签（以节省资源）
* 垂直标签
* 收藏
* 防止跟踪

![](/data/attachment/album/202110/30/085646c8qsaszua5c5a58u.png)

虽然它在配置你的微软账户时也支持家庭安全选项，但并不是每项功能都适用于 Linux。

此外，我没有发现可以派上用场的 Linux 的“儿童模式”。

而且，如果你在使用 Linux 的同时还使用其他桌面平台，微软 Edge 可以是跨平台冒险的一个好选择。

但如果你只想在 Linux 上试用它，你可能想在作出决定之前将它与其他浏览器进行比较。

### 下载微软 Edge Linux 版

想知道 [如何在 Linux 上安装微软 Edge 浏览器](https://itsfoss.com/microsoft-edge-linux/)？尽管 [微软 Edge 的官方网站](https://www.microsoft.com/en-us/edge) 没有列出 Linux 版本，但你可以在他们的官方资源库中找到它。

DEB 和 RPM 两种软件包都是可用的。你可以使用下面的链接下载这些软件包：

* [微软 Edge (deb)](https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/)
* [微软 Edge (rpm)](https://packages.microsoft.com/yumrepos/edge/)

Via: [Sophos](https://nakedsecurity.sophos.com/2021/10/29/microsoft-edge-finally-arrives-on-linux-official-build-lands-in-repos/)

---

via: <https://news.itsfoss.com/microsoft-edge-stable-release/>

作者：[Ankush Das](https://news.itsfoss.com/author/ankush/) 选题：[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/) 荣誉推出


修复在 Ubuntu 上 “Unable to acquire dpkg frontend lock. Are You Root?” 的错误

Summary: 我假设你对 Linux 很陌生。

我假设你对 Linux 很陌生。

![](/data/attachment/album/202110/30/092452w21q1lyl1ntyy7t3.jpg)

我假设你对 Linux 很陌生。

你按照网上的一些教程，告诉你要安装某个程序或运行某个命令。可能是与服务器有关的东西。

但当你运行这个命令时，你遇到了这个错误：

```
E: Could not open lock file /var/lib/dpkg/lock-frontend – open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?

```

或者类似的错误：

```
dpkg: error: required read/write access to the dpkg database directory /var/lib/dpkg
E: Sub-process dpkg –set-selections returned an error code (2)
E: Executing dpkg failed. Are you root?

```

这两个错误都在问你同一个问题：你是 root 吗？而这就是这个问题的答案。成为 root。

### 成为 root 以避免这个错误

你如何 [在 Ubuntu](https://itsfoss.com/root-user-ubuntu/) 或 Debian 中成为 root？你使用 `sudo` 命令。

是的，就是这样。无论你在运行什么命令，只要在它前面加上 `sudo` 即可。

```
sudo your_command

```

![Running command with sudo](/data/attachment/album/202110/30/092459i09yzz9fv0zfyyhl.jpg)

它将要求你输入你的用户账户密码。请记住，当你输入密码时，屏幕上不会显示任何东西，这也没关系。

你的系统没有任何问题。在大多数 Linux 系统中，输入密码时不会显示通常的星号或其他东西是一种“安全特性”。

只要输入密码，并在密码后按下回车键即可。如果密码输入正确，你现在应该可以运行该命令了。

你甚至可以使用这个方便的 [Linux 命令行技巧](https://itsfoss.com/linux-command-tricks/)，用 `sudo` 运行以前的命令：

```
sudo !!

```

这很简单，而且立即生效，除非你没有 sudo 权限。然后，你会看到一个不同的错误。

### 看到一个 “User is not in sudoer file” 的错误？

![Some users cannot run commands with sudo](/data/attachment/album/202110/30/092459qq8msap7999u5opu.png)

当你 [安装 Ubuntu](https://itsfoss.com/install-ubuntu/) 时，你必须创建一个用户账户。这个用户被自动授予 `sudo` 权限，在需要时以 root 身份运行命令。

这发生在 Ubuntu 桌面上，而不是服务器上。大多数服务器发行版会有一个单独的 root 账户。如果你单独创建了一个普通账户，你就必须把这个用户添加到 `sudoer` 中，以便这个普通用户可以使用 `sudo`。

在上面的截图中，我已经创建了这个额外的用户，但没有将其添加到 sudo 组中。这意味着这里的用户 `prakash` 没有使用 `sudo` 命令的权限，因此系统抱怨 “prakash is not in sudoers file”。

#### 该事件在哪里报告？

错误的 `sudo` 尝试会被添加到系统日志中。它记录了用户名、虚拟终端号、运行命令的位置和运行的命令。

![Incorrect sudo attempts are logged into the system](/data/attachment/album/202110/30/092459pr3b2jo3rsoqso7l.png)

这些日志的位置在不同的发行版中有所不同。

通常，在 Ubuntu 中你可以在 `journalctl` 日志或 `/var/log/auth.log` 文件中找到它，在 Fedora 中可以在 `/var/log/audit/audit.log` 文件中找到它。

#### 如果一个用户不在 sudoer 列表中，你能做什么？

当你不能用当前的用户账户使用 `sudo` 时，你能做什么？首先，[验证该用户是否有 sudo 权限。如果没有，你可以有一些选择](https://linuxhandbook.com/check-if-user-has-sudo-rights/)：

* 以 root 身份登录或切换 root 身份（如果你有 root 密码）。
* [将该用户加入 sudoer 列表](https://linuxhandbook.com/create-sudo-user/) （如果你有其他用户账户的管理或 `sudo` 权限）。
* 如果你在多用户的 Linux 系统中，自己没有 root 或 `sudo` 权限，请你的系统管理员授予你的用户 sudo 权限或安装你想安装的应用。

### 这有帮助吗？

`sudo` 是一个非常全面的安全机制，它不仅仅是允许一个普通用户成为 root。它有助于对系统进行审计，了解哪个用户用 `sudo` 运行了哪个命令。它还可以被配置为只允许某个用户用 `sudo` 运行某些命令。

你不会在桌面 Linux 上看到如此细化的 `sudo` 配置，在桌面 Linux 上，它被预先配置为允许 `sudo` 组中的任何用户以 `root` 的身份运行任何命令。关于 `sudo` 的更多信息，请参见其他文章。

我希望在解决这个经典的初学者问题时，你能对 `sudo` 命令有一些初步的了解。如果你对这个主题有进一步的问题，请在评论区告诉我。

---

via: <https://itsfoss.com/fixed-are-you-root-error/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[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/) 荣誉推出


硬核观察 #440 中国主要网站仍然不支持 IPv6

Summary: 更多：• 磁带仍占有数据备份的 4% 份额 • 世界论文索引 General Index 上线

![](/data/attachment/album/202110/30/102602z6xijx0zb9ixxyl0.jpg)

### 中国主要网站仍然不支持 IPv6

![](/data/attachment/album/202110/30/102617rs9suh50u0h93wop.jpg)

对 Alexa 排名前 500 网站的 [检查显示](http://www.delong.com/ipv6_alexa500.html)，支持 IPv6 的网站占 25%。而中国主要网站基本不支持 IPv6，如天猫、百度、搜狐、淘宝、京东、奇虎360、微博、新浪、新华网等等。全世界的 [IPv6 普及度](https://www.6connect.com/blog/global-adoption-of-ipv6-top-ten-countries/) 正在逐渐增长，根据 [Google IPv6 的统计](https://www.google.com/intl/en/ipv6/statistics.html) 显示，IPv6 的普及度已经达到了 35%，但中国的 IPv6 的普及度仍然较低。

>
> 老王点评：现在电信运营商对 IPv6 的支持比较好，毕竟 IP 不太够用。但是各个网站对此则动力不足。
>
>
>

### 磁带仍占有数据备份的 4% 份额

![](/data/attachment/album/202110/30/102644yz2om59mknbmmb9o.jpg)

虽然早在 2003 年 LiveVault 就宣称“磁带备份是上个世纪的事情”，但将近 20 年过去了，仍有 4% 的组织 [使用磁带备份](https://www.databarracks.com/resources/data-health-check-2021)，15% 在使用 “硬盘+磁带” 的混合式备份方案，但云端备份的使用率已增长到 51% 。磁带备案难以退出市场的主要原因是：组织机构需要保留多年的历史备份，大企业的转型动作更是既困难又缓慢；磁带的成本其实相当划算；磁带备份具有物理隔离的特性。

>
> 老王点评：虽然磁带备份看起来很老旧了，但是也有现在云端备份所不具备的一些优势。
>
>
>

### 世界论文索引 General Index 上线

![](/data/attachment/album/202110/30/102702zewypmlteyzl76b1.jpg)

一位美国技术专家 [发布](https://www.nature.com/articles/d41586-021-02895-8) 了一个包含 1 亿多篇期刊文章中单词和短语的索引 [General Index](https://archive.org/details/GeneralIndex)——其中包括了许多付费论文。 索引于 10 月 7 日发布可免费使用，包含超过 3550 亿个单词及相应论文中的句子片段。此举是为了帮助科学家使用软件从已发表论文中收集见解，即使他们没有合法访问相关论文的权限。索引不包含论文全文，只包含最多五个单词的句子片段。早期访问过该索引的研究人员表示，这是帮助他们使用软件搜索文献的重大进展。

>
> 老王点评：这对于科研来说应该很有用。
>
>
>


如何在 Ubuntu 和其它的 Linux 发行版安装 Rust 和 Cargo

>
> 了解在 Linux 上安装 Rust 编程语言及其包管理器 Cargo 的各种方法。
>
>
>

![](/data/attachment/album/202110/31/150031j9e0xgeg9jpxeip0.jpg)

自从 Mozilla 贡献了 [Rust](https://www.rust-lang.org/) 语言之后，它就获得了更加突出和受欢迎的地位。口说无凭。[Rust 将被使用在 Linux 内核中](https://www.zdnet.com/article/rust-in-the-linux-kernel-why-it-matters-and-whats-happening-next/)，它是继 C 语言之后的第二种编程语言。

许多开发人员也开始使用 Rust 语言制作很棒的基于命令行的工具。这些工具通常可以通过 [Cargo 包管理器](https://crates.io/) 获得。

这就是为什么在 Linux 中安装 Rust 支持对程序员和最终用户都很重要的原因。

官方 Rust 文档建议通过以下这种方式下载并执行安装程序脚本在 Linux 中安装 Rust：

```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

```

这是可行的。但是，你的发行版可能已经打包了 Rust。使用你的发行版的 [包管理器](https://itsfoss.com/package-manager/) 也是一种选择。

让我向你介绍官方 Rust 方式和包管理器方式的 Rust 安装步骤。

### 方法1：使用官方方法在任意的 Linux 上安装 Rust

这种方法有几个优点：

* 你可以获取最新的 Rust 和 Cargo 版本
* Rust 仅仅是为当前的用户安装，并不是所有用户
* 你并不需要 root 用户或者 `sudo` 权限就可以为自己安装 Rust

一些人不喜欢从互联网下载并 [运行 shell](https://itsfoss.com/run-shell-script-linux/) 脚本，即使它来自官方。但是，由于它不需要 root 访问权限并且脚本来自官方，因此以这种方式安装它应该是安全的。

首先，确保你已经安装了 `curl`。如果没安装，使用你的发行版的包管理器安装它。你可以使用 `apt` 命令在 [Ubuntu 和 Debian 上安装 Curl](https://itsfoss.com/install-curl-ubuntu/)。

```
sudo apt install curl

```

接下来，使用这条命令下载脚本并运行它：

```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

```

![](/data/attachment/album/202110/31/150036mba1shcjwihv7xsk.png)

它会询问你输入所需的安装类型。选择选项 `1`：

![](/data/attachment/album/202110/31/150036o1igbiwb46f66i44.png)

脚本完成安装后，你需要获取配置文件的来源，以使更改应用于你的 shell。

![](/data/attachment/album/202110/31/150036jad8dbuydb7f43d3.png)

应用文件：

```
source $HOME/.cargo/env

```

完成后，通过检查已安装的版本来验证 Rust 是否可用：

```
rustc --version

```

![Verifying Rust installation](/data/attachment/album/202110/31/150036kc0coytuqdbt9ydc.png)

太酷了。如果 Rust 发布了新版本，你可以使用如下命令更新已安装的版本：

```
rustup update

```

在你看到其它安装方法之前，让我快速展示如何移除以这种方式安装的 Rust。

#### 删除以官方方式安装的 Rust

在终端中，使用如下的命令从系统中移除 Rust：

```
rustup self uninstall

```

询问时按 `Y`，你将从系统中删除 Rust。

![Removing Rust from Linux](/data/attachment/album/202110/31/150037tsyyz4us55ooudsg.png)

官方方式安装已经完成。让我们看看如何使用 `apt` 命令在 Ubuntu 上安装 Rust。

### 方法2：使用 apt 命令在 Ubuntu 上安装 Rust

为什么要使用包管理器？

* 它在整个系统范围内安装 Rust，可供系统上的所有用户使用
* 它与其它系统更新一起集中更新（如果你的发行版添加了新版本的 Rust）

Ubuntu 中有两个主要的 Rust 包：

* `rustc`：用于 Rust 编程语言的 Rust 编译器
* `cargo`：Cargo 是 Rust 的包管理器，它会自动安装 `rustc`

作为一个普通用户，你将使用 Cargo 来安装基于 Rust 的应用程序。作为程序员，你需要 Cargo 来获取其它 Rust 包或创建自己的包。

由于 `cargo` 包含 `rustc`，所以我建议安装它，以便一次性安装所有必需的软件包。

```
sudo apt install cargo

```

系统会要求你输入账号密码。

![](/data/attachment/album/202110/31/150037fz271l9qblfllldf.png)

当然，你可以自由使用 `apt install rustc`，只安装 Rust。这取决于你的选择。

你可以验证是否为你和所有其他用户安装了 Rust（如果你愿意）：

![](/data/attachment/album/202110/31/150037s4330z0m3gx63mzz.png)

很好。让我也快速展示卸载步骤。

#### 使用 apt remove 移除 Rust

要移除 Rust，你可以先移除 Cargo，然后使用 `autoremove` 命令移除随它安装的依赖项。

```
sudo apt remove cargo

```

现在运行 `autoremove`：

```
sudo apt autoremove

```

就是这样。你现在了解了在 Ubuntu 和其它 Linux 发行版上安装 Rust 的所有基本知识。随时欢迎提出问题和建议。

---

via: <https://itsfoss.com/install-rust-cargo-ubuntu-linux/>

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

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


在 Linux 上用 ASCII 艺术打印万圣节问候语

>
> 使用 Linux 或 FreeDOS 从一个 C 程序中生成彩色的 ASCII 艺术。
>
>
>

![FreeDOS 上的庆祝万圣节 ASCII 艺术](/data/attachment/album/202110/31/154349n1rmy3h09q399goo.jpg "Happy Halloween ASCII art on FreeDOS")

利用扩展 ASCII 字符集和它的绘画元素集合的全彩 ASCII 艺术在 DOS 上曾经相当流行。你可以在你的下一个 FreeDOS 程序中加入 ASCII 艺术，作为一个很酷的“欢迎”屏幕，或者作为一个提供了更多程序信息的彩色“退出”屏幕，来增加一点视觉上的乐趣。

但是，这种 ASCII 艺术的风格并不仅仅局限于 FreeDOS 程序。你可以在 Linux 终端模式的程序中使用同样的方法。虽然 Linux 使用 [ncurses](https://opensource.com/article/21/8/ncurses-linux) 来控制屏幕，而不是 DOS 的 [conio](https://opensource.com/article/21/9/programming-dos-conio)，但相关的概念也适用于 Linux 程序。本文探讨了如何从 C 语言程序中生成彩色 ASCII 艺术。

### ASCII 艺术文件

你可以使用各种工具来绘制你的 ASCII 艺术。在这个例子中，我使用了一个叫做 TheDraw 的老式 DOS 应用程序，但是你可以在 Linux 上找到现代的开源 ASCII 艺术程序，比如 [Moebius](https://blocktronics.github.io/moebius/)（Apache 许可证）或者 [PabloDraw](https://github.com/blocktronics/pablodraw)（MIT 许可证）。只要你知道保存的数据是什么样子的，你使用什么工具并不重要。

下面是一个 ASCII 艺术文件样本的一部分，以 C 源代码保存。请注意，这个代码片段定义了几个值。`IMAGEDATA_WIDTH` 和 `IMAGEDATA_DEPTH` 定义了屏幕上的列数和行数。在这里，它是一个 80x25 的 ASCII 艺术“图像”。`IMAGEDATA_LENGTH` 定义了 `IMAGEDATA` 数组中的条目数量。ASCII 艺术画面中的每个字符可以用两个字节的数据表示。要显示的字符和包含该字符的前景和背景颜色的颜色属性。对于一个 80x25 的屏幕，每个字符都与一个属性配对，该数组包含 4000 个条目（即 `80*25*2=4000`）。

```
#define IMAGEDATA_WIDTH 80
#define IMAGEDATA_DEPTH 25
#define IMAGEDATA_LENGTH 4000
unsigned char IMAGEDATA [] = {
    '.', 0x08,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,
    ' ', 0x08,  ' ', 0x08,  '.', 0x0F,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,
    ' ', 0x08,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,  '.', 0x0F,
    ' ', 0x08,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,
    ' ', 0x08,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,  ' ', 0x08,

```

数组的其它部分依此类推。

为了在屏幕上显示这种 ASCII 艺术，你需要写一个小小的程序来读取数组并以正确的颜色打印每个字符。

### 设置一个颜色属性

这个 ASCII 艺术文件中的颜色属性在一个字节中定义了背景和前景的颜色，用十六进制的值表示，如 `0x08` 或 `0x6E`。十六进制是适合表达这样的颜色“对”的紧凑方式。

像 Linux 上的 ncurses 或 DOS 上的 conio 这样的字符模式系统 [只能显示 16 种颜色](https://opensource.com/article/21/6/freedos-sixteen-colors)。这就是十六种可能的文本颜色和八种背景颜色。用二进制计算十六个值（从 0 到 15）只需要四个二进制位。

>
> `1111` 是二进制的 15
>
>
>

而且方便的是，十六进制可以用一个字符表示 0 到 15：`0`、`1`、`2`、`3`、`4`、`5`、`6`、`7`、`8`、`9`、`A`、`B`、`C`、`D`、`E` 和 `F`。所以十六进制的值 `F` 是数字 15，或二进制的 `1111`。

通过颜色对，你可以用一个八位的字节来编码背景和前景的颜色。这就是文本颜色的四个二进制位（十六进制中的 0 到 15 或 0 到 F）和背景颜色的三个二进制位（十六进制中的 0 到 7 或 0 到 E）。字节中剩余的二进制位在这里没有使用，所以我们可以忽略它。

为了将颜色对或属性转换成你的程序可以使用的颜色值，你需要 [使用位掩码](https://opensource.com/article/21/8/binary-bit-fields-masks)，只指定用于文字颜色或背景颜色的位。使用 FreeDOS 上的 OpenWatcom C 编译器，你可以编写这个函数，从颜色属性中适当地设置颜色。

```
void
textattr(int newattr)
{
  _settextcolor(newattr & 15);         /* 0000xxxx */
  _setbkcolor((newattr >> 4) & 7);     /* 0xxx0000 */
}

```

`_settextcolor` 函数只设置文本颜色，`_setbkcolor` 函数设置背景颜色。两者都定义在 `graph.h` 中。注意，由于颜色属性在一个字节值中包括了背景色和前景色，`textattr` 函数使用 `&`（二进制的“与”运算）来设置一个位掩码，只隔离了属性中的最后四个位。这就是颜色对存储前景颜色的值 0 到 15 的地方。

为了得到背景色，该函数首先执行了一个位移，将位“推”到右边。这就把“上”位放到了“下”位范围，所以任何像 `0xxx0000` 这样的位都变成了 `00000xxx`。我们可以用另一个的位掩码 7（二进制 `0111`）来挑选出背景颜色值。

### 显示 ASCII 艺术

`IMAGEDATA` 数组包含整个 ASCII 艺术屏幕和每个字符的颜色值。为了在屏幕上显示 ASCII 艺术，你的程序需要扫描该数组，设置颜色属性，然后一次在屏幕上显示一个字符。

让我们在屏幕的底部留出空间，以便向用户提供单独的信息或提示。也就是说，我不想显示一个 80 列 ASCII 屏幕的所有 25 行，而只想显示前 24 行。

```
  /* print one line less than the 80x25 that's in there:
     80 x 24 x 2 = 3840 */

  for (pos = 0; pos < 3840; pos += 2) {
...
  }

```

在 `for` 循环里面，我们需要设置颜色，然后打印字符。OpenWatcom C 编译器提供了一个函数 `_outtext` 来显示带有当前颜色值的文本。然而，这需要传递一个字符串，如果我们需要一个一个地处理每个字符，在一行中的每个字符需要不同颜色的情况下，效率就会很低。

相反，OpenWatcom 有一个类似的函数，叫做 `_outmem`，允许你指示要显示多少个字符。对于一次一个字符，我们可以在 `IMAGEDATA` 数组中提供一个字符值的指针，并告诉 `_outtext` 只显示一个字符。这将使用当前的颜色属性显示该字符，这就是我们需要的。

```
  for (pos = 0; pos < 3840; pos += 2) {
    ch = &IMAGEDATA[pos];              /* pointer assignment */
    attr = IMAGEDATA[pos + 1];

    textattr(attr);
    _outmem(ch, 1);
  }

```

这个更新的 `for` 循环通过向 `IMAGEDATA` 数组分配一个指针来设置字符 `ch`。接下来, 循环设置文本属性, 然后用 `_outmem` 显示字符.

### 整合起来

有了 `textattr` 函数和处理数组的 `for` 循环, 我们可以编写一个完整的程序来显示 ASCII 艺术文件的内容。对于这个例子，将 ASCII 艺术文件保存为 `imgdata.inc`，并用 `#include` 语句将其包含在源文件中。

```
#include <stdio.h>
#include <conio.h>
#include <graph.h>

#include "imgdata.inc"

void
textattr(int newattr)
{
  _settextcolor(newattr & 15);         /* 0000xxxx */
  _setbkcolor((newattr >> 4) & 7);     /* 0xxx0000 */
}

int
main()
{
  char *ch;
  int attr;
  int pos;

  if (_setvideomode(_TEXTC80) == 0) {
    fputs("Error setting video mode", stderr);
    return 1;
  }

  /* draw the array */

  _settextposition(1, 1);              /* top left */

  /* print one line less than the 80x25 that's in there:
     80 x 24 x 2 = 3840 */

  for (pos = 0; pos < 3840; pos += 2) {
    ch = &IMAGEDATA[pos];              /* pointer assignment */
    attr = IMAGEDATA[pos + 1];

    textattr(attr);
    _outmem(ch, 1);
  }

  /* done */

  _settextposition(25, 1);             /* bottom left */

  textattr(0x0f);
  _outtext("Press any key to quit");

  getch();

  textattr(0x00);
  return 0;
}

```

在 FreeDOS 上使用 OpenWatcom C 编译器编译该程序，你会得到一个显示这个节日信息的新程序。

![ASCII艺术中的万圣节信息](/data/attachment/album/202110/31/154350gte33qlh6tcqmhmg.png)

*万圣节快乐（Jim Hall, [CC-BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/))*

万圣节快乐，各位！

* [在此下载 inc 代码文件](https://opensource.com/sites/default/files/uploads/imgdata.inc_.txt)
* [在此下载 C 代码文件](https://opensource.com/sites/default/files/uploads/hallown.c.txt)

---

via: <https://opensource.com/article/21/10/ascii-linux-halloween>

作者：[Jim Hall](https://opensource.com/users/jim-hall) 选题：[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/) 荣誉推出


硬核观察  #441 Linux 发行版在性能测试中击败 Windows 11

Summary: 更多：• NASA 希望人工帮助改善火星车的人工智能 • Hive 勒索软件已经准备加密 Linux 和 FreeBSD

![](/data/attachment/album/202110/31/171432xfcrjy09wiocojyq.jpg)

### Linux 发行版在性能测试中击败 Windows 11

![](/data/attachment/album/202110/31/171443e81mw0dgwjsg7j18.jpg)

Phoronix 本周进行了一些有趣的 [性能测试](https://www.phoronix.com/scan.php?page=article&item=11900k-windows11-clear&num=1)。所有 44 项测试的几何平均值显示，在当前这一代英特尔平台上，Linux 明显领先于 Windows 11。在这个系统上，Ubuntu / Arch / Fedora 总体上比 Windows 11 Pro 快 11% 左右。Clear Linux 比 Windows 11 快约 18%，总体上比其他 Linux 发行版的性能高约 5%。Clear Linux 获得了 33 项的第一，Windows 11 Pro 获得 3 项第一。

>
> 老王点评：不出意料的结果，不过 Clear Linux 居然得到大部分的第一，值得关注。
>
>
>

### NASA 希望人工帮助改善火星车的人工智能

![](/data/attachment/album/202110/31/171502ggekbp1s0ooup2gp.jpg)

NASA 呼吁任何有兴趣的人为其火星车的机器学习算法 [做出贡献](https://mars.nasa.gov/news/9063/you-can-help-train-nasas-rovers-to-better-explore-mars/)，以帮助毅力号火星车四处游走。你所需要做的就是看一些图片并标记地质特征。毅力号有增强的人工智能，以帮助它避开障碍物。它有 23 个摄像头，可以从火星上捕捉到大量的视觉数据，但它必须依靠人类操作员来解释其中大部分图像，从而改善其人工智能水平。

>
> 老王点评：所谓人工智能还是需要“人工”才能智能。
>
>
>

### Hive 勒索软件已经准备加密 Linux 和 FreeBSD

![](/data/attachment/album/202110/31/171519midzcifqfn3p8idf.jpg)

Hive 勒索软件团伙自 2021 年6月以来袭击了 30 多个组织，现在针对 Linux 和 FreeBSD 开发了 [新的恶意软件变种](https://www.bleepingcomputer.com/news/security/hive-ransomware-now-encrypts-linux-and-freebsd-systems/) 来加密这些系统。不过，ESET 发现，Hive 的新加密器尚在开发中，仍缺乏功能，并且存在一些 bug。相比之下，Hive 的 Windows 勒索软件具有更多功能。

>
> 老王点评：Linux 和 FreeBSD 管理员们需要注意了，它们并不具有先天的高安全性。
>
>
>


如何在 Linux 上杀死一个僵尸进程

Summary: 要杀死一个僵尸进程，你必须从进程列表中删除其名称。

要杀死一个僵尸进程，你必须从进程列表中删除其名称。

>
> 要杀死一个僵尸进程，你必须从进程列表中删除其名称。
>
>
>

![](/data/attachment/album/202111/01/095024jyrvo8ss5jnxysqo.jpg "Full moon on a hazy night")

这里有一个和 Unix 纪元一样古老的故事。自从有了 C 和 Unix，以及（后来的）Linux，我们就有了“<ruby> 僵尸 <rt>  zombie </rt></ruby>”。具体来说，有一些进程被标记为“<ruby> 僵尸进程 <rt>  zombie process </rt></ruby>”。一些人误解它，另一些人忽视它，而它对我们许多人试图 “杀死” 这些进程的努力免疫，没有什么成效。这是为什么呢？

### Linux 中的进程是什么？

这一切始于执行 Linux 中的一个程序时，当它被执行时，它的运行实例被称为进程。你可以用 [ps 命令](https://opensource.com/article/21/8/linux-procps-ng) 查看你的 Linux 环境中的所有进程：

```
$ ps -ax
        PID TTY         STAT   TIME COMMAND
        1 ?     Ss      0:01 /usr/lib/systemd/systemd rhgb --switched-root --sys
        2 ?     S       0:00 [kthreadd]
        3 ?     I<      0:00 [rcu_gp]
        4 ?     I<      0:00 [rcu_par_gp]

```

有时一个进程启动另一个进程，使第一个进程成为第二个进程的父进程。`pstree` 命令是一个很好的工具，可以让你看到系统中进程的“家谱”：

```
$ pstree -psn
systemd(1)─┬─systemd-journal(952)
        ├─systemd-udevd(963)
        ├─systemd-oomd(1137)
        ├─systemd-resolve(1138)
        ├─systemd-userdbd(1139)─┬─systemd-userwor(12707)
        │                     ├─systemd-userwor(12714)
        │                     └─systemd-userwor(12715)
        ├─auditd(1140)───{auditd}(1141)
        ├─dbus-broker-lau(1164)───dbus-broker(1165)
        ├─avahi-daemon(1166)───avahi-daemon(1196)
        ├─bluetoothd(1167)

```

每个进程在系统中都会被分配一个编号。进程编号（PID）1 被分配给启动过程中执行的第一个进程，PID 1 之后的每一个进程都是它的子孙。PID 1 进程是初始化进程，在大多数新版本的 Linux 中，它只是一个指向 `systemd` 程序的符号链接。

### 用 kill 命令结束一个进程

你可以用 `kill` 命令来终止 Linux 系统中的进程。尽管名字叫 “杀死”，但 `kill` 命令和其他一些命令，如 `pkill` 和 `killall`，都是为向一个或多个进程发送信号而编写/设计的。当没有指定信号时，它发送的默认信号是 `SIGTERM` 信号，以终止进程。

当一个父进程死亡或被杀死，而其子进程没有跟随其父进程的死亡，我们称该进程为“<ruby> 孤儿进程 <rt>  orphan process </rt></ruby>”。

### 如何杀死一个僵尸进程

另一方面，僵尸进程是不能被“杀死”的！你可能会问为什么？因为它们已经死了！

每一个子进程，当被终止时，都会成为一个僵尸进程，然后被父进程删除。当进程退出并释放它所使用的资源时，它的名字仍然在操作系统的进程表中。这时，父进程的工作就是把它的名字从进程表中删除。如果没有删除，我们就有了僵尸进程，它不再是一个真正的进程，而只是操作系统进程表上的一个条目。

这就是为什么试图对一个<ruby> 失效的 <rt>  defunct </rt></ruby>（僵尸）进程执行 “杀死” 命令，即使使用 `-9`（`SIGKILL`）选项也不起作用，因为没有什么可以杀死的。

因此，要杀死一个僵尸进程，比如从进程列表（进程表）中删除其名称，你必须杀死其父进程。例如，如果 PID 5878 是一个僵尸进程，而它的父进程是 PID 4809，那么要杀死僵尸进程（5878），就必须结束父进程（4809）：

```
$ sudo kill -9 4809  # 4809 是父进程，而非僵尸

```

我对僵尸的最后一句警告：在杀死父进程时要非常小心。如果一个进程的父进程是 PID 1，而你杀了它，你就会重新启动自己！

而这将是一个更可怕的故事！

---

via: <https://opensource.com/article/21/10/linux-zombie-process>

作者：[Anderson Silva](https://opensource.com/users/ansilva) 选题：[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/) 荣誉推出


Annotator：为 Linux 图片添加基本注解

Summary: 一款令人兴奋和有用的注解工具，为 Linux 系统提供额外的功能。

一款令人兴奋和有用的注解工具，为 Linux 系统提供额外的功能。

![](/data/attachment/album/202111/01/102651ic6c6azacc8m8jxa.jpg)

>
> 一款令人兴奋和有用的注解工具，为 Linux 系统提供额外的功能。
>
>
>

谈及图像处理和编辑，有很多工具可用。然而，像 GIMP 这样的工具不一定能解决所有问题。

GIMP 确实为初学者和高级用户提供了大量的功能，但要学习一些东西并对图像进行视觉增强功能的应用可能很费时。

Annotator 是一个令人印象深刻的开源工具，可以让你能轻松完成很多事情。

### Annotator：开源图像注解工具

![](/data/attachment/album/202111/01/102658bvowiwip0yronxr8.png)

Annotator 帮你快速添加形状、文本和其他视觉元素。这对各种使用情况都很有用。

这个工具提供了一个简单的用户界面并且易于使用。而且，你还可以通过各种你想要的功能来增强图像。

### Annotator 的功能

![Adding icons to images](/data/attachment/album/202111/01/102659s99t2ic9iu87cwps.png)

不局限于图片增强，你还可以通过 Annotator 获得一些其他功能。其中的一些主要功能是：

* 能够添加文本
* 自定义文本的颜色，调整大小，调整高亮的颜色等
* 使用放大镜工具来关注图像中的某个特定点
* 调整放大镜以改变角度和大小
* 添加视觉图标来表达一些东西
* 使用铅笔来书写，这对触控板用户很有用
* 模糊工具来模糊重要或不必要的细节
* 计数器图标来突出图像中重要的任何种类的顺序
* 支持多种字体
* 调整形状和文本的边界宽度和线条
* 可用各种形状，如箭头、圆圈和星星
* 能够调整图像的大小和裁剪图像

![](/data/attachment/album/202111/01/102659nfcszp6hgl9jqklq.png)

### 在 Linux 中安装 Annotator

Annotator 通常可在 elementaryOS 的应用中心找到。但幸运的是，它是一个 Flatpak 包，所以你可以在任何 Linux 发行版上安装它。

你所需要做的就是前往应用中心商店的链接，然后使用软件安装程序下载/打开 **Flatpak ref** 文件。如果你需要帮助，我们的 [Flatpak 指南](https://itsfoss.com/flatpak-guide/) 中有更多相关信息。

[Annotator](https://appcenter.elementary.io/com.github.phase1geo.annotator/)

要从源代码构建或探索更多关于它的信息，你可以查看它的 [GitHub 页面](https://github.com/phase1geo/Annotator)。

### 关于使用 Annotator 的想法

我发现它对我的工作很有用，因为我们每天都需要处理各种截图。而且，描述性越详细，图片就越能让我们的读者理解。

通常情况下，我使用 Flameshot 作为我的截图工具，并通过它添加可用的注解。还有其他 [可用于 Linux 的截图工具](https://itsfoss.com/take-screenshot-linux/)，但我更喜欢 Flameshot 的快速注解功能。

然而，你不能使用 Flameshot 或其他任何截图工具来为现有的图片添加注解。

因此，Annotator 在编辑现有的截图或任何其他所需的图像时就显得非常方便。

在我短暂的使用过程中，它的所有功能都运行良好，不过我希望可以编辑和调整文字的大小，使之更加直观。

如果你需要为系统上的图像添加高亮/注解，我建议你试一试。请在下面的评论中告诉我你的想法。

---

via: <https://itsfoss.com/annotator/>

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

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


硬核观察 #442 法院要求 Signal 提供私人用户数据，但它根本没有

Summary: 更多：• Linux 5.15 内核发布，NTFS3 驱动上线 • 开源软件给特朗普的社交网站 30 天时间遵守 AGPL 许可证

![](/data/attachment/album/202111/01/183041gid9ncilxnnnip9c.jpg)

### 法院要求 Signal 提供私人用户数据，但它根本没有

![](/data/attachment/album/202111/01/183057itgl3u8tz25u9gti.jpg)

端对端加密消息应用 Signal 通过其官方博客 [公布](https://signal.org/bigbrother/cd-california-grand-jury/) 了它收到的一张法庭传票，传票要求它提供各种用户数据。然而Signal 根本没有数据可以提供。这家公司指出，“Signal 无法访问你的信息、你的聊天列表、你的群组、你的联系人、你的贴纸，你的个人资料名称或头像。” Signal 能提供给法庭的唯一东西就是有关账号创建和最后一次访问该服务的 Unix 时间戳。

>
> 老王点评：这简直就是给 Signal 打广告啊。
>
>
>

### Linux 5.15 内核发布，NTFS3 驱动上线

![](/data/attachment/album/202111/01/183115u61nlmymkf55ui6r.jpg)

Linux 5.15 [正式释出](https://lkml.org/lkml/2021/10/31/203)，该版本的提交数是 5.x 系列最少的。主要新变化包括：Paragon 开发的 NTFS3 内核驱动终于进入了主线；新内核模块 KSMBD 实现了服务器端 SMB3 协议；在 DRAM 满的情况下内存页的内容转移到持久性内存而不是直接丢弃；等等。

>
> 老王点评：虽然不知道有多少人会在 Linux 下使用 NTFS 卷，但是看到这个商业驱动终于变成了开源软件的一部分，还是很好的。
>
>
>

### 开源软件给特朗普的社交网站 30 天时间遵守 AGPL 许可证

![](/data/attachment/album/202111/01/183134jr7zejng4f4nn7f9.jpg)

自由软件社交网络项目 Mastodon 向美国前总统特朗普的公司发去 [正式通知](https://blog.joinmastodon.org/2021/10/trumps-new-social-media-platform-found-using-mastodon-code/)，要求其基于 Mastodon 开发的社交网络 TRUTH Social 遵守 AGPL 许可证公开修改的源代码。特朗普旗下的公司上周 [宣布](https://www.solidot.org/story?sid=69332) 了新的社交网络 TRUTH Social，预计 11 月开放测试。然而 TRUTH 很快被发现是基于 Mastodon，按照 AGPL 许可证要求它需要公开源代码。

>
> 老王点评：这老头可以说，没有人比我懂开源软件和许可证。
>
>
>


VS Code 还是 Atom？你应该选择哪个

![](/data/attachment/album/202111/01/231806jk4mky6gjmrw4mgm.png)

如今，找到一个 [好的开源代码编辑器](https://itsfoss.com/best-modern-open-source-code-editors-for-linux/) 并不难，随便选择一个就可以了。

微软的 [VS Code](https://code.visualstudio.com/) 和 GitHub 的 [Atom](https://atom.io/) 是两个最流行的、功能丰富的、类似于 IDE 的代码编辑器，都拥有庞大的用户群和粉丝。

VS Code 和 Atom 现在都属于微软，因为 Atom 的原开发者 GitHub 现在属于微软。这两个都有一个有吸引力的、现代的 UI，有一个漂亮的原生黑暗主题。两个编辑器都使用 [Electron](https://www.electronjs.org/) 作为用户界面。

相似的地方很多，这就是为什么你很容易在它们中间选择时感到迷惑。

如果你不能下定决心，想在 VS Code 和 Atom 之间进行一番比较和选择，这篇文章应该可以帮助你。

### VS Code

![VS Code 的用户界面与拥挤的项目界面](/data/attachment/album/202111/01/231812onun5juacaxjuyxt.png)

[VS Code](https://code.visualstudio.com/) 是开源的现代编辑器之一。它的用户群爆炸性地增长，因为它具有类似 IDE 的功能，但仍然保持相对较轻的资源占用。

VS Code 是由微软制作的，可用于 Linux、macOS 和 Windows。微软于 2015 年 11 月 18 日在 [GitHub](https://github.com/microsoft/vscode) 上根据 MIT 许可发布了 VS Code 的 *大部分* 源代码。

VS Code 的开发者对 Electron 进行了一些奇妙的优化，使其尽可能的轻量级和高效。由于 Electron 应用程序可以在大多数操作系统上运行，Linux、macOS 和 Windows 的用户都可以从这些优化中受益。

[在 Linux 上安装 VS Code](https://itsfoss.com/install-visual-studio-code-ubuntu/) 也相当简单。事实上，它在许多发行版的软件中心都有。

#### 为什么你应该选择 VS Code？

* 那些从一开始就想获得接近 IDE 的功能，而又不想摆弄他们的代码编辑器的人，[通常] 会选择 VS Code 。
* 即使是基于 Electron，VS Code 与其他 Electron 应用（如 GitHub 的 Atom）相比，开销也非常小。
* 更多开箱即用的功能，如微软的 IntelliSense 自动补完、Git 集成、Markdown 支持等等。
* 插件可以只用来增加功能、主题和支持新的语言；而这种插件约束确保编辑器的核心在增加新插件后仍保持熟悉。

[由微软分发的](https://code.visualstudio.com/Download) 二进制版本仍然是专有的免费软件。[VSCodium](https://vscodium.com/) 建立在 VS Code 的公开源代码之上。然而，关于 VSCodium 的讨论超出了本文的范围，如果你想获得 VS Code 提供的功能，而又没有任何专有元素的话，可以考虑将其作为 VS Code 的一个可行的替代品。

Atom
----

![Atom 编辑器的用户界面](/data/attachment/album/202111/01/231813o76i0qih0ot7ixsw.png)

[GitHub 的 Atom](https://atom.io/) 是另一个自由开源的代码编辑器，可用于 Linux、macOS 和 Windows。Atom 是一个使用 JavaScript 通过 Electron 制作的桌面应用程序，用于轻松开发软件包。

Atom 的源代码是根据 MIT 许可发布 [在 GitHub 上](https://github.com/atom/atom) 的。由于 Atom 是 GitHub 的产品，因此它嵌入了 Git Control。

Atom 被称为“<ruby> 可魔改的 <rt>  hackable </rt></ruby> 21 世纪文本编辑器”，因为它可以使用 HTML、CSS 和 JS 完全定制。

像 VS Code 一样，你可以轻松地在其他平台和 [Linux 上安装 Atom](https://itsfoss.com/install-atom-ubuntu/) 。

#### 选择 Atom 的理由

* Atom 是那些想要一个基础的编辑器，并希望在其上进行开发的人的首选，因为 Atom 的可魔改性质。
* 内置了 Git 和完整的 GitHub 集成；考虑到它是由 GitHub 开发的，这并不令人惊讶。
* 从应用程序中非常容易搜索、安装和升级 [Atom 的插件](https://itsfoss.com/install-packages-in-atom/)。
* 可用的 Atom 插件是非常可扩展的，甚至可以完全改变编辑器的功能，并最终创造出几乎一个新的编辑器；它确实是“可魔改”的。
* Atom 的二进制版本和它的源代码是完全开源的（不像 VS Code 的二进制版本包含专有部分+遥测）。
* 你可以 [把 Atom 从一个代码编辑器变成 IDE](https://ide.atom.io/)，有更智能的上下文自动完成、代码导航功能、文档格式化等。

### 总结

Atom 和 VS Code 都是建立在 Electron 之上的。但是微软在 VS Code 上做了更多的优化，使其尽可能的轻量化。

在这一点上，VS Code 就像 Ubuntu，几乎所有的东西都开箱即用。而 Atom 就像 Arch，精简，而极易魔改（可扩展）。

Atom 和 VS Code 在技术上都隶属于微软，最终它们会殊途同归。因此，最好是使用你的社区（网页开发/软件开发）所倾向的编辑器，并铺平前进的道路。也许你最终会选择 Vim！

---

via: <https://itsfoss.com/visual-studio-code-vs-atom/>

作者：[Pratham Patel](https://itsfoss.com/author/pratham/) 选题：[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/) 荣誉推出


硬核观察 #443 研究人员在源代码中隐藏人眼看不见的漏洞

Summary: 更多：• 美国航空机构与电信机构因 5G 发生争执 • 蓝牙标签被用来跟踪被盗物品

![](/data/attachment/album/202111/02/084522eyovcqmhoqmkrpog.jpg)

### 研究人员在源代码中隐藏人眼看不见的漏洞

![](/data/attachment/album/202111/02/084531uwmi7ivaqi7crfr7.jpg)

剑桥大学的研究人员发表论文，[介绍了](https://www.lightbluetouchpaper.org/2021/11/01/trojan-source-invisible-vulnerabilities/) 在源代码中隐藏人眼看不见的漏洞的攻击方法。这种被称为 [Trojan-Source](https://trojansource.codes/trojan-source.pdf) 的攻击方法利用了 Unicode 中的特殊字符，通过方向覆盖、同形异义等方法创造出对编译器和人类视觉上存在差异的源代码。人眼看不出漏洞，但对编译器来说逻辑编码顺序和显示的顺序是不同的。这种攻击方法对大多数主流编程语言都有效，研究人员已经将漏洞报告给了相关项目。

>
> 老王点评：“眼见并不为实”，这个锅一方面是 Unicode 无克制的增加各种奇怪字符和控制字符导致的，另外一方面也是传统上面对 ASCII 字符的编程语言支持 Unicode 时没有预料到这种恶意利用。
>
>
>

### 美国航空机构与电信机构因 5G 发生争执

![](/data/attachment/album/202111/02/084554v4mfnaxiimhx9i4f.jpg)

美国联邦航空管理局正准备向飞行员和航空公司发出警告，指出一项新的 5G 无线服务可能会干扰飞机驾驶舱安全系统、自动化系统，该服务将于 12 月初上线。美国联邦通信委员会则对安全问题进行了反驳，称在审查了对航空安全的潜在影响后，于 2020 年初制定了频谱使用规则，现有证据不支持 5G 网络会干扰航空安全的结论。双方争论的核心问题是无线电频谱在 3.7 到4.2 GHz 之间的波段。该波段非常适合 5G 网络传输，并且已经服务于一些国家的手机网络中。而航空设备则工作在 4.2 至 4.4 GHz 的附近频段，因此，美国联邦航空管理局觉得增加了干扰的可能性。

>
> 老王点评：说到底，还是频谱之争。
>
>
>

### 蓝牙标签被用来跟踪被盗物品

![](/data/attachment/album/202111/02/084609ybz5s5qxsqk7fx2c.jpg)

今年 4 月，苹果公司发布了 29 美元的 AirTag，为更广泛的受众带来了更有效的蓝牙跟踪技术。虽然苹果公司从没有说过 AirTag 可被用于 [追回被盗财产](https://www.msn.com/en-us/news/technology/i-found-my-stolen-honda-civic-using-a-bluetooth-tracker-it-s-the-latest-controversial-weapon-against-theft/ar-AAQ0DQw)，但实际上该公司建立了一个非常适合此类用例的网络。每一款兼容的 iPhone、iPad 和 Mac 都被默默地用作定位设备，AirTag 使用蓝牙向最近的 Apple 设备发送带有其加密位置的 ping，这些设备将信息传递到苹果的 Find My 网络。兼容 Apple 设备有近 10 亿台，使得 Find My 非常有效，尤其是在城市中。

>
> 老王点评：从技术上来说，是一个非常有用的进步，但是如何避免被滥用是个问题。
>
>
>


Ferdi：Franz 和 Rambox 的自由开源替代品

>
> Ferdi 是一个很有前途的开源应用，是 Franz 和 Rambox 的替代品，免费提供了更多功能。让我们来探索一下它的更多信息。
>
>
>

![](/data/attachment/album/202111/03/171216dxojy2xuivii4xii.jpg)

有一个可以帮助你管理多个服务的应用会方便，这样你就不用什么事情都要打开一个浏览器去做了，虽然从技术上讲，你可以这样，但这肯定不是最有条理的做事方式。

因此，像 [Rambox](https://itsfoss.com/rambox/) 和 [Franz](https://itsfoss.com/franz-messaging-app/) 这样的跨平台解决方案是相当流行的，它可以登录到几个服务，并一目了然地访问所有的服务。

尽管它们都可用于 Linux（而且我们已经单独介绍过它们），但它们免费提供的功能有限。

相比之下，Ferdi 是 Franz 的一个复刻，旨在提供更好的体验，同时免费提供了许多高级功能。

### Ferdi: 一处管理多个应用

![](/data/attachment/album/202111/03/171227xk6ek2wv2zuwmujp.png)

Ferdi 是一个自由开源应用，让你在一个地方添加多个应用，包括各种消息服务。

它还可以让你定制应用的各个方面和它的行为。如果你喜欢像 Rambox 和 Franz 这样的应用，你更应该看看 Ferdi。

### Ferdi 的特点

![](/data/attachment/album/202111/03/171227tn81k5cemcpnguen.png)

你可以发现它有大量的功能，而不需要支付额外费用。在这里，我将重点提到一些关键的功能：

* 跨平台支持（Linux、Windows 和 macOS）。
* 包含丰富的信息服务（Slack、WhatsApp、Element 等）。
* 支持用 Franz 账户登录
* 能够对信息进行密码保护
* 可以选择使用你的自定义服务器
* 快速访问待办事项列表，可选择使用 Franz Todo、Todoist、Microsoft To Do、[Any.do](http://Any.do) 等
* 通过在不使用时卸载应用（休眠）来调整性能
* 私密通知，以隐藏你的信息
* 支持“请勿打扰”模式
* 可为每个应用单独切换黑暗模式
* 云同步
* 对账户数量没有限制
* 能够设置一个代理，并通过它进行连接
* 可以添加多个工作空间

### 关于使用 Ferdi 的想法

![](/data/attachment/album/202111/03/171227p2uooudd3z30fdff.png)

就像 Rambox 和 Franz 一样，Ferdi 不可避免的会消耗大量资源。所以，你需要知道你是否有足够的内存来让几个应用在 Ferdi 中活动。

在不使用时，能够卸载应用是件好事。因此，如果你的资源不足，你可能想利用休眠选项。

![](/data/attachment/album/202111/03/171228b06ge00tl6hn86e2.png)

Ferdi 还提供一些高级选项，如 GPU 加速、通用黑暗模式、隐私切换、外观定制等。你甚至可以添加没有列出的自定义服务。

![](/data/attachment/album/202111/03/171228u9ll48lm0409agcg.png)

总的来说，在 Ferdi 中你会得到许多功能和选择，你可以用这些选项组合有效地将多个应用有条理地组织起来。

### 在 Linux 中安装 Ferdi

Ferdi 提供了多个软件包，便于在 Linux 上安装。你可以找到一个适用于 Ubuntu/Fedora 的 DEB/RPM 包，以及一个适用于所有其他 Linux 发行版的 [AppImage 文件](https://itsfoss.com/appimage-interview/)。

他们还提供了一个 snap 包，并且也可以通过 [AUR](https://itsfoss.com/aur-arch-linux/) 安装。所以，你有很多选择来让它安装在你的 Linux 电脑上。

你可以探索他们的 [GitHub 页面](https://github.com/getferdi/ferdi) 并前往其发布页下载，或者访问其官方网站。

* [下载 Ferdi](https://getferdi.com/)

你试过 Ferdi 了吗？它是否达到了取代 Franz 或 Rambox 的目的？它是否更好？请在下面的评论中分享你的经验。

---

via: <https://itsfoss.com/ferdi/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[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/) 荣誉推出


如何更改 Ubuntu 的终端的颜色

Summary: 如果你只是想完成一些工作，默认的终端已经看起来足够好了。

如果你只是想完成一些工作，默认的终端已经看起来足够好了。

![](/data/attachment/album/202111/03/173150n4wjwgi4iii4662z.jpg)

如果你只是想完成一些工作，默认的终端已经看起来足够好了。

但是，如果你想要一个独一无二的的终端体验或者符合你自身品位的一些东西，你也可以改变你的 Ubuntu 的终端的颜色。

在这篇速成教程中，我将专注于调整 Ubuntu 中的颜色方案。由于 Ubuntu 使用 GNOME 的终端，因此这些步骤可能也对大多数的使用 GNOME 桌面环境的其它的发行版有效。

### 更改你的 Ubuntu 的终端的颜色

这些步骤类似于 [如何更改终端的字体和大小](https://itsfoss.com/change-terminal-font-ubuntu/)。你必须找到自定义颜色的选项，就是这样的简单。

让我们快速指出你需要找到什么：

**步骤 1**：[在 Ubuntu 中打开终端窗口](https://itsfoss.com/open-terminal-ubuntu/)，方法是按 `Ctrl+Alt+T` 组合键。

**步骤 2**：打开终端<ruby> 首选项 <rt>  Preferences </rt></ruby>。你可以单击菜单按钮或者右击终端屏幕的任意位置来访问首选项。

![](/data/attachment/album/202111/03/173200krrlbl201sqnqv51.png)

针对你的自定义选项，创建一个独立的配置文件将会是一个好主意，因为这样做不会更改默认的设置。

![](/data/attachment/album/202111/03/173202ap0j190lp6xppnmi.jpg)

**步骤 3**：现在，你可以找到一些调整字体大小和样式的选项。但是，在这里，你需要前往 “<ruby> 颜色 <rt>  Colors </rt></ruby>” 选项卡，如下面的屏幕截图所示。

![](/data/attachment/album/202111/03/173204iwy2wtvi2iriwjoe.png)

**步骤 4**：在默认情况下，你将会注意到：它使用来自系统主题的颜色。如果你想融入你自己的系统主题，这应该是首选的方式。

但是，如果你想要自定义，你需要先取消系统的颜色的选项，然后再开始选择颜色。

![](/data/attachment/album/202111/03/173206ngr7zrogrogqnp97.jpg)

如你在上面的屏幕截图中能够注意到的那样，你可以选择使用一些内置的颜色方案，也可以 **通过更改文本和背景的默认颜色选项** 来完成自定义颜色方案。

如果你选择一种“自定义”内置方案，那么你可以自定义从文本到光标的各个层面的终端的屏幕颜色。

![](/data/attachment/album/202111/03/173208tub25gg2xgzdp26e.png)

再强调一次！如果你想快速地访问终端的不同的自定义版本，请创建一个单独的配置，否则，每次当你想要一种独特的颜色组合方案时，你都将需要重新自定义。

### 更改终端的颜色的其它的方法

这里有其它的几种更改 Ubuntu 的终端的颜色的方法：

#### 更改主题

大多数的 Ubuntu 主题都有它们自己的终端的颜色的实现，并且其中的一些实现看起来非常漂亮。这里是如何针对 Ant 和 Orchis 主题进行更改终端的颜色方案：

![](/data/attachment/album/202111/03/173210gogo7mwb5939y7no.png)

你可以选择一种黑暗主题，接下来你的主题将会变成黑色。不需要担心选择颜色方案的问题。

#### 依据你的壁纸选择终端颜色

如果你不想手动自定义你的终端的颜色，你可以使用 Pywal 。使用这个方便的 Python 工具，你的计算机能够随着你的每一张壁纸来 [更改你的终端的颜色方案](https://itsfoss.com/pywal/) 。

它将自动地适配你所使用的壁纸。因此，你不需要费心地自定义终端。

### 针对你的终端的自定义选项

如果你是一个更高级的玩家，你可能会热衷于更多的自定义终端的外貌的选项。你可以通读我们关于 [调整终端的外貌的不同的方法](https://itsfoss.com/customize-linux-terminal/) 的资源来探索更多的信息。

你更喜欢自定义终端吗？在下面的评论区，让我们知道你的经历！

---

via: <https://itsfoss.com/change-terminal-color-ubuntu/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[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/) 荣誉推出


硬核观察 #444 自 JDK 17 开始 Oracle JDK 又可以免费商用了

Summary: 更多：• 科学家开发出可存储 138 亿年的 5D 光盘 • 麦当劳开源了薯条字体

![](/data/attachment/album/202111/03/184639f0ym0lds1yshi0kf.jpg)

### 自 JDK 17 开始 Oracle JDK 又可以免费商用了

![](/data/attachment/album/202111/03/184650oxhxchexxsjcedvi.jpg)

Oracle 最新发布的 [NFTC 许可](https://www.oracle.com/downloads/licenses/no-fee-license.html) 中撤回了 2018 年制定的要对 Oracle JDK 收取商用费用的决定，并且也将继续提供 Oracle OpenJDK 发行版。最新 NFTC 适用于最近发布的 Oracle JDK 17 和后续版本。Oracle [对此解释称](https://blogs.oracle.com/java/post/free-java-license)，“在 GPL 下提供的 Oracle OpenJDK 构建版本是非常受欢迎的，但来自开发者、学术界和企业的反馈是，他们也希望在一个明确的自由条款许可下获得值得信赖、坚如磐石的 Oracle JDK。”并明确表示，新版 NFTC “包括商业和生产用途”，而且“只要不收费，允许再分发”。但调查表明，甲骨文的 JDK 发行版已不再是最受欢迎的 Java 发行版。开发人员们更喜欢 AdoptOpenJDK、亚马逊、微软等其他供应商的 OpenJDK 发行版。

>
> 老王点评：早知今日何必当初。但是即便如此，我也不看好他们对开源方面的态度。
>
>
>

### 科学家开发出可存储 138 亿年的 5D 光盘

![](/data/attachment/album/202111/03/184709qbkpsztyxrurszom.jpg)

南安普顿大学的研究人员“开发了一种快速和节能的激光写入方法，用于在硅玻璃中生产高密度的纳米结构，这些微小的结构可用于长期的 [五维光学数据存储](https://www.extremetech.com/extreme/328700-5d-optical-disc-could-store-500tb-for-billions-of-years)，其密度是蓝光光盘存储技术的 10,000 倍以上。”数据存储在玻璃光盘中三层纳米级的点上，这些点的大小、方向和位置（在三个维度上）提供了用于编码数据的五个“维度”。研究人员说，5D 光盘可以在 138 亿年后仍然可读，并且在较短的时间内被加热到 1000 摄氏度后也可以继续保持数据。写入数据速率大约为每秒 230 KB，一张 5D 光盘可存储 500 TB 数据。这项工作仍处于早期阶段。

>
> 老王点评：有趣的技术，就是不知道这些光盘怎么保存 138 亿年。
>
>
>

### 麦当劳开源了薯条字体

![](/data/attachment/album/202111/03/184748f2rm2skrmzzzkiyu.jpg)

上周，麦当劳授权薯条体在 [GitHub](https://github.com/mcdtaiwan/McDonalds_Fries_Font) 上开源。该字体带有薯条和番茄酱设计风格，可以免费下载，只要标注 “#麦当劳薯条体”字样就能自由使用，包括商业用途。

>
> 老王点评：感觉这字体适合在万圣节、密室逃脱中使用。
>
>
>


Fedora 35 登场：带来了 GNOME 41 和一个新的 KDE 变体

>
> Fedora 35 发布了，带来了 GNOME 41，并有一个专注于可靠性的基于 KDE 的新变体。
>
>
>

![](/data/attachment/album/202111/04/092117daga2ccxul4f4xq2.png)

在测试版发布几周后，Fedora 35 稳定版终于来了！这个版本带来了一些关键性的改进，我们将在这里介绍它们。

这些改进中最值得注意的是加入了最近发布的 GNOME 41，同时还有一些小的升级，如 Linux 内核 5.14 和完成向 PipeWire 的过渡。

现在，让我们来简要看一下这些变化，以及 Fedora 35 引入的一些改进。

### Fedora 35 的关键升级

下面是 Fedora 35 中一些比较有影响的升级和新增功能。

### 桌面环境

Fedora 因其对最新桌面环境的支持而闻名，而这一点在这个版本中似乎没有改变。

#### GNOME 41

![](/data/attachment/album/202111/04/092118f49lzud4yy354033.png)

Fedora 35 工作站现在搭载了目前最受欢迎的 GNOME 41。这意味着它有了新的“<ruby> 连接 <rt>  Connections </rt></ruby>”应用、显著改进的软件中心，以及一些很棒的多任务控制。

它还对笔记本用户有所帮助，因为它改进了触摸板手势、电源配置文件和移动数据设置。

如果你想看看还有什么新东西，你可以看看我们的 [GNOME 41 发布报道](https://news.itsfoss.com/gnome-41-release/)。

#### KDE Plasma 5.22

![](/data/attachment/album/202111/04/092120q6vdb7nl7ve6d74d.png)

不过，这个版本并不包括最近发布的 Plasma 5.23，而是选择了 [Plasma 5.22](https://news.itsfoss.com/kde-plasma-5-22-release/)。不过，这是可以理解的，因为 Fedora 团队只有一周的时间。

虽然是一个相当小的升级，Plasma 5.22 确实带来了自适应透明功能，以及改进的 Krunner 和系统设置。如果你有兴趣，你可以看看 [KDE Plasma 5.22](https://news.itsfoss.com/kde-plasma-5-22-release/) 的更多信息。

### 新的 KDE 版本：Fedora Kinoite

![](/data/attachment/album/202111/04/092121paw9vsfi5n8wsbev.jpg)

Fedora Kinoite 采用 KDE Plasma 桌面，并且它是基于 rpm-ostree 技术的。你可以得到开箱即用的 Flatpak 应用程序支持，以轻松安装软件。

根据其官方的描述：

>
> “Kinoite 提供原子更新和一个不可变操作系统，以提高可靠性。”
>
>
>

因此，它可能是一个值得尝试的选择，可以作为你的 Linux 桌面操作系统用于日常工作，而不存在因更新而破坏用户体验的风险。

截至目前，它支持 X86\_64 和 AArch64 架构。你可以去它的 [项目网站](https://kinoite.fedoraproject.org/) 了解一下。

### Linux 5.14 内核

早在八月份，我就介绍了 [新的 Linux 5.14](https://news.itsfoss.com/kernel-5-14-release/) 内核，它现在已经出现在了 Fedora 35 中。这对那些基于 ARM 的系统来说是个好消息，因为 Linux 5.14 带来了许多针对 ARM 的改进。

如果你没有使用 ARM 计算机，你仍然会从 Linux 5.14 的一些其他改进中受益。这些改进主要与 GPU 有关，以及对 USB 4 的改进支持。

#### DNS over TLS 支持

随着隐私变得越来越重要，像 DNS over TLS（DoT）这样的技术正在成为我们隐私的一个关键部分。现在，Fedora 35 带来了对这项技术的支持，它有助于加密你进出 DNS 服务器的互联网流量。

这意味着你的 ISP 不能监视你的浏览习惯，我相信每个人都会喜欢这一点。

### 其他改进

除了前面提到的那些，Fedora 35 还带来了对以下新功能的支持。

* Firewalld 软件包更新
* GNU 工具链更新
* 支持第三方软件库中的 Flathub 应用程序
* Fedora Cloud 默认采用 btrfs 文件系统
* 过渡到 Pipewire

如果你想看完整的变化列表，可以在 [官方更新列表](https://fedoraproject.org/wiki/Releases/35/ChangeSet) 或 [官方公告](https://fedoramagazine.org/announcing-fedora-35/) 中找到。

### 总结

虽然这个版本没有像 Fedora 34 那样带来很多突破性的改进，但我认为用户会对它更加满意。在 GNOME 41 和 Linux 5.14 之间，用户应该会发现他们的系统有了不错的改进。

如果你想亲自尝试一下 Fedora 35，请随时从下面的链接中下载它。

* [下载Fedora 35](https://getfedora.org/)

你对 Fedora 35 中引入的变化有什么看法？请在下面的评论中告诉我！

---

via: <https://news.itsfoss.com/fedora-35-release/>

作者：[Jacob Crume](https://news.itsfoss.com/author/jacob/) 选题：[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/) 荣誉推出