Archcraft：定制的轻量级 Linux 发行版

Summary: Archcraft 是一个令人印象深刻的发行版，具有定制的开箱即用体验。

Archcraft 是一个令人印象深刻的发行版，具有定制的开箱即用体验。

![](/data/attachment/album/202401/07/143715rdxwiazzoxka2xox.jpg)

>
> Archcraft 是一个令人印象深刻的发行版，具有定制的开箱即用体验。
>
>
>

我们告别了 2023 年，这一年充满了令人兴奋的发行版和应用发布。就连**人工智能也席卷了世界**，大型科技公司争先恐后地想要分得一杯羹。

尽管如此，我们现在必须向前看。?

我们以一个有趣的、基于 Arch 的 Linux 发行版 “Archcraft” 开启这一年，它号称“*只是又一个 Linux 发行版*”，但**只需要 500 MB 内存就能运行**。

那么，让我们深入看看它能提供什么。

### Archcraft：概述 ⭐

![](/data/attachment/album/202401/07/143800byd58hdhd8k5ikce.jpg)

作为一个 [轻量级 Linux 发行版](https://itsfoss.com/lightweight-linux-beginners/)，Archcraft **基于 Arch Linux 构建**，为用户提供了**直接的发行版体验**，不需要太多配置。

大多数东西都是预先配置好的，用户只需安装，然后可以随心所欲地使用他们的系统。这要归功于 Archcraft 的以下**主要功能**：

* 滚动发布周期
* 对 AUR 的内置支持
* 预安装的窗口管理器

#### 初步印象 ??

为了体验 Archcraft，我 [使用 VirtualBox](https://itsfoss.com/install-arch-linux-virtualbox/) 将其加载到 [虚拟机](https://itsfoss.com/virtual-machine/) 上，它能够立即检测到它是一个 Arch Linux（64 位）操作系统。

启动后，**出现一个“欢迎”应用**，其中包含访问用户指南或运行安装的选项，使用 Archcraft 的 **两个安装程序之一进行安装**。

![](/data/attachment/album/202401/07/143801xivknw7kxskn7rsk.jpg)

一个是我们都知道和喜爱的传统 [Calamares](https://calamares.io/) 安装程序，另一个是 [ABIF](https://github.com/midfingr/abif)（Arch 基本安装框架），这是**基于命令行的安装程序**，推荐更高级的用户使用。

我使用 Calamares 进行安装，在安装过程中，我看到了一个菜单，**让我选择窗口管理器**。我选择了 “*Both*”，这样就安装了 [Openbox](http://openbox.org/wiki/Main_Page) 和 [bspwm](https://github.com/baskerville/bspwm)。

>
> ? 我选择了 Calamares，因为一只猫跑过我的键盘，让我选择了它。?
>
>
>

![](/data/attachment/album/202401/07/143801h5pqiaihwzalphh5.jpg)

**安装进行得很顺利**，我能够毫无问题地启动 Archcraft。然后我就开始探索它。

如下所示，**桌面屏幕非常简洁**，顶部有一个状态栏，底部有一个**方便的停靠栏**，用于启动应用。

![](/data/attachment/album/202401/07/143802akhkhtungthk0xz7.png)

**状态栏**也有一些非常简洁的选项；从左到右，你将找到带有 Archcraft 徽标的 **应用启动器**、**工作区切换器**、一些**系统使用信息**、**时间/日期**、**音乐播放器控件**、**音量滑块**、**网络使用信息**和**电源按钮**。

![Status Bar on Archcraft](/data/attachment/album/202401/07/143802tm96mk99dmd66x9d.jpg)

当我单击系统使用信息时，我看到了 [Alacritty](https://github.com/alacritty/alacritty)，它是 [Linux 顶级终端模拟器](https://itsfoss.com/linux-terminal-emulators/) 之一，它向我显示了所有活动进程，以及它们正在使用哪些资源。

![](/data/attachment/album/202401/07/143803zpkw9dlohkl4ljlk.jpg)

然后我查看了 Archcraft 上的**预装壁纸**，令我惊讶的是，[Rick](https://rickandmorty.fandom.com/wiki/Rick_Sanchez) 向我竖起了中指。

我必须说，我对此笑得很开心。我现在知道 Morty 的感受了。?

![](/data/attachment/album/202401/07/143803bivn1ciiivpgcp1p.jpg)

然后，我查看了**应用程序启动器**，里面装了很多有用的应用。在如此简约的发行版中看到这些令人印象深刻。

![](/data/attachment/album/202401/07/143804qy2fi9ylf18oyu28.jpg)

我还可以**搜索命令**，甚至**浏览不同目录中的文件**。

![](/data/attachment/album/202401/07/143804gtvtve7kydkpc1cz.jpg)

**“设置”应用易于使用**，并将所有重要选项集中在一处。还能想要什么呢？

![](/data/attachment/album/202401/07/143804ijmpgmbm18feezdd.jpg)

因此，总而言之，我想说 Archcraft 是一个非常 [用户友好的基于 Arch 的发行版](https://itsfoss.com/arch-based-linux-distros/)，很容易上手。随着开发的进展，它应该会像好酒一样随着时间越来越好。

如果你愿意，你还可以通过访问其 [GitHub 仓库](https://github.com/archcraft-os/archcraft) 为 Archcraft 的开发做出贡献。

### ? 下载 Archcraft

除了其旗舰版本（使用 openbox/bspwm），还提供了两种其他口味，“*Archcraft XFCE*” 和 “*Archcraft LXDE*”。在其 [官方网站](https://archcraft.io/download.html) 上探索它们。

>
> **[Archcraft](https://archcraft.io/download.html)**
>
>
>

你也可以参考 [官方维基](https://wiki.archcraft.io/) 了解更多关于 Archcraft 的信息。

? 你认为这对于想要尝试 Arch Linux 的人来说是一个可行的选择吗？

*（题图：DA/2fb8d78b-6352-4455-9e6b-f3fcbae6d847）*

---

via: <https://news.itsfoss.com/archcraft/>

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


硬核观察 #1239 DeepMind 制定 “机器人宪法”

Summary:
? DeepMind 制定 “机器人宪法”
? ChatGPT 正试图取代安卓手机上的谷歌助手应用
? 《科学》期刊将采用人工智能技术检查图像欺诈行为
»
»

谷歌会用Bard代替Google Assistant，以应对ChatGPT。不过目前Bard（免费的Gemini Pro）还很烂，比GPT-3.5要蠢得多。

来自广东广州的 Chrome Mobile 120.0|Android 10 用户

![](/data/attachment/album/202401/07/183407g701a03ll2am00m1.jpg)

![](/data/attachment/album/202401/07/183419pvmsymjvzvj9y6z3.png)

### #1 DeepMind 制定 “机器人宪法”

DeepMind 机器人团队透露了三项新进展，称它们将帮助机器人在野外做出更快、更好、更安全的决定。其中一项包括利用 “机器人宪法” 收集训练数据的系统 AutoRT，以确保你的机器人办公助理能为你拿更多的打印纸 —— 但又不会撞死碰巧挡路的人类同事。“机器人宪法” 的灵感来自<ruby> 艾萨克·阿西莫夫 <rt>  Isaac Asimov </rt></ruby>的 “机器人三定律”，是一套 “注重安全的提示词”，指示大型语言模型避免选择涉及人类、动物、尖锐物体甚至电器的任务。

*（插图：DA/2347dd10-7e48-4fcf-a73b-7e51e1dd3d10）*

>
> **[消息来源：The Verge](https://www.theverge.com/2024/1/4/24025535/google-ai-robot-constitution-autort-deepmind-three-laws)**
>
>
>

>
> 老王点评：非常好奇这套提示词是什么。
>
>
>

![](/data/attachment/album/202401/07/183438sz3mre9egkngzebr.png)

### #2 ChatGPT 正试图取代安卓手机上的谷歌助手应用

安卓手机上的“谷歌助手”是默认的助手应用，它可以通过电源按钮或手势启动应用，并且可以读取当前屏幕的文本和图像进行处理。通常情况下，助手应用在安卓系统中是全系统可用的，但这并不是谷歌的私房菜——所有这些都是通过公共 API 实现的，从技术上讲，任何应用都可以成为安卓手机上的助手应用。ChatGPT 应用正在开发对这些 API 的支持，用户将可以把 ChatGPT 应用设置为全系统范围的助手应用，让它可以在安卓系统的任何地方弹出并回答用户的问题。

*（插图：DA/c9fcb3c5-d011-4f59-9d70-972c424c3edb）*

>
> **[消息来源：Ars Technica](https://arstechnica.com/gadgets/2024/01/android-users-could-soon-replace-google-assistant-with-chatgpt/)**
>
>
>

>
> 老王点评：原本谷歌开放助手应用的 API，是不用太担心用户使用其它的助手应用的，但是 ChatGPT 如果成为默认助手应用，不知道谷歌会怎么想。
>
>
>

![](/data/attachment/album/202401/07/183454wwcignci2nri88on.png)

### #3 《科学》期刊将采用人工智能技术检查图像欺诈行为

我们看到的许多基于图像的欺诈行为都源于许多科学家面临的一个难题：进行实验不是问题，但实验产生的数据往往不是你想要的数据。由于数据来之不易，而欺诈者往往又很懒惰，他通常会对图片进行旋转、放大、裁剪或改变亮度/对比度，并在同一篇论文中多次使用。并不是每个人都这么懒，但这种图片循环使用的现象非常普遍，所有证据都在论文中，而一旦被指出，通常很容易就能发现。本周四，研究出版商《科学》宣布，其所有期刊将开始使用商业软件 Proofig，利用人工智能识别研究手稿 PDF 文件中的图片，自动检测被不当篡改的图像。

*（插图：DA/590562b9-46b3-43e8-af23-3317e3959a1c）*

>
> **[消息来源：Ars Technica](https://arstechnica.com/science/2024/01/all-science-journals-will-now-do-an-ai-powered-check-for-image-fraud/)**
>
>
>

>
> 老王点评：一方面论文拒绝 AI 的参与，另外一方面论文又需要 AI 来帮助找到作弊。
>
>
>


使用 NFS 将 Git 提交记录显示成文件目录

![](/data/attachment/album/202401/08/164228vsaxcd4ssjs2d6z4.jpg)

大家好！某天，我突发奇想 —— 是否能把 Git 存储库制作成一个 FUSE 文件系统，然后把所有的提交记录做成文件夹呢？答案是肯定的！有 [giblefs](https://github.com/fanzeyi/giblefs)、 [GitMounter](https://belkadan.com/blog/2023/11/GitMounter/) 和用于 Plan 9 号的 [git9](https://orib.dev/git9.html)。

但在 Mac 上使用 FUSE 实在很烦人 —— 你需要安装一个内核扩展，但由于安全的原因，Mac OS 上安装内核扩展看起来越来越难了。此外，我还有一些想法，希望能用与这些项目不同的方式来组织文件系统。

因此，我想在 Mac OS 上尝试 FUSE 以外的挂载文件系统的方法会很有趣，因此我创建了一个名为 [git-commit-folders](https://github.com/jvns/git-commit-folders) 的项目来做这个事。它可以同时使用 FUSE 和 NFS（至少在我的电脑上），WebDav 的实现起来还有点问题。

这个项目很有实验性（我不确定这究竟是一个有用的软件，还是一个思考 Git 如何工作的有趣玩具），但写起来很有趣，我自己也很喜欢在小型存储库中使用它，下面是我在写这个项目时遇到的一些问题。

### 目标：像文件夹一样显示提交记录

我做这个事的主要目的是给大家一些启发：Git 核心是如何运行的。总结来说，Git 提交记录实际上和文件夹非常类似 —— 每个 Git 提交都包含一个目录，其中 [列出了文件](https://jvns.ca/blog/2023/09/14/in-a-git-repository--where-do-your-files-live-/#commit-step-2-look-at-the-tree)，这个目录也可以有子目录，依此类推。

只是为了节省磁盘空间，Git 提交实际上并不是以文件夹的形式实现的。

而在 `git-commit-folders`，所有的提交记录实际上看起来就是一个文件夹，如果你想浏览历史提交记录，你可以像浏览文件系统一样浏览它们！例如如果你像查看我的博客的初始提交记录，你可以如下操作：

```
$ ls commits/8d/8dc0/8dc0cb0b4b0de3c6f40674198cb2bd44aeee9b86/
README

```

其他之后的提交记录，如下：

```
$ ls /tmp/git-homepage/commits/c9/c94e/c94e6f531d02e658d96a3b6255bbf424367765e9/
_config.yml  config.rb  Rakefile  rubypants.rb  source

```

### 分支是符号链接

通过 `git-commit-folders` 挂载的文件系统中，提交是唯一真正的文件夹 —— 其他一切（分支、标签等）都是提交记录的符号链接。这反映了 Git 底层的工作方式。

```
$ ls -l branches/
lr-xr-xr-x 59 bork bazil-fuse -> ../commits/ff/ff56/ff563b089f9d952cd21ac4d68d8f13c94183dcd8
lr-xr-xr-x 59 bork follow-symlink -> ../commits/7f/7f73/7f73779a8ff79a2a1e21553c6c9cd5d195f33030
lr-xr-xr-x 59 bork go-mod-branch -> ../commits/91/912d/912da3150d9cfa74523b42fae028bbb320b6804f
lr-xr-xr-x 59 bork mac-version -> ../commits/30/3008/30082dcd702b59435f71969cf453828f60753e67
lr-xr-xr-x 59 bork mac-version-debugging -> ../commits/18/18c0/18c0db074ec9b70cb7a28ad9d3f9850082129ce0
lr-xr-xr-x 59 bork main -> ../commits/04/043e/043e90debbeb0fc6b4e28cf8776e874aa5b6e673
$ ls -l tags/
lr-xr-xr-x - bork 31 Dec  1969 test-tag -> ../commits/16/16a3/16a3d776dc163aa8286fb89fde51183ed90c71d0

```

这个并不能完全呈现 Git 的所有工作机理（相比简单的类似文件夹的提交，还有很多复杂的细节），但是我希望大家对“每个提交如同一个文件夹，里面有你的旧版本代码”有一个直观的认识。

### 这么做有什么好处呢？

在我深入介绍它的实现之前，我想说下为什么把 Git 提交记录变成拥有文件夹的文件系统很有用。我的很多项目最终都没有真正使用过（比如 [dnspeep](https://github.com/jvns/dnspeep)），但我发现自己在做这个项目的时候确实使用到了一些。

目前为止我发现主要用处是：

* 查找已经删除的函数 - 可以用 `grep someFunction branch_histories/main/*/commit.go` 查找它的旧版本
* 快速查看其他分支的一个文件并从其拷贝一行，如 `vim branches/other-branch/go.mod`
* 在每个分支中搜索某个函数，如 `grep someFunction branches/*/commit.go`

所有这些操作都通过提交记录的符号链接，来替代提交记录的直接引用。

这些都不是最有效的方法（你可以用 `git show` 和 `git log -S` 或者 `git grep` 来完成类似操作），但是对我个人来说，我经常忘记 Git 语法，而浏览文件系统对我来说更简单。`git worktree` 还允许你同时签出多个分支，但对我来说，为了看一个文件而设置整个工作树感觉很奇怪。

接下来我想谈谈我遇到的一些问题。

### 问题 1: 用 WebDav 还是 NFS?

Mac OS 原生支持的两个文件系统是 WebDav 和 NFS。我说不出那个更新容易实现，所以我就索性尝试两个都支持。

起初，WebDav 的实现看起来更容易一些，在 [golang.org/x/net](http://golang.org/x/net) 上有一个 [WebDav 实现](https://pkg.go.dev/golang.org/x/net/webdav)，这个很好配置。

但这个实现不支持符号链接，我想可能原因是它用的是 `io/fs` 接口，而 `io/fs` 还不支持 [符号链接](https://github.com/golang/go/issues/49580)。不过看起来正在进行中。所以我放弃了 WebDav，而决定重点放在 NFS 实现上了，用 [go-nfs](https://github.com/willscott/go-nfs/) NFSv3 的库文件来实现。

有人也提到了 Mac 上的 [FileProvider](https://developer.apple.com/documentation/fileprovider/)，我还没有深入了解这个。

### 问题 2: 如何确保所有的实现保持一致？

我已经实现了三个不同的文件系统（FUSE、NFS 和 WebDav），但对我来说还是没搞清楚如何避免大量的重复代码。

我的朋友 Dave 建议写一个核心实现，然后写一个适配器（如 `fuse2nfs` 和 `fuse2dav`）来转换成 NFS 和 WebDav 版本。这个看起来需要我着手实现三个文件系统的接口：

* 对应 FUSE 的 `fs.FS`
* 对应 NFS 的 `billy.Filesystem`
* 对应 WebDav 的 `webdav.Filesystem`

因此我把所有的核心逻辑放到 `fs.FS` 接口上，然后写两个函数：

* `func Fuse2Dav(fs fs.FS) webdav.FileSystem`
* `func Fuse2NFS(fs fs.FS) billy.Filesystem`

所有的文件系统都比较类似，因此转换起来不是很难，但就是有大量的烦人的问题需要修复。

### 问题 3: 我不想罗列所有的提交记录怎么办

一些 Git 存储库有成千上万的提交记录。我的第一个想法是如何让 `commits/` 看起来是空的，这样就可以如下展示：

```
$ ls commits/
$ ls commits/80210c25a86f75440110e4bc280e388b2c098fbd/
fuse  fuse2nfs  go.mod  go.sum  main.go  README.md

```

因此所有的提交记录可以直接查看，但是又不能罗列它们。这个对文件系统是一个奇怪的事情，实际上 FUSE 可以做到。但我在 NFS 上无法实现。我认为这里的原因是，如果你告诉 NFS 某个目录是空的，它就会认为该目录实际上是空的，这是合理的。

我们最终是这样处理的：

* 按照 `.git/objects` 的方式，以前两个字符组织管理提交记录（因此 `ls commits` 会显示 `0b 03 05 06 07 09 1b 1e 3e 4a`），但这样做会分为两层，这样 `18d46e76d7c2eedd8577fae67e3f1d4db25018b0` 则为 `commits/18/18df/18d46e76d7c2eedd8577fae67e3f1d4db25018b0`
* 开始只罗列一次所有的已经打包的提交哈希，将它们缓存在内存中，然后后面仅更新稀疏对象。主要思路是版本库中几乎所有的提交都应该打包，而且 Git 不会经常重新打包提交

这个看起来在拥有百万提交记录的 Linux 内核的 Git 存储库上似乎效果不错。在我的机器上实测它初始化大概需要一分钟，之后只需快速增量更新即可。

每个提交哈希只有 20 个字节，因此缓存 1 百万个提交哈希也不是很大，大约 20MB。

我认为更聪明的做法是延迟加载提交列表 —— Git 会按提交 ID 对其打包文件进行排序，所以你可以很容易地进行二叉树搜索，找到所有以 `1b` 或 `1b8c` 开始的提交。我用的 [Git 库](https://github.com/go-git/go-git) 对此并不支持，因为罗列出来 Git 存储库所有的提交记录确实一个奇怪的事情。我花了 [几天时间](https://github.com/jvns/git-commit-folders/tree/fast-commits) 尝试实现它，但没有达到我想要的性能，所以就放弃了。

### 问题 4: 不是目录

我常遇到下面这个错误：

```
"/tmp/mnt2/commits/59/59167d7d09fd7a1d64aa1d5be73bc484f6621894/": Not a directory (os error 20)

```

这起初真的把我吓了一跳，但事实证明，这只是表示在列出目录时出现了错误，而 NFS 库处理该错误的方式就是显示 “Not a directory”（不是目录）。这个错误遇到了很多次，我需要每次跟踪这个错误的根源。

有很多类似错误。我也遇到 `cd: system call interrupted`，令人沮丧的是，但最终也只是程序中的其他错误。

我意识到终极大法是用 Wireshark 查看 NFS 发送和接受的数据包，很多问题便可迎刃而解。

### 问题 5: inode 编号

在开始的时候我不小心将所有的文件夹的 inode 设为 0。这很糟糕，因为如果在每个目录的 inode 都为 0 的目录上运行查找，它就会抱怨文件系统循环并放弃，这个也是符合逻辑的。

我通过定义一个 `inode(string)` 来修复这个问题，通过散列字符串来获取 inode 编号，并使用树 ID / blob ID 作为散列字符串。

### 问题 6: 过期文件句柄

我一直遇到这个“Stale NFS file handle”（过期文件句柄）错误。问题是，我需要获取未知的 64 字节 NFS “文件句柄”，并将其映射到正确的目录。

我使用的 NFS 库的工作方式是为每个文件生成一个文件句柄，并通过固定大小的缓存来缓存这些引用。这对小型存储库来说没问题，但是如果对于拥有海量的文件的存储库来说，由于缓存就会溢出，就会导致“stale file handle” 错误。

这仍然是个问题，我不知道如何解决。我不明白真正的 NFS 服务器是如何做到这一点的，也许它们只是有一个非常大的缓存？

NFS 文件句柄占用 64 个字节（不是比特），确实很大，所以很多时候似乎可以将整个文件路径编码到句柄中，根本不需要缓存。也许我会在某个时候尝试实现这一点。

### 问题 7: 分支历史

`branch_histories/` 目录目前仅罗列对应分支的最近 100 个提交记录。我不知道该怎么做，如果能以某种方式列出分支的全部历史就更好了。也许我可以使用 `commits/` 目录中类似的子文件夹技巧。

### 问题 8: 子模块

Git 存储库有时包含了子模块。由于目前我对子模块的理解还不深入，我先忽略它吧。因此这个算是一个问题。

### 问题 9: NFSv4 是否更好？

我构建这个项目使用的是 NFSv3 库，因为我当时只能找到一个 NFSv3 的 Go 库文件。可当我搞完的时候才发现了一个名叫 buildbarn 的项目里有 [NFSv4 服务器](https://github.com/buildbarn/bb-adrs/blob/master/0009-nfsv4.md)。有没有可能用它会更好一些？

我不知道这样做有什么问题，或者用 NFSv4 有哪些优点？我还有点不确定是否要使用 buildbarn NFS 库，因为不清楚他们是否希望其他人使用它。

### 就这些吧

之前已经解决了很多问题我都忘记了，这是我目前能回想起来的。我未来有可能解决或根本解决不了 NFS 的“过期文件句柄” 错误，或者“在 Linux 内核的存储库上启动需要 1 分钟”的问题，就这样吧。

感谢我的朋友 [vasi](https://github.com/vasi)，他给我了很多文件系统方面的帮助。

*（题图：DA/d22b1c01-e80a-4529-b88a-419ceef74b5e）*

---

via: <https://jvns.ca/blog/2023/12/04/mounting-git-commits-as-folders-with-nfs/>

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

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


硬核观察 #1240 Mozilla 已经将目光投向 Firefox 以外的领域

Summary:
? Mozilla 已经将目光投向 Firefox 以外的领域
? PyPy 项目转移到 GitHub
? 随着人工智能的崛起，Web3 已不再受青睐
»
»

火狐浏览器快完了…

火狐浏览器快完了…

等到各大Linux发行版换了其他的默认浏览器再说这句话，不过我认为可能性不大。

GitHub 主要是免费，自己搭建 Gitea / GitLab 可能会有服务器开销？

感谢分享

感谢分享

![](/data/attachment/album/202401/08/172923x5r7fgq4dfrr4go7.jpg)

![](/data/attachment/album/202401/08/172948u818lof7q28lff76.png)

### #1 Mozilla 已经将目光投向 Firefox 以外的领域

过去几年，Mozilla 不仅投资了 Mastodon 客户端和帮助识别虚假评论的浏览器扩展等初创公司，还推出了 [Mozilla.ai](http://mozilla.ai/)，并在其董事会中增加了一批专注于人工智能的新董事。Mozilla 总裁 <ruby> 马克·苏尔曼 <rt>  Mark Surman </rt></ruby> 在采访中说，[Mozilla.ai](http://mozilla.ai/) “有一个广泛的任务，即寻找开源的、值得信赖的人工智能机会，并围绕这些机会建立一项业务。”他们的目标是如何利用不断增长的开源大型语言模型雪球，并找到一种既能加速雪球滚动，又能确保其滚动方向符合其目标和钱包。苏尔曼说 Mozilla 在人工智能方面“做的这一切，都是为了完成我们的使命。我认为，其中一些必须是纯粹的公共产品”。至于 Firefox，他表示，“Firfox 浏览器会更加保护你”。

*（插图：DA/7fe9b88e-6668-4fa1-921e-21103939636c）*

>
> **[消息来源：Tech Crunch](https://techcrunch.com/2024/01/03/whats-next-for-mozilla/)**
>
>
>

>
> 老王点评：往好处看是 Mozilla 在寻求除了 Firefox 之外的收入来源，但从另外一个方面看，这是在其最重要的根本上溃败，战略性转移。
>
>
>

![](/data/attachment/album/202401/08/173007rxhk4wxefpwixwux.png)

### #2 PyPy 项目转移到 GitHub

PyPy 项目是 Python 语言的实现之一，但运行速度快了约四倍。该项目已将其主要版本库和问题跟踪器转移到微软旗下的 GitHub，取代了 Mercurial。该项目的核心贡献者称，虽然他们觉得 Mercurial 是更好的版本控制系统，在命名分支模型和用户界面都更胜一筹，但“开源已经成了 GitHub 的代名词，我们太小了，无法改变这一点。……事实证明，不迁移到 GitHub 会阻碍贡献和问题报告。”该项目之前也曾移动过它的仓库，2010 年时它的代码放在 Atlassian Bitbucket 上。十年后，它转移到了 Mercurial 上。

*（插图：DA/80b7ff0c-2f1d-42c0-8280-d599eae60800）*

>
> **[消息来源：Dev Class](https://devclass.com/2024/01/02/pypy-moves-from-mercurial-says-open-source-has-become-synonymous-with-github/)**
>
>
>

>
> 老王点评：我认为 GitHub 成为开源的代名词是一件非常严重的事情，尤其是它还属于一个软件巨头。
>
>
>

![](/data/attachment/album/202401/08/173024ka6794zq7als99da.png)

### #3 随着人工智能的崛起，Web3 已不再受青睐

根据 Crunchbase 的最新数据，2023 年 Web3 初创公司的融资额比 2022 年下降了 73%。2023 年，Web3 初创公司融资额为 78 亿美元，而 2022 年为 215 亿美元。而根据 Dealroom 的数据，2023 年人工智能领域的融资额高达 178 亿美元。

*（插图：DA/394ad7db-112f-49d0-9b69-0a94f006f1f5）*

>
> **[消息来源：INC](https://www.inc.com/sam-blum/as-ai-rises-is-web3-dead-in-the-water.html)**
>
>
>

>
> 老王点评：不知道人工智能这一次是否能真正成为改变世界的浪潮，但目前看起来 Web3 还没到时机。
>
>
>


2024 年 Linux 和开源的六大趋势预测

Summary: 让我们尝试预测未来吧！

![](/data/attachment/album/202401/09/074157ikp0y0qmr20rr0ye.jpg)

>
> 让我们尝试预测未来吧！
>
>
>

新的一年快乐，朋友们 ✨

2024 年的钟声已经敲过，我们有必要去预见一下将塑造本年度的各种潮流。

我们不能预见未来，所以无法精确预知将会发生什么，但根据目前观察到的动向，我们可以进行一些预测。

以下是我们对 Linux 和开源发展方向的预测。

### 1、开源 AI 的兴起

![](/data/attachment/album/202401/09/074236m0bs1ynbjsjbne79.png)

2023 年初，Mozilla 成为了最早投身于开源 AI 的团队之一，研发类似于 ChatGPT 的解决方案。[Hugging Face](https://huggingface.co/) 紧随其后，**崭露头角，发展成为备受赞誉的 AI 社区之一**，激发了全球范围内的协作。

我们也见证了 [AI 联盟](https://news.itsfoss.com/ai-alliance/) 的成立，这个联盟由超过 50 个创始成员组成，包括一些大名鼎鼎的公司如 Meta、英特尔、甲骨文和 CERN 等重量级大佬。他们的目标清晰明了：推进 AI 的开放式创新和科学发展。

更有一款名为 [GuardRail](https://news.itsfoss.com/guardrail/) 的开源项目，它**积极倡导负责任的 AI 开发**，提供了相应的框架来监控 AI 的行为。

所有的开源 AI 开发可能致力于与发行版或开源工具的更深度整合。当然，不像其他商业成就卓著的桌面操作系统，Linux 发行版可能不会大力市场化 AI 功能，但谁知道呢？

总的来讲，如果你问我们，对于开源 AI 来说，2024 年将是举足轻重的一年，我们都等不及看到更多的惊喜了！?

### 2、Linux 游戏市场扩张

![](/data/attachment/album/202401/09/074236gc0xzcf047jqo5oz.png)

过去的 Linux [游戏](https://itsfoss.com/linux-gaming-guide/) 市场的发展可谓好坏皆有。尽管平台上有一些原生游戏，和 Wine、Lutris、Bottles 等实用工具。但在 Valve 的 [Steam Deck](https://www.steamdeck.com/) 掌机发布之前，Linux 并未真正受到大部分游戏开发者的关注。

这款设备由基于 Arch 的 [SteamOS](https://itsfoss.com/steamos/) 提供驱动，为众多游戏在 Linux 上的运行铺平了道路，并将游戏开发商的目光吸引到这个平台上。

在 2023 年，我们已经看到了大量 [原生兼容](https://store.steampowered.com/linux) Linux 的游戏发布，我们预测 2024 年也将如此。

别忘了，像 [Bottles](https://news.itsfoss.com/bottles-next-linux-gaming/) 这样的开源游戏工具也将致力于提升用户体验。因此，那些从 Windows 切换过来的用户，将会发现这个平台更加符合其游戏需求。

>
> ? 我们非常期待看到新的 [AAA 级大作](https://en.wikipedia.org/wiki/AAA_(video_game_industry)) 在发布时就已经支持 Linux！
>
>
>

### 3、更多的不可变 Linux 发行版

![](/data/attachment/album/202401/09/074237qcquw5a1am6uaq1m.png)

没错，预计 2024 年将有更多 [不可变 Linux 发行版](https://itsfoss.com/immutable-linux-distros/) 面世，Ubuntu 将走在前列。早在 2023 年初，他们就宣布了在即将发布的 Ubuntu 24.04 LTS 发行版中提供基于 [Snap 的不可变 Ubuntu 桌面](https://news.itsfoss.com/ubuntu-all-snap-desktop/) 的计划。

>
> ? 这可能会让一些人不适，但毫无疑问，这样的变革正在路上。
>
>
>

除了 Fedora 早已推出了配备 GNOME 桌面的不可变版本 Silverblue 之外，他们还增加了一款新品。在 [Fedora 39 的发布](https://news.itsfoss.com/fedora-39-release/) 中，一款带着 Budgie 桌面的名为 “[Fedora Onyx](https://fedoraproject.org/onyx/)” 的新版首次登场就吸引了眼球。

鉴于此，我们预计 2024 年将会出现更多新的不可变发行版，现有的不可变发行版如 blendOS 和 Vanilla OS 也将有所进步。

### 4、RISC-V 服务器的亮相

随着美国在 2023 年加大了他们与中国的 [AI 芯片竞争](https://www.wired.com/story/the-us-just-escalated-its-ai-chip-war-with-china/)，我们可能在 2024 年看到 RISC-V 服务器成为热点，因为各国纷纷在芯片制造领域努力实现更大的自主性。

中国已经开始部署他们自称为 “*首个商业版的云端 RISC-V 集群*”，那是在山东大学建立的一个由 [SOPHON SG2042](https://en.sophgo.com/product/introduce/sg2042.html) 驱动的集群。

### 5、Linux 发行版 UI/UX 将进一步提升

![](/data/attachment/album/202401/09/074237kr9obm0gbbj1gm2n.png)

如果以 2023 年为标志，我们大可以预言，2024 年将是 Linux 发行版在用户界面和用户体验方面不断创新的一年。

看看 [GNOME 45 的发布](https://news.itsfoss.com/gnome-45-release/) 所做的事情，它放弃了“*活动*”按钮，改为药丸形的工作区切换器，彻底改变了用户与工作区的交互方式。

再看看 Zorin OS 17，它通过实施一个“*空间桌面*”，在 Linux 发行版中重新定义了视觉体验，以便用户在与桌面交互时获得更好的环境感知。

而且，首次在 2024 年，我们将在 Linux 中看到蓝屏死机现象，多亏了 systemd，它**将在启动失败时提供有用的错误消息**。

像 Vanilla OS 2（Orchid）这样的新发行版发布，像 [KDE Plasma 6](https://community.kde.org/Plasma/Plasma_6) 这样的桌面升级，以及基于 Rust 的 **COSMIC** 等可能会带来更高的水平，我们倾向于这样期待！

别忘了，许多 Linux 发行版也在大力推广 **默认采用 Wayland 的未来**！

### 6、软件项目的源码可见

![](/data/attachment/album/202401/09/074238c57xqvfk14wf4qt8.png)

虽然某些软件项目并未完全遵循开源原则，但有些在限制商业分发的前提下，已经走上了公开源代码的道路。

这成为可能，多亏了 **CC BY-NC-SA 4.0（创作共享署名-非商业-相同方式共享 4.0）** 等许可证。

有人可能会争辩，企业应该全面拥抱其产品的开源。然而，我们坚信，这种做法将相比传统封闭源产品，**提升彼此之间的信任并推广透明度**。

### 2024是 Linux 桌面之年吗？?

我们知道，自 Linux 桌面在用户友好性和普及性上大踏步前进以来，我们一直在期待这个。

看着 Linux 的 [市场份额](https://itsfoss.com/linux-market-share/)，你可能觉得数据太低了。但我们还是不能放弃希望。

也许这正是你现在的反应。

尽管我们可能距离 Linux 桌面元年还有些距离，但我们比以往任何时候都要接近了。你看，Linux 桌面的接纳率在 2023 年稳定增长，而 2024 年可能就是见证其更大涨幅的一年。

? 你对 2024 年有何预测？欢迎在下方评论中分享你的观点！

*（题图：DA/d1246dc6-583c-4ff8-8c2d-b3808e9ec460）*

---

via: <https://news.itsfoss.com/predictions-linux-open-source-2024/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #1241 OpenAI 称不用版权材料训练不出来 ChatGPT

Summary:
? OpenAI 称不用版权材料训练不出来 ChatGPT
? 美国去年仅净增长 700 个 IT 工作岗位
? 确保 AI 安全的理论仍未就绪
»
»

![](/data/attachment/album/202401/09/172958occey1b4zog1szy1.jpg)

![](/data/attachment/album/202401/09/173011jlzzwnnvof5g2f28.png)

### #1 OpenAI 称不用版权材料训练不出来 ChatGPT

OpenAI 在给英国上议院的文件中表示，如果不能访问受版权保护的内容，就无法建立像 ChatGPT 这样的人工智能系统。该公司表示，人工智能工具必须包含受版权保护的作品，以 “充分代表人类智慧和经验的多样性和广度”。OpenAI 认为，使用来自互联网的数据训练人工智能模型属于合理使用规则的范畴，该规则允许重新使用受版权保护的作品。另外，OpenAI 也宣布，网站可以从 2023 年 8 月开始阻止 OpenAI 的网络爬虫访问其数据。

*（插图：DA/f7aafbbf-3d3e-4864-8ed0-56b86fd3d634）*

>
> **[消息来源：The Verge](https://www.theverge.com/2024/1/8/24030283/openai-nyt-lawsuit-fair-use-ai-copyright)**
>
>
>

>
> 老王点评：虽然是否属于版权法的合理使用还需要法律上的讨论，但我倾向于给予 AI 一个野蛮生长的机会。
>
>
>

![](/data/attachment/album/202401/09/173110g2job69t329kr0tq.png)

### #2 美国去年仅净增长 700 个 IT 工作岗位

根据美国劳工统计局的数据分析，尽管美国 2023 年第四季度创造了超过 21,000 个 IT 工作岗位，但去年净增长的 IT 工作岗位仅为 700 个，而前一年则为 26.7 万个。目前，由于技能不匹配，有近 10 万个未填补的工作岗位和 10.1 万多名失业的 IT 专业人员。另外，尽管对拥有人工智能、安全、开发和区块链技能的人的需求仍然很旺盛，但入门级 IT 需求正在萎缩，入门级职位正在被人工智能取代。

*（插图：DA/f5dee957-f727-414a-bfb9-18efdda5c06b）*

>
> **[消息来源：The Register](https://www.theregister.com/2024/01/08/700_it_jobs_us/)**
>
>
>

>
> 老王点评：上有经济不景气，下有 AI 追杀，IT 人真难。
>
>
>

![](/data/attachment/album/202401/09/173128wnlo4ulpzi404a0x.png)

### #3 确保 AI 安全的理论仍未就绪

美国国家标准与技术研究院（NIST）的计算机科学家 <ruby> 阿波斯托尔·瓦西列夫 <rt>  Apostol Vassilev </rt></ruby> 表示，预测性和生成性人工智能系统仍然容易受到各种攻击。他说：“尽管人工智能和机器学习取得了重大进展，但这些技术很容易受到攻击。……确保人工智能算法安全的理论问题尚未解决。”他最近与其他人共同撰写的一篇论文试图对人工智能系统带来的安全风险进行分类，重点关注了四个具体的安全问题：规避攻击、中毒攻击、隐私攻击和滥用攻击。总的来说，结果并不乐观。论文最后指出，可信的人工智能目前需要在安全性与公平性和准确性之间做出权衡。

*（插图：DA/3ea75ca9-198a-414c-8fc0-57b543c031d8）*

>
> **[消息来源：The Register](https://www.theregister.com/2024/01/05/nist_ai_security/)**
>
>
>

>
> 老王点评：AI 的安全也存在一个不可能三角吗？
>
>
>


Deepin 成为第一个为照片和 IDE 集成 AI 功能的 Linux 发行版

Summary: Deepin Linux 抢占 AI 创新权？ 看起来是这样。

集成的是离线使用开源免费的人工智能吗？

深度操作系统“deepin”是全小写的，无论出现在什么位置都不能变。

Deepin Linux 抢占 AI 创新权？ 看起来是这样。

![](/data/attachment/album/202401/10/152525uri8jabrraf8iyni.jpg)

>
> Deepin Linux 抢占 AI 创新权？ 看起来是这样。
>
>
>

Deepin 是一个神秘而美丽的发行版。

当然，我们都在等待他们的 [Deepin 23](https://news.itsfoss.com/deepin-23/) 稳定版。

在那之前，我们继续期待 ?

但是，等等，还有一些有趣的东西正在开发中，我认为，这值得等待...

Deepin Linux 即将推出 AI 功能。你现在可以通过现有安装（deepin V20.9 及更高版本）访问它。不过，它应该会让未来的发布体验更加精彩。

那么，那又怎样呢？ 让我在这里告诉你更多。

### AI 混合深度体验

我们已经提到整合 AI 功能是我们的 [2024 年预测](https://news.itsfoss.com/predictions-linux-open-source-2024/) 之一。

我想，我们可以看到未来吗？ ?

嗯，看来 Deepin Linux 在 2024 年拉开了序幕，推出了一款新的 IDE，其中包含 **AI 编程助手**。

![](/data/attachment/album/202401/10/152640jjhnz8h8mx8m45p3.jpg)

你可以在深度应用商店中找到它。我们还没有尝试过，但这听起来很有趣。

不仅限于此，他们还开始通过 “**看图 AI 插件**” 将 AI 功能集成到图像查看器应用中。

![](/data/attachment/album/202401/10/152555gw9qn0q999b0f9bn.jpg)

你可以通过图像查看器使用插件重新修饰或增强现有图像。

![](/data/attachment/album/202401/10/152556gvz26vkeqvxw99h6.jpg)

你可以使用它执行的一些功能包括：

* 背景模糊：降低图像背景的清晰度，使主体更加突出
* 删除背景：删除图像背景，使主体独立或替换新背景
* 手绘：将真实图像转换为手绘漫画风格
* 2D 漫画：将真实图像转换为 2D 漫画风格
* 3D 漫画：将真实图像转变成 3D 漫画风格
* 素描：将真实图像转换为素描风格

这是 2D 转换图像的另一个示例：

![](/data/attachment/album/202401/10/152556mqz0jqv06j0nn0w0.jpg)

而且，所有这一切都发生在你本地的计算机上。它不需要互联网连接。

除此之外，开发人员正在探索更多方法来整合和增强该发行版的 AI 功能。

?你对此有何看法？ 请在下面的评论中告诉我你的想法。

---

via: <https://news.itsfoss.com/deepin-linux-distro-ai/>

作者：[Ankush Das](https://news.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 内核 6.7 发布，包含众多修复和新的文件系统

Summary: 这是历来重大的 Linux 内核发布之一，集大量修复和新增功能于一身。

Bravo !

这是历来重大的 Linux 内核发布之一，集大量修复和新增功能于一身。

![](/data/attachment/album/202401/10/160848zkf7awqrclul7m7f.jpg)

>
> 这是历来重大的 Linux 内核发布之一，集大量修复和新增功能于一身。
>
>
>

新年伊始，全新 Linux 内核发布！ ?

我们在 2024 年以 **Linux 内核 6.7 版本** 的推出开启了新的篇章，这一版本具备许多显著改进，其中包括上一版本遗漏的部分内容。

Linus Torvalds 在 [公告](https://lore.kernel.org/lkml/CAHk-=widprp4XoHUcsDe7e16YZjLYJWra-dK0hE1MnfPMf6C3Q@mail.gmail.com/T/#u) 中解释了假期引发的小幅延误：

>
> 实际上，我们上周的工作量稍比假期前一周多些，但这不会让我觉得我们需要再进一步推迟发布。
>
>
> 最后的结果：6.7 版本基于提交数量（超过 17k 的非合并提交，以及 1k+ 的合并提交）来看，已经是我们有史以来发布的最大规模的内核版本之一。然而，额外的第 8 个 rc 版本主要是由于圣诞节假期的时间安排，并非大规模发布所引发的。
>
>
>

### ? Linux 内核 6.7：新的变化

由于 6.7 是**非长期支持版本**，你没有必须要升级到 Linux 内核 6.7 的压力，除非你急于体验 Linux 的尖端技术。

有鉴于此，我们来看看这个版本**关键的亮点**包括了哪些内容：

* **英特尔的优化**
* **增强的 RISC-V 支持**
* **针对 AMD 的特别增强**
* **众多存储功能的优化**

#### 英特尔的优化

![](/data/attachment/album/202401/10/160929e8z016ic3cpc3a3e.png)

首先要讲的是英特尔的 [Meteor Lake](https://en.wikipedia.org/wiki/Meteor_Lake) 处理器。**Linux 内核 6.7 对于英特尔 Meteor Lake 图形提供了原生支持**。在此之前，此项支持还处在 *实验性* 阶段。但现在，你可以在装备有第一代 [Core Ultra](https://www.intel.com/content/www/us/en/products/details/processors/core-ultra.html) 处理器的笔记本上全面享受到它的优势了。

另外，英特尔即将发布的 [Arrow Lake](https://en.wikipedia.org/wiki/Arrow_Lake) 和 Lunar Lake 芯片在 [Turbostat](https://www.linux.org/docs/man8/turbostat.html)（一个用于监测处理器频率、空闲统计等信息的命令行工具）中也做好了规划。

不过，也有一些支持功能被删除。

在 Linux 内核 6.7 中，**不再支持英特尔安腾 IA-64 架构**。这已经计划了好一段时间，现在，终于实现了。

#### 增强的 RISC-V 支持

![](/data/attachment/album/202401/10/160930ldzqmmu92d9x0rvc.png)

RISC-V 的一大亮点是 **引入了软件阴影调用堆栈**，这旨在保护 CPU 架构免受意外和恶意操作的影响。

此外，**在用户空间对 cbo.zero，以及在基于 ACPI 系统中对** CBO 的支持，还有许多其他杂项修复也同样进行了。这个 [合并请求](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d46392bbf5c6ce594669f00b8177f0b34e983f90) 中有更多信息。

你还可以阅读关于 <ruby> <a href="https://en.wikipedia.org/wiki/Shadow_stack">  阴影堆栈 </a> <rt>  Shadow Stack </rt></ruby> 的文章，以了解它更多的应用。

#### 针对 AMD 的特别增强

AMD 的 **无缝启动功能已经扩展到支持 Display Core Next 3.0 及以后版本的 GPU**。包括 Radeon RDNA2/RDNA3，以及未来发布的任何 GPU。

此功能使得系统 **平滑过渡，避免了通常随着电源按钮压下后会出现的屏幕闪烁现象**。之前，这个功能仅对 AMD 的 Van Gogh 系列 APU 开放。

接下来是 **错误检测和纠正**（[EDAC](https://en.wikipedia.org/wiki/Error_detection_and_correction)）在 [Versal](https://www.xilinx.com/products/silicon-devices/acap/versal.html) SoC 系列中的引入，它添加了一个 EDAC 驱动，支持在集成的 Xilinx DDR 内存控制器上进行 RAS 功能。

在这个 [提交信息](https://git.kernel.org/pub/scm/linux/kernel/git/ras/ras.git/commit/?h=edac-drivers&id=0fd934580ea3ea91052b999ff75017c3f08b9783) 中，你能了解到关于它如何实施的更多信息，我们在此对 [Phoronix](https://www.phoronix.com/news/AMD-Xilinx-Versal-EDAC-Linux-67) 的发现表示感谢。

#### 众多存储功能的升级

![](/data/attachment/album/202401/10/160931ephd5h1vh1op9ahh.png)

我们终于在 Linux 内核 6.7 中迎来了 [Bcachefs](https://bcachefs.org/) 文件系统的引入。如果你对它不熟悉，简单来说，它是一种**写时复制（COW）文件系统**，其重点放在可靠性和稳健表现上。

此外，Btrfs 引入了 **新的三项特性**，F2FS 现在 **支持更大的页面尺寸**，甚至 **IBM 的日志文件系统（JFS）也有所增强**。

#### ? 其它变化及优化

最后，还有其他一些值得注意的变化包括：

* 停止对 [MIPS AR7](https://en.wikipedia.org/wiki/Texas_Instruments_AR7) 平台的支持。
* **x86 CPU 微码加载过程** 的改进。
* 在 [EROFS](https://en.wikipedia.org/wiki/EROFS) 上，**MicroLZMA 压缩** 现在被认为是稳定的。
* 更好地支持 **采用 RISC-V 的** [Milk-V Pioneer](https://milkv.io/pioneer) 板。
* 引入 **Nouveau GPU 系统处理器（GSP）**，它为英伟达的 “Turing” 及更新的 GPU 开启了更好的体验途径。

你可以通过阅读 [短日志](https://lore.kernel.org/lkml/CAHk-=widprp4XoHUcsDe7e16YZjLYJWra-dK0hE1MnfPMf6C3Q@mail.gmail.com/T/#u) 或等待在 [内核档案](https://www.kernel.org/) 上发布的更新日志，以了解更多的技术更新。

### 安装 Linux 内核 6.7

如果你在使用如 Arch 或 Fedora 这样的滚动版本发行版，可以期待在发行版开发者的一番测试后，就能收到升级。

对于其他用户，你可以安静等待，或者按照我们的简明教程， **在 Ubuntu 上升级到最新的主线 Linux 内核**：

>
> ? 我们并不建议你手动升级 Linux 内核，除非你的确有某些问题需要解决。
>
>
>

你可以从 [官方网站](https://www.kernel.org/) 获取最新 Linux 内核版本的 tarball。但是请记住，新版本发布后需要一些时间才能下载得到。

>
> **[Linux 内核 6.7](https://www.kernel.org/)**
>
>
>

? 你打算升级到 Linux 内核 6.7 吗？你对这个版本有何评价？

*（题图：DA/0e329f2b-a118-4a00-9d90-da036172c271）*

---

via: <https://news.itsfoss.com/linux-kernel-6-7-release/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #1242 苹果公司要求开发者将 Vision Pro 应用称为“空间计算应用”

Summary:
? 苹果公司要求开发者将 Vision Pro 应用称为“空间计算应用”
? 多邻国裁掉翻译人员，用 AI 替代
? Linux 6.8 将提升 40% 多并发连接的 TCP 性能
»
»

AI没有抢任何人的工作，抢工作的是AI背后的大公司。而这些公司是人操控的。所以，是一些人用资本和AI抢了另外一些人的工作。

总有一天，这些创造AI的人也会被资本和AI取代。因果循环。可能AI领域的一些人已经经历了这样的事情。

已经发现好多AI点赞员、AI评论员，这些电子生命简直都算是AI舆论导师了。

这个时代的网络安全架构完全与AI技术发展脱节，互联网距离做好准备不知道还有多久，谁都阻止不了社会在信息安全的各个方面被AI爆破。

大部分开发者所做的事情不过是迎合技术潮头，可能在他们眼里管理学是虚无的；世界各国塑造新的AI伦理与技术边界刻不容缓。

瓷镇的互联网早就摆烂了，再多个AI也没多大区别

“爆破”？“潮头”？“边界”？

——阿里味好重，都不会好好说话了。。。

我说的你应该都能理解，“爆破”可以理解为“破坏既有规则下的秩序”，“潮头”可以一字之差替代为“潮流”(但我觉得没有哪个更高大上，也没有哪个更通俗，单纯的近义词)，“边界”可以理解为“在社会各个领域应用场景下的法理与道德约束”；我觉得如果大部分人目标读者能理解你的话，你何必在意自己表达观点时用的是白话还是文言？词汇本身是无罪的。<br />
你说的阿里味，我虽然不大了解，但大概说的是那种说了让人理解不能的玄学话术吧。

阿里黑话———普通话

“爆破”———“取代”

“潮头”———“趋势”

“边界”———“界限”

以前显摆中英夹杂，现在显摆满嘴阿里味。。。

搞这种黑话词最初的目的是方便内部斗争的时候敌我识别。。。类似于东北土匪的黑话。感兴趣的可以去看电影《智取威虎山》

![](/data/attachment/album/202401/10/181438t79uscttty0mh6mu.jpg)

![](/data/attachment/album/202401/10/181448cg25ccz2o9s8coa8.png)

### #1 苹果公司要求开发者将 Vision Pro 应用称为“空间计算应用”

随着苹果公司的 Vision Pro VR/AR 头显将于 2 月 2 日上市，在该公司为 visionOS 开发者发布的指导中，要求开发者在提及 Vision Pro 应用程序时不要使用 AR 和 VR 术语，要将其称为 “空间计算应用程序”，而不要将应用体验描述为增强现实（AR）、虚拟现实（VR）、扩展现实（XR）或混合现实（MR）。

*（插图：DA/8bde3f6c-df73-4055-8541-bc2e99d0051d）*

>
> **[消息来源：Engadget](https://www.engadget.com/apple-tells-developers-not-to-call-their-ar-and-vr-apps-ar-or-vr-apps-085136127.html)**
>
>
>

>
> 老王点评：叫啥不重要，真能卖出去很多才行。
>
>
>

![](/data/attachment/album/202401/10/181516ojom3vosvs171ee9.png)

### #2 多邻国裁掉翻译人员，用 AI 替代

语言学习平台多邻国裁掉了大量从事翻译的合同工，因为它发现 AI 能在短时间内完成翻译，而且省钱。随着 AI 接管了课程的内容生成和翻译工作，留下的人主要是检查 AI 的内容确保其翻译质量。多邻国称它裁掉了 10% 的合同工，但表示这不是裁员，而是合同工在项目于 2023 年结束后离开了。

*（插图：DA/65c0922f-9b05-40ea-8fd6-9d3a9a6a0944）*

>
> **[消息来源：PCMag](https://www.pcmag.com/news/as-duolingo-taps-ai-for-translation-human-contractors-lose-their-jobs)**
>
>
>

>
> 老王点评：看看，这些原本以为能一直干到老的工作都慢慢被 AI 取代了。
>
>
>

![](/data/attachment/album/202401/10/181541c30302nmw32in2n2.png)

### #3 Linux 6.8 将提升 40% 多并发连接的 TCP 性能

正在开发中的 Linux 6.8 内核对核心网络代码进行了一些关键改进，在遇到多个并发网络连接时，这些改进最多可将 TCP 性能提高约 40%。新的补丁系列试图重组核心网络协议栈变量，以尽量减少数据传输阶段的缓存行消耗。具体来说，来自谷歌的开发人员研究了 TCP/IP 协议栈和 TCP 中的快速路径定义。

*（插图：DA/4cf79d55-1340-4fca-8299-61de604cef88）*

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Linux-6.8-Networking)**
>
>
>

>
> 老王点评：居然还能提升这么多，这是我没想到的，看来 Linux 的潜力还有很多。
>
>
>


现在你可以在 Wayland 上运行 Shutter 了！

Summary: 你无需在 Wayland 上放弃使用 Shutter！

![](/data/attachment/album/202401/11/073858ajzm1eef77me0fgz.jpg)

>
> 你无需在 Wayland 上放弃使用 Shutter！
>
>
>

哎，我一直在担心有一天我得切换到只支持 Wayland 的 Linux 发行版，结果发现 [Shutter](https://shutter-project.org/) 不工作。

它是 Linux 中用于捕捉和编辑 [屏幕截图的最佳工具](https://itsfoss.com/take-screenshot-linux/) 之一，我每天都会使用它来为这里和其他地方的工作捕捉各种截图。

我知道 GNOME 的屏幕截图工具已经有了很大的进步，但是就像人们所说的，“旧习难改”。所以，当我发现有一种方法可以在所有的 Wayland 上运行 Shutter 时，我自然是相当兴奋。

请跟随我一起了解这个精彩的开源项目。这个项目由一位热心的 Shutter 爱好者发起，他的目标就是让 Shutter 能在配备 Wayland 的发行版上顺利运行。

### 在 Wayland 上使用 Shutter：有何期待？

这个项目由来自意大利的 IT 开发者 Maurizio 发起，他热衷于 Linux，**因为他不能接受 Shutter 无法在他的 Ubuntu 系统上正常运行，因此这个项目应运而生。**。

因此，他复刻了 Shutter 的代码仓库，并利用 [GNOME 的屏幕截图工具](https://gitlab.gnome.org/GNOME/gnome-screenshot) 的命令行工具进行开发，同时**尽力保持用户界面和以往的操作习惯不变**。

如下图所示，这个项目**与你从 Shutter 那里期待的体验几乎无二**，你可以在界面上发现所有熟悉的选项。在运行着 Ubuntu 23.10 的虚拟机上用这个工具截图时，我并未感到有什么两样。

![](/data/attachment/album/202401/11/073948f768pxxxp087ht7r.png)

我还发现，**按只截图窗口或选取特定区域也变得容易了**。只是那个通常用来截图特定窗口或桌面的下拉菜单似乎并未起到应有的功能，反而变得有点挪作他用。

>
> ? 这是我在 Ubuntu 23.10 的 Wayland 上进行选区捕捉的结果。
>
>
>

![](/data/attachment/album/202401/11/073949l6a8p9mz3liw8ppu.png)

如果你想截图你系统中特定的桌面空间，你需要切换到那个桌面，使 Shutter 转到同一屏幕，然后使用“<ruby> 桌面 <rt>  Desktop </rt></ruby>”选项进行截图。

![](/data/attachment/album/202401/11/073949rks2ask2jr9o9faa.png)

对于只截图窗口也是类似，只要将应用和 Shutter 切到同一屏幕，使用“<ruby> 窗口 <rt>  Window </rt></ruby>”选项就能够截取窗口的截图。

**至此已经足够了**。我真心期待 Shutter 的开发更上层楼，希望我们能看到此类改进被融入原有的项目中。

### ? 如何下载运行于 Wayland 的 Shutter?

在开始下载和安装之前，请确保你已经彻底卸载了你之前安装的任何版本的 Shutter。

接下来，你有两种获取这个 Shutter 变体的方法可选。第一种方法是直接访问它的 [GitHub 仓库](https://github.com/mvivarelli/shutter-on-wayland/tree/master)，下载提供的 “.deb” 文件。

>
> **[在 Wayland 上的 Shutter（GitHub）](https://github.com/mvivarelli/shutter-on-wayland/blob/master/shutter-on-wayland_0.99.4-6_all.deb)**
>
>
>

而我更为推荐的是第二种方法，尤其适用于 **Ubuntu 23.10 或者更高的版本**，因为它可以自动处理所有的依赖关系。你只需要运行以下的命令即可：

```
setfacl -m u:_apt:rx .
wget https://github.com/mvivarelli/shutter-on-wayland/raw/master/shutter-on-wayland_0.99.4-6_all.deb
sudo apt -f install ./shutter-on-wayland_0.99.4-6_all.deb

```

如果安装后你在启动 Shutter 时遇到了卡顿或者延迟的问题，那么你可以通过重启你的系统来解决此类问题。

? 对于这个项目，你有什么样的想法呢？你会考虑使用它吗？

---

via: <https://news.itsfoss.com/shutter-wayland-linux/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #1243 Linux 内核开发者再次讨论从 C 语言转换为现代 C++ 语言

Summary:
? Linux 内核开发者再次讨论从 C 语言转换为现代 C++ 语言
? 新设备允许用户用舌头滚动屏幕
? Brave Search 现在可以提供 AI 代码搜索
»
»

不能转！！！

我觉得不能转，我一直认为linux内核用c语言书写非常优美，我不知道用c++会把它弄成什么样，而且面向对象之类的用法并不适合内核的设计。

来自福建龙岩的 Chrome Mobile 90.0|Android 11 用户

看来C语言已经相当难满足内核开发者的需求了

看来又有内核成员不长记性了<br />
经典永流传： harmful.cat-v.org/software/c++/linus

要转就直接转RUST，转C++干嘛

正想说，C++能做的事情Rust都能做，性能差不多，安全性更好。

![](/data/attachment/album/202401/11/173020kzh3jffr1ibd33fh.jpg)

![](/data/attachment/album/202401/11/173032z9j95jjm7jms797m.png)

### #1 Linux 内核开发者再次讨论从 C 语言转换为现代 C++ 语言

Linux 内核主要由 C 代码和汇编代码构成，但 Linux 内核邮件列表已重启讨论，探讨未来将 Linux 内核的 C 代码转换为 C++ 的可能性。早在 2018 年，红帽工程师 <ruby> 大卫·豪威尔斯 <rt>  David Howells </rt></ruby> 就提出了一组 45 个补丁，将内核转换为 C++。这将允许主线内核使用内联模板函数、内联重载函数、类继承以及其他目前 Linux 内核的 C 代码不支持的功能。但该讨论没有进行下去，最终这些补丁在 Linux 内核邮件列表上停留了六年。昨天，长期从事 Linux 开发的 <ruby> 彼得·安文 <rt>  H. Peter Anvin </rt></ruby> 用一篇长文重启了这个讨论。他认为，“C++ 已经有了长足的发展。……C++ 终于 ‘长大’ 了，对于操作系统内核所体现的嵌入式编程而言，它是一种更好的 C 语言。……我们最近提出的许多针对 gcc 扩展的要求，其实在标准 C++ 中很容易实现。”Linux 内核转向 C++ 的阻力之一是 Linus Torvalds 过去一直积极反对 C++。

*（插图：DA/3ebf6893-7ebf-4901-8509-16c64ce7982d）*

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/CPP-Linux-Kernel-2024-Discuss)**
>
>
>

>
> 老王点评：相关各方的讨论非常激烈，但无论如何，任何决定都应该通过广泛的讨论和不断的修正来进行。
>
>
>

![](/data/attachment/album/202401/11/173049p8lycy8rxczf8tm9.png)

### #2 新设备允许用户用舌头滚动屏幕

一种名为 MouthPad^ 的新设备可以让用户只用舌头就能滚动浏览智能手机，从而使触摸屏不再需要双手。它是安装在口腔顶部的类似于固定器的触控板，可以感知舌头的运动，让用户可以用舌头轻扫或点击来滚动、打字、打电话甚至下棋 —— “它就是你嘴里的鼠标”。该设备的目的是为残疾人士，尤其是手部残疾或瘫痪人士提供帮助。

*（插图：DA/ec5efb61-7b22-41ed-97e3-b7d743a78798）*

>
> **[消息来源：NBC News](https://www.nbcnews.com/tech/tech-news/tongue-controlled-touchscreens-hit-market-year-rcna133270)**
>
>
>

>
> 老王点评：目的是很好，但总感觉有点奇怪。
>
>
>

![](/data/attachment/album/202401/11/173107s6fz4qwesfkyx6wo.png)

### #3 Brave Search 现在可以提供 AI 代码搜索

Brave 推出了 CodeLLM，这是一款集成到其搜索引擎中的人工智能工具，可提供编程查询结果，包括代码片段、逐步解释和引用。CodeLLM 是免费的，现在已集成到 Brave Search 中，用户无需切换应用即可访问。CodeLLM 建立在使用文本提示生成代码的 LLM Mixtral 之上。

*（插图：DA/2cacb37f-574e-41ea-9d4e-2a260149f039）*

>
> **[消息来源：Tech Crunch](https://techcrunch.com/2024/01/10/brave-search-can-now-deliver-results-for-programming-queries/)**
>
>
>

>
> 老王点评：以后程序员都不需要在 SO 上搜索代码了。
>
>
>


Scribus 1.6.0 发布：一次包含新功能的大规模升级

Summary: Scribus 1.6.0 更新是新年伊始的良好开端！

Font embedding code was completely rewritten from scratch to enable support of complex scripts such as Arabic, Hebrew, Chinese and Hindi that arrived in the 1.5.x development series.

支持复杂排版了，对于 GUI 排版界很难得…

…但都是各种 TeX 玩剩的东西，看看支不支持开明式标点吧（

Scribus 1.6.0 更新是新年伊始的良好开端！

![](/data/attachment/album/202401/12/154414wmkfolkjdbl2j9ef.jpg)

>
> Scribus 1.6.0 更新是新年伊始的良好开端！
>
>
>

Scribus 是一种非常流行的开源桌面出版（[DTP](https://en.wikipedia.org/wiki/Desktop_publishing)）软件，用于制作从小册子、新闻简报、海报到广告牌等各种插图。

最近，Scribus 1.6.0 正式发布，成为我们在 2024 年报道的第一个开源工具更新。

请允许我向你展示它所提供的内容。

### ? Scribus 1.6.0：有什么新变化？

![](/data/attachment/album/202401/12/154440qhuupwhg83ttuw02.png)

作为一个重要的稳定版本，Scribus 1.6.0 已经开发了相当长一段时间了，据开发人员称，它**包含数千个全面的增强功能和修复**。

我们将看一下此版本的**关键亮点**：

首先是**用户界面**，该界面经过全面改造，采用了新图标，支持明/暗模式，并增加了新的搜索功能，允许你搜索 Scribus 的特定功能。

此外，**新的“<ruby> 焊接 <rt>  Weld </rt></ruby>”功能**可以让你组合对象，然后在不分组的情况下移动这些对象。**“<ruby> 符号 <rt>  Symbol </rt></ruby>”/克隆功能**与 Adobe Illustrator 中的功能类似，可让你保持主对象（符号）与所有副本（克隆）的进度同步。

**在图形方面**，有一个名为“<ruby> 图片浏览器 <rt>  Picture Browser </rt></ruby>”的新插件，可以使所有图形文件的资源管理变得简单。它通过允许你标记它们并将它们放入图形集合中以便于访问来实现这一点。

此外，**文件的导入/导出也得到了改进**，Scribus 现在具有许多新的和改进的导入过滤器、支持 Krita 的 KRA 文件格式、改进了 PDF 导入等等。

**关于文本**，Scribus 1.6.0 配备了一些社区要求最多的功能，其中包括**支持页脚和页尾注释**、**文本变量**、**文本垂直对齐**、**窗体/窗口控制**和**交叉引用**。

#### ? 其他更改和改进

最后，你还应该了解一些其他值得注意的变化：

* 渲染帧功能中添加了对 **XeLaTeX** 的支持。
* 你现在可以使用新的**基于 PDF 的输出预览**。
* 现在可以**以原生文件格式存储位图图像**。
* 用于处理在线资源（例如字典）的**资源管理器**。
* 在 Linux 上，**Scribus 首选项目录已移动**到新位置，使其符合 [XDG 标准](https://specifications.freedesktop.org/basedir-spec/basedir-spec-0.6.html)。

Scribus 1.6 适用于 **Linux、BSD**、**Windows** 和 **macOS**。你可以浏览 [发行说明](https://www.scribus.net/scribus-1-6-0-released/) 来深入了解这个扩展版本。

### ? 下载 Scribus 1.6.0

获取最新 Scribus 的**最直接**方法是从其 [SourceForge 页面](https://sourceforge.net/projects/scribus/files/scribus/) 获取 Linux 版的 AppImage 文件。

但是，如果你正在寻找其他安装方法或获取源代码，你可以访问 [官方网站](https://www.scribus.net/downloads/)。

还有一个 [Ubuntu 的 PPA](https://launchpad.net/~scribus/+archive/ubuntu/ppa)，但是，在撰写本文时，那里还没有最新版本。

>
> **[Scribus 1.6.0（SourceForge）](https://sourceforge.net/projects/scribus/files/scribus/1.6.0/)**
>
>
>

如果你需要使用 AppImage 文件的帮助，我们的 [如何在 Linux 中使用 AppImage](https://itsfoss.com/use-appimage-linux/) 指南应该会有很大帮助。

? 你对本次更新有何看法？ 你是否期望添加到其中的所有改进？

---

via: <https://news.itsfoss.com/scribus-1-6-release/>

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


硬核观察 #1244 美国讨论限制中国获取 RISC-V 技术

Summary:
? 美国讨论限制中国获取 RISC-V 技术
? 谷歌取消迁出其云服务的费用
? Linux 内核 6.8 遭遇“可怕的性能回归”
»
»

“Linux 内核 6.8 遭遇“可怕的性能回归””

——编译器的问题可能更严重。。。

![](/data/attachment/album/202401/12/184319mh0hl0a4wxil8g8z.jpg)

![](/data/attachment/album/202401/12/184456qo3jtwx8tkzrjhgl.png)

### #1 美国讨论限制中国获取 RISC-V 技术

美国政府过去几个月一直在讨论限制中国获取 RISC-V 技术，认为中国利用 RISC-V 绕过了美国对华芯片出口管制。美国众议院建议成立一个跨部门政府委员会，研究 RISC-V 的潜在风险，讨论是否以及如何限制这项技术。据知情人士称，英国的 Arm 控股公司也在游说美国政府限制 RISC-V。但由于 RISC-V 架构是开源免专利的，限制中国使用 RISC-V 技术就如同类似限制中国使用开源的 Linux，基本上是不可能的。而负责 RISC-V 技术的非盈利组织的总部设在欧洲的瑞士。

*（插图：DA/97b6e341-9416-4956-9b7b-56194a047ea3）*

>
> **[消息来源：《纽约时报》](https://www.nytimes.com/2024/01/10/technology/risc-v-china-united-states-chips-security.html)**
>
>
>

>
> 老王点评：感谢开源，感谢开源精神。
>
>
>

![](/data/attachment/album/202401/12/184514on1i0d5ilyqzcmwm.png)

### #2 谷歌取消迁出其云服务的费用

长期以来，云计算服务提供商之间的转换成本一直备受抱怨，这些服务被讥讽为 “蟑螂旅馆”，让企业只能入住而不能退房。现在，谷歌正在采取措施改变这种状况。从即日起，该公司将取消对希望离开其云服务转而使用竞争对手服务的客户收取的费用。这一政策转变可能会迫使竞争对手亚马逊和微软也这样做。据分析，该公司希望监管机构转而关注它认为更大的问题：微软的限制措施使客户在某些情况下更难选择谷歌云。

*（插图：DA/b40ef8e3-b652-424a-a6af-e14aa66e751c）*

>
> **[消息来源：彭博社](https://www.bloomberg.com/news/articles/2024-01-11/google-googl-ends-switching-fees-for-cloud-data-pressuring-amazon-microsoft)**
>
>
>

>
> 老王点评：现在的公有云并没有那么“公有”。
>
>
>

![](/data/attachment/album/202401/12/184531zhfw2e4v4t4c2455.png)

### #3 Linux 内核 6.8 遭遇“可怕的性能回归”

Linus Torvalds 指出开发中的 Linux 6.8 “让我的空内核构建从 22 秒变成了 44 秒，也让完整内核的构建速度大大降低。”虽然 Linux 内核缺乏常见的、强大的持续集成，但对于代码编译速度减半这样的性能回归，还是相当令人惊讶，尤其是代码已经通过了 linux-next 等版本的测试。目前，看起来性能回归似乎是 CPUFreq 调度器调速器回归造成的。Linus 已经还原了一系列补丁，除非问题很快得到解决，这些补丁也将在主分支上被还原。

*（插图：DA/f1a12349-d36d-4402-b33d-c4399d1990b0）*

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Linux-6.8-Sched-Regression)**
>
>
>

>
> 老王点评：我觉得靠“眼睛多”来发现问题，不如用 CI 这样的程序更可靠。
>
>
>


13 款最佳开源 ChatGPT 替代品

从回答质量来看，综合评价，ChatGPT暂时没有能打的替代品，就连Bard的Genini都不如同级别的GPT，更别说国内那些山寨版。经常是同一个问题，GPT能给出满意的回答，而其他AI都答非所问。

![](/data/attachment/album/202401/13/111931vcvcn538l3gk9nkk.jpg)

>
> 正在寻找开源的 ChatGPT 替代方案？我们已经为你挑选了最优选项，供你一览。
>
>
>

ChatGPT 是 OpenAI 推出的一个强大的生成式 AI 工具。你只需要以对话形式键入文本提示，它就会给出详细的回应。

虽然它并非无懈可击，但无可否认，有时它表现得就是那么得力。然而，无论你如何利用它，不可更改的事实是，它并非开源方案。

作为一种专用选项，它并非在所有方面都有优势。那么，何处可以寻找 ChatGPT 的开源替代品呢？让我为你揭晓自然开源的优秀 ChatGPT 替代方案。

>
> ? 并非所有 ChatGPT 的替代品都有统一的运作方式。有些是为开发者设计的，让他们在其上打造属于自己的聊天机器人。还有一些则提供了供你测试使用的机器人或演示。
>
>
>

### 搜寻开源 ChatGPT 替代品的理由

依赖任何单一的服务对消费者来说都不是好事。对于 ChatGPT 来说也是如此。

除此之外，以下是我们需要寻找开源 ChatGPT 替代品的原因：

* 掌握我们的数据处理方式，实现透明化。
* 可以选择自己构建解决方案，节省了成本。
* 按需定制 ChatGPT 替代方案。
* 你不再受制于某个公司的规定。开源解决方案可以根据您的需求灵活变化。
* 对开源项目的贡献会对全球每个人产生影响。

我并不是在此表明 ChatGPT 的功能不足，或者你应当放弃使用。然而，以“我们”用户的角度来看，长期而言，更应该从开源的替代品中获得更多收益。

现在，就让我们开始探寻最佳开源的 ChatGPT 方案吧。

>
> ❌ 并非所有的选项都可用于商业用途。你需要特别留意使用某些机器人时的相关规定。
>
>
>

### 1、OpenChatKit

![](/data/attachment/album/202401/13/112002jdidgtfjnqjftqhi.jpg)

[OpenChatKit](https://huggingface.co/spaces/togethercomputer/OpenChatKit) 是由 [Together](https://www.together.ai/) 开发的全功能 ChatGPT 替代品。

该公司起初与 **LAION**（主导了 <ruby> <a href="https://github.com/Stability-AI/stablediffusion">  稳定扩散 </a> <rt>  Stable Diffusion </rt></ruby>）等研究机构共同合作，构建出一个训练数据集。在撰写本文时，它搭载了 [RedPajama 模型](https://www.together.ai/blog/redpajama-7b)，这是目前最大的开源 AI 模型之一。

你可以试验看看它是否适合你的使用需求，并在其 [GitHub 页面](https://github.com/togethercomputer/OpenChatKit) 进一步探索更多技术细节。

### 2、ChatRWKV

![](/data/attachment/album/202401/13/112003ls71ss8j2qkqn8n6.jpg)

ChatRWKV 是由 <ruby> 循环神经网络 <rt>  Recurrent Neural Network </rt></ruby>（RNN） 语言模型驱动的开源替代品。

你可以在 [Huggingface](https://huggingface.co/spaces/BlinkDL/RWKV-Gradio-2) 发现它的演示。 [GitHub 页面](https://github.com/BlinkDL/ChatRWKV) 列出了关于其代码库、技术细节，以及最新版本预览的所有信息。

开发者和商业公司都可以利用 ChatRWKV 构建他们的聊天机器人。

### 3、ColossalChat

![](/data/attachment/album/202401/13/112003q086mh6lkmm4r4lt.jpg)

Colossal AI 是一个开源项目，目标是帮助你克隆 AI 模型，并打造出满足你需求的 ChatGPT 类似的平台。

[ColossalChat](https://chat.colossalai.org/) 是以此项目为基础打造的聊天机器人。然而遗憾的是，在本文撰写之时，它的演示暂未上线。

你可以在 [GitHub](https://github.com/hpcaitech/ColossalAI/tree/main/applications/Chat) 上探索其源代码。

### 4、KoboldAI

KoboldAI 是一个类似于 ChatGPT 的 AI，主要以浏览器前端的形式为写作提供辅助。虽然它具备聊天机器人模式，但它首要的设计目标是作为专为小说设计的 AI 写作助手。

提供了各种各样的模型，你可以在 [Google Colab](https://colab.research.google.com/?utm_source=scs-index) 上轻松运行它。

它支持各种模式来优化你的写作，让你有更大的发挥空间。你可以在其 [GitHub 页面](https://github.com/KoboldAI/KoboldAI-Client) 中详细了解它的所有信息。

### 5、GPT4ALL

GPT4ALL 是一个令人感兴趣的开源项目，旨在为你提供可在任何地方运行的聊天机器人。

没错，你可以在自己的 CPU 上本地运行它，而且几乎所有其他型号的 GPU 都能支持。

你需要做的就是安装它的桌面应用程序（聊天客户端），然后就能开始使用了。如果对其制作过程感兴趣，可以查看其 [GitHub 页面](https://github.com/nomic-ai/gpt4all)。

### 6、HuggingChat

![](/data/attachment/album/202401/13/112003qnlsa4jp0j3pc3ck.jpg)

听起来熟悉吗？嗯，Huggingface 的平台被其他 AI 模型和聊天机器人用作展示他们的演示。

HuggingChat 正是 Huggingface 打造的开源的 ChatGPT 替代品，使用了社区中最优秀的 AI 模型来实现聊天机器人的功能。

你可以 [尝试一下](https://huggingface.co/spaces/huggingchat/chat-ui)，并在 [源代码](https://huggingface.co/spaces/huggingchat/chat-ui/tree/main) 中深入探讨更多细节。如果有特别的需求，可以选择搭配不同的后端来使用聊天应用。

### 7、Koala

EasyLM 的研发成果 Koala 是一款可尝试本地运行的聊天机器人，整个架构基于 LLaMA 数据集完成。

你可以参阅其 [官方博客](https://bair.berkeley.edu/blog/2023/04/03/koala/) 来深入了解细节。

目前，演示版本还未上线，但是，你可以参考其 [文档](https://github.com/young-geng/EasyLM/blob/main/docs/koala.md) 在本地部署，进行试运行并测试。

### 8、Vicuna

![](/data/attachment/album/202401/13/112003lcy00tnlntxlyycz.jpg)

Vicuna 是另一款开源聊天机器人，训练基础依然是 LLaMA。根据开发者的说法，使用 GPT-4 作为评价标准，得出的结论是 Vicuna 的聊天体验接近 ChatGPT。

这是一个你可能想要验证的有趣声明。你可以选择 Vicuna 作为语言模型，并在 [Chatbot Arena](https://chat.lmsys.org/) 进行尝试。

想要了解更多关于它的信息，你可以查阅其 [官方博文](https://lmsys.org/blog/2023-03-30-vicuna/)。

### 9、Alpaca-LoRA

Alpaca-LoRA 雄心勃勃，旨在使用低秩适应技术提供一种可在树莓派中运行的模型。

利用单个 RTX 4090 GPU，整个模型可在几小时之内完成训练。

此时，演示版本仍然未开放，但你可以在其 [GitHub 页面](https://github.com/tloen/alpaca-lora) 上寻找更多详情。

### 10、Dolly

![](/data/attachment/album/202401/13/112003w6lmn0fbm399xxgl.jpg)

Dolly 是另一个在 Databricks 机器学习平台上训练的语言模型，并已获得商业使用许可。

你可以在 [GitHub](https://github.com/databrickslabs/dolly) 上查阅源代码，并在 [Huggingface](https://huggingface.co/databricks/dolly-v2-12b) 上探究模型详情。

### 11、H2oGPT

![](/data/attachment/album/202401/13/112004l39m1qww3qf89qrl.jpg)

H2oGPT 是专门为查询定制的，可以帮助你总结文档。在保证隐私的前提下，它允许你通过用户界面上传和查看文档。

同样，你可以像使用 ChatGPT 那样开始对话。对于 Windows 和 macOS，该项目提供了易于安装的程序。对于 Linux 系统，你可能需要通过 Docker 进行些许设置。

可以尝试该聊天机器人的 [在线演示](https://huggingface.co/spaces/h2oai/h2ogpt-chatbot2) 来了解其运行情况，并在 [GitHub 页面](https://github.com/h2oai/h2ogpt) 查阅源代码。

### 12、Cerebras-GPT

![](/data/attachment/album/202401/13/112004u3z8ux89x3px9xae.jpg)

Cerebras-GPT 呈现了通过大量参数训练的开源 GPT 类似模型。

它并没有提供聊天机器人服务。它的目标旨在提供精准且高效的开源模型供你使用。

获取模型详情，你可以访问 [Hugging Face](https://huggingface.co/cerebras/Cerebras-GPT-6.7B)。

### 13、OpenAssistant

OpenAssistant 的目标，是让每一个人都能访问类似于 ChatGPT 的聊天机器人。

有一段时间，他们通过演示版本收集了用户数据。现在，由于项目已由创作者标记为完成，演示版本不再开放。

但你可以利用该项目的成果，及其 [源代码](https://github.com/LAION-AI/Open-Assistant?tab=readme-ov-file#how-to-try-it-out)，在此基础上进行扩展。

### 总结

面向用户和开发者，ChatGPT 的开源替代品提供了各种各样的优点。你可以选择运用一个开源的聊天机器人，或者借助开源语言模型构建一个属于自己的聊天机器人。

无论你选择哪一个，只要遵守可用语言模型的政策，你都可以自由地修改和使用它以满足你的需求。

你最爱哪个开源的 ChatGPT 替代品呢？是否还有其他优秀的开源型 ChatGPT 项目，我们错过了但你特别喜欢的？请在下方评论区告诉我们你的想法。

*（题图：DA/b757432f-56a4-4493-a109-1eca6c57c1fc）*

---

via: <https://itsfoss.com/open-source-chatgpt-alternatives/>

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

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


硬核观察 #1245 OpenAI 悄然删除禁止将 ChatGPT 用于 “军事和战争” 的禁令

Summary:
? OpenAI 悄然删除禁止将 ChatGPT 用于 “军事和战争” 的禁令
? 博通抛弃 VMware 云服务提供商
? Linux 4.14 LTS 在六年后迎来生命终结
»
»

从以往的技术研发历史看，技术军民转化几乎无法阻挡的，军事化和民用的相互交叉极大促进了技术的发展，比如核武不就这样吗，啊哈，不然这个世界估计很多国家和地区现在还得烧煤发电

在技术发展史上，先进技术会首先被用来大量杀死人类，比如核弹，坦克，机关枪

![](/data/attachment/album/202401/13/172432a3aa888zf5wfjlj5.jpg)

![](/data/attachment/album/202401/13/172444huflnfljubqfblnf.png)

### #1 OpenAI 悄然删除禁止将 ChatGPT 用于 “军事和战争” 的禁令

在 1 月 10 日之前，OpenAI 的《使用政策》页面一直禁止“具有高身体伤害风险的活动”，包括 “武器开发” 及 “军事和战争”。而新政策保留了不得 “利用我们的服务伤害自己或他人” 的禁令，并以 “开发或使用武器” 来举例，但对 “军事和战争” 用途的全面禁止已不复存在。该公司表示，此次重写旨在使文件 “更清晰”、“更易读”，其中还包括许多其他实质性的语言和格式改动。

*（插图：DA/1eb6f110-3d94-4c0c-84af-34e5ec2e1b64）*

>
> **[消息来源：Slashdot](https://tech.slashdot.org/story/24/01/12/202225/openai-quietly-deletes-ban-on-using-chatgpt-for-military-and-warfare)**
>
>
>

>
> 老王点评：唉，AI 武器化似乎是不可避免的发展趋势，科技往往第一时间用在武器和战争上。
>
>
>

![](/data/attachment/album/202401/13/172503qk8hk5xiect53hx5.png)

### #2 博通抛弃 VMware 云服务提供商

在收购了 VMware 之后，博通对 VMware 进行了一系列“手术”。不但将 VMware 的许可变为 [订阅制](/article-16470-1.html)，而且还对其合作伙伴关系进行了一系列大动作。博通准备终止 VMware 的渠道计划，只有一些被邀请的解决方案提供商/经销商会过渡到博通的渠道计划。并且，同时博通还通知 VMware 的云服务提供商，告知将于 4 月底终止他们销售基于 VMware 的云服务的伙伴计划。只有一些服务提供商将被邀请加入博通的合作伙伴计划，而没有被邀请加入的则陷入了恐慌，不知道其客户该怎么办。

*（插图：DA/e82f9ab3-baf2-412a-b208-f0b9f7f45884）*

>
> **[消息来源：The Register](https://www.theregister.com/2024/01/10/broadcom_ends_vmware_partner_program/)**
>
>
>

>
> 老王点评：被卖的公司往往被吃干吞净。
>
>
>

![](/data/attachment/album/202401/13/172519hbbrklq3cnn5brb3.png)

### #3 Linux 4.14 LTS 在六年后迎来生命终结

Linux 4.14 于 2017 年底首次亮相，但随着 Linux 4.14.336 的发布，它成为该系列的最后一个点版本。此版本中，只进行了少量的错误修复。LTS 内核维护者 Greg 说，“现在它已正式报废。请不要再使用这个版本的内核。”Linux 上游仍在维护的 LTS 内核有 Linux 4.19、5.4、5.10、5.15、6.1，以及最近作为 2023 LTS 内核的 6.6。Linux 4.19 将于今年年底到期，5.4 将于 2025 年到期，其余内核将于 2026 年底到期，只有两年支持期。

*（插图：DA/20d496b2-c29c-433f-8a7e-3b2c7ddf2828）*

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Linux-4.14-LTS-Reaches-EOL)**
>
>
>

>
> 老王点评：随着这些支持六年的内核逐渐落幕，以后的内核也就支持两年。
>
>
>


在 Linux 上提升游戏体验的 7 个有效建议及工具

Summary: 下面是一些极好的建议来让你的 Linux 系统游戏体验更上一层楼。

补充几个Tips：

1. 选择对Linux开源支持完备的显卡品牌，AMD就是首选，苏妈家一直有跟进适配开源驱动。相应地，慎选对Linux支持不够积极的品牌，尤其是老黄家。

2. 垃圾佬捡显卡，一定要查清楚支持OpenGL和Vulkan的版本。Vulkan已经是中坚力量，快十多年前不支持Vulkan的老卡就别选了。

3. 追求极致性能的玩家，可以考虑Linux Zen内核。Arch Linux等发行版有官方支持。

来自广西南宁的 Chrome Mobile 120.0|Android 10 用户

下面是一些极好的建议来让你的 Linux 系统游戏体验更上一层楼。

![](/data/attachment/album/202401/13/230125y90rry7bnz0niy90.jpg)

>
> 下面是一些极好的建议来让你的 Linux 系统游戏体验更上一层楼。
>
>
>

多亏了各种新工具的诞生和 Linux 发行版在用户体验上的改进，目前已有成千上万的游戏可以在 Linux 系统中运行。

无论你是使用主流的 Linux 发行版还是 [专为游戏设计的 Linux 发行版](https://itsfoss.com/linux-gaming-distributions/)，你都能在 Linux 中享受游戏的乐趣。

然而，为了得到流畅的游戏体验，有一些你需要遵循的工具，技巧和方法。在这篇文章中，我会为你详细介绍一些。

### 1、选择合适的电子游戏

![](/data/attachment/album/202401/13/230150nv388951e7gwwb1y.png)

最首要的一步就是找到一款你热爱，且在 Linux 上运行流畅的游戏。

假设你购买或下载了一款最初为 Windows 系统制作的游戏，可能不论你使用何种工具，都无法在 Linux 系统中成功运行。而你最终只会挫败地想 “Linux 不适合游戏” ?

那么，该如何避免这类问题呢？

首先，你需要查阅你想要购买或下载的游戏可以在哪些平台上运行。如果游戏支持 Linux 或 Steam OS 系统，那就没问题了。

你还可以查看该游戏是否已经被添加到 [Steam Deck 验证列表](https://store.steampowered.com/greatondeck/) 中。

无论哪种情况，你都可以逛一逛 [ProtonDB](https://www.protondb.com/)，在那儿搜索你所关注的游戏，看看其他用户对其的评价和打分。如果大部分评论听起来都令人信服，或者说这款游戏很值得尝试，那你就可以放心购买或下载了。

### 2、不要选择知名度较低的发行版

如果你希望得到社区或者使用 Linux 的朋友们的支持与帮助，请使用那些并非某某人业余项目的 Linux 发行版。

我建议你从 [最佳 Linux 发行版](https://itsfoss.com/best-linux-distributions/) 中作出选择。

最好的是，选择一款 [长期支持版](https://itsfoss.com/long-term-support-lts/) 以确保稳定的使用体验。

### 3、别为 Linux 游戏搭建顶级配置 PC

![](/data/attachment/album/202401/13/230150utfuhhl9ooxhs0ok.png)

我知道听起来有点令人失望。但为了确保最大的兼容性以及无忧的游戏体验，最理想的状况是选用前一代的硬件而不是最新的。

利用这种方式，你还可以享受到大额的折扣，省下大笔钱！别忘了，在决定购买前，还可参阅其他 PC 硬件狂热爱好者的评论。

这个建议尤其适用于新硬件，那些刚刚发布没几个月的。

当然，你可以冒险尝试最新的硬件组件。但游戏可能会崩溃，或以其他方式出问题。而且，你也可能无法获取到关于这些硬件组件的可靠评论，从而做出明智的选择。

### 4、开启 Steam Play

如果你一直都是 Linux 原生游戏的粉丝，你可能想要 [安装 Steam 游戏商店](https://itsfoss.com/install-steam-ubuntu-linux/) 并开启 Proton 兼容层，在 Linux 上运行那些仅供 Windows 系统的游戏。

你可以参考我前面提到的 ProtonDB 或者 Steam Deck 的验证列表，来确认该游戏是否能在 Linux 上流畅运行。

在安装了 Steam 以后，如果你想 [开启 Steam Play](https://itsfoss.com/steam-play/)，可以参照我们的指南操作。

### 5、没有 Steam？不必担忧！

尽管 Steam 提供了跨平台的卓越顺畅的游戏体验。

但如果你不想仅限于 Steam，还想要能访问像 Epic 游戏商店这样的商店中的游戏，你可以考虑安装 [Lutris](https://lutris.net/) 这样的工具。

![](/data/attachment/album/202401/13/230151njmizz9w97zzgh4m.png)

我们为你准备了一份详尽的指南，来帮助你 [在 Linux 下使用 Epic 游戏商店](https://itsfoss.com/epic-games-linux/)，并学习使用此工具（和其他替代工具）。

不用担心，如果你偏爱 GOG 的无数字版权管理（DRM）游戏，我们同样为你准备了指南，指导你使用 Lutris 这样的工具在 Linux 下玩 [GOG 游戏](https://itsfoss.com/play-gog-games-linux/)。

### 6、使用 MangoHud 跟踪游戏性能

你是否希望在游戏中同时监控你的硬件性能和游戏性能？

![](/data/attachment/album/202401/13/230151oe02r2z725q7rg20.jpg)

借助 [MangoHud](https://github.com/flightlessmango/MangoHud)，你可以得到一个信息层，显示 **FPS、CPU/GPU 的温度、显存使用情况等信息**，这与在 Windows 下利用英伟达 GeForce Experience 或者 MSI Afterburner 的效果相似。

安装十分简单，对于像 Fedora、Debian 和 Arch 这样的发行版，提供了 Flatpak 和其他形式的二进制文件。你可以在它的 [GitHub 页面](https://github.com/flightlessmango/MangoHud) 上了解更多关于它的使用方法。

### 7、已经买好游戏硬件了吗？马上进行配置！

可惜的是，并不是所有的发烧友级游戏硬件都能在 Linux 下进行详细调整，至少，不能和在 Windows 下一样。

例如，你可以使用图形界面工具 [piper 进行游戏鼠标的配置](https://itsfoss.com/piper-configure-gaming-mouse-linux/)。

同理，如果你想要控制或者 [调整 Razer 设备上的灯光](https://itsfoss.com/set-up-razer-devices-linux/)，你可以在这里找到我们的快速教程进行学习。

不只是设备，需要监控你的 PC 中的一体式水冷（AIO）或者其他散热硬件吗？你可以试试 [CoolerControl](https://gitlab.com/coolercontrol/coolercontrol)（以前称为 [Coolero](https://itsfoss.com/coolero/)）。

监控组件的温度对于获得流畅的游戏体验至关重要。因此，你可以选择工具如 CoolerControl 和 MangoHud，或者手动监控你的系统资源。

### 结束语

除了上述的所有建议，你还应该微调游戏内的设置以在你的系统上获得沉浸式体验。当然，这依赖于个人用户的偏好，所以没有通用的解决方案。

别忘了，如果你是新手，那么不妨读一读我们的 [Linux 游戏指南](https://itsfoss.com/linux-gaming-guide/)。

? 你最喜欢用什么工具来提升你的 Linux 游戏体验？你有想要添加到这个列表的建议吗？请随时在评论中让我们知道你的想法。

*（题图：DA/68d71173-992a-423a-bd95-a6e2f64bf254）*

---

via: <https://itsfoss.com/linux-gaming-tips/>

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

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


硬核观察 #1246 OpenWrt 项目准备推出开放路由器

Summary:
? OpenWrt 项目准备推出开放路由器
? Linux 设备正遭受前所未有的矿工蠕虫攻击
? 高通称引领科技需要 “在中国做大生意”
»
»

![](/data/attachment/album/202401/14/203854r772jbarto7tl7l8.jpg)

![](/data/attachment/album/202401/14/203906trh7d9ua79rr779s.png)

### #1 OpenWrt 项目准备推出开放路由器

OpenWrt 计划与香蕉派合作开发开放路由器 OpenWrt One，售价将低于 100 美元。香蕉派负责制造、销售和售后，获利将部分捐赠给 OpenWrt。这台路由器属于开放硬件，其电路图也将会开源。

*（插图：DA/54c35b6c-b3ef-47e3-9572-e6f3b5645518）*

>
> **[消息来源：OpenWrt](https://forum.openwrt.org/t/openwrt-one-celebrating-20-years-of-openwrt/183684)**
>
>
>

>
> 老王点评：开源的软件加上开源的硬件，必须支持一下。
>
>
>

![](/data/attachment/album/202401/14/203936z66c1o8ixoibb6bu.png)

### #2 Linux 设备正遭受前所未有的矿工蠕虫攻击

一种前所未见的自我复制恶意软件正在全球范围内感染 Linux 设备，它使用特殊的隐藏方法安装加密矿工恶意软件。该蠕虫是 Mirai 僵尸网络恶意软件的变种。Mirai 于 2016 年首次出现，通过入侵易受攻击的设备发起了创纪录的分布式拒绝服务攻击，但这个最新变种安装了加密矿工软件，使攻击者可以利用受害者的计算资源、电力和带宽生成加密货币。另外，它的目标不是 telnet 弱密码，而是 SSH 弱密码。

*（插图：DA/af1212dd-be5f-4f07-a9f3-edc31e9d9c68）*

>
> **[消息来源：Ars Technica](https://arstechnica.com/security/2024/01/a-previously-unknown-worm-has-been-stealthily-targeting-linux-devices-for-a-year/)**
>
>
>

>
> 老王点评：Linux 再安全也防不住弱密码啊。
>
>
>

![](/data/attachment/album/202401/14/203955f3ex0brb5zd696r0.png)

### #3 高通称引领科技需要 “在中国做大生意”

高通公司 CEO <ruby> 克里斯蒂安诺·阿蒙 <rt>  Cristiano Amon </rt></ruby> 在 2024 年消费电子展上接受采访时，对高通公司在中国的业务充满信心。中国是高通公司收入最大的市场。他说：“如果你拥有领先的技术，你就会在中国有很大的业务。”根据半导体行业协会的数据，中国仍然是全球最大的半导体市场，其销售额占全球市场的三分之一。

*（插图：DA/7f2b3977-c4f3-41a9-b824-3fd7c41a56df）*

>
> **[消息来源：Yahoo](https://finance.yahoo.com/news/qualcomm-ceo-leading-tech-requires-big-business-in-china-170313727.html)**
>
>
>

>
> 老王点评：要是只卖低端货，中国也不需要。
>
>
>

### 回音

* Linux 内核的合并窗口 [再次](https://www.phoronix.com/news/Linux-6.8-Merge-Window-Hiatus) 受到 [严冬风暴影响](/article-13131-1.html)。


Textual：为 Python 增加漂亮的文本用户界面（TUI）

Summary: 如果你的代码是用 Python 编写的，你应该使用 Textual 来帮助你编写 TUI（文本用户界面）。

![](/data/attachment/album/202401/15/110359fptrxpqffztniz45.jpg)

### 快速入门使用 Textual

Python 在 Linux 上有像 [TkInter](https://docs.python.org/3/library/tkinter.html) 这样的优秀 GUI（图形用户界面）开发库，但如果你不能运行图形应用程序怎么办？

文本终端，并非只在 Linux 上有，而且 BSD 和其它的出色的类 Unix 操作系统上也有。如果你的代码是用 Python 编写的，你应该使用 [Textual](https://textual.textualize.io/) 来帮助你编写 TUI（文本用户界面）。在这个快速介绍中，我将向你展示两个你可以用 Textual 做的示例，并且介绍它未来可能的应用方向。

所以 Textual 是什么？

>
> Textual 是一个为 Python 构建的快速应用程序开发框架，由 [Textualize.io](http://Textualize.io) 构建。它可以让你用简单的 Python API 构建复杂的用户界面，并运行在终端或网络浏览器上！
>
>
>

#### 你需要的跟进这个教程的工具

你需要有以下条件：

1. 具备基础的编程经验，最好熟练使用 Python。
2. 理解基础的面向对象概念，比如类和继承。
3. 一台安装了 Linux 与 Python 3.9+ 的机器
4. 一款好的编辑器（Vim 或者 PyCharm 是不错的选择）

我尽可能简单化代码，以便你能轻松理解。此外，我强烈建议你下载代码，或至少按照接下来的说明安装相关程序。

#### 安装步骤

首先创建一个虚拟环境：

```
python3 -m venv ~/virtualenv/Textualize

```

现在，你可以克隆 Git 仓库并创建一个可以编辑的发布版本：

```
. ~/virtualenv/Textualize/bin/activate
pip install --upgrade pip
pip install --upgrade wheel
pip install --upgrade build
pip install --editable .

```

或者直接从 [Pypi.org](http://Pypi.org) 安装：

```
. ~/virtualenv/Textualize/bin/activate
pip install --upgrade KodegeekTextualize

```

### 我们的首个程序：日志浏览器

![](/data/attachment/album/202401/15/110439y6oo97pb89989wwh.svg)

这个 *日志浏览器* 就是一款简单的应用，能执行用户 *[PATH](https://manpages.org/bash)* 路径上的一系列 UNIX 命令，并在任务执行完毕后捕获输出。

以下是该应用的代码：

```
import shutil
from textual import on
from textual.app import ComposeResult, App
from textual.widgets import Footer, Header, Button, SelectionList
from textual.widgets.selection_list import Selection
from textual.screen import ModalScreen
# Operating system commands are hardcoded
OS_COMMANDS = {
    "LSHW": ["lshw", "-json", "-sanitize", "-notime", "-quiet"],
    "LSCPU": ["lscpu", "--all", "--extended", "--json"],
    "LSMEM": ["lsmem", "--json", "--all", "--output-all"],
    "NUMASTAT": ["numastat", "-z"]
}

class LogScreen(ModalScreen):
    # ... Code of the full separate screen omitted, will be explained next
    def __init__(self, name = None, ident = None, classes = None, selections = None):
        super().__init__(name, ident, classes)
        pass

class OsApp(App):
    BINDINGS = [
        ("q", "quit_app", "Quit"),
    ]
    CSS_PATH = "os_app.tcss"
    ENABLE_COMMAND_PALETTE = False  # Do not need the command palette

    def action_quit_app(self):
        self.exit(0)

    def compose(self) -> ComposeResult:
        # Create a list of commands, valid commands are assumed to be on the PATH variable.
        selections = [Selection(name.title(), ' '.join(cmd), True) for name, cmd in OS_COMMANDS.items() if shutil.which(cmd[0].strip())]
        yield Header(show_clock=False)
        sel_list = SelectionList(*selections, id='cmds')
        sel_list.tooltip = "Select one more more command to execute"
        yield sel_list
        yield Button(f"Execute {len(selections)} commands", id="exec", variant="primary")
        yield Footer()

    @on(SelectionList.SelectedChanged)
    def on_selection(self, event: SelectionList.SelectedChanged) -> None:
        button = self.query_one("#exec", Button)
        selections = len(event.selection_list.selected)
        if selections:
            button.disabled = False
        else:
            button.disabled = True
        button.label = f"Execute {selections} commands"

    @on(Button.Pressed)
    def on_button_click(self):
        selection_list = self.query_one('#cmds', SelectionList)
        selections = selection_list.selected
        log_screen = LogScreen(selections=selections)
        self.push_screen(log_screen)

def main():
    app = OsApp()
    app.title = f"Output of multiple well known UNIX commands".title()
    app.sub_title = f"{len(OS_COMMANDS)} commands available"
    app.run()

if __name__ == "__main__":
    main()

```

现在我们逐条梳理一下程序的代码：

1. 每个应用都扩展自 `App` 类。其中最重要的有 `compose` 与 `mount` 等方法。但在当前应用中，我们只实现了 [compose](https://textual.textualize.io/tutorial/#composing-the-widgets)。
2. 在 `compose` 方法中，你会返回一系列 <ruby>   组件  <rt>  Widget </rt></ruby>，并按顺序添加到主屏幕中。每一个组件都有定制自身外观的选项。
3. 你可以设定单字母的 <ruby>   绑定  <rt>  binding </rt></ruby>，比如此处我们设定了 `q` 键来退出应用（参见 `action_quit_app` 函数和 `BINDINGS` 列表）。
4. 利用 `SelectionList` 组件，我们展示了待运行的命令列表。然后，你可以通过 `@on(SelectionList.SelectedChanged)` 注解以及 `on_selection` 方法告知应用获取所选的内容。
5. 对于无选定元素的应对很重要，我们会根据运行的命令数量来决定是否禁用 “exec” 按钮。
6. 我们使用类似的监听器（ `@on(Button.Pressed)` ）来执行命令。我们做的就是将我们的选择送到一个新的屏幕，该屏幕会负责执行命令并收集结果。

你注意到 `CSS_PATH = "os_app.tcss"` 这个变量了吗？Textual 允许你使用 CSS 来控制单个或多个组件的外观（色彩、位置、尺寸）：

```
Screen {
        layout: vertical;
}

Header {
        dock: top;
}

Footer {
        dock: bottom;
}

SelectionList {
        padding: 1;
        border: solid $accent;
        width: 1fr;
        height: 80%;
}

Button {
        width: 1fr
}

```

引自 Textual 官方网站：

>
> Textual 中使用的 CSS 是互联网上常见 CSS 的简化版本，容易上手。
>
>
>

*这真是太棒了*，只需要用一哥独立的 [样式表](https://textual.textualize.io/guide/styles/)，就可以轻松调整应用的样式。

好，我们现在来看看如何在新屏幕上展示结果。

#### 在新屏幕上展示结果

![](/data/attachment/album/202401/15/110439yqdsozs9m2qhms2m.svg)

以下是在新屏幕上处理输出的代码：

```
import asyncio
from typing import List
from textual import on, work
from textual.reactive import reactive
from textual.screen import ModalScreen
from textual.widgets import Button, Label, Log
from textual.worker import Worker
from textual.app import ComposeResult

class LogScreen(ModalScreen):
    count = reactive(0)
    MAX_LINES = 10_000
    ENABLE_COMMAND_PALETTE = False
    CSS_PATH = "log_screen.tcss"

    def __init__(
            self,
            name: str | None = None,
            ident: str | None = None,
            classes: str | None = None,
            selections: List = None
    ):
        super().__init__(name, ident, classes)
        self.selections = selections

    def compose(self) -> ComposeResult:
        yield Label(f"Running {len(self.selections)} commands")
        event_log = Log(
            id='event_log',
            max_lines=LogScreen.MAX_LINES,
            highlight=True
        )
        event_log.loading = True
        yield event_log
        button = Button("Close", id="close", variant="success")
        button.disabled = True
        yield button

    async def on_mount(self) -> None:
        event_log = self.query_one('#event_log', Log)
        event_log.loading = False
        event_log.clear()
        lst = '\n'.join(self.selections)
        event_log.write(f"Preparing:\n{lst}")
        event_log.write("\n")

        for command in self.selections:
            self.count += 1
            self.run_process(cmd=command)

    def on_worker_state_changed(self, event: Worker.StateChanged) -> None:
        if self.count == 0:
            button = self.query_one('#close', Button)
            button.disabled = False
        self.log(event)

    @work(exclusive=False)
    async def run_process(self, cmd: str) -> None:
        event_log = self.query_one('#event_log', Log)
        event_log.write_line(f"Running: {cmd}")
        # Combine STDOUT and STDERR output
        proc = await asyncio.create_subprocess_shell(
            cmd,
            stdout=asyncio.subprocess.PIPE,
            stderr=asyncio.subprocess.STDOUT
        )
        stdout, _ = await proc.communicate()
        if proc.returncode != 0:
            raise ValueError(f"'{cmd}' finished with errors ({proc.returncode})")
        stdout = stdout.decode(encoding='utf-8', errors='replace')
        if stdout:
            event_log.write(f'\nOutput of "{cmd}":\n')
            event_log.write(stdout)
        self.count -= 1

    @on(Button.Pressed, "#close")
    def on_button_pressed(self, _) -> None:
        self.app.pop_screen()

```

你会注意到：

1. `LogScreen` 类扩展自 `ModalScreen` 类， 该类负责处理模态模式的屏幕。
2. 这个屏幕同样有一个 `compose` 方法，我们在这里添加了组件以展示 Unix 命令的内容。
3. 我们创建了一个叫做 `mount` 的新方法。一旦你用 `compose` 编排好组件，你就可以运行代码来获取数据，并再进一步定制它们的外观。
4. 我们使用 [asyncio](https://docs.python.org/3/library/asyncio.html) 运行命令，这样我们就能让 TUI 主工作线程在每个命令的结果出来时就及时更新内容。
5. 对于“工作线程”，请注意 `run_process` 方法上的 `@work(exclusive=False)` 注解，该方法用于运行命令并捕获 STDOUT + STDERR 输出。使用 [工作线程](https://textual.textualize.io/guide/workers/) 来管理并发并不复杂，尽管它们在手册中确实有专门的章节。这主要是因为运行的外部命令可能会执行很长时间。
6. 在 `run_process` 中，我们通过调用 `write` 以命令的输出内容来更新 `event_log`。
7. 最后，`on_button_pressed` 把我们带回到前一屏幕（从堆栈中移除屏幕）。

这个小应用向你展示了如何一份不到 200 行的代码来编写一个简单的前端，用来运行非 Python 代码。

现在我们来看一个更复杂的例子，这个例子用到了我们还未探索过的 Textual 的新特性。

### 示例二：展示赛事成绩的表格

![通过 Textual 创建的表格应用](/data/attachment/album/202401/15/110439oercynysjncnku7y.svg)

本示例将展示如何使用 `DataTable` 组件在表格中展示赛事成绩。你能通过这个应用实现：

* 通过列来排序表格
* 选择表格中的行，完整窗口展示赛事细节，我们将使用我们在日志浏览器中看到的 “推送屏幕” 技巧。
* 能进行表格搜索，查看选手详情，或执行其他操作如退出应用。

下面，我们来看看应用代码：

```
#!/usr/bin/env python
"""
Author: Jose Vicente Nunez
"""
from typing import Any, List

from rich.style import Style
from textual import on
from textual.app import ComposeResult, App
from textual.command import Provider
from textual.screen import ModalScreen, Screen
from textual.widgets import DataTable, Footer, Header

MY_DATA = [
    ("level", "name", "gender", "country", "age"),
    ("Green", "Wai", "M", "MYS", 22),
    ("Red", "Ryoji", "M", "JPN", 30),
    ("Purple", "Fabio", "M", "ITA", 99),
    ("Blue", "Manuela", "F", "VEN", 25)
]

class DetailScreen(ModalScreen):
    ENABLE_COMMAND_PALETTE = False
    CSS_PATH = "details_screen.tcss"

    def __init__(
            self,
            name: str | None = None,
            ident: str | None = None,
            classes: str | None = None,
            row: List[Any] | None = None,
    ):
        super().__init__(name, ident, classes)
        # Rest of screen code will be show later

class CustomCommand(Provider):

    def __init__(self, screen: Screen[Any], match_style: Style | None = None):
        super().__init__(screen, match_style)
        self.table = None
        # Rest of provider code will be show later

class CompetitorsApp(App):
    BINDINGS = [
        ("q", "quit_app", "Quit"),
    ]
    CSS_PATH = "competitors_app.tcss"
    # Enable the command palette, to add our custom filter commands
    ENABLE_COMMAND_PALETTE = True
    # Add the default commands and the TablePopulateProvider to get a row directly by name
    COMMANDS = App.COMMANDS | {CustomCommand}

    def action_quit_app(self):
        self.exit(0)

    def compose(self) -> ComposeResult:
        yield Header(show_clock=True)

        table = DataTable(id=f'competitors_table')
        table.cursor_type = 'row'
        table.zebra_stripes = True
        table.loading = True
        yield table
        yield Footer()

    def on_mount(self) -> None:
        table = self.get_widget_by_id(f'competitors_table', expect_type=DataTable)
        columns = [x.title() for x in MY_DATA[0]]
        table.add_columns(*columns)
        table.add_rows(MY_DATA[1:])
        table.loading = False
        table.tooltip = "Select a row to get more details"

    @on(DataTable.HeaderSelected)
    def on_header_clicked(self, event: DataTable.HeaderSelected):
        table = event.data_table
        table.sort(event.column_key)

    @on(DataTable.RowSelected)
    def on_row_clicked(self, event: DataTable.RowSelected) -> None:
        table = event.data_table
        row = table.get_row(event.row_key)
        runner_detail = DetailScreen(row=row)
        self.show_detail(runner_detail)

    def show_detail(self, detailScreen: DetailScreen):
        self.push_screen(detailScreen)

def main():
    app = CompetitorsApp()
    app.title = f"Summary".title()
    app.sub_title = f"{len(MY_DATA)} users"
    app.run()

if __name__ == "__main__":
    main()

```

有哪些部分值得我们关注呢？

1. `compose` 方法中添加了 [表头](https://textual.textualize.io/widgets/header/)，“命令面板” 就位于此处，我们的表格（[DataTable](https://textual.textualize.io/widgets/data_table/#guide)）也在这里。表格数据在 `mount` 方法中填充。
2. 我们设定了预期的绑定（`BINDINGS`），并指定了外部的 CSS 文件来设置样式（`CSS_PATH`）。
3. 默认情况下，我们无需任何设置便能使用 [命令面板](https://textual.textualize.io/guide/command_palette/)，但在此我们显式启用了它（`ENABLE_COMMAND_PALETTE = True`）。
4. 我们的应用有一个自定义表格搜索功能。当用户输入一名选手的名字后，应用会显示可能的匹配项，用户可以点击匹配项查看该选手的详细信息。这需要告诉应用我们有一个定制的命令提供者（`COMMANDS = App.COMMANDS | {CustomCo_ mmand}`），即类 `CustomCommand(Provider)`。
5. 如果用户点击了表头，表格内容会按照该列进行排序。这是通过 `on_header_clicked` 方法实现的，该方法上具有 `@on(DataTable.HeaderSelected)` 注解。
6. 类似地，当选中表格中的一行时， `on_row_clicked` 方法会被调用，这得益于它拥有 `@on(DataTable.RowSelected)` 注解。当方法接受选中的行后，它会推送一个新的屏幕，显示选中行的详细信息（`class DetailScreen(ModalScreen)`）。

现在，我们详细地探讨一下如何显示选手的详细信息。

#### 利用多屏展示复杂视图

![](/data/attachment/album/202401/15/110439ot0st0qqqzc395am.svg)

当用户选择表格中的一行，`on_row_clicked` 方法就会被调用。它收到的是一个 `DataTable.RowSelected` 类型的事件。从这里我们会用选中的行的内容构建一个 `DetailScreen(ModalScreen)` 类的实例：

```
from typing import Any, List
from textual import on
from textual.app import ComposeResult
from textual.screen import ModalScreen
from textual.widgets import Button, MarkdownViewer

MY_DATA = [
    ("level", "name", "gender", "country", "age"),
    ("Green", "Wai", "M", "MYS", 22),
    ("Red", "Ryoji", "M", "JPN", 30),
    ("Purple", "Fabio", "M", "ITA", 99),
    ("Blue", "Manuela", "F", "VEN", 25)
]

class DetailScreen(ModalScreen):
    ENABLE_COMMAND_PALETTE = False
    CSS_PATH = "details_screen.tcss"

    def __init__(
            self,
            name: str | None = None,
            ident: str | None = None,
            classes: str | None = None,
            row: List[Any] | None = None,
    ):
        super().__init__(name, ident, classes)
        self.row: List[Any] = row

    def compose(self) -> ComposeResult:
        self.log.info(f"Details: {self.row}")
        columns = MY_DATA[0]
        row_markdown = "\n"
        for i in range(0, len(columns)):
            row_markdown += f"* **{columns[i].title()}:** {self.row[i]}\n"
        yield MarkdownViewer(f"""## User details:
        {row_markdown}
        """)
        button = Button("Close", variant="primary", id="close")
        button.tooltip = "Go back to main screen"
        yield button

    @on(Button.Pressed, "#close")
    def on_button_pressed(self, _) -> None:
        self.app.pop_screen()

```

这个类的职责很直接：

1. `compose` 方法取得此行数据，并利用一个 [支持 Markdown 渲染的组件](https://textual.textualize.io/widget_gallery/#markdownviewer) 来展示内容。它的便利之处在于，它会为我们自动生成一个内容目录。
2. 当用户点击 “close” 后，方法 `on_button_pressed` 会引导应用回到原始屏幕。注解 `@on(Button.Pressed, "#close")` 用来接收按键被点击的事件。

最后，我们来详细讲解一下那个多功能的搜索栏（也叫做命令面板）。

#### 命令面板的搜索功能

![](/data/attachment/album/202401/15/110440xepv8skxe8ueuu8e.svg)

任何使用了表头的 Textual 应用都默认开启了 [命令面板](https://textual.textualize.io/guide/command_palette/)。有意思的是，你可以在 `CompetitorsApp` 类中添加自定义的命令，这会增加到默认命令集之上：

```
COMMANDS = App.COMMANDS | {CustomCommand}

```

然后是执行大部分任务的 `CustomCommand(Provider)` 类：

```
from functools import partial
from typing import Any, List
from rich.style import Style
from textual.command import Provider, Hit
from textual.screen import ModalScreen, Screen
from textual.widgets import DataTable
from textual.app import App

class CustomCommand(Provider):

    def __init__(self, screen: Screen[Any], match_style: Style | None = None):
        super().__init__(screen, match_style)
        self.table = None

    async def startup(self) -> None:
        my_app = self.app
        my_app.log.info(f"Loaded provider: CustomCommand")
        self.table = my_app.query(DataTable).first()

    async def search(self, query: str) -> Hit:
        matcher = self.matcher(query)

        my_app = self.screen.app
        assert isinstance(my_app, CompetitorsApp)

        my_app.log.info(f"Got query: {query}")
        for row_key in self.table.rows:
            row = self.table.get_row(row_key)
            my_app.log.info(f"Searching {row}")
            searchable = row[1]
            score = matcher.match(searchable)
            if score > 0:
                runner_detail = DetailScreen(row=row)
                yield Hit(
                    score,
                    matcher.highlight(f"{searchable}"),
                    partial(my_app.show_detail, runner_detail),
                    help=f"Show details about {searchable}"
                )

class DetailScreen(ModalScreen):
        def __init__(
            self,
            name: str | None = None,
            ident: str | None = None,
            classes: str | None = None,
            row: List[Any] | None = None,
    ):
        super().__init__(name, ident, classes)
        # Code of this class explained on the previous section

class CompetitorsApp(App):
    # Add the default commands and the TablePopulateProvider to get a row directly by name
    COMMANDS = App.COMMANDS | {CustomCommand}
    # Most of the code shown before, only displaying relevant code
    def show_detail(self, detailScreen: DetailScreen):
        self.push_screen(detailScreen)

```

1. 所有继承自 `Provider` 的类需实现 `search` 方法。在我们的例子中，我们还覆盖了 `startup` 方法，为了获取到我们应用表格（和其内容）的引用，这里使用到了 `App.query(DataTable).first()`。在类的生命周期中， `startup` 方法只会被调用一次。
2. 在 `search` 方法内，我们使用 `Provider.matcher` 对每个表格行的第二列（即名字）进行模糊搜索，以与用户在 TUI 中输入的词条进行比较。`matcher.match(searchable)` 返回一个整型的评分，大于零说明匹配成功。
3. 在 `search` 方法中，如果评分大于零，则返回一个 `Hit` 对象，以告知命令面板搜索查询是否成功。
4. 每个 `Hit` 都有以下信息：评分（用于在命令面板中对匹配项排序）、高亮显示的搜索词、一个可调用对象的引用（在我们的案例中，它是一个可以将表格行推送到新屏幕的函数）。
5. `Provider` 类的所有方法都是异步的。这使你能释放主线程，只有当响应准备好后才返回结果，这个过程不会冻结用户界面。

理解了这些信息，我们就可以现在展示赛手的详细信息了。

尽管这个架构的追踪功能相对直观，但是组件间传递的消息复杂性不可忽视。幸运的是，Textual 提供了有效的调试工具帮助我们理解背后的工作原理。

### Textual 应用的问题排查

对于 Python 的 Textual 应用进行 [调试](https://github.com/josevnz/tutorials/blob/main/docs/PythonDebugger/README.md) 相较而言更具挑战性。这是因为其中有一些操作可能是异步的，而在解决组件问题时设置断点可能颇为复杂。

根据具体情况，你可以使用一些工具。但首先，确保你已经安装了 textual 的开发工具：

```
pip install textual-dev==1.3.0

```

#### 确保你能捕捉到正确的按键

不确定 Textual 应用是否能捕捉到你的按键操作？运行 keys 应用：

```
textual keys

```

这让你能够验证一下你的按键组合，并确认在 Textual 中产生了哪些事件。

#### 图片比千言万语更直观

如果说你在布局设计上遇到了问题，想向他人展示你当前的困境，Textual 为你的运行应用提供了截图功能：

```
textual run --screenshot 5 ./kodegeek_textualize/log_scroller.py

```

就像你所看到的，我是通过这种方式为这篇教程创建了插图。

#### 捕获事件并输出定制消息

在 Textual 中，每一个应用实例都有一个日志记录器，可以使用如下方式访问：

```
my_app = self.screen.app
my_app.log.info(f"Loaded provider: CustomCommand")

```

想要查看这些消息，首先需要开启一个控制台：

```
. ~/virtualenv/Textualize/bin/activate
textual console

```

然后在另一个终端运行你的应用程序：

```
. ~/virtualenv/Textualize/bin/activate
textual run --dev ./kodegeek_textualize/log_scroller.py

```

在运行控制台的终端中，你可以看到实时的事件和消息输出：

```
▌Textual Development Console v0.46.0
▌Run a Textual app with textual run --dev my_app.py to connect.
▌Press Ctrl+C to quit.
─────────────────────────────────────────────────────────────────────────────── Client '127.0.0.1' connected ────────────────────────────────────────────────────────────────────────────────
[20:29:43] SYSTEM                                                                                app.py:2188
Connected to devtools ( ws://127.0.0.1:8081 )
[20:29:43] SYSTEM                                                                                app.py:2192
---
[20:29:43] SYSTEM                                                                                app.py:2194
driver=<class 'textual.drivers.linux_driver.LinuxDriver'>
[20:29:43] SYSTEM                                                                                app.py:2195
loop=<_UnixSelectorEventLoop running=True closed=False debug=False>
[20:29:43] SYSTEM                                                                                app.py:2196
features=frozenset({'debug', 'devtools'})
[20:29:43] SYSTEM                                                                                app.py:2228
STARTED FileMonitor({PosixPath('/home/josevnz/TextualizeTutorial/docs/Textualize/kodegeek_textualize/os_app.tcss')})
[20:29:43] EVENT

```

此外，以开发者模式运行的另一大好处是，如果你更改了 CSS，应用会尝试重新渲染，而无需重启程序。

### 如何编写单元测试

为你全新开发的 Textual 应用编写 [单元测试](https://docs.python.org/3/library/unittest.html)，应该如何操作呢？

在 [官方文档](https://textual.textualize.io/guide/testing/) 展示了几种用于测试我们应用的方式。

我将采用 [unittest](https://docs.python.org/3/library/unittest.html) 进行测试。为了处理异步例程，我们会需要特别的类 `unittest.IsolatedAsyncioTestCase` ：

```
import unittest
from textual.widgets import Log, Button
from kodegeek_textualize.log_scroller import OsApp

class LogScrollerTestCase(unittest.IsolatedAsyncioTestCase):
    async def test_log_scroller(self):
        app = OsApp()
        self.assertIsNotNone(app)
        async with app.run_test() as pilot:
            # Execute the default commands
            await pilot.click(Button)
            await pilot.pause()
            event_log = app.screen.query(Log).first()  # We pushed the screen, query nodes from there
            self.assertTrue(event_log.lines)
            await pilot.click("#close")  # Close the new screen, pop the original one
            await pilot.press("q")  # Quit the app by pressing q

if __name__ == '__main__':
    unittest.main()

```

现在让我们详细看看 `test_log_scroller` 方法中的操作步骤：

1. 通过 `app.run_test()` 获取一个 `Pilot` 实例。然后点击主按钮，运行包含默认指令的查询，随后等待所有事件的处理。
2. 从我们新推送出的屏幕中获取 `Log`，确保我们已获得几行返回的内容，即它并非空的。
3. 关闭新屏幕并重新呈现旧屏幕。
4. 最后，按下 `q`，退出应用。

可以测试表格吗？

```
import unittest
from textual.widgets import DataTable, MarkdownViewer
from kodegeek_textualize.table_with_detail_screen import CompetitorsApp

class TableWithDetailTestCase(unittest.IsolatedAsyncioTestCase):
    async def test_app(self):
        app = CompetitorsApp()
        self.assertIsNotNone(app)
        async with app.run_test() as pilot:

            """
            Test the command palette
            """
            await pilot.press("ctrl+\\")
            for char in "manuela".split():
                await pilot.press(char)
            await pilot.press("enter")
            markdown_viewer = app.screen.query(MarkdownViewer).first()
            self.assertTrue(markdown_viewer.document)
            await pilot.click("#close")  # Close the new screen, pop the original one

            """
            Test the table
            """
            table = app.screen.query(DataTable).first()
            coordinate = table.cursor_coordinate
            self.assertTrue(table.is_valid_coordinate(coordinate))
            await pilot.press("enter")
            await pilot.pause()
            markdown_viewer = app.screen.query(MarkdownViewer).first()
            self.assertTrue(markdown_viewer)
            # Quit the app by pressing q
            await pilot.press("q")

if __name__ == '__main__':
    unittest.main()

```

如果你运行所有的测试，你将看到如下类似的输出：

```
(Textualize) [josevnz@dmaf5 Textualize]$ python -m unittest tests/*.py
..
----------------------------------------------------------------------
Ran 2 tests in 2.065s

OK

```

这是测试 TUI 的一个不错的方式，对吧？

### 打包 Textual 应用

打包 Textual 应用与打包常规 Python 应用并没有太大区别。你需要记住，需要包含那些控制应用外观的 CSS 文件：

```
. ~/virtualenv/Textualize/bin/activate
python -m build
pip install dist/KodegeekTextualize-*-py3-none-any.whl

```

这个教程的 [pyproject.toml](https://tutorials.kodegeek.com/Textualize/pyproject.toml) 文件是一个打包应用的良好起点，告诉你需要做什么。

```
[build-system]
requires = [
    "setuptools >= 67.8.0",
    "wheel>=0.42.0",
    "build>=1.0.3",
    "twine>=4.0.2",
    "textual-dev>=1.2.1"
]
build-backend = "setuptools.build_meta"

[project]
name = "KodegeekTextualize"
version = "0.0.3"
authors = [
    {name = "Jose Vicente Nunez", email = "kodegeek.com@protonmail.com"},
]
description = "Collection of scripts that show how to use several features of textualize"
readme = "README.md"
requires-python = ">=3.9"
keywords = ["running", "race"]
classifiers = [
    "Environment :: Console",
    "Development Status :: 4 - Beta",
    "Programming Language :: Python :: 3",
    "Intended Audience :: End Users/Desktop",
    "Topic :: Utilities"
]
dynamic = ["dependencies"]

[project.scripts]
log_scroller = "kodegeek_textualize.log_scroller:main"
table_detail = "kodegeek_textualize.table_with_detail_screen:main"

[tool.setuptools]
include-package-data = true

[tool.setuptools.packages.find]
where = ["."]
exclude = ["test*"]

[tool.setuptools.package-data]
kodegeek_textualize = ["*.txt", "*.tcss", "*.csv"]
img = ["*.svg"]

[tool.setuptools.dynamic]
dependencies = {file = ["requirements.txt"]}

```

### 未来计划

这个简短的教程只覆盖了 Textual 的部分方面。还有很多需要探索和学习的内容：

* 强烈建议你查看 [官方教程](https://textual.textualize.io/tutorial/)。有大量的示例和指向参考 [API](https://textual.textualize.io/api/) 的链接。
* Textual 可以使用来自 [Rich](https://github.com/Textualize/rich) 项目的组件，这个项目是一切的起源。我认为其中一些甚至可能所有这些组件在某些时候都会合并到 Textual 中。Textual 框架对于使用高级 API 的复杂应用更能胜任，但 Rich 也有很多漂亮的功能。
* 创建你自己的组件！同样，在设计 TUI 时，[拿一张纸，画出你希望这些组件如何布局的](https://textual.textualize.io/how-to/design-a-layout/)，这会为你后期省去很多时间和麻烦。
* 调试 Python 应用可能会有点复杂。有时你可能需要 [混合使用不同的工具](https://github.com/josevnz/DebuggingApplications/blob/main/StracePythonWireshark/README.md) 来找出应用的问题所在。
* 异步 IO 是一个复杂的话题，你应该 [阅读开发者文档](https://docs.python.org/3/library/asyncio-dev.html) 来了解更多可能的选择。
* Textual 被其他项目所使用。其中一个非常易于使用的项目是 [Trogon](https://github.com/Textualize/trogon)。[它会让你的 CLI 可以自我发现](https://github.com/josevnz/CLIWithClickAndTrogon/blob/main/README.md)。
* [Textual-web](https://github.com/Textualize/textual-web) 是个很有前景的项目，能让你在浏览器上运行 Textual 应用。尽管它不如 Textual 成熟，但它的进化速度非常快。
* 最后，[查看这些外部项目](https://www.textualize.io/projects/)。在项目组合中有许多有用的开源应用。

*（题图：DA/f11b0eb0-8e16-4cbe-986a-0fe978f6732a）*

---

via: <https://fedoramagazine.org/crash-course-on-using-textual/>

作者：[Jose Nunez](https://fedoramagazine.org/author/josevnz/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


App Fleet：在 Linux 上实现工作空间自动化的开源应用

Summary: 开源工作区自动化工具。听起来不错！

这个软件适合那些经常换桌面的人，我也会让不同用途的软件在特定的工作区打开，但这些都写在桌面的配置中，或者安装扩展来实现。

打错了，是相同用途的软件在特定的工作区打开。

开源工作区自动化工具。听起来不错！

![](/data/attachment/album/202401/15/160723kzdm578dhzmme3rr.jpg)

>
> 开源工作区自动化工具。听起来不错！
>
>
>

2024 年刚刚开始，也许你正被需要在不同应用程序中完成的大量工作压得喘不过气来？为什么不使用工作区管理工具来简化工作呢？

App Fleet 是**一款全新的开源工作区管理器和启动自动化工具**，主要为 Linux 开发。我必须说，最后一点是你不常听到的！ ?

这次，我尝试一下 App Fleet，并与大家分享一下我的经验。

>
> ? 该应用相当新，正在积极开发中。它可能会，也可能不会按照你期望的方式工作。
>
>
>

### App Fleet：主要功能 ⭐

![](/data/attachment/album/202401/15/160750qzds1k021roz6dse.png)

App Fleet 使用 **Flutter 框架** 编写，**针对 GNOME 桌面环境**，并且作为一个相当新的应用，它的开发进展相当顺利，不时定期发布。

一些**关键功能**包括：

* 支持大多数应用。
* 直观的用户界面。
* 将应用设置到特定工作空间。

#### ⚙ 如何安装 App Fleet？

![](/data/attachment/album/202401/15/160751xf1f919zw1ffe059.png)

遗憾的是，App Fleet **没有 Flatpak、Snap、AppImage 或其他流行的打包格式**。

据开发人员称，App Fleet 需要系统范围的读取访问权限，并且使用这些格式对其进行打包对于此类应用来说是不可行的。

**安装 App Fleet 最直接的方法**是运行以下命令（网络安装程序脚本）：

```
curl https://raw.githubusercontent.com/omegaui/app_fleet/main/network-install.sh | bash

```

对于大多数人来说，上述命令是推荐的解决方案。

如果你愿意，你可以从预编译的捆绑包或源代码中安装它。有关更多信息，你可以访问其 [GitHub 仓库](https://github.com/omegaui/app_fleet)。

>
> **[App Fleet（GitHub）](https://github.com/omegaui/app_fleet)**
>
>
>

#### 初步印象 ??

将其安装到我的 PC 上后，我启动了 App Fleet，然后迎接我的是一个面无表情的幽灵，说这个系统上没有工作区配置。

![](/data/attachment/album/202401/15/160751h8iy5xxtrzykkzzx.png)

因此，我单击 “<ruby> 马上创建 <rt>  Create Now </rt></ruby>” 开始，并为工作区配置指定了一个合适的名称。

![](/data/attachment/album/202401/15/160751a7ebvy4ewo746uwz.png)

然后我选择了它的图标。它有很多可选图标，也可以自由上传自定义的图标。

![](/data/attachment/album/202401/15/160752tbxodgv7kaor2ct0.png)

应用选择屏幕列出了我的所有应用，因此我选择了我在工作时经常使用的应用。

![](/data/attachment/album/202401/15/160752jrfqrgl24mkgwzgg.png)

我还可以**为这些应用提供特定的工作区**，这样它们就可以直接在指定的工作区中启动，从而无需手动放置它们。（这对我来说效果不太好，稍后会详细介绍。）

![](/data/attachment/album/202401/15/160752hfql097r4ljm9ktj.png)

我还可以**从系统或外部存储手动添加应用**，并可以指定名称、设置等待时间等。

![](/data/attachment/album/202401/15/160753iiqc11wt661ata07.png)

我也可以对添加的应用进行相同的调整。如果你不想被快速连续启动的大量应用淹没，“*等待时间*” 设置可能会很有用。

![](/data/attachment/album/202401/15/160753ybhvbfrcwws72x6w.png)

设置完所有内容后，我单击右上角的 “保存” 图标来保存我的工作区配置。

![](/data/attachment/album/202401/15/160754a4yk3ykhky6yy3yi.png)

然后，App Fleet 的主屏幕向我显示了创建的工作区配置。

![](/data/attachment/album/202401/15/160754umbhz5ddme65hrxe.png)

它还启动了 **App Fleet 启动器** ，这是一个看起来像小部件的东西，让我启动保存的工作区配置。

![](/data/attachment/album/202401/15/160755igrttj1yddgyddyd.png)

因此，为了测试它的工作原理，我快速重新启动了系统，当我登录系统时，启动器会自动弹出。正如你在下面看到的，**启动器是一个小巧的东西**，并不碍事。

![](/data/attachment/album/202401/15/160756xvvmeclacwqmz7lz.gif)

但是，你可能已经注意到，**应用没有在我设置它们启动的工作区上启动**。尽管应用的启动和定制的等待时间确实起作用了。

[官方网站](https://omegaui.github.io/app_fleet_webpage/) 提到已在 Ubuntu 22.10 进行了“*精细测试*”，因此这一点值得注意。

当然，该应用是全新的。因此，我们不能期望一切都完美。

但是，如果你问我，**App Fleet 有很大的潜力**，如果你是使用 [Auto Move Windows](https://extensions.gnome.org/extension/16/auto-move-windows/) GNOME 扩展的人，这可能是一个非常方便的替代方案。

我是否说过 **App Fleet 不仅仅限于 GNOME？**

你还可以在其他 [桌面环境](https://itsfoss.com/what-is-desktop-environment/) 上使用它，例如 KDE Plasma、Budgie 和 Cinnamon。

? 那么，你对 App Fleet 有何看法？ 有类似的工具吗？ 它对你来说效果如何？ 请在下面的评论中告诉我！

---

via: <https://news.itsfoss.com/app-fleet/>

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


硬核观察 #1247 Git 项目考虑使用 Rust 代码开发

Summary:
? 联网的扭矩扳手也能被入侵
? Git 项目考虑使用 Rust 代码开发
? 开源社区在 2024 年仍在继续支持 Flash 播放器
»
»

为啥使用基于 LLVM 的 rustc 编译器可能会导致 Git 的使用受到限制呢

gcc支持的架构和平台更多一些

原因是 GCC 对 Rust 的支持不完善，Rust 使用的 rustc 对有些平台不支持，而这些平台原本 Git 是支持的。

![](/data/attachment/album/202401/15/175755bpzt733h6c9ilicc.jpg)

![](/data/attachment/album/202401/15/175911fvdov8fdpkapaqd8.png)

### #1 联网的扭矩扳手也能被入侵

博世力士乐某个系列的手持螺帽扳手可以无线联网。世界各地的工厂都在使用这些扳手组装敏感仪器和设备。这种无线设备可以无线连接到使用它的企业的本地网络，让工程师可以按照对安全性和可靠性至关重要的精确扭矩水平拧紧螺栓和其他机械紧固件。如果太松或太紧都可能影响设备的使用或安全。研究人员称，黑客能利用漏洞安装恶意程序，能导致扭的太松或太紧，但设备的显示屏却显示一切正常。博世力士乐表示已收到了漏洞报告，即将发布补丁。

*（插图：DA/1c460b4b-5dce-480b-b4ef-54c302c75554）*

>
> **[消息来源：Ars Technica](https://arstechnica.com/security/2024/01/network-connected-wrenches-used-in-factories-can-be-hacked-for-sabotage-or-ransomware/)**
>
>
>

>
> 老王点评：你好好一个扳手，真的非常需要联网吗？
>
>
>

![](/data/attachment/album/202401/15/175813b03y3li5k0cy50lk.png)

### #2 Git 项目考虑使用 Rust 代码开发

广泛使用的 Git 分布式版本控制系统正在评估允许在其代码库中使用 Rust 代码编写代码的想法。现在 Git 的代码库中使用了 C 和 Python 语言。虽然 Rust 的内存安全特性对很多人来说是个利好，但到目前为止，Git 开发者的反应却好坏参半。部分原因是 Rust 代码几乎必须使用基于 LLVM 的 rustc 编译器。因此，如果必须使用 Rust 代码开发的部分功能，Git 的使用可能会受到限制，否则这些 Rust 开发的 Git 功能就只能是可选的。

*（插图：DA/19dc3e93-ee1c-4293-9f07-1eb0d62e55af）*

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/GCC-Rust-Developer-Discussion)**
>
>
>

>
> 老王点评：看起来是天下苦 C 已久，纷纷考虑 Rust 了。
>
>
>

![](/data/attachment/album/202401/15/175835lgbgr6hpge0nbnhb.png)

### #3 开源社区在 2024 年仍在继续支持 Flash 播放器

在 Adobe 正式终结 Flash 播放器三年后，开源的 Ruffle 项目仍在维护其 Flash 播放器的仿真器。虽然有些人讨厌 Flash 以及它带来的大量漏洞，但是仍然有一些喜欢那些运行在 Flash 上的古老游戏。

*（插图：DA/4068a17b-fc34-4a19-bdb7-58edce6cfae6）*

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Adobe-Flash-Ruffle-2024)**
>
>
>

>
> 老王点评：这就是开源的意义，总是可以提供一些其它选择。
>
>
>


开源音频编辑器 Audacity 的 AI 工具来了

Summary: Audacity 现在配备了新的 AI 工具。

Audacity 现在配备了新的 AI 工具。

![](/data/attachment/album/202401/16/135942ybxu5aergzk7r8ga.jpg)

>
> Audacity 现在配备了新的 AI 工具。
>
>
>

在过去的几年中，我们已经看到了 AI 的显著发展，包括将 AI 驱动的功能添加到各种流行的工具中。而且，我们在 [2024 年 Linux 和开源预测](https://news.itsfoss.com/predictions-linux-open-source-2024/) 中已经提到了更多的人工智能。

这次是 Audacity，[Linux 的最佳音频编辑之一](https://itsfoss.com/best-audio-editors-linux/)，迎来了 AI。现在，用户可以通过利用 AI 的力量来增强其音频编辑体验。

让我们来看看这些迷人的功能都有哪些。

### 英特尔打造 AI 工具 ?

英特尔公司推出了由 AI 驱动的处理语音音频和音乐的新功能。

这些功能是 **OpenVino** 插件套件的一部分。对于那些不知道的人来说，英特尔的 OpenVino 是一个 AI 框架，有助于加速深度学习模型。

值得注意的一个很酷但也很重要的方面是，所有这些功能在本地的 PC 上运行！ 更具体地说，PC 的 CPU 或 GPU 将用于处理部分。

#### 播客编辑

曾经想快速转录甚至翻译音频吗？

由 OpenAI 的 Whisper 支持的转录功能可以让用户做到这一点。

![Transcription | Source: GitHub Intel](/data/attachment/album/202401/16/140007f824iph1hhjant20.png)

* 它能根据给定的音频样本生成包含转录/翻译文本的新标签音轨。
* 翻译将始终以英语产生输出，而转录将以与源音频相同的语言产生输出。
* 目前，默认情况下仅支持 *Whisper Base* 模型。稍后可能会支持更多模型。

与现有的 “噪音去除”效果类似，**“噪音抑制”** 可帮助去除口语音频样本中不需要的背景噪音。

* 由于它是由 AI 提供动力的，因此你可以期望此功能的效果优于噪音去除。
* 目前，默认情况下仅支持 *denseunet* 模型。稍后可能会支持更多模型。

#### 音乐生成

是的，你没看错：现在，你可以在机器内生成新音乐！

**音乐生成** 允许用户生成音乐片段。这要归功于一个名为 **Riffusion** 的开源项目，这是一个基于 **Stable Diffusion** 的音乐生成模型（一种流行的开源模型，用于生成图像。）

![Music Generation | Source: GitHub Intel repo](/data/attachment/album/202401/16/140008c5gn222g3mvpkeg6.png)

* 你通过给出文本提示并调整其他一些参数（例如持续时间）来生成音乐。
* 在文本提示符中，你指定要生成的音乐流派，AI 将尽力在生成音乐时保持这种类型。
* 你可以选择在默认的简单模式和可选的高级模式之间切换，以进行更多的控制，例如指定开始提示和结束提示。

此外，你甚至可以通过**音乐风格混音**，选择音乐曲目的一部分，对音乐进行混音！

#### 音乐分离

如果你想为自己喜欢的歌曲创建自己的器乐曲目，该怎么办？也许还能与朋友来一场有趣的卡拉 OK 呢？

**音乐分离**使你可以将歌曲分为声音或乐器版本。提供了两种分离模式：

![Music Separation. Source: github.com/intel/openvino-plugins-ai-audacity](/data/attachment/album/202401/16/140009rvh6292vf9y98vgy.png)

* 2-Stem 为人声和器乐制作两个新音轨。
* 4-Stem 可生成四条新音轨，包括人声、鼓声、贝司声，最后一条是其他乐器声。

### 如何使用 AI 工具？ ?

如果你是 Linux 用户，请等一等。

虽然该插件的 [Windows 版本](https://github.com/intel/openvino-plugins-ai-audacity/releases) 可供下载，但其 Linux 对应版本暂时还不可用。

如果你仍然想尝试一下，则需要自己编译该项目。[你可以参考此的官方说明](https://github.com/intel/openvino-plugins-ai-audacity/blob/main/doc/build_doc/linux/README.md)。

希望 Linux 构建很快到来！?

? 你觉得 Audacity 的这些新人工智能功能怎么样？请在评论中告诉我们你的想法！

---

via: <https://news.itsfoss.com/audacity-ai-tools/>

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


连可怜的记事本都没躲过微软的 AI 魔爪

Summary: 深度用户挖掘到实验性 “Cowriter” 功能的证据。

给我的双面铜版纸会议记录本添加个AI助手功能吧，拜托了。这才是我们需要的卷。

所有联网的AI助手，意味着你编辑的内容对厂商公开。。。

可以选配美女机要秘书。。。只要动动嘴，全帮你安排好。。。

有选择的用,否则就是实时监控你的使用,相当于一个监视器监视自己

深度用户挖掘到实验性 “Cowriter” 功能的证据。

![](/data/attachment/album/202401/16/153252wbthcfx205ggg0zi.jpg)

>
> 深度用户挖掘到实验性 “Cowriter” 功能的证据。
>
>
>

从一个 Windows Insider 用户发布的截图来看，Windows 记事本将成为微软人工智能关注的下一个对象。

虽然在当前的任何 Windows Insider 版本中都无法直接使用该功能，但精明的用户总能找到方法深入系统，将那些未经公开预览的实验性功能展现出来。

X 用户 @PhantomOfEarth 揭示的 [这些变化](https://twitter.com/PhantomOfEarth/status/1744821347480412388)，看起来像是正在进行中的工程项目。可以看到一个名为 “Cowriter” 的弹出菜单，其中包含了一些对文本格式和内容进行调整的选项。

这些选项如何融入记事本的原始设计值得商榷，它们看起来似乎更适合写字板这样的应用。然而，微软已经在 [摒弃写字板](https://www.theregister.com/2024/01/05/wordpad_off_windows_11/)，所以只能加给记事本了。

近年来，微软一直在努力~~破坏~~更新记事本，在微软工程师的调整下发生了多次改动 —— 尽管这款文本编辑器在过去的几十年间一直被冷落。

在 Windows 10 的时代，这款编辑器被放到了微软应用商店。在引入 [深色模式](https://www.theregister.com/2021/12/08/notepad_windows_11_update/) 之后，它的界面也得到了更新，并且在 2023 年推出了 [标签支持](https://www.theregister.com/2023/01/23/microsoft_developer_windows_build/)。

在编辑器中添加 AI 功能似乎有些有点过分。微软也似乎在规划采用 [Paint Cocreator 模型](https://support.microsoft.com/en-us/windows/use-paint-cocreator-to-generate-ai-art-107a2b3a-62ea-41f5-a638-7bc6e6ea718f) 进行实现，即用户在注册时会得到一些积分（需要一个微软帐户），要使用该功能需要加入等待名单。

@PhantomOfEarth [评价](https://twitter.com/PhantomOfEarth/status/1744984715814121477)：“我觉得这有些过了。记事本除了 AI，本可有更多其他可添加的元素，但唉，大家都喜爱跟风炒作嘛。”

我们也认为记事本已经添加了太多功能，尤其是它本来是作为一个极简的文本编辑器出现的。

关于微软计划在记事本中应用 AI 的方案，我们向微软询问了相关问题并会在得到回应后更新信息。这可能预示着未来微软会在所有可能的地方将 Windows 的功能与 AI 结合。

如截图所示，记事本中的 AI 看起来并无太大实用性，我们相信资深的读者们一定能想到更适合该编辑器的功能。

*（题图：DA/399fe7c0-7c0d-4090-aca2-2e0cc5fc9957）*

---

via: <https://www.theregister.com/2024/01/11/microsoft_notepad_ai/>

作者：[Richard Speed](https://www.theregister.com/Author/Richard-Speed) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)


硬核观察 #1248 AI 女友涌入 OpenAI 的 GPT 商店

Summary:
? AI 女友涌入 OpenAI 的 GPT 商店
? 苹果公司将为欧盟单独推出应用商店
? 无 2FA 的 GitLab 账户可能被攻击者接管
»
»

国区的App Store不也是跟其他地区的分开了？

"老王点评：启用 2FA 其实是一件很简单的事情。"

——2FA意味着平台掌握更多个人信息。相当于实名认证了。。

“#2 苹果公司将为欧盟单独推出应用商店”

“老王点评：其它国家不跟进吗？”

——兔子不会当这个坏人，苹果在国内有巨大的产业链，每年的税收、就业远比软件商店那点要多的多。。。

2FA怎么会掌握更多个人信息，这里说的2FA一般指的是TOTP这种

然而很多2FA首选方式是短信验证，国内就不说了，国外连微软、苹果、谷歌也是这样。微软outlook不绑手机号过一段时间就不给用，苹果谷歌更是在注册过程中要求绑定手机号作为2FA方式，不过如果注册的IP干净，谷歌可以不绑定手机。

GitLab 只支持 OTP 这种应用输出的 2FA，而不支持短信 2FA。

正是2FA识别的两个因子具有身份识别唯一性，才作为有效的安全验证手段。

掌握隐私信息虽是是安全验证的客观结果，但却不是安全验证的初衷。

正规平台需要主动掌握的个人信息往往和法律合规有关，不论有没有2FA你都必须提供你的身份信息，2FA有时是顺带利用隐私合规的安全附加手段。

住宿要登记这点没话说。。。

但你架不住一些人往外卖记录阿。。。

这年头结婚，你敢不查对方的开房信息？

![](/data/attachment/album/202401/16/164810r910ii8uiqlud7kq.jpg)

![](/data/attachment/album/202401/16/164820usq0hapmm7pqqfmp.png)

### #1 AI 女友涌入 OpenAI 的 GPT 商店

OpenAI 的 GPT 商店提供了“定制版”的 ChatGPT，在该商店中搜索 “女友”，至少会找到八个 “女友” 人工智能聊天机器人，包括 “韩国女友”、“虚拟甜心”、“你的女友斯嘉丽” 等。女友机器人违反了 OpenAI 的使用政策，该公司禁止 “致力于培养浪漫伴侣关系或执行受监管活动” 的 GPT。

*（插图：DA/b79472a2-aa6d-4c75-b26c-e89669faf587）*

>
> **[消息来源：QZ](https://qz.com/ai-girlfriend-bots-are-already-flooding-openai-s-gpt-st-1851159131)**
>
>
>

>
> 老王点评：AI 聊天机器人可能解决孤独的方法之一，或者说只是利用人类的痛苦来赚钱的一种方式。 ?
>
>
>

![](/data/attachment/album/202401/16/164911i4zb4xw45yn755r4.png)

### #2 苹果公司将为欧盟单独推出应用商店

苹果公司正在加紧对欧盟地区的应用商店进行修改，以符合该地区即将实施的《数字市场法案（DMA）》，这将使它与世界其他地区的应用商店分离开来。苹果公司遵守 DMA 规定的最后期限是 3 月 7 日，因此该公司只有七个多星期的时间来进行调整。根据 DMA，苹果还必须允许开发者在应用商店之外推广他们的应用，并可以使用第三方支付系统。

*（插图：DA/849e74a0-70dc-4dfa-9669-f693d17587cb）*

>
> **[消息来源：Mac Rumors](https://www.macrumors.com/2024/01/15/app-store-to-be-split-in-two/)**
>
>
>

>
> 老王点评：其它国家不跟进吗？
>
>
>

![](/data/attachment/album/202401/16/164932ljzypr9sx27op9og.png)

### #3 无 2FA 的 GitLab 账户可能被攻击者接管

该漏洞源于 GitLab 2023 年 5 月引入的一项变更，该变更允许用户通过二级电子邮件地址发布密码重置。攻击者可以使用特制的 HTTP 请求向自托管的 GitLab 实例的账户发送密码重置电子邮件。对于那些没有启用双因素身份验证（2FA）的账户，攻击者无需用户干预就可以接管。这个严重性达到满分 10 分的漏洞自去年 5 月份以来就一直被人利用。如果不能升级，权宜之计是为所有用户强制要求 2FA。

*（插图：DA/420b6db9-ba6c-4154-8ed0-06d6ef691988）*

>
> **[消息来源：The Register](https://www.theregister.com/2024/01/15/critical_gitlab_vulnerability/)**
>
>
>

>
> 老王点评：启用 2FA 其实是一件很简单的事情。
>
>
>


如何检查你的 Linux 系统是否使用 systemd

Summary: 不知道在使用哪个初始化系统？以下是方法。

垃圾systemd

来自111.60.23.15的 Firefox 121.0|GNU/Linux 用户

不知道在使用哪个初始化系统？以下是方法。

![](/data/attachment/album/202401/17/080808gtpgc9rvxxifjx7m.jpg)

>
> 不知道在使用哪个初始化系统？以下是方法。
>
>
>

每个主流 Linux 发行版（包括 Ubuntu、Fedora、openSUSE 和 Arch）默认都使用 systemd。

但是有 [许多非 systemd 发行版](https://itsfoss.com/systemd-free-distros/)，例如使用轻量级 runit 来获得更好性能的 Void Linux 或主要使用 sysvinit 的 Devuan。

当你尝试遵循某些教程或文档并且其中包含特定于 systemd 或某些其他初始化服务的命令时，就会出现问题。

这时，你必须检查你的 Linux 系统使用的是 systemd 还是其他系统。

一种方法是检查 PID 为 1 的进程（毕竟，初始化系统是 Linux 系统上运行的第一个进程）。

```
ps 1

```

但它的输出可能会产生误导，因为它经常显示 `/sbin/init`，这只是实际的初始化进程的软链接。

如果你 [跟随该符号链接](https://linuxhandbook.com/follow-symbolic-link/)，就可以获取初始化系统信息。有两种方法：

* 使用 `stat` 命令
* 使用 `readlink` 命令

那么让我们从第一个开始。

>
> ? 这些方法在 6 个初始化系统中进行了测试：Systemd、OpenRC、SysVinit、Busybox、runit 和 s6。
>
>
>

### 方法 1：使用 stat 命令检查 systemd 是否正在使用

以下是如何使用 `stat` 命令来了解你正在使用的初始化系统：

```
stat /sbin/init

```

如果你使用的是 systemd 支持的发行版，那么它将显示以下输出：

![](/data/attachment/album/202401/17/080833uv5z353fwfokhz4v.png)

但是，如果你使用 systemd 之外的其他任何东西，它将显示初始化系统的名称，但是如果你使用的是 SysVinit，它只会显示 `init` 而不是 `sysvinit`：

![SysVinit only displays "init" instead of sysvinit](/data/attachment/album/202401/17/080833unmh33sxnb3y636n.png)

### 方法 2：使用 readlink 命令检查初始化系统

与之前的方法不同，当你使用 `readlink` 命令时，它只会打印初始化系统的名称。

因此，如果你想知道你是否正在使用 Systemd，只需使用以下命令：

```
readlink /sbin/init

```

![](/data/attachment/album/202401/17/080833b2c0plzgpzngu0qk.png)

如果你使用 [OpenRC 初始化访问](https://wiki.gentoo.org/wiki/OpenRC/openrc-init)，那么它将显示以下输出：

![](/data/attachment/album/202401/17/080834cfzx4xyyzn0y88yr.png)

但如果你使用 SysVinit，那么它会显示以下输出：

![](/data/attachment/album/202401/17/080834fzw7vxarwx9wdwr7.png)

### 我为你写的小“脚本”

另一种方法是检查 `/run/systemd/system` 目录是否存在。

好吧，最简单的找出方法是在终端中 [使用 if-else bash 命令](https://itsfoss.com/bash-if-else/)，它将检查你是否正在运行由 systemd 驱动的发行版：

```
if [ -d /run/systemd/system ]; then echo "System is running systemd"; else echo "System is not running systemd"; fi

```

![](/data/attachment/album/202401/17/080835v96e38q4jr4rf8x9.png)

### 有关 systemd 的更多信息

当你知道你正在使用 systemd 支持的发行版，你就可以 [使用 systemctl 命令管理服务](https://linuxhandbook.com/systemctl-commands/)。

当然你也可以从头开始 [创建一个 systemd 服务](https://linuxhandbook.com/create-systemd-services/)。

我希望本指南对你有所帮助。

*（题图：DA/02d49f79-0ec4-4e49-ae72-e3d46877dfa6）*

---

via: <https://itsfoss.com/check-if-systemd/>

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


硬核观察 #1249 LG 洗衣机每天上传近 4GB 的数据？

Summary:
? LG 洗衣机每天上传近 4GB 的数据？
? 中国的芯片进口大幅下降，创下历史最大降幅
? openSUSE Leap 16 将基于 ALP
»
»

DRAM内存缩水38.5%，NAND闪存缩水37.5%，这是全球营收的缩水，比销售数量的缩水比例还大一些。<br />
或许说明了中低端成熟制程芯片销售占比的提升，一定程度上导致了出货均价的下滑，同时高端芯片销售受阻。

这台洗衣机可能有网瘾

![](/data/attachment/album/202401/17/151033xsbfxd4bkfsrfyyx.jpg)

![](/data/attachment/album/202401/17/151105vo5l5l3owar7o7wo.png)

### #1 LG 洗衣机每天上传近 4GB 的数据？

一个名为 Johnie 的 LG 洗衣机用户发现，他的智能家电每日上传数据量达到 3.57GB，下载数据量约为 100MB，而这些数据传输几乎是持续的。他猜测了几种原因，可能是他的洗衣机被用来加密挖矿，因为有过恶意黑客接管 LG 智能家电的历史；也可能是华硕路由器的误报，他后继发现，“华硕路由器工具对 iMessage 数据使用的不准确。”其他 LG 智能洗衣机用户表示他们的设备通常每天使用的数据少于 1MB。

*（插图：DA/9886c3c3-afc5-40ed-ae20-01ebf72e37fc）*

>
> **[消息来源：Tom‘s Hardware](https://www.tomshardware.com/networking/your-washing-machine-could-be-sending-37-gb-of-data-a-day)**
>
>
>

>
> 老王点评：或许是误报，要不以后洗衣机、冰箱都去挖矿了。
>
>
>

![](/data/attachment/album/202401/17/151127hjumazppcjesje4h.png)

### #2 中国的芯片进口大幅下降，创下历史最大降幅

据海关数据，中国的半导体进口总值为 3494 亿美元。这些数字比 2022 年报告的数值减少了 15.4%，同时从数量上看也减少了 10.8%，这是自 2004 年以来的首次下降。当然，全球的半导体市场都在萎缩，Gartner 的最新数据显示，2023 年全球半导体收入较前一年减少了 11.1%，为 5330 亿美元。其中，半导体制造商受到的打击最严重的部门是内存领域，营收下降了 37%。

*（插图：DA/b39d2e73-1833-4603-b15b-a5dd37bdc9f4）*

>
> **[消息来源：The Register](https://www.theregister.com/2024/01/16/china_chip_imports_fall/)**
>
>
>

>
> 老王点评：或许这还不是最大降幅。
>
>
>

![](/data/attachment/album/202401/17/151201ggzmxi3mwqx33wgi.png)

### #3 openSUSE Leap 16 将基于 ALP

openSUSE 宣布，openSUSE Leap 16 将接替目前的 Leap 15 系列。OpenSUSE Leap 16 将基于 SUSE 的 <ruby> 适应性 Linux 平台 <rt>  Adaptable Linux Platform </rt></ruby>（ALP） 代码库，openSUSE 称它“将兼具先进的企业服务器发行版的优势和 Leap 系列的用户友好型维护和安全性。”

*（插图：DA/a56a2a17-459d-499c-96f0-150e7ffeb043）*

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/openSUSE-Leap-16-ALP-2024)**
>
>
>

>
> 老王点评：版本号变成 16 还算预期之内，至少没有变回 42 去。
>
>
>


Parch Linux：一个简洁易用的基于 Arch 的发行版

Summary: 这是一个简约直观的基于 Arch 的发行版，无需繁琐的开箱定制。

机翻这么流行了吗

来自河北衡水的 Chrome Mobile 80.0|Android 12 用户

这是一个简约直观的基于 Arch 的发行版，无需繁琐的开箱定制。

![](/data/attachment/album/202401/17/192209fa7jrrysxaryi39h.jpg)

>
> 这是一个简约直观的基于 Arch 的发行版，无需繁琐的开箱定制。
>
>
>

最近，我在寻求一些最佳的 [基于 Arch 的 Linux 发行版](https://itsfoss.com/arch-based-linux-distros/)。

在浏览过我们过去的报道，并进行了一番搜索之后，我找到了一些颇为出色的发行版。

其中 [Archcraft](https://news.itsfoss.com/archcraft/) 这款发行版让我眼前一亮，它极具用户友好性。我希望能有更多类似 Archcraft 的发行版，幸运的是，在几天前，我发现了 **Parch Linux**。

一起来看看这个引人入胜的发行版，它“力图做到美观、易用、轻量、快捷且稳定”。

### Parch Linux：概述 ⭐

![](/data/attachment/album/202401/17/192231gsz8gjke3zk1j4vg.jpg)

[Parch Linux](https://parchlinux.com/) 是 **一款面向 Linux 新手和经验者的开源轻量级发行版**。它以 Arch Linux 为基础，为用户提供了清新的体验。

一些 **关键特点** 包括：

* 直观的用户界面
* 采用滚动更新机制
* 集成 pacman 包管理器
* 少量的定制以增强用户体验

#### 初体验 ??

我在 [虚拟机](https://itsfoss.com/virtual-machine/) 上尝试安装了 **Parch GNOME** 版本，整个过程十分简单明了。点击 “欢迎” 应用程序的一键“安装 Parch”按钮即可启动 [Calamares 安装程序](https://calamares.io/)。

![](/data/attachment/album/202401/17/192232z0erelcmec01yzmn.jpg)

尽管外观和感觉有所不同，但此次的安装体验，确是你能从 Calamares 那里预期的。

![](/data/attachment/album/202401/17/192232vmoy0ib0efb1ffwx.jpg)

我依次设置了时区、键盘布局，然后开始设置用户，输入常见的信息，如用户名、密码、计算机的名称等。

![](/data/attachment/album/202401/17/192233gvx69vuxuz1ql9mq.jpg)

熟悉的 **磁盘分区** 步骤也随之而来，诸如 *ext4* 、 *btrfs* 、 *jfs* 、 *xfs* 、 *f2fs* 和 *reiser* 等文件系统皆在选项之中。

![](/data/attachment/album/202401/17/192234x63jl9998j93vgmb.jpg)

所有的设置就位后，安装程序开始运行，屏幕底部出现了进度条，屏幕中心处是 Parch Linux 的徽标。

![](/data/attachment/album/202401/17/192234pbuubmmoiwbm6kjk.jpg)

安装完成后，系统重新启动到了这个美丽的桌面，GNOME 45.1 的全新工作区切换器和更新后的快速设置菜单等新功能一览无余。

![](/data/attachment/album/202401/17/192235icjly4mbmsbzlc2b.jpg)

我在想还有没有其他的壁纸。你可以在一些带有 Parch Linux 徽标的壁纸中找到一些有趣的选择。

不忘记，停靠栏已经对齐到了屏幕的左侧。

![](/data/attachment/album/202401/17/192236byy5862w2j5ui85i.jpg)

我还发现 Parch Linux 提供了一套 **实用的应用程序**，包含诸如 [GParted](https://itsfoss.com/gparted/)、[KeePassXC](https://itsfoss.com/keepassxc/)、Vim，以及 GNOME 的一些常见应用，比如图像浏览、视频播放、地图查看等。

![](/data/attachment/album/202401/17/192236xdy44w8zhuy46wuu.jpg)

这个发行版内置了最新的核心包 Pacman 6.0.2，使用 `pacman -Syu` 命令即可获取最新的包。

然后，我注意到了与默认 GNOME 终端不同的终端模拟器。

![](/data/attachment/album/202401/17/192237jtt5byjyme8taeqe.jpg)

Parch Linux 采用了 [Blackbox](https://itsfoss.com/blackbox-terminal/) 终端，这是一个精致的 GTK4 终端，用于满足喜欢极简终端模拟器的用户。

总的来说，我喜欢 Parch Linux 所提供的一切。

当然，在任何基于 Arch 的发行版上，你都可以自定义所有的东西。

但我认为，Parch Linux 在 Arch Linux 的基础上打造出更简单的用户体验，并且刻意做了一些定制，这对新的 Linux 用户来说，是有益的。

### ? 下载 Parch Linux

尽管我试验的是 GNOME 版本，但还有其他更多版本可供选择。比如 **Parch KDE**、**Parch XFCE**、**Parch Cinnamon** 等。

所以，如果你要获取 Parch Linux 的任何版本，你可以直接访问其 [官方网站](https://parchlinux.com/download) 或者 [FOSS Torrents 页面](https://fosstorrents.com/distributions/parch-linux/)。

>
> **[Parch Linux](https://parchlinux.com/download)**
>
>
>

如果你遇到任何问题，或者对这个发行版有任何问题，都可以访问 [Parch Linux 论坛](https://forum.parchlinux.com/) 或者它的 [GitHub 仓库](https://github.com/parchlinux)。

如果你在想为什么我们更关注 Arch-based 发行版，可能原因在于：

>
> **[喜欢 Arch Linux 的六个原因](https://itsfoss.com/why-arch-linux/)**
>
>
>

? 可以分享一下你对这个基于 Arch 的发行版的看法吗？我们已经有足够多的发行版了，还是依然需要更多？

*（题图：DA/1fee979e-9788-4bc8-a9cc-e8bccc2172c2）*

---

via: <https://news.itsfoss.com/parch-linux/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


博通还没完成对 VMware 客户的“斩除”行动

Summary: 博通致 VMware：“我还没干完！”

博通致 VMware：“我还没干完！”

![](/data/attachment/album/202401/18/123926zyfvpqyo2pfftq2f.jpg)

>
> 博通致 VMware：“我还没干完！”
>
>
>

看来，[VMware](https://www.vmware.com/) 的新主人还没消停。在对永久许可证客户 [致命打击](https://news.itsfoss.com/vmware-broadcom-subscription/) 之后，[博通](https://www.broadcom.com/) 现在又准备剥离云计算业务长期存在的另一部分了。

这一次，到了**VMware 云服务提供商计划遭到彻底改变的时候**，这将会影响到许多人，如果他们得不到博通的邀请，甚至会失去业务。?♂

### VMware 的云服务提供商面临“斩除”

精明的 [The Register](https://www.theregister.com/2024/01/10/broadcom_ends_vmware_partner_program/) 老编辑们首先发现，已经确知，**博通将在 2024 年 4 月底之前完全关闭 VMware 云服务提供商计划**。

这已经成为现实，正如早些时候，他们还结束了 VMware 的 [合作伙伴计划](https://www.vmware.com/partners.html)，取而代之的只会有**少数合作伙伴**被邀请加入博通优势合作伙伴计划。

[根据消息来源](https://www.crn.com/news/virtualization/broadcom-hands-vmware-partners-termination-notice)，这些合作伙伴的资格标准是**年收入至少达到 500,000 美元**，才能保持其合作伙伴身份。

现在，许多 [VMware 云服务提供商](https://cloud.vmware.com/providers) 也面临着类似的命运，他们收到了一封神秘的信，信中写道：

>
> 自 2024 年 4 月 30 日起，VMware 合作伙伴连接计划下以 VMware 云服务提供商进行交易的能力将终止。
>
>
> 不过，我们要强调的是，你可能有机会加入博通专家优势合作伙伴计划。此仅限受邀者参与的计划要求更简单，并提供更多好处，我们将于 2024 年初开始邀请合作伙伴加入。
>
>
>

但问题是，**博通并未明确谁将被邀请加入该计划**，以及邀请的标准。许多人担心，由于这一举措，**较小的云服务提供商将被挤出**，因为所谓的“*更简单的要求*”并不明确。

甚至是**云服务提供商也感到晕头转向**，其中有一家提供商仍在努力解决这个问题。向 *The Register* 提到以下内容：

>
> 他们怎么能在没有任何通知和细节的情况下，突然取消一项影响数百甚至数千用户的重要计划？
>
>
> 他们在节假日前的星期五就发出了通知，而且没有任何后续行动，这使得情况更加恶劣。
>
>
>

这看起来确实很糟糕，而且博通最近对 VMware 的处理并不一定得当，许多人已经转向 [Proxmox](https://www.proxmox.com/en/) 和 [MicroCloud](https://canonical.com/microcloud) 等替代服务，以避免日后陷入意外。

如果你是受此影响的提供商之一，你可以访问博通 [合作伙伴门户](https://partnerportal.broadcom.com/)，或浏览他们的 [FAQ 页面](https://www.broadcom.com/how-to-buy/software-partners/partnering-with-broadcom) 以获取有关这些变化的更多信息。

截至撰写本文时，**博通或 VMware 尚未就此事发表正式声明**，我真诚地希望他们能够澄清现有合作伙伴对此有何期望。

### 对于小型云提供商来说是一个糟糕的举动

此举会让许多人感到反感。如果上述情况属实，那么**许多小型云计算提供商将很有可能从这个仅限受邀的博通合作伙伴俱乐部中被踢出局**。

如果这些小型机构打算继续为客户提供服务，则可能必须与收到邀请的机构签约。许多人已经对此举是否具有反竞争性提出质疑，我同意他们的猜测。

甚至 Reddit 上的 [这个帖子](https://www.reddit.com/r/vmware/comments/193jngf/broadcom_ditches_most_of_vmwares_cloud_service/) 也已经有了一些非常有趣的评论。有些人认为，这次收购总是会有一个丑陋的结局。

? 你对此有何看法？ 博通会就此止步，还是会采取更激进的举措？

---

via: <https://news.itsfoss.com/broadcom-vmware-continues/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[校对者ID](https://github.com/%E6%A0%A1%E5%AF%B9%E8%80%85ID)

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