# Technical Documentation: nakanomikuorg/arch-guide

> ℹ️ **Provenance:** Multi-Tier Ingestion · [CodeWiki Reference](https://codewiki.google/github.com/nakanomikuorg/arch-guide)

### Overview (README.md)

<p align="center">
  <a href="https://arch.icekylin.online/">
    <img alt="logo" src="./docs/public/images/arch.svg"/>
  </a>
</p>

<p align="center">
  <a
    href="https://actions-badge.atrox.dev/nakanomikuorg/arch-guide/goto?ref=main"
   >
    <img
      alt="Build Status"
      src="https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fnakanomikuorg%2Farch-guide%2Fbadge%3Fref%3Dmain&style=flat"
    />
  </a>
  <a
    href="https://hits.seeyoufarm.com"
  >
    <img
      src="https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fnakanomikuorg%2Farch-guide&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false"
    />
  </a>
  <a
    href="https://github.com/nakanomikuorg/arch-guide"
    target="_blank"
    rel="noopener noreferrer"
  >
    <img
      alt="GitHub last commit"
      src="https://img.shields.io/github/last-commit/nakanomikuorg/arch-guide"
    />
  </a>
  <a
    href="https://github.com/nakanomikuorg/arch-guide"
    target="_blank"
    rel="noopener noreferrer"
  >
    <img
      alt="GitHub Repo stars"
      src="https://img.shields.io/github/stars/nakanomikuorg/arch-guide?style=social"
    />
  </a>
  <a
    href="https://github.com/nakanomikuorg/arch-guide/blob/main/LICENSE"
    target="_blank"
    rel="noopener noreferrer"
  >
    <img
      alt="GitHub"
      src="https://img.shields.io/github/license/nakanomikuorg/arch-guide"
    >
  </a>
  <a
    href="https://arch.icekylin.online/postscript/contributor-covenant.html"
    target="_blank"
    rel="noopener noreferrer"
  >
    <img
      alt="Contributor Covenant"
      src="https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg"
    />
  </a>
</p>

# archlinux 简明指南

> [📖 阅读地址](https://arch.icekylin.online/)
>
> 让 archlinux 成为你的日常系统吧！

- 📖 VitePress 驱动，格式优化
- 📚 细节和原理进行了详细的说明，知其然知其所以然
- 🏝️ 增加了更多可视化内容，生动形象
- ❎ 删除了部分内容，如有需要请参阅原文档
- ✅ 遵循 arch 实用性原则，避免意识形态问题，对非自由软件更加包容
- 🌱 目前指南有许多需要改进的地方，参阅贡献章节帮助完善

📚 本指南包含 archlinux 安装、配置、维护等，帮助新手快速上手。

## 文档施工中

## 相关信息

本指南派生自 [Arch Linux 安装使用教程](https://github.com/ArchLinuxStudio/ArchLinuxTutorial)。

## 本地运行

### Pacman

```shell
sudo pacman -S nodejs pnpm # 安装 nodejs 和 pnpm
git clone https://github.com/nakanomikuorg/arch-guide.git
cd ./arch-guide
pnpm i
pnpm docs:dev
```

### HomeBrew

```shell
brew install pnpm # 安装 pnpm
git clone https://github.com/nakanomikuorg/arch-guide.git
cd ./arch-guide
pnpm i
pnpm docs:dev
```

### Scoop

```powershell
scoop install nodejs # 安装 nodejs
scoop install pnpm # 安装 pnpm
git clone https://github.com/nakanomikuorg/arch-guide.git
cd ./arch-guide
pnpm i
pnpm docs:dev
```

### Docker

```shell
git clone https://github.com/nakanomikuorg/arch-guide.git
cd ./arch-guide
# 如需使用代理请取消注释 Dockerfile 中的 ENV 并适当修改
docker compose up -d
```

其它系统请参阅 [pnpm 中文文档](https://pnpm.io/zh/installation) 安装 `pnpm`。

## 隐私提醒

本站使用百度统计和 Google Analytics 分析流量。访问即同意它们的隐私政策。

## 参与贡献

欢迎对指南内容以及网站源码做出贡献，也欢迎对本指南的上游文档做出贡献。

更多信息请参阅 [贡献指南](https://arch.icekylin.online/postscript/contribute)。

## 版权说明

网站源代码采用 MIT
许可证；未经特殊说明，本作品采用 [知识共享署名-相同方式共享 4.0 国际许可协议](https://creativecommons.org/licenses/by-sa/4.0/deed.zh)
进行许可。

更多信息请参阅 [版权说明](https://arch.icekylin.online/postscript/copyright)。

## 贡献者

<a href="https://github.com/nakanomikuorg/arch-guide/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=nakanomikuorg/arch-guide" alt="contributors"/>
</a>

## Star 历史

[](https://starchart.cc/nakanomikuorg/arch-guide)

---

### Index (`docs/index.md`)

---
layout: home

hero:
  name: archlinux 简明指南
  text: 包含安装、配置、维护等，帮助新手快速上手
  tagline: ❤️️ 让 archlinux 成为你的常用系统吧！
  image:
    src: /images/hero.svg
    alt: archlinux
  actions:
    - theme: brand
      text: 🍕 开始阅读
      link: /guide/index
    - theme: alt
      text: 🍺 Github
      link: https://github.com/nakanomikuorg/arch-guide

features:
  - icon: 📖
    title: 格式优化
    details: VitePress 驱动，格式优化
  - icon: 📚
    title: 介绍详细
    details: 细节和原理进行了详细的说明，知其然知其所以然
  - icon: 🏝️
    title: 图文丰富
    details: 增加了更多可视化内容，生动形象
  - icon: ❎
    title: 内容和谐
    details: 删除了部分内容，如有需要请参阅原文档
  - icon: ✅
    title: 实用至上
    details: 遵循 arch 实用性原则，避免意识形态问题，对非自由软件更加包容
  - icon: 🌱
    title: 参与贡献
    details: 目前指南有许多需要改进的地方，参阅贡献章节帮助完善
---

---

### Guide Index (`docs/guide/index.md`)

# 序章

> ### 🎐 千里之行始于足下
>
> 本指南包含 archlinux 安装、配置、维护等，帮助新手快速上手。
>
> 让 archlinux 成为你的日常系统吧！

::: warning

🚧 文档施工中

:::

<p class="badges">
  <a
    href="https://actions-badge.atrox.dev/nakanomikuorg/arch-guide/goto?ref=main"
   >
    <img
      alt="Build Status"
      src="https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fnakanomikuorg%2Farch-guide%2Fbadge%3Fref%3Dmain&style=flat"
    />
  </a>
  <a
    href="https://hits.seeyoufarm.com"
  >
    <img
      src="https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fnakanomikuorg%2Farch-guide&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false"
    />
  </a>
  <a
    href="https://github.com/nakanomikuorg/arch-guide"
    target="_blank"
    rel="noopener noreferrer"
  >
    <img
      alt="GitHub last commit"
      src="https://img.shields.io/github/last-commit/nakanomikuorg/arch-guide"
    />
  </a>
  <a
    href="https://github.com/nakanomikuorg/arch-guide"
    target="_blank"
    rel="noopener noreferrer"
  >
    <img
      alt="GitHub Repo stars"
      src="https://img.shields.io/github/stars/nakanomikuorg/arch-guide?style=social"
    />
  </a>
  <a
    href="https://github.com/nakanomikuorg/arch-guide/blob/main/LICENSE"
    target="_blank"
    rel="noopener noreferrer"
  >
    <img
      alt="GitHub"
      src="https://img.shields.io/github/license/nakanomikuorg/arch-guide"
    >
  </a>
  <a
    href="https://arch.icekylin.online/postscript/contributor-covenant.html"
    target="_blank"
    rel="noopener noreferrer"
  >
    <img
      alt="Contributor Covenant"
      src="https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg"
    />
  </a>
</p>

## 📕 相关信息

本指南派生自 [Arch Linux 安装使用教程](https://github.com/ArchLinuxStudio/ArchLinuxTutorial)。

## 💻 本地运行

::: code-group

```bash{4-5} [Pacman]
sudo pacman -S nodejs pnpm # 安装 nodejs 和 pnpm
git clone https://github.com/nakanomikuorg/arch-guide.git
cd ./arch-guide
pnpm i
pnpm docs:dev
```

```zsh{4-5} [HomeBrew]
brew install pnpm # 安装 pnpm
git clone https://github.com/nakanomikuorg/arch-guide.git
cd ./arch-guide
pnpm i
pnpm docs:dev
```

```powershell{5-6} [Scoop]
scoop install nodejs # 安装 nodejs
scoop install pnpm # 安装 pnpm
git clone https://github.com/nakanomikuorg/arch-guide.git
cd ./arch-guide
pnpm i
pnpm docs:dev
```

:::

其它系统请参阅 [pnpm 中文文档](https://pnpm.io/zh/installation) 安装 `pnpm`。

## 🔔 隐私提醒

本站使用百度统计和 Google Analytics 分析流量。访问即同意它们的隐私政策。

## 🌱 参与贡献

欢迎对指南内容以及网站源码做出贡献，也欢迎对本指南的上游文档做出贡献。

更多信息请参阅 [贡献指南](../postscript/contribute)。

## 🍰 贡献者

<a href="https://github.com/nakanomikuorg/arch-guide/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=nakanomikuorg/arch-guide" alt="contributors"/>
</a>

## 💎 版权说明

网站源代码采用 MIT
许可证；未经特殊说明，本作品采用 [知识共享署名-相同方式共享 4.0 国际许可协议](https://creativecommons.org/licenses/by-sa/4.0/deed.zh)
进行许可。

更多信息请参阅 [版权说明](../postscript/copyright)。

## ⭐ Star 历史

[](https://starchart.cc/nakanomikuorg/arch-guide)

---

### Postscript About (`docs/postscript/about.md`)

# 附录

> ### 🌕 青山一道同云雨，明月何曾是两乡
>
> 附加的一些信息

## 原作者的话

原作者对教程的补充解释以及致谢，这里原文摘录。

### 补充解释

首先说明一下和官方文档的定位区别。官方中文文档确实很全，但它的定位是官方文档，这样的话已经就需要做到事无巨细。但是这种过于详细的文档，会使得新手在一个又一个链接中迷失方向，他们更需要的是指引，而不是字典。本文的定位是指引，以及群主个人认为的当前的较好的方案。另外，官方中文文档大多翻译自英文文档，存在翻译不及时的情况。少数还有翻译有误或者含义不清的情况。

网上类似的文档一大把，为何还要这样一份文档？技术的变更是日新月异的，不论是操作系统本身还是具有价值的软件，网上一些教程大多年久失修，大家都知道互联网知识时效性是很重要的。本书的 Flag 就是只要健在，就一直更新。并且立志做到中文社区中较好的位置。

许多人还在认为 Linux 不适合做日常使用的操作系统。说实在的，在本世纪的前十年，Linux 桌面确实不太堪用。但是现在时间已经是 2021 年后了，Linux 桌面与生态有了长足的进步。不论是办公，轻度娱乐还是编程，基本都可以满足需求。

### 致谢

最近几年，群主经历了很多事情，基本都不是什么好事。所以有了那么一丁点微小的感悟。

最后要感谢的就是各大开源社区所提供的资源，没有大家的一砖一瓦，就不会有 Linux 生态越来越好的今天，感谢大家。

---

### Postscript Contribute (`docs/postscript/contribute.md`)

# 贡献指南

> ### 🌱 随风潜入夜，润物细无声
>
> 本小节介绍如何为本指南做出贡献，包括基本的格式说明等

## 如何开始

### 0. 阅读贡献者公约

参与贡献之前，我们希望您先阅读 [贡献者公约](contributor-covenant.md)。这将帮助您了解贡献者应遵循的基本行为准则。

### 1. 派生（Fork）仓库

### 2. 克隆（Clone）仓库到本地

### 3. 编辑文档

### 4. 推送（Push）至派生仓库

### 5. 提交合并请求（Pull request）

## 格式说明

## 文字风格

## 未来展望

---

### Postscript Contributor Covenant (`docs/postscript/contributor-covenant.md`)

# 贡献者公约

<p class="shields normal-img-p">
  <img
    alt="Contributor Covenant"
    src="https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg"
  />
</p>

> ### ⚖️ 不以规矩，不能成方圆
>
> 本项目采用 [贡献者公约 2.0](https://www.contributor-covenant.org/version/2/0/code_of_conduct/) 指导行为准则 —— 明确社区的价值观，致力于为每个人创造热情和安全的环境

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

## 我们的承诺

身为项目成员、贡献者、负责人，我们保证参与此社区的每个人都不受骚扰，不论其年龄、体型、身体条件、民族、性征、性别认同与表现、经验水平、教育程度、社会地位、国籍、相貌、种族、宗教信仰及性取向如何。

我们承诺致力于建设开放、友善、多元、包容、健康的社区环境。

## 我们的准则

有助于促进本社区积极环境的行为包括但不限于：

- 与人为善、推己及人
- 尊重不同的主张、观点和经历
- 积极提出、耐心接受有益批评
- 面对过失，承担责任、认真道歉、从中学习
- 关注社区共同诉求，而非一己私利

不当行为包括但不限于：

- 发布与性有关的言论或图像，以及任何形式的献殷勤或勾引
- 挑衅行为、侮辱或贬损的言论、人身及政治攻击
- 公开或私下骚扰
- 未获明确授权擅自发布他人的资料，如地址、电子邮箱等
- 其他有理由认定为违反职业操守的不当行为

## 落实之义务

社区负责人有责任诠释何谓“妥当行为”，并据此准则，妥善公正地认定与处置不当、威胁、冒犯及有害的行为。

社区负责人有权利和义务删除、编辑、拒绝违背本公约的评论（comment）、提交（commit）、代码、维基（wiki）编辑、问题（issue）等贡献。如有必要，需告知采取措施之理由。

## 适用范围

此行为标准适用于本社区全部场合，以及在其他场合代表本社区的个人。

代表本社区的情形包括但不限于：使用官方电子邮件与社交平台、作为指定代表参与在线或线下活动。

## 贯彻落实

如遇滥用、骚扰等不当行为，请通过 sugarkylin@foxmail.com 向纪律检查委员举报。
纪委将迅速审议并调查全部投诉。

社区全体负责人有义务保密举报者信息。

## 指导方针

社区负责人将依据下列方案判断并处置违纪行为：

### 一、督促

**社区影响**：用语不当、举止不符合职业道德或不受社区欢迎。

**处理意见**：由社区负责人予以非公开的书面警告，阐明违纪事由、解释举止如何不妥。或将要求公开道歉。

### 二、警告

**社区影响**：一起或多起事件中的违纪行为。

**处理意见**：警告继续违纪之后果、违纪者在特定时间内禁止与当事人往来、不得擅自与社区执法者往来，禁令涵盖社区内外、社交网络在内的一切联络。如有违反，可致封禁乃至开除。

### 三、封禁

**社区影响**：严重违纪行为，包括屡教不改。

**处理意见**：违纪者在特定时间内禁止与社区的任何往来或公开联络，禁止任何与当事人公开或私下往来，不得擅自与社区执法者往来。如有违反，可致开除。

### 四、开除

**社区影响**：典型违纪行为，例如屡教不改、骚扰某个人、敌对或贬低某个群体。

**处理意见**：无限期禁止违纪者与项目社区的一切公开往来。

## 来源

本行为标准改编自 [参与者公约][homepage] 2.0 版，可在此查阅： [https://www.contributor-covenant.org/zh-cn/version/2/0/code_of_conduct.html][v2.0]

指导方针借鉴自 [Mozilla 纪检分级][mozilla coc]。

此行为标准常见问题请洽：[https://www.contributor-covenant.org/faq][faq]。
另有诸译本：[https://www.contributor-covenant.org/translations][translations]。

[homepage]: https://www.contributor-covenant.org
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
[mozilla coc]: https://github.com/mozilla/diversity
[faq]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations

---

### Postscript Copyright (`docs/postscript/copyright.md`)

# 版权说明

> ### 🌸 待到山花烂漫时，她在丛中笑
>
> 本小节记录指南涉及的一些版权信息

## 原作信息

本指南派生自 [Arch Linux 安装使用教程](https://github.com/ArchLinuxStudio/ArchLinuxTutorial)。

### 原作贡献者

- [Kagarino Kirie](https://github.com/wallena3)
- [hibobmaster](https://github.com/hibobmaster)
- [Chumo2791](https://github.com/Chumo2791)
- [JimMoen](https://github.com/JimMoen)
- [livrth](https://github.com/livrth)
- [ConanEdogawa1](https://github.com/ConanEdogawa1)

### 原作许可证

原作采用 [知识共享署名-相同方式共享 4.0 国际许可协议](https://creativecommons.org/licenses/by-sa/4.0/deed.zh) 进行许可。

### 特别声明

本作品所有观点仅代表本项目贡献者观点，**许可人不为本指南的观点、示例或任何行为背书**。

## 本作信息

网站源代码采用 MIT 许可证；未经特殊说明，本作品采用 [知识共享署名-相同方式共享 4.0 国际许可协议](https://creativecommons.org/licenses/by-sa/4.0/deed.zh) 进行许可。

::: details LICENCE

```
/* Detailed source-code truncated for AI context efficiency. */
```

:::

## 本作贡献者

- [icekylin](https://github.com/ice-kylin)
- [LinuXP](https://github.com/LagrangeOranges)
- [Chumo2791](https://github.com/Chumo2791)

## 特殊说明

### 字体

- [HarmonyOS Sans Fonts](https://developer.harmonyos.com/cn/docs/design/des-guides/font-0000001157868583)

  - © 2021 Huawei Device Co., Ltd.
  - HarmonyOS Sans Fonts Software is licensed under HarmonyOS Sans Fonts License Agreement.

::: details LICENCE

```
/* Detailed source-code truncated for AI context efficiency. */
```

:::

- [Segoe UI Emoji](https://docs.microsoft.com/zh-cn/typography/font-list/segoe-ui-emoji) © 2018 Microsoft Corporation. All Rights Reserved.

---

### App Common Android (`docs/app/common/android.md`)

# 安卓刷机

> ### 🐲 沉舟侧畔千帆过，病树前头万木春
>
> 本小节讨论如何通过 archlinux 给安卓手机刷机。

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: warning ⚠️ 注意

刷机有风险，解锁需谨慎

:::

> 🔗 相关链接：
>
> - [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Android_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)

买可以刷机的手机最好买知名度大的品牌、有可能解锁 BootLoader 的手机以及较热门的机型，这样在刷机时可以方便的找到官方的 TWRP 和知名的 ROM 包（如 [LineageOS](https://lineageos.org/)、[crDroid](https://crdroid.net/) 和 [PixelExperience](https://download.pixelexperience.org/devices)等）。

如果是较冷门的品牌，官方可能没有提供 ROM，只能在网上自行寻找个人改造过的 TWRP 和上述 ROM 包的非官方（unofficial）ROM。这种个人改造版本的安全性比较难说，而且还可能有更多的 🐛 Bug。也有可能翻遍全网，也找不到冷门机型能用（指好用的、非硬件提供商的官方 ROM）的 TWRP 和 ROM。

硬件方面，一般推荐买高通骁龙的 CPU，不建议买联发科的，因为更多 ROM 的版本都是适配高通硬件的。

::: tip ℹ️ 提示

较新的华为、VIVO等设备解锁困难，刷机几乎成为不可能。

:::

首先需要安装 Linux 上的安卓工具包：

```sh
sudo pacman -S android-tools android-udev
```

::: tip ℹ️ 提示

对于部分机型，仅仅安装android-tools是不够的，还必须安装android-udev。
（systemd版本v258之前必须安装）
不安装,使用fastboot devices可以查看设备，可进行部分操作。
一些关键操作，比如fastboot flash boot xxx 大概率会中断，然后设备会自动重启（这里可能会让人感到很困惑）。

fastbootd模式，运行着一个fastboot daemon。不安装udev也可以正常工作，但是使用fastboot模式时，必须安装。

这里的android-udev，就类似于Windows系统安装驱动

- 这里是来自arch wiki的解释：
Since systemd v258 it now includes basic udev rules for android devices to make adb and fastboot work out of the box. If your device does not show up, try to install the android-udev package with additional rules.

- 立刻生效：sudo udevadm control --reload-rules && sudo udevadm trigger
- 生效依据：fastboot刷写分区不再有warning.

! 还有特殊情况，使用以上方法依旧无法正常操作设备

- 常见失效命令有：
fastboot flash ...

首行出现警告⚠

- 在以上指南下依旧失效的情况下
不妨试试：
fastboot boot ...

- 如果长时间卡住
直接取消然后再次尝试：
fastboot flash boot ...

- 如果出现等待设备字样
这时手机应该是一个特殊界面，界面只有fastboot字样
顶部有一行小字
按任意键即可触发重启

这个时候按音量下+关机键，重新进入fastboot

刚刚等待的设备，等到了

有一定概率这样操作就能成功刷入了

- 其他~~不一定有效~~(没有控制变量实验验证)的方法：
- 安装android-studio
~~获得google的保佑~~
~~效果：机魂大悦~~

- 安装android-sdk-platform-tools
yay -S android-sdk-platform-tools
[参考链接](https://developer.android.google.cn/studio/run/device?hl=zh-cn)

- 最后兜底的方法：
不要用linux刷机了，回Windows，安装驱动刷。

:::

## 1. 解锁 BootLoader

   ::: tip ℹ️ 提示

   解锁之前建议先退出手机内的Google账号，部分机型需要在开发者设置中打开OEM解锁一项。

   :::

1. 手机先通过数据线连接电脑，重启到 fastboot 模式：

   ```sh
   adb reboot bootloader
   ```

   ::: tip ℹ️ 提示

   注意要连到 USB 2.0 的接口，否则可能有兼容性问题。

   :::

2. 解锁 BootLoader：

**小米：** 小米官方会提供解锁 BootLoader 的途径和工具，但是这些工具基本只能在 Windows 下用。

**OPPO、真我realme:** 黑厂的机型一般需要进行深度测试解锁，申请速度很慢，并且新机型在第一时间内不能申请深度测试解锁。

**一加、红魔、LG、Google：** 这些品牌的解锁比较简单。

```sh
fastboot flashing unlock
```

之后按照手机上的提示，使用音量键选择unlock解锁并用电源键确认即可。

**其他：** 不知名的机型和部分OEM机型。可以尝试下面的指令解锁

   ```sh
   fastboot oem unlock
   ```

对于部分较旧的（3年前的）联发科芯片的手机可以[使用漏洞解锁](https://github.com/notmyst33d/mtkclient-gui)。
## 2. 刷入 TWRP 并进行刷机

1. 在 [TWRP 官网](https://twrp.me/Devices/) 搜索并下载机型对应的 TWRP

   ::: tip ℹ️ 提示

   没有官方 TWRP 的设备，可以在 [UNofficialtwrp](https://unofficialtwrp.com/devices/) 查看下是否有。

   如果没有相关信息有几个论坛和网站可以看看：

   - [XDA Forums](https://forum.xda-developers.com/)
   - [CusROM](https://www.cusrom.com/)
   - [ANDROID FILE HOST](https://androidfilehost.com/) —— 搜索 `开发代号` + `你想要的系统名字`

   :::

   ::: tip ℹ️ 提示

   一般 TWRP 的版本和 ROM 包有对应关系，刷机前先确认你的两个版本是兼容的，否则刷机过程可能报奇怪的错误，如 `unable to mount /system`。

   :::

2. 同上 [1. 解锁 BootLoader](android.md#_1-解锁-bootloader)，通过数据线连接电脑，重启到 fastboot 模式

3. 执行以下命令：

   ```bash
   fastboot flash recovery /path/of/your_twrp.img
   ```

4. 看到命令执行完毕的时候，就可以让手机重启了

   ::: tip ℹ️ 提示

   执行 `fastboot reboot` 可以重启，但是许多设备会在首次启动时自动覆盖替换你刷入的自定义 recovery，如乐视的 Le 2（X620）。直接重启会报不是官方系统或类似错误。

   为防止这种情况，在手机上通过硬件按键重启进入 recovery，TWRP 将给 ROM 打上 patch，以防止 ROM 替换 TWRP。

   :::

5. 剩下的步骤就是普通的进入 TWRP > 双清 > 刷机即可

   ::: tip ℹ️ 提示

   有时双清或者进入 TWRP 可能看到报错。这时尝试使用高级清理，从 ext4 改一下格式，再改回 ext4 问题可能就解决了。

   :::

::: tip ℹ️ 提示

可能需要用到的更多命令：

```bash
adb shell # 打开 adb shell
adb root # 在手机已经 root 的情况下打开 root 权限的 adb shell
```

:::

---

### App Common Collaboration (`docs/app/common/collaboration.md`)

---
sidebarDepth: 2
---

# 多屏协同

> ### 📲 二人同心，其利断金
>
> 本小节内容讨论如何投屏安卓或苹果设备到 archlinux 上以及安卓设备如何和 archlinux 协同工作。

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## 🤖 安卓设备投屏（scrcpy）

[scrcpy](https://github.com/Genymobile/scrcpy/blob/master/README.zh-Hans.md) 可以显示并控制通过 USB 或无线连接的安卓设备，且不需要任何 root 权限。

scrcpy 有以下优点：

- 轻量（原生，仅显示设备屏幕）
- 性能（30 ~ 60fps）
- 质量（分辨率可达 1920×1080 或更高）
- 低延迟（35 ~ 70ms）
- 快速启动（最快 1 秒内即可显示第一帧）
- 无侵入性（不会在设备上遗留任何程序）

::: tip ℹ️ 提示

安卓版本要大于等于 5.0。

:::

1. 安装 [scrcpy](https://aur.archlinux.org/packages/scrcpy/)<sup>cn / aur</sup> 以及 [安卓工具包](https://archlinux.org/packages/extra/x86_64/android-tools/)：

   ::: code-group

   ```sh [cn]
   sudo pacman -S scrcpy android-tools
   ```

   ```sh [aur]
   yay -S aur/scrcpy android-tools
   ```

   ```sh [aur (git)]
   yay -S scrcpy-git android-tools
   ```

   :::

2. 打开安卓设备的 `设置` > `开发人员选项`（多次点击 `关于手机（平板）` 中的 `版本号`，提示处在 `开发者模式` 后即可在设置中找到）> 打开 `USB 调试`：

   

   ::: tip ℹ️ 提示

   部分设备还需要开启 `USB 调试（安全设置）`。

   :::

3. 通过数据线连接安卓设备和计算机 > 将 `USB 连接方式` 改为 `传输文件`：

   

4. 在终端执行以下命令：

   ```sh
   adb devices
   ```

   终端上也会显示连接的安卓设备号：

   

   ::: tip ℹ️ 提示

   如果是第一次执行这条命令（或没有永远信任计算机），在安卓设备上应该会出现一个确认使用该电脑调试安卓设备的通知，确认即可。

   :::

   ::: tip ℹ️ 提示

   有些设备可能会自动关闭 `USB 调试`，若没有显示请确认 `USB 调试` 开启。

   :::

### 有线连接

1. 保持数据线连接，直接在终端执行以下命令即可：

   ```sh
   scrcpy
   ```

   

   

2. 关闭窗口即可结束连接

### 无线连接

1. 保持数据线连接，执行以下命令：

   ```sh
   adb tcpip 8848 # 可自定义端口，默认为 5555
   ```

2. 开启成功之后就可以拔掉数据线了

3. 打开安卓设备的 `设置` > `关于手机（平板）` > `状态信息`（或类似位置）> 查看手机（平板）的 `IP 地址`：

   

4. 在终端执行以下命令即可看到现在的安卓设备界面了：

   ```sh
   adb connect ANDROID_IP:8848 # 刚刚自定义的端口
   ```

   ::: tip ℹ️ 提示

   部分设备可能无法通过无线连接（断开数据线后会自动关闭 `USB 调试`），会显示以下错误信息：

   ```sh
   failed to connect to 192.168.x.xxx:xxxx
   ```

   :::

5. 连接成功后在终端执行以下命令即可看到现在的安卓设备界面了：

   ```sh
   scrcpy
   ```

   

   

   ::: tip ℹ️ 提示

   若报以下错误：

   ```sh
   adb: error: failed to get feature set: more than one device/emulator
   ```

   请执行以下步骤后再尝试：

   1. 通过 `adb devices` 命令查看信息，找到不存在的设备（因连接失败留下的，显示为 `offline`）

   2. 断开不存在的设备：

      ```sh
      adb disconnect HOST:PORT
      ```

      

   :::

6. 关闭窗口即可结束连接

### 快捷使用

下面介绍一些快捷使用的方法。

#### 常用快捷键

| 作用                                 | 快捷键                 |
| :----------------------------------- | :--------------------- |
| 返回                                 | `meta` + `B`           |
| 主界面                               | `meta` + `H`           |
| 多任务界面                           | `meta` + `S`           |
| 关闭手机屏幕（电脑上的界面正常显示） | `meta` + `O`           |
| 开启手机屏幕                         | 右键单击               |
| 展开通知栏                           | `meta` + `N`           |
| 折叠通知栏                           | `meta` + `Shift` + `N` |

#### 文件传输

若需要将计算机的文件传到安卓设备，直接将文件拖拽到计算机上的安卓设备界面即可。文件默认存放在用户的主目录下。

若感觉不太方便可使用 [KDE Connect](collaboration.md#🔗-kde-connect) 协同 scrcpy 使用。

#### 屏幕常亮

在连接到电脑之后很可能都希望手机息屏而计算机端的镜像可以常亮，虽然可以通过键盘快捷键 `meta` + `O` 来实现，但这种方式实现的亮屏会在达到手机屏幕休眠时间之后自动黑屏。

所以想要实现常亮的话需要在启动 scrcpy 的时候添加一个可以保持屏幕唤醒的参数：

```sh
scrcpy --turn-screen-off --stay-awake
```

若亮屏是常用选项，可将这个命令设置为 scrcpy 的别名（alias）。只需要使用以下命令在 `~/.zshrc` 或者 `~/.bashrc` 中添加如下内容 > 重新打开终端或者 `source` 该文件即可：

::: code-group

```sh [bash]
echo 'alias scrcpy="scrcpy --turn-screen-off --stay-awake"' >> ~/.bashrc
```


```sh [zsh]
echo 'alias scrcpy="scrcpy --turn-screen-off --stay-awake"' >> ~/.zshrc
```

:::

## 🍎 苹果设备投屏（UxPlay）

[UxPlay](https://github.com/antimof/UxPlay) 是一款将 iPadOS 或 IOS 投屏到 Linux 的软件。该项目是 UNIX / 类 UNIX 系统中 AirPlay 服务器的早期原型。

通过投屏到 archlinux 可以方便的在 [Zoom](communication.md#zoom) 等各种情景下将内容分享给他人（课堂演示等等）。

::: details 视频指南（视频不清晰请前往哔哩哔哩观看）

<div
  style="
    position: relative;
    padding: 30% 45%;
    margin-top: 32px;
  "
>
  <iframe
    style="position: absolute; width: 100%; height: 100%; left: 0; top: 0"
    src="//player.bilibili.com/player.html?aid=972705991&bvid=BV1fp4y1t71r&cid=328263624&page=1&as_wide=1&high_quality=1&danmaku=1&autoplay=0"
    scrolling="no"
    border="0"
    frameborder="no"
    framespacing="0"
    allowfullscreen="true"
  ></iframe>
</div>

:::

1. 安装 [UxPlay](https://aur.archlinux.org/packages/uxplay-git/)<sup>aur</sup>：

   ```sh
   yay -S uxplay-git
   ```

2. 启动 `avahi-daemon` 服务：

   ```sh
   sudo systemctl start avahi-daemon.service
   systemctl status avahi-daemon.service # 复查一下
   ```

3. 确保计算机和 iPad 或者 iPhone 连接至同一个 **5Ghz** 无线网络

4. 在终端执行以下命令启动 UxPlay：

   ```sh
   uxplay
   ```

   

5. 在 iPad 或 iPhone 中打开屏幕镜像，选择并连接 `Uxplay`，等待一会即可：

   

   

::::: tip ℹ️ 提示

每次运行 UxPlay 之前都需要开启 `avahi-daemon` 服务，若觉得麻烦可将其添加到自动启动中：

```sh
sudo systemctl enable avahi-daemon.service
```

或者使用以下命令创建 `uxplay` 命令的别名（alias），只需要使用以下命令在 `~/.zshrc` 或者 `~/.bashrc` 中添加如下内容 > 重新打开终端或者 `source` 该文件即可：

::: code-group

```sh [bash]
echo 'alias uxplay="sudo systemctl start avahi-daemon.service && uxplay"' >> ~/.bashrc
```

```sh [zsh]
echo 'alias uxplay="sudo systemctl start avahi-daemon.service && uxplay"' >> ~/.zshrc
```

:::

::: tip ℹ️ 提示

若使用了 [透明代理](../../guide/rookie/transparent.md#_7-配置-cgproxy)，请将 `/usr/bin/uxplay` 添加到 `/etc/cgproxy/config.json` 中的 `program_noproxy` 一行（不使用透明代理的名单）：



:::

:::::

## 🔗 KDE Connect

[KDE Connect](https://kdeconnect.kde.org/) 提供了各种用于整合移动设备和计算机的功能。它可以将文件发送到另一台设备、控制它的媒体播放、发送远程输入、查看它的通知，以及做许多其它事情。

1. 安装 [KDE Connect](https://archlinux.org/packages/extra/x86_64/kdeconnect/)<sup>extra / cn / aur</sup> 及其相关可选依赖：

   ::: code-group

   ```sh [extra]
   sudo pacman -S kdeconnect sshfs
   ```

   ```sh [cn (git)]
   sudo pacman -S skdeconnect-git sshfs
   ```

   ```sh [aur (git)]
   yay -S aur/kdeconnect-git sshfs
   ```

   :::

2. 移动端可在 [Google Play](https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp) [App Store](https://apps.apple.com/us/app/kde-connect/id1580245991)下载并安装

3. 将计算机和移动设备连接至同一个无线网络，根据提示信任并连接即可：

   

4. 为了让计算机可以访问移动设备的文件系统，需要在移动设备点击对应计算机右上角的 `更多按钮`（三个点） > `插件设置` > 打开 `开放文件系统` > 点击 `开放文件系统` 进入 `开放文件系统设置` > `添加储存位置` > 选择要共享的文件夹：

   

5. 然后便可以在 Dolphin 中查看并操作移动设备的文件系统了：

   

::: tip ℹ️ 提示

若使用了 [透明代理](../../guide/rookie/transparent.md#_7-配置-cgproxy)，请将 `/usr/lib/kdeconnectd` 添加到 `/etc/cgproxy/config.json` 中的 `program_noproxy` 一行（不使用透明代理的名单）：



:::

---

> 📔 本节参考资料：
>
> - [Android 手机投屏到 Linux 下](https://www.dianbanjiu.com/post/android-%E6%89%8B%E6%9C%BA%E6%8A%95%E5%B1%8F%E5%88%B0-linux-%E4%B8%8B/)

---

### App Common Communication (`docs/app/common/communication.md`)

---
sidebarDepth: 2
prev: /advanced/btrfs.md
---

# 聊天通讯

> ### 🍻 海上生明月，天涯共此时
>
> 这一小节讨论在 archlinux 上安装常用的聊天通讯软件

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## 💬 即时通讯

### Telegram

Telegram（电报）是跨平台的即时通信软件。其客户端是自由软件（桌面端在 [GPLv3](https://github.com/telegramdesktop/tdesktop/blob/dev/LICENSE) 协议下发布），但服务器是专有软件。

Telegram 有两种加密模式：

- 一般聊天 —— 使用**端到端**的加密通信，但服务端会有访问密钥的权限，而且可以经由多重设备登录
- 秘密聊天 —— 使用**端对端**的加密通信，而且只能经由两个特定设备登录

官方宣称当两名用户进行通信时，第三方包含管理人员皆无法访问用户的通信内容。当用户在进行秘密聊天时，消息包含多媒体皆可以被指定为自毁消息，当消息被用户阅读之后，消息在指定的时间内会自动销毁。一旦消息过期，消息会消失在用户的设备上。

1. 安装 `Telegram`<sup>extra / cn / aur</sup>：

   ::: code-group

   ```sh [extra]
   sudo pacman -S telegram-desktop
   ```

   ```sh [cn (git)]
   sudo pacman -S telegram-desktop-git
   ```

   ```sh [aur]
   yay -S telegram-desktop-bin
   ```

   ```sh [aur（dev）]
   yay -S telegram-desktop-bin-dev
   ```

   :::

   

2. 调整隐私权限以及自动下载：

   - 在 `Settings`（设置） > `Advanced`（高级） > `Automatic media download`（自动媒体下载） 中分别将 `In private chats`（私聊中）、`In groups`（群组中） 和 `In channels`（频道中） 的 `Files`（文件） 关掉，以避免下载病毒以及垃圾文件
   - 在 `Settings`（设置） > `Privacy and Security`（隐私和安全） > `Privacy`（隐私） 中将 `Phone number`（电话号码） 改为 `Nobody`（仅联系人可见）、将 `Forwarded messages`（转发的消息）、`Calls`（语音通话） 和 `Groups & channels`（邀请权限） 分别改为 `My contacts`（仅联系人）

     ::: tip ℹ️ 提示

     更进一步，可将 `Phone number` 中的 `Who can find me by my number` 改为 `My contacts`，这将使只有双向联系人（即双方手机都有对方的电话号码）才可以通过电话号码添加您为好友。这可以在一定程度增加安全性。

     :::

> #### 💕 相关链接：archlinux Telegram 相关群组
>
> - [#archlinux-cn](https://t.me/archlinuxcn_group)
> - [#archlinux-cn-offtopic](https://t.me/archlinuxcn_offtopic)
> - [ArchLinuxStudio🇨🇦🏳️‍⚧️🏳️‍🌈](https://t.me/FSF_Ministry_of_Truth)

::: tip ℹ️ 提示

目前官方中文语言包还不完整，可以通过点击第三方语言包链接设置 Telegram 为中文：

- 简体：
  - [聪聪](https://t.me/setlanguage/zhcncc)
  - [江湖](https://t.me/setlanguage/jianghu)
  - [langCN](https://t.me/setlanguage/zhlangcn)
  - [zh-hans](https://t.me/setlanguage/zh-hans-beta)
  - [Moecn](https://t.me/setlanguage/moecn)
- 繁体：
  - [繁體一](https://t.me/setlanguage/hongkong)
  - [繁體二](https://t.me/setlanguage/zhhant-hk)

:::

::: tip ℹ️ 提示

虽然 Telegram 很“自由”，但也带来了很多问题：

- 牵涉恐怖活动 —— 2015 年 11 月，由于伊斯兰国（ISIS）相关组织使用频繁，Telegram 移除了近 250 个所使用广播频道，并屏蔽其所属账号并且持续每天移除近百频道
- 非法出售个人信息 —— 2020 年 3 月中旬，中华人民共和国江苏园区公安分局网安大队在“净网 2020”专项行动的网络巡查中获取了一条网民通过 Telegram 出售公民个人信息的线索，并于 4 月 22 日在广东东莞和湖南衡阳逮捕 6 名嫌疑犯，查获过百万条公民个人信息
- 传播钓鱼木马 —— 2020 年 12 月 26 日，金山毒霸安全团队通过“捕风”威胁感知系统捕获一类新的钓鱼木马，该类木马在 Telegram 群组中传播，通过命名成各种时政热点消息的标题或者更改图标伪装成正规软件，诱使用户点击
- 传播色情、侵犯著作权的内容 —— 2018 年下半年至 2020 年 3 月间，韩国有人通过 Telegram 组建多个聊天室并收取费用，进行了有组织的、大规模的性虐待事件，即震惊韩国社会的 N 号房事件
- 颠覆国家政权 —— 2019 年 6 月，“反修例运动”期间，香港很多“抗议者”使用 Telegram 来逃避电子监视

使用 Telegram 时注意安全，保护好个人隐私；同时也要注意谨言慎行。

:::

> #### 🍧 碎碎念
>
> 道也者，不可须臾离也；可离，非道也。是故君子戒慎乎其所不睹，恐惧乎其所不闻。莫见乎隐，莫显乎微，故君子慎其独也。

### QQ

推荐安装官方最新的[`linuxqq`](https://aur.archlinux.org/packages/linuxqq)<sup>EULA / aur</sup>（基于 Electron 框架）

```sh
yay -S linuxqq
```

wrap 版本[`linuxqq-nt-bwrap`](https://aur.archlinux.org/packages/linuxqq-nt-bwrap)<sup>EULA / aur</sup>，该版本限制了 qq 的目录访问

```sh
yay -S linuxqq-nt-bwrap
```



#### 其它版本

基于 [`deepin-wine5`](https://aur.archlinux.org/packages/deepin-wine5)<sup>EULA / extra / cn / aur</sup> 的 QQ。

1. 安装 [`deepin-wine-qq`](https://aur.archlinux.org/packages/deepin-wine-qq/)<sup>aur</sup>：

   ```sh
   yay -S deepin-wine-qq
   ```

   

2. 参考 [deepin-wine5 相关](../../guide/advanced/debug.md#deepin-wine5-相关) 完成配置：

   

#### 第三方

以下为第三方版本 QQ

- Icalingua [`Icalingua`](https://aur.archlinux.org/packages/icalingua/)<sup>aur</sup> - electron 开发的第三方~~QQ~~ ([~~github~~](https://github.com/Icalingua/Icalingua))(作者已删库)
  ```sh
  yay -S icalingua
  ```
- Icalingua++ [`Icalingua++`](https://aur.archlinux.org/packages/icalingua++/)<sup>aur</sup> - electron 开发的第三方 QQ ([github](https://github.com/Icalingua-plus-plus/Icalingua-plus-plus))(为 icalingua 升级版)
  ```sh
  yay -S icalingua++
  ```

### 微信

2024 年 3 月，腾讯推出了基于原生跨平台方案的微信（Universal），可以安装 [`wechat`](https://aur.archlinux.org/packages/wechat/)<sup>aur</sup> 体验，这是目前最好的解决方案。

```bash
yay -S wechat wechat-bin
```

wechat<sup>aur</sup> 基于[`wechat-bin`](https://aur.archlinux.org/packages/wechat-bin/)<sup>aur</sup> 实现，并添加有进程管理，沙盒（可选），输入法及 HiDPI 修复等功能。更多问题可以参照[Wiki](https://wiki.archlinuxcn.org/wiki/%E5%BE%AE%E4%BF%A1)来解决。

### wine版

基于目前社区的反馈，更推荐使用上游来自 Deepin 社区主导的星火商店，用 `wine` 运行的 [`com.qq.weixin.spark`](https://aur.archlinux.org/packages/com.qq.weixin.spark)<sup>EULA / aur</sup>，功能相对较全也较少 bug。

1. 安装 [`com.qq.weixin.spark`](https://aur.archlinux.org/packages/com.qq.weixin.spark)<sup>EULA / aur</sup>：

   ```sh
   yay -S com.qq.weixin.spark
   ```

   

2. 如果存在透明窗口等问题，可以考虑使用 [`wine-for-wechat`](https://github.com/archlinuxcn/repo/tree/master/archlinuxcn/wine-for-wechat)<sup>cn</sup>：

   

#### 其它版本

以下为其它的微信版本，但体验一般：

- [`wechat-uos`](https://aur.archlinux.org/packages/wechat-uos/)<sup>aur</sup> —— UOS 版本原生微信的移植版本

  ```sh
  yay -S wechat-uos
  ```

相关内容：[ArchWiki - 微信](https://wiki.archlinuxcn.org/wiki/%E5%BE%AE%E4%BF%A1)

### Skype

Skype 是一款通信应用软件，可通过互联网为电脑、平板电脑和移动设备提供与其它联网设备或传统电话 / 智能手机间进行视频通话和语音通话的服务。用户也可通过 Skype 收发即时通讯信息、传输文件、收发多媒体信息、进行视频会议。

目前 Skype 归微软所有。

安装 [Skype](https://www.skype.com/zh-Hans/)<sup>EULA / cn / aur</sup>：

::: code-group

```sh [cn]
sudo pacman -S skypeforlinux-stable-bin
```

```sh [aur]
yay -S aur/skypeforlinux-stable-bin
```

```sh [cn（preview）]
sudo pacman -S skypeforlinux-preview-bin
```

```sh [aur（preview）]
yay -S aur/skypeforlinux-preview-bin
```

:::



### Discord

[Discord](https://discord.com/) 是一款专为社区设计的免费网络实时通话软件与数字发行平台，主要针对游戏玩家、教育人士及商业人士，用户之间可以在其中的聊天频道通过信息、图片、视频和音频进行互动。

安装 [Discord](https://archlinux.org/packages/extra/x86_64/discord/)：

```sh
sudo pacman -S discord
```



::: tip ℹ️ 提示

类似 Telegram，Discord 同样存在诸多不正当内容（包括但不限于种族歧视、色情内容等）。

请注意安全、保护好隐私、文明上网。
:::

### TeamSpeak 3

一款代替 `YY语音` `Discord` 等游戏语音聊天软件，有占用资源低、连接快捷、自带 Opus 音频解码器、无广告、全平台、语音加密传输、可自建服务器、可随意调节的“语音感应激活”功能告别通讯底噪和键盘噪音。

```sh
sudo pacman -S teamspeak3
```


::: tip ℹ️ 提示

1. [中文汉化](https://www.wevg.org/archives/fix-ts3-linux-plugin/) 没有目录就创建目录，脚本需要给执行权限

2. 直接 `/opt/teamspeak3/package_inst Chinese_Translation_zh-CN.ts3_translation`

3. 以上汉化 二选一

4. [新手指南](https://www.wevg.org/archives/how-to-use-teamspeak3/)  
   :::

## 🤝🏻 团队合作

### Slack

[Slack](https://slack.com/intl/zh-cn/features) 是一款基于云端运算的即时通讯软件。为团队和工作提供一个单一的平台。类似 Discord，也分有许多频道，通过频道组织工作。

安装 [Slack](https://aur.archlinux.org/packages/slack-desktop/)<sup>EULA / cn / aur</sup>：

::: code-group

```sh [cn]
sudo pacman -S slack-desktop
```

```sh [aur]
yay -S aur/slack-desktop
```

:::



## 📹 网络会议

### Zoom

安装 [Zoom](https://aur.archlinux.org/packages/zoom/)：

```sh
yay -S zoom
```



### 腾讯会议

安装 [`wemeet-bin`](https://aur.archlinux.org/packages/wemeet-bin)<sup>EULA / aur</sup>：

```sh
yay -S wemeet-bin
```



## ✉️ 电子邮件

### Thunderbird

Mozilla Thunderbird（雷鸟）是由 Mozilla 基金会研发的一款自由开源的跨平台电子邮件客户端、新闻阅读器、聚合器以及即时通信软件。

安装 [Thunderbird](https://archlinux.org/packages/extra/x86_64/thunderbird/)：

```sh
sudo pacman -S thunderbird
```



### KMail

KMail 是一款功能先进的电子邮件客户端，能与 GMail 等常用电子邮件服务提供商进行整合。KMail 支持各种电子邮件协议，包括 POP3、IMAP、Microsoft Exchange（EWS）等。

安装 [KMail](https://archlinux.org/packages/extra/x86_64/kmail/)：

```sh
sudo pacman -S kmail
```



### Mailspring

MailSpring 是一款界面简约、操作便捷、功能出众的邮件管理工具。MailSpring 官方版可以帮助用户管理多个邮箱，提高工作效率，同时还能够对重要事项进行提醒，并可以编辑自己的签名，给大家带来了不一样的感受和体验。其客户端在 github 上开源，但使用时需要注册 mailspring 账户。

KDE 用户使用 mailspring 前需要安装`gnome-keyring`

安装 [mailspring](https://github.com/Foundry376/Mailspring)<sup>EULA / cn / aur</sup>：

::: code-group

```sh [cn]
sudo pacman -S mailspring
```

```sh [aur]
yay -S aur/mailspring
```

:::

---

### App Common Daily (`docs/app/common/daily.md`)

# 常用软件

> ### 🌼 采菊东篱下，悠然见南山
>
> 本小节讨论日常常用的软件，包括浏览器、电子书阅读器、截图工具、网盘、图片查看器等等

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## 🏄🏻 网页浏览器

### Mozilla Firefox

::: tip ℹ️ 提示

在步骤 [6. 安装基础功能包](../../guide/rookie/desktop-env-and-app.md#_6-安装基础功能包) 中若已安装，则无需重复安装。

:::

火狐浏览器（Mozilla Firefox）是一个自由开源的网页浏览器，由 [Mozilla 基金会](https://foundation.mozilla.org/) 及其非营利子公司 [Mozilla 公司](https://www.mozilla.org/zh-CN/about/) 开发。

安装 [Firefox 浏览器](https://archlinux.org/packages/extra/x86_64/firefox/)：

```sh
sudo pacman -S firefox
```

同时还有 [Firefox 浏览器开发者版](https://www.mozilla.org/zh-CN/firefox/developer/)，使用此版本可获得最新功能、高速性能，以及打造开放 Web 所需的开发工具：

```sh
sudo pacman -S firefox-developer-edition
```



### Chromium

::: tip ℹ️ 提示

在步骤 [6. 安装基础功能包](../../guide/rookie/desktop-env-and-app.md#_6-安装基础功能包) 中若已安装，则无需重复安装。

:::

[Chromium](https://www.chromium.org/) 是 Google 为发展浏览器 Google Chrome 而发布的免费开源软件项目，以 [BSD 许可协议](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/LICENSE) 等数种许可发行并开源。Chromium 与 Google Chrome 共享大部分代码和功能。

安装 [Chromium](https://archlinux.org/packages/extra/x86_64/chromium/)：

```sh
sudo pacman -S chromium
```



::: tip ℹ️ 提示

Chromium 已不支持登录谷歌帐号进行同步。若有需要请使用 [Google Chrome](daily.md#google-chrome)。

:::

### Brave

Brave 是一个基于 Chromium 网页浏览器及其 Blink 排版引擎的自由开源的网页浏览器，由 Mozilla 项目的联合创始人、JavaScript 的创造者布兰登·艾克宣布。它宣称阻止网站跟踪器和移除侵入式网络广告。该浏览器也宣称通过与广告客户分享更少数据来改善网络隐私。

安装 [Brave](https://archlinux.org/packages/extra/x86_64/falkon/)<sup>cn / aur</sup>：

::: code-group

```sh [cn]
sudo pacman -S brave-bin
```

```sh [aur]
yay -S aur/brave-bin
```

```sh [aur (git)]
yay -S brave-git
```

:::



### Falkon

Falkon 是 KDE 开发的一款全新的 Qt 网络浏览器。它是一款轻量级的跨平台浏览器。这个项目当初仅仅作为教育项目。但是从一开始，Falkon 就成长为一款功能丰富的浏览器。

安装 [Falkon](https://archlinux.org/packages/extra/x86_64/falkon/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S falkon
```

```sh [aur (git)]
yay -S falkon-git
```

:::



### Tor 浏览器

[Tor 浏览器](https://www.torproject.org/zh-CN/) 是实现匿名通信的自由软件。其名源于“The Onion Router”（洋葱路由器）的英语缩写。用户可透过 Tor 浏览器接达由全球志愿者免费提供，包含 6000+ 个中继的覆盖网络，从而达至隐藏用户真实地址、避免网络监控及流量分析的目的。Tor 浏览器用户的互联网活动（包括浏览在线网站、帖子以及即时消息等通信形式）**相对**较难追踪。Tor 的设计原意在于保障用户的个人隐私，以及不受监控地进行秘密通信的自由和能力。

安装 [Tor 浏览器](https://aur.archlinux.org/packages/tor-browser/)<sup>cn / aur</sup>：

::: code-group

```sh [cn]
sudo pacman -S tor-browser
```

```sh [aur]
yay -S tor-browser
```

:::



### Mircrosoft Edge

Microsoft Edge（微软前沿浏览器）是一个由微软研发的浏览器，于 2015 年 1 月 21 日公布，2015 年 3 月 30 日公开发布第一个预览版。

安装 [Microsoft Edge](https://aur.archlinux.org/packages/microsoft-edge-stable-bin)<sup>EULA / aur</sup>：

::: code-group

```sh [aur（beta）]
yay -S microsoft-edge-beta-bin
```

```sh [aur（dev）]
yay -S microsoft-edge-dev-bin
```

:::



### Google Chrome

Google Chrome 是由 Google 开发的免费网页浏览器。Chrome 相应的开放源代码计划名为 Chromium，而 Google Chrome 本身是专有软件，未开放全部源代码。

::: tip ℹ️ 提示

ArchLinuxcn 中已经移除了 Google Chrome。

:::

安装 [Google Chrome](https://aur.archlinux.org/packages/google-chrome/)<sup>EULA / aur</sup>：

```sh
yay -S google-chrome
```



### Opera

Opera 是由 Opera 软件公司为个人电脑推出的网页浏览器。

Opera 软件公司为纳斯达克上市的挪威软件公司，现在已被中国商人周亚辉联合 [奇虎 360](https://www.360.cn/) 收购。

安装 [Opera](https://archlinux.org/packages/extra/x86_64/opera/)<sup>EULA / community / cn / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S opera
```

```sh [cn（beta）]
sudo pacman -S opera-beta
```

```sh [aur（beta）]
yay -S aur/opera-beta
```

:::



### Vivaldi

‎Vivaldi‎‎ 是韦瓦第技术（Vivaldi Technologies）公司开发的网页浏览器 ‎‎。由创始人谭咏文（前 ‎‎Opera 软件公司的首席执行官、创始人）与富田龙起（Tatsuki Tomita，前 Opera 软件公司资深副总经理）在离开 Opera 公司后另起炉灶新创办的浏览器 ‎‎。 ‎

‎Vivaldi 追求「为我们的朋友而打造」，旨在为原先 Opera 的忠实用户，如高阶技术专家、重度的互联网用户，提供原 Presto Opera 的诸多专属功能，例如自订面板、笔记、分页群组、单键快捷键等等。

安装 [‎Vivaldi](https://archlinux.org/packages/extra/x86_64/vivaldi/)<sup>EULA</sup>：

```sh
sudo pacman -S vivaldi
```



## 📖 PDF 以及电子书阅读器

PDF 可以使用上述的网页浏览器进行查看，也可使用专门的阅读器。而一些特别的电子书格式（如 azw3）则只能使用专门的电子书阅读器。

### Okular

Okular 是 KDE 开发的一款功能丰富、轻巧快速的跨平台文档阅读器。可以使用它来阅读 PDF 文档、漫画电子书、Epub 电子书，浏览图像，显示 Markdown 文档等。

安装 [Okular](https://archlinux.org/packages/extra/x86_64/okular/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S okular
```

```sh [aur (git)]
yay -S okular-git
```

:::



### calibre

calibre 是一款功能强大且易于使用的电子书管理器。支持 epub、txt、azw3 等文件格式。

安装 [calibre](https://archlinux.org/packages/extra/x86_64/calibre/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S calibre
```

```sh [aur (git)]
yay -S calibre-git
```

:::



## 📷 截图工具

### 火焰截图

[火焰截图（Flameshot）](https://github.com/flameshot-org/flameshot) 是一款强大但简单易用的屏幕截图软件。截图后可以进行快捷的编辑。

::: details 视频指南（视频不清晰请前往哔哩哔哩观看）

<div
  style="
    position: relative;
    padding: 30% 45%;
    margin-top: 32px;
  "
>
  <iframe
    style="position: absolute; width: 100%; height: 100%; left: 0; top: 0"
    src="//player.bilibili.com/player.html?aid=417575346&bvid=BV1hV411H7Sf&cid=322832461&page=1&as_wide=1&high_quality=1&danmaku=1&autoplay=0"
    scrolling="no"
    border="0"
    frameborder="no"
    framespacing="0"
    allowfullscreen="true"
  ></iframe>
</div>

:::

1. 安装 [火焰截图](https://archlinux.org/packages/extra/x86_64/flameshot/)<sup>extra / cn / aur</sup>：

   ::: code-group

   ```sh [extra]
   sudo pacman -S flameshot
   ```

   ```sh [cn (git)]
   sudo pacman -S flameshot-git
   ```

   ```sh [aur (git)]
   yay -S aur/flameshot-git
   ```

   :::

2. 配置快捷键：

   1. 打开 `系统设置` > 点击侧栏 `快捷键` > `自定义快捷键`

   2. 点击 `编辑` > `新建` > `全局快捷键` > `命令/URL：`

   3. 点击选项卡 `触发器` > 将 `快捷键` 设置为自定义快捷键：

   

   4. 点击选项卡 `动作` > 将 `命令/URL：` 设置为 `flameshot gui`：

   

### Spectacle

Spectacle 是 KDE 开发的用于抓取桌面截图的简单应用程序。它可以抓取整个桌面、单个显示器、当前活动窗口、鼠标所在的窗口或是屏幕上的一块矩形区域的图像。截取的图像可被打印、发送到其它应用程序进行处理、或是直接保存下来。

相比火焰截图可以准确的抓取单个窗口，但编辑功能没有火焰截图强大。

安装 [Spectacle](https://archlinux.org/packages/extra/x86_64/spectacle/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S spectacle
```

```sh [aur (git)]
yay -S spectacle-git
```

:::



## 💾 网盘存储

带有客户端的网盘可以使用 [MEGA](https://mega.io/start)、[百度网盘](https://pan.baidu.com/) 以及 [坚果云](https://www.jianguoyun.com/)。其它网盘如 [Microsoft OneDrive](https://www.microsoft.com/zh-cn/microsoft-365/onedrive/online-cloud-storage)、[Google 云端硬盘](https://www.google.com/intl/zh-CN/drive/) 直接使用网页版即可。

### MEGA

MEGA 是 Mega Limited 公司推出的一款云存储服务。2013 年 1 月 19 日在新西兰上线，该服务供应商广泛宣传其隐私性，所有文件在上传之前进行本地加密，提供 20 GB 的免费存储空间，付费账户最高存储空间可达 16 TB。

1. 安装 [MEGA](https://aur.archlinux.org/packages/megasync)<sup>EULA / aur</sup>：

   ::: code-group

   ```sh [cn]
   sudo pacman -S megasync
   ```

   ```sh [aur]
   yay -S aur/megasync
   ```

   :::

2. 根据提示登录账户以及配置同步文件夹后即可：

   

::: tip ℹ️ 提示

虽然该服务供应商广泛宣传其隐私性，但是否将数据存储在其服务器仍需用户判断：

- `2015` —— 7 月 1 日，MEGA 创始人金·达康（Kim Dotcom）在技术网站 Slashdot 表示，他将不信任 MEGA 服务，并声称该公司已经受到因犯有欺诈罪被通缉的中国投资者闫永明（中国吉林通化快大茂人，1969 年 6 月 15 日出生，曾为通化金马药业集团有限公司董事长，因涉嫌职务侵占犯罪被吉林省通化市公安局立案，2001 年 11 月逃亡新西兰，2005 年 8 月 22 日由国际刑警组织发布红色通缉令）的恶意收购
- `2016`
  - 8 月 23 日，闫永明与新西兰法院达成和解，需缴纳 4285 万新西兰币的财产，包括 Mega 公司 18.8%的股份
  - 11 月 12 日，在中央反腐败协调小组国际追逃追赃工作办公室的统筹协调下，经中新两国执法部门密切合作，潜逃海外 15 年之久的闫永明回国投案自首
- `2017` —— 1 月 12 日，闫永明返回新西兰

:::

### 百度网盘

安装 [百度网盘](https://aur.archlinux.org/packages/baidunetdisk-bin/)<sup>EULA / aur</sup>：

```sh
yay -S baidunetdisk-bin
```



### 坚果云

坚果云通过文件自动同步、共享、备份功能，为用户实现智能文件管理，提供高效办公解决方案。

坚果云是微软加速器云存储合作伙伴，IBM 全球创业企业扶持计划成员，安全稳定的服务着数百万企业用户，包括东风雷诺、郑州日产、上海通用、银河证券、中石油、中海油、阿里巴巴等大型企事业单位。

1. 安装 [坚果云实验版](https://aur.archlinux.org/packages/nutstore-experimental/)<sup>EULA / aur</sup>：

   ```sh
   yay -S nutstore-experimental
   ```

   ::: tip ℹ️ 提示

   [坚果云稳定版](https://aur.archlinux.org/packages/nutstore/)<sup>EULA / cn / aur</sup> 的界面存在问题，请使用坚果云实验版<sup>EULA / aur</sup>。

   :::

2. 类似 [MEGA](daily.md#mega)，根据提示登录账户以及配置同步文件夹后即可

## 🖼️ 图像查看器

除了 Gwenview，还有其它开源免费的优秀图片浏览器可供选择。

### Gwenview

::: tip ℹ️ 提示

在步骤 [6. 安装基础功能包](../../guide/rookie/desktop-env-and-app.md#_6-安装基础功能包) 中若已安装，则无需重复安装。

:::

Gwenview 是 KDE 出品的一款轻便易用的图像查看器，是浏览、显示多张图像时的理想工具。

安装 [Gwenview](https://archlinux.org/packages/extra/x86_64/gwenview/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S gwenview
```

```sh [aur (git)]
yay -S gwenview-git
```

:::



### nomacs

nomacs 是一个免费的开源图像查看器，支持多平台。可以使用它来查看所有常见的图像格式，包括 RAW 和 psd 图像。

安装 [nomacs](https://archlinux.org/packages/extra/x86_64/nomacs/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S nomacs
```

```sh [aur (git)]
yay -S nomacs-git
```

:::



::: tip ℹ️ 提示

可能需要在菜单栏 `编辑` > `设置` > 侧边栏 `一般` > `颜色设置` 中改变颜色以适应暗色模式：



:::

### Ristretto

Xfce 开发的图像查看器。相对来说更加简洁。

安装 [Ristretto](https://archlinux.org/packages/extra/x86_64/ristretto/)：

```sh
sudo pacman -S ristretto
```



### feh

> 🔗 相关链接：
>
> - [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Feh_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)

feh 是一款轻巧而功能强大的图像查看器，通过命令行操作，**还可用于管理缺少此类功能的独立窗口管理器的桌面壁纸**。

1. 安装 [feh](https://archlinux.org/packages/extra/x86_64/feh/)<sup>extra / aur</sup>。若需要读取 SVG 图像，则还需要安装 [`imagemagick`](https://archlinux.org/packages/extra/x86_64/imagemagick/)：

   ::: code-group

   ```sh [extra]
   sudo pacman -S feh imagemagick

   ```

   ```sh [aur (git)]
   yay -S feh-git imagemagick
   ```

   :::

2. 通过以下命令使用 feh。feh 是高度可配置的。有关选项的完整列表，请运行 `feh --help` 或 `man feh`：

   ```sh
   feh /path/of/pic # 查看图像
   feh --conversion-timeout 1 /path/of/svg # 查看 SVG 图像
   ```

### XnView MP

XnView MP 是一个免费的图像查看器，可以轻松打开和编辑照片文件。图像查看器支持所有主要图像格式（JPEG、TIFF、PNG、GIF、WEBP、PSD、JPEG2000、OpenEXR、camera RAW、HEIC、PDF、DNG、CR2）。

作为图像查看器，拥有诸如颜色调整、图像大小调整、裁剪、屏幕捕获、元数据编辑（IPTC、XMP）等功能。XnView MP 具有易于使用的类似浏览器的界面，允许您快速查看图像和照片，还可以进行图像管理。并且有批重命名、批转换器、重复图像查找、图像比较等功能，还可以创建联系表、幻灯片。

安装 [`XnView MP`](https://aur.archlinux.org/packages/xnviewmp)<sup>EULA / aur</sup>：

```sh
yay -S xnviewmp
```





### qimgv

qimgv 是一个轻量级的跨平台图像查看器，基于 Qt 开发。有可选的视频支持（使用mpv）。

安装 [`qimgv`](https://aur.archlinux.org/packages/qimgv)<sup>aur</sup>:

```sh
yay -S qimgv
```



## 🧰 实用工具

日常用到的各类小工具有很多实现，其中 [KDE 的套件](https://apps.kde.org/zh-cn/) 中就有很多，可以自行查询。

此处仅列出几个常用的小工具。

- [KCalc](https://archlinux.org/packages/extra/x86_64/kcalc/) —— 科学计算器

  ```sh
  sudo pacman -S kcalc
  ```

  

- [Kamoso](https://archlinux.org/packages/extra/x86_64/kamoso/) —— 相机

  ```sh
  sudo pacman -S kamoso
  ```

  

- [KTimer](https://archlinux.org/packages/extra/x86_64/ktimer/) —— 倒计时执行器

  ```sh
  sudo pacman -S ktimer
  ```

  

## 🍷 Wine

> 🔗 相关链接：
>
> - [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Wine_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)
> - [WineWiki](https://wiki.winehq.org/%E4%B8%BB%E9%A1%B5)

Wine 是类 UNIX 系统下运行 Windows 程序的“兼容层”，是正在持续开发中的自由软件。在 Wine 中运行的 Windows 程序，就如同运行原生 Linux 程序一样，不会有模拟器那样的严重性能问题。

::: warning ⚠️ 注意

Wine 不是沙箱。如果很重视安全，请使用虚拟机。

:::

1. 安装 [Wine](https://archlinux.org/packages/multilib/x86_64/wine/) 以及其它相关依赖：

   ```sh
   sudo pacman -S wine wine-mono wine_gecko wine-staging giflib lib32-giflib libpng lib32-libpng libldap lib32-libldap gnutls lib32-gnutls \
   mpg123 lib32-mpg123 openal lib32-openal v4l-utils lib32-v4l-utils libpulse lib32-libpulse libgpg-error \
   lib32-libgpg-error alsa-plugins lib32-alsa-plugins alsa-lib lib32-alsa-lib libjpeg-turbo lib32-libjpeg-turbo \
   sqlite lib32-sqlite libxcomposite lib32-libxcomposite libxinerama lib32-libgcrypt libgcrypt lib32-libxinerama \
   ncurses lib32-ncurses opencl-icd-loader lib32-opencl-icd-loader libxslt lib32-libxslt libva lib32-libva gtk3 \
   lib32-gtk3 gst-plugins-base-libs lib32-gst-plugins-base-libs vulkan-icd-loader lib32-vulkan-icd-loader
   ```

2. 通过以下命令配置 `Wine`。随后会弹出一个窗口，可对 Wine 进行配置。Wine 默认路径为 ~/.wine：

   ```sh
   winecfg
   ```

3. 通过以下命令运行简单的 Windows 应用：

   ```sh
   wine /path/of/xxx.exe
   ```

   

   ::: danger ☢️ 警告

   千万**不要**以 root 身份运行 Wine！

   :::

::: tip ℹ️ 提示

有关解决 Wine 字体显示异常请参考 [安装 Windows 字体](../../guide/advanced/optional-cfg-1.md#安装-windows-字体)。

:::

---

### App Common Media (`docs/app/common/media.md`)

---
sidebarDepth: 2
---

# 视频影音

> ### 🍵 采菊东篱下，悠然见南山
>
> 本小节讨论在 archlinux 上观看视频，聆听音乐等相关信息。

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## 🎬 音视频播放器

本地音视频播放一般使用 VLC 或 MPV，但也有很多其它优秀的开源音视频播放器。

### VLC

[VLC](https://www.videolan.org/vlc/) 是一款自由开源的跨平台多媒体播放器及框架，可播放大多数多媒体文件，以及 DVD、音频 CD、VCD 及各类流媒体协议。

安装 [`VLC`](https://archlinux.org/packages/extra/x86_64/vlc/)<sup>extra / cn / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S vlc
```

```sh [cn (git)]
sudo pacman -S vlc-git
```

```sh [aur（obs）]
yay -S vlc-luajit
```

```sh [aur (git)]
yay -S aur/vlc-git
```

:::



### mpv

[mpv](https://mpv.io/) 是一个自由免费的媒体播放器。它支持多种媒体文件格式、音频和视频编解码器以及字幕类型。相比 VLC 更加简洁。

安装 [`mpv`](https://archlinux.org/packages/extra/x86_64/mpv/)<sup>extra / cn / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S mpv
```

```sh [cn (git)]
sudo pacman -S mpv-git
```

```sh [aur (git)]
yay -S aur/mpv-git
```

:::



### Dragon Player

Dragon Player 是 KDE 开发的一个相比于功能来说更注重简洁的多媒体播放器。Dragon Player 做且只做一件事，就是播放多媒体文件。界面简单、减少干扰、立即播放文件。

安装 [`Dragon Player`](https://archlinux.org/packages/extra/x86_64/dragon/)：

```sh
sudo pacman -S dragon
```



### SMplayer

[SMPlayer](https://www.smplayer.info/) 是个适用于 Windows 和 Linux 的自由免费的媒体播放器，内置解码器，可以播放几乎所有格式的视频和音频文件。无需再安装任何外部解码器。只要安装了 SMPlayer，就能够播放所有的格式，不用再费事查找安装解码包。

1. 安装 [`SMplayer`](https://archlinux.org/packages/extra/x86_64/smplayer/)<sup>extra / cn / aur</sup>：

   ::: code-group

   ```sh [extra]
   sudo pacman -S smplayer
   ```

   ```sh [aur（svn）]
   yay -S smplayer-svn
   ```

   :::

2. 默认的外观不太美观，可选安装皮肤 [`papirus-smplayer-theme-git`](https://github.com/PapirusDevelopmentTeam/papirus-smplayer-theme)<sup>aur</sup>：

   ```sh
   yay -S papirus-smplayer-theme-git
   ```

3. 在设置中调整为下图即可：

   



### parole

Xfce 开发的基于 GStreamer 框架的现代媒体播放器。

安装 [`parole`](https://archlinux.org/packages/extra/x86_64/parole/)：

```sh
sudo pacman -S parole
```



### ZY Player

如果想收看在线影视资源等等，[ZY Player](https://aur.archlinux.org/packages/zy-player-bin/) 是一个很好的选择。

ZY Player 是一个简洁、免费、无广告的跨平台视频资源播放器，整合全网资源，甚至可以观看 📺 IPTV（需自行配置直播源）。

安装 [`ZY Player`](https://github.com/cuiocean/ZY-Player)<sup>aur</sup>：

```sh
yay -S zy-player-bin
```



## 🎵 音乐播放器

本地音乐播放可以使用上述的音视频播放器，也可以使用 DeaDBeeF（Linux 下的 [foobar2000](https://www.foobar2000.org/)<sup>EULA</sup>）等播放器。

在线音乐收听可以使用官方的网易云音乐或企鹅的 QQ 音乐，但在 Linux 下体验不佳，且很久没有更新了。显然这些企业是不会愿意向 Linux 桌面投放精力的。推荐使用维护到位的自由开源软件，它们一般是资源整合类型的第三方客户端，曲库较为完整。

::: warning ⚠️ 注意

近期多个网易云第三方客户端的 issues 都有反映封号问题，包括下文提到的 [`YesPlayMusic`](https://github.com/qier222/YesPlayMusic)<sup>aur</sup>，疑似覆盖范围包括所有使用开源网易云 api 的播放器。

请谨慎使用网易云第三方客户端，以免账号被风控。

:::

### DeaDBeeF

[DeaDBeeF](https://deadbeef.sourceforge.io/) 是一个自由开源（[GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)）模块化的**无损**音频播放器，用于 GNU/Linux、\*BSD、OpenSolaris、macOS 和其它类 UNIX 系统。

DeaDBeeF 可以播放各种音频格式，在它们之间进行转换，以几乎任何想要的方式自定义 UI，并使用许多额外的插件来扩展它。

安装 [`deadbeef`](https://aur.archlinux.org/packages/deadbeef)<sup>cn / aur</sup>：

::: code-group

```sh [cn]
sudo pacman -S deadbeef
```

```sh [cn (git)]
sudo pacman -S deadbeef-git
```

```sh [aur]
yay -S aur/deadbeef
```

```sh [aur (git)]
yay -S aur/deadbeef-git
```

:::



::: tip ℹ️ 提示

若音乐无法正常播放，请将菜单栏 `编辑` > `偏好设置` > 标签页 `声音` > `输出插件` 改为其它选项：



:::

### Juk

JuK 是 KDE 开发的一款音乐播放器和管理程序，支持 MP3、Ogg Vorbis 和 FLAC 等音频文件。它侧重于音乐管理功能，可以用它编辑音频文件的标签、管理音乐和播放列表。

安装 [`juk`](https://archlinux.org/packages/extra/x86_64/juk/)：

```sh
sudo pacman -S juk
```



### FeelUOwn

FeelUOwn 是一个稳定、用户友好以及高度可定制的音乐播放器。

#### 特性

- 稳定、易用：
  - 一键安装，各流行平台均有打包（如 Arch Linux, Windows, macOS 等）
  - 有各媒体资源平台的插件，充分且合理的利用全网免费资源（如网易云、QQ、Bilibili 等）
  - 基础功能完善，桌面歌词、资源智能替换、多音质选择、nowplaying 协议等
  - 核心模块有较好的测试覆盖、核心接口保持较好的向后兼容
- 可玩性强：
  - 提供基于 TCP 的交互控制协议
  - 基于文本的歌单，方便与朋友分享、设备之间同步
  - 支持基于 Python 的配置文件 `.fuorc`，类似 `.vimrc` 和 `.emacs`

安装 FeelUOwn：

```sh
yay -S feeluown
```

安装扩展（可选，按需安装）：

```sh
yay -S --asdeps feeluown-qqmusic
yay -S --asdeps feeluown-netease
yay -S --asdeps feeluown-kuwo
yay -S --asdeps feeluown-ytmusic
yay -S --asdeps feeluown-bilibili
```

[](https://www.bilibili.com/video/av46787694/)

### YesPlayMusic（推荐）

高颜值的第三方网易云播放器，显著的优点包括但不限于：

- ☑️ 使用 Vue.js 全家桶开发
- 🔴 网易云账号登录（扫码/手机/邮箱登录）
- 📺 支持 MV 播放
- 📃 支持歌词显示
- 📻 支持私人 FM / 每日推荐歌曲
- 🚫🤝 无任何社交功能
- 🌎 海外用户可直接播放（需要登录网易云账号）

安装 [`YesPlayMusic`](https://github.com/qier222/YesPlayMusic)<sup>aur</sup>：

```sh
yay -S yesplaymusic
```





### go-musicfox

go-musicfox 是用 Go 写的又一款网易云音乐命令行客户端，支持各种音质级别、UnblockNeteaseMusic、Last.fm、MPRIS 和 macOS 交互响应（睡眠暂停、蓝牙耳机连接断开响应和菜单栏控制等）等功能特性。

安装 [`go-musicfox`](https://github.com/go-musicfox/go-musicfox)<sup>aur/cn</sup>：

```sh
yay -S go-musicfox
```

安装完之后通过 `musicfox` 命令启动，快捷键可参考[官方 Readme](https://github.com/go-musicfox/go-musicfox/blob/master/README.md#%E5%BF%AB%E6%8D%B7%E9%94%AE)。



### Listen 1（推荐）

Listen 1 作为“老牌”的听歌软件可以搜索和播放来自网易云音乐、虾米、QQ 音乐、酷狗音乐、酷我音乐、Bilibili、咪咕音乐网站的歌曲，让你的曲库更全面。

安装 [`Listen 1`](https://aur.archlinux.org/packages/listen1-desktop-appimage/)<sup>aur</sup>：

```bash
yay -S listen1-desktop-appimage
```



### 网易云音乐

不推荐使用，建议使用上述第三方客户端。

网易和深度合作开发的客户端。已经很久没更新了，无法输入中文并且缩放有问题。

安装 [`netease-cloud-music`](https://aur.archlinux.org/packages/netease-cloud-music/)<sup>EULA / cn / aur</sup>：

::: code-group

```sh [cn]
sudo pacman -S netease-cloud-music
```

```sh [aur]
yay -S aur/netease-cloud-music
```

:::



### QQ 音乐

不推荐使用，建议使用上述第三方客户端。

基于 `deepin-wine5` 的 QQ 音乐 [`com.qq.music.deepin`](https://aur.archlinux.org/packages/com.qq.music.deepin/)<sup>EULA / aur</sup> 已无法下载，只能用官方的原生 QQ 音乐：

安装 [`qqmusic-bin`](https://aur.archlinux.org/packages/qqmusic-bin/)<sup>aur</sup>：

```sh
yay -S qqmusic-bin
```



### 网易云音乐(基于GTK4+Libadwaita)

这是一种在Linux 平台下基于 Rust + GTK4 开发的网易云音乐播放器

安装 [`netease-cloud-music-gtk4`](https://aur.archlinux.org/packages/netease-cloud-music-gtk4)<sup>/ cn / aur</sup>：

::: code-group

```sh [cn]
sudo pacman -S netease-cloud-music-gtk4
```

```sh [aur]
paru -S netease-cloud-music-gtk4
# 在未开启CN仓库的情况下依据原作者（gmg137）的参考命令执行
```

:::

---

### App Common Office (`docs/app/common/office.md`)

---
sidebarDepth: 2
---

# 办公软件

> ### ⏳ 莫等闲，白了少年头，空悲切！
>
> 本小节讨论工作上常用的软件，包括办公套件、Markdown 编辑器以及团队合作软件等。

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## 办公套件

办公套件可选国内常用的 WPS Office 以及自由开放的 LibreOffice。

### WPS Office

[WPS Office](https://www.wps.cn/) 是由 [金山软件](https://www.kingsoft.com/) 发布的一款办公软件，用于办公软件最常用的文字编辑、电子表格、演示文稿等功能。

安装 WPS Office（可选 [国内版](https://aur.archlinux.org/packages/wps-office-cn/)<sup>EULA / aur</sup> 或 [国际版](https://aur.archlinux.org/packages/wps-office/)<sup>EULA / aur</sup>）以及 [相关字体](https://aur.archlinux.org/packages/ttf-wps-fonts/)<sup>EULA / cn / aur</sup>：

::: code-group

```sh [cn (cn)]
yay -S wps-office-cn wps-office-mui-zh-cn ttf-wps-fonts freetype2-wps
```

```sh [cn]
sudo pacman -S wps-office ttf-wps-fonts libtiff5
```

```sh [aur (cn)]
yay -S wps-office-cn aur/ttf-wps-fonts aur/wps-office-mui-zh-cn aur/freetype2-wps
```

```sh [aur]
sudo pacman -S wps-office aur/ttf-wps-fonts aur/libtiff5
```

:::



::: tip ℹ️ 提示

WPS 可能会出现部分中文字体过粗的情况。文本看起来特别粗，标题、粗体文本几乎不可用。可以通过安装`freetype2-wps`<sup>aur</sup>解决。

```bash
yay -S freetype2-wps
```

WPS PDF 可能会出现无法导出 pdf 或者无法打开的情况，通过安装`libtiff5`即可解决。

```bash
yay -S libtiff5
```

:::

> 🔗 相关链接：
>
> - [ArchWiki 相关内容](<https://wiki.archlinux.org/title/WPS_Office_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)

### LibreOffice

[LibreOffice](https://zh-cn.libreoffice.org/) 是由 [文档基金会](https://www.documentfoundation.org/) 开发的自由及开放源代码的办公室套件。LibreOffice 是一款功能强大的办公软件，默认使用 ODF 开放文档格式（OpenDocument Format），并支持 \*.docx、\*.xlsx、\*.pptx 等其它格式。

它包含了 Writer、Calc、Impres、Draw、Base 以及 Math 等组件，可用于处理文本文档、电子表格、演示文稿、绘图、数据库管理以及公式编辑。

安装 [LibreOffice](https://archlinux.org/packages/extra/x86_64/libreoffice-still/) 以及 [其中文语言包](https://archlinux.org/packages/extra/any/libreoffice-still-zh-cn/)：

::: code-group

```sh [正式版]
sudo pacman -S libreoffice-still libreoffice-still-zh-cn
```

```sh [尝鲜版]
sudo pacman -S libreoffice-fresh libreoffice-fresh-zh-cn
```

:::



::: tip ℹ️ 提示

可能需要在菜单栏 `工具` > `选项` > `视图` 中调整 `图标样式` 以适应暗色模式：



:::

> 🔗 相关链接：
>
> - [ArchWiki 相关内容](<https://wiki.archlinux.org/title/LibreOffice_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)

### Foxit PDF Reader

[Foxit PDF Reader](https://www.foxitsoftware.com/products/pdf-reader/)<sup>EULA / aur</sup>是福建福昕软件开发股份有限公司推出的一款轻量级 PDF 编辑器，是目前笔者在 Linux 平台下使用过免费且最好用的 PDF 编辑器。Foxit PDF Reader 提供常规的 PDF 注释功能：段落高亮、区域高亮、下划线、波浪线、图形、删除线和备注等标记，也提供许多其他平台付费 PDF 编辑器提供的打字机、文本框、笔迹等轻量级 PDF 编辑。加载和保存 PDF 速度较 Libre Office Draw 快，打字机功能较 KDE Okular 支持非拉丁字符输入，是 PDF 笔记文档注释的好帮手。

安装[Foxit PDF Reader](https://aur.archlinux.org/packages/foxitreader/)<sup>EULA / aur</sup>:

```sh
yay -S foxitreader
```



## Markdown 编辑器

### Typora

[Typora](https://typora.io/) 是一款由 Abner Lee（上海人）开发的轻量级 Markdown 编辑器。

Typora 没有采用源代码和预览双栏显示的方式，而是采用所见即所得的编辑方式，实现了即时预览的功能，但也可切换至源代码编辑模式。在编辑时，除了通过传统的 Markdown 代码的方式来实现富文本之外，Typora 支持通过菜单栏或者鼠标右键选取命令的方式来实现富文本，也支持通过快捷键的方式插入。Typora 也支持通过以 TeX 的格式来插入行间公式和行内公式。在完成编辑后导出文件时，Typora 支持以 PDF 或 Html 的形式导出，如果安装了 Pandoc，也能够以 Word、RTF、MediaWiki、LaTeX 等形式导出。

安装 [Typora](https://aur.archlinux.org/packages/typora/)<sup>EULA / cn / aur</sup> 以及 [Pandoc](https://archlinux.org/packages/extra/x86_64/pandoc/)：

::: code-group

```sh [cn]
sudo pacman -S typora pandoc
```

```sh [aur]
yay -S aur/typora pandoc
```

:::

值得注意的是，目前 typora 软件已经开始收费。如果有能力购买的话可以进行购买。对于囊中羞涩的学生党或其他不愿购买的用户，我们可以选择使用 typora 的最后一个免费版本（注意：不是盗版），安装方式如下：

```sh
yay -S typora-free
```



### VNote

[VNote](https://vnotex.github.io/vnote/zh_cn/#!index.md) 是一款跨平台开源自由的 Markdown 笔记软件。VNote 的目标是做一个带有舒适 Markdown 编辑体验的笔记软件，或者带有强大文件管理功能的 Markdown 编辑器。

VNote 借鉴了程序员日常使用的代码编辑器的很多优点，特别是 Vim 的很多优秀思想，尽力成为一款更懂程序员和 Markdown 的笔记软件。

Markdown 有着天生的编辑和阅读的割裂感。当前主流的处理方式主要有三种：

- 单纯按纯文本处理，代表软件是为知笔记，其缺点是只有黑压压的文字
- 双边实时预览，左侧编辑模式，右侧实时预览阅读效果，代表软件就很多了，其缺点是仍然割裂，而且浪费空间。现在如果一个软件还采用双边实时预览来编辑 Markdown，那基本是拿不出手了
- 类富文本实时渲染模式，代表软件是 Typora，其缺点是矫枉过正，和 Markdown 的设计理念背道而驰

VNote 采用的是一种折中的方案——语法高亮和原地预览。通过精心的语法高亮以及图片原地预览，希望能在保证 Markdown 简洁的前提下，尽可能帮助用户掌握文章信息和脉络。

安装 [VNote](https://aur.archlinux.org/packages/vnote3-git/)<sup>aur</sup>：

```sh
yay -S vnote3-git
```



### Marktext



[Marktext](https://github.com/marktext/marktext) 是一个简单而优雅的开源 Markdown 编辑器，专注于速度和可用性，使用 **MIT License** 开源。和 Typora 一样，Marktext 亦是 Electron 应用，目前在 Github 上有 40k+ Stars 。

Marktext 常常被人视作 Typora 的替代品。事实上，论易用性， Marktext 在追赶 Typora 的过程上还有很长的一段路要走。

> 摘自 README ：
>
> 如上所述，**MarkText**是完全免费和开源的，并且将永远开源。我们希望所有 Markdown 爱好者贡献自己的代码，帮助将**MarkText**开发成流行的 Markdown 编辑器。
>
> Markdown 编辑器有很多，并且都有各自的优点，有些具有其他功能而没有的功能。满足每个 Markdown 用户的需求是很困难的，但我们希望**MarkText**能够尽可能满足每个 Markdown 用户。虽然最新的**MarkText**还不够完美，但我们会尽力做到最好。

在 AUR 中，有四个关于 Marktext 的包： `marktext`, `marktext-bin`, `marktext-git`  和  `marktext-appimage` 。

为了减少维护成本，同时尽量避免 appimage 对性能的影响，我们从 AUR 安装 marktext -bin：

```bash
yay -S marktext-bin
```

::: tip ℹ️ 提示

marktext-git 在 `archlinuxcn` 提供，但是其所依赖的 electron17 需要自行从 AUR 安装。

```bash
yay -S electron17 #或者是 electron17-bin
sudo pacman -S marktext-git
```

:::

### Visual Studio Code



VS Code 在担任代码编辑的能力之外，亦可成为 Markdown 编辑器。毕竟，web 能做到的，VS Code 的扩展就能做到。下面推荐几个插件。

- Markdown All in One Markdown 一揽子插件

- Markdown Preview Enhanced 非常强大 [查看它提供的众多 feature](https://shd101wyy.github.io/markdown-preview-enhanced/#/zh-cn/)

- Word Count CJK 统计字数

常用快捷键（ From Markdown Preview Enhanced）

| 快捷键                      | 功能              |
| --------------------------- | ----------------- |
| cmd-k v or ctrl-k v         | 在侧边栏打开预览  |
| cmd-shift-v or ctrl-shift-v | 打开预览          |
| ctrl-shift-s                | 同步预览/源文档   |
| shift-enter                 | 检查 Markdown     |
| ctrl-shift-enter            | 检查所有 Markdown |
| esc                         | 打开侧边目录      |

### Joplin

[Joplin](https://joplinapp.org/) 是一款免费、开源的笔记和待办事项应用程序，可以处理大量整理到笔记本中的笔记。笔记可以搜索，可以直接从应用程序或从自己的文本编辑器中复制、标记和修改。

笔记支持“端到端”的数据加密 (需要手动开启)，可以与各种目标同步，包括文件系统（例如网络目录）、Nextcloud、Dropbox、OneDrive 或 WebDAV。同步笔记时，笔记本、标签和其他元数据都会保存到纯文本文件中，便于检查、备份和移动。

Joplin 桌面客户端支持插件拓展，在 [Firefox](https://addons.mozilla.org/firefox/addon/joplin-web-clipper/) 和 [Chrome](https://chrome.google.com/webstore/detail/joplin-web-clipper/alofnhikmmkdbbbgpnglcpdollgjjfek) 浏览器也有 Web Clipper 可用于保存网页和浏览器截图。

安装 [Joplin](https://aur.archlinux.org/packages/joplin-desktop/)<sup>aur</sup>：

```sh
sudo pacman -S joplin-desktop
```



::: tip ℹ️ 提示

[Joplin](https://aur.archlinux.org/packages/joplin/) 也提供了 cli 版本,需要搭配终端文本编辑器使用。

详情请参阅[官方文档](https://joplinapp.org/help/apps/terminal)

```sh
sudo pacman -S joplin
```

:::

### Obsidian

[**Obsidian**](https://obsidian.md/)因为他支持在笔记中创建双向链接的功能在众多 mkdown 编辑器中脱颖而出，这款闭源软件对个人用户是免费开放的，它同时还拥有一个活跃的社区，庞大的第三方插件库和主题库让 obsidian 拥有了无限可能。同时适配所有常见平台，同步服务需要付费。

obsidian 同时内置图谱视图，这有助你将知识连接起来形成网络。同时也提供画布



<center> 官网预览图 </center>

你可以通过 yay 安装也可以通过官网安装。

```shell
sudo yay -S obsidian
```

如果你在 wayland 下无法使用 fcitx5 输入法，可以尝试添加运行时参数`--enable-wayland-ime`, 这个参数最后会传递给 electron,也就是这款应用的开发框架。

最后推荐一些第三方插件：

- commander: 自定义工具栏按钮...
- editing toolbar: 增加像 word 编辑拦一样的 toolbar，可自定义...
- mousewheel image zoom: 滚轮调整图片大小
- excalidraw: 思维导图...

---

### App Common Play (`docs/app/common/play.md`)

---
sidebarDepth: 2
---

# 游戏娱乐

> ### 🕹️ 人生得意须尽欢，莫使金樽空对月
>
> 本小节讨论如何在 archlinux 上 👾 玩游戏以及相关的信息，如游戏手柄、管理外配的 RGB 光效等。

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

::: tip ℹ️ 提示

阅读本章前请确认已安装好显卡驱动，否则请先参阅章节 [显卡驱动](../../guide/rookie/graphic-driver.md) 完成显卡驱动的安装。

:::

## 🚂 Steam

<p class="shields normal-img-p">
  <a
    href="https://steamcommunity.com/id/ice-kylin/"
    target="_blank"
    rel="noopener noreferrer"
    ><img
      alt="mySteamFriend"
      src="https://img.shields.io/badge/dynamic/json?label=Steam%20Friends&amp;query=%24.data.totalSubs&amp;url=https%3A%2F%2Fapi.spencerwoo.com%2Fsubstats%2F%3Fsource%3DsteamFriends%26queryKey%3D76561198392223813&amp;logo=steam&amp;color=0b1a37&amp;labelColor=134375&amp;longCache=true"
  /></a>
</p>

> 🔗 相关链接：
>
> - [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Steam_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)

::: tip ℹ️ 提示

在步骤 [6. 安装基础功能包](../../guide/rookie/desktop-env-and-app.md#_6-安装基础功能包) 中若已安装，则无需重复安装。

:::

[Steam](https://store.steampowered.com/) 是 [维尔福公司（Valve）](https://www.valvesoftware.com/zh-cn/) 推出的著名游戏分发平台。在 Steam 上购买并安装游戏不仅仅是支持正版的做法，更是简化了游玩流程、节省了时间。

2018 年 8 月 22 日，Steam [宣布](https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561) 要给 Steam Play 增加一个新组件 Proton，用于支持在 Linux 平台上玩 Windows 的游戏，这个组件是 Wine 的一个分支。经过这些年的发展，体验已经很不错了。关于非 Linux 平台原生的游戏，通过 Steam Play 运行的兼容性列表可在 [ProtonDB](https://www.protondb.com/) 查询。

1. 安装 [Steam](https://archlinux.org/packages/multilib/x86_64/steam/)<sup>EULA</sup>：

安装时需要注意选择显卡所对应的 vulkan，i+n 选择 vulkan-intel，amd 选择 amdvlk

```sh
sudo pacman -S steam
```



2. 为了能够安装 Windows 下的游戏，还需要在菜单栏 `查看` > `设置` > 侧边栏 `Steam Play` > 勾选 `为所有其他产品启用 Steam Play`，在 `运行其他产品时使用` 中选择 `Proton Experimental`（最新版本）：

   

   随后即可安装 Windows 平台上的游戏，Steam 会自动下载并安装相关组件：

   

::: tip ℹ️ 提示

如果某些游戏启动或者游玩有问题，可以用终端使用 `steam` 命令启动 Steam 客户端，并观察游戏崩溃时的终端报错。一般都是缺少某种依赖造成的，可以根据具体情况自行安装依赖。

同时，ArchWiki 也提供了一个 [查错页面](https://wiki.archlinux.org/title/Steam/Game-specific_troubleshooting)，记录了一些游戏问题的解决方式。

:::

::: tip ℹ️ 提示

此外还有官方 Proton 的派生版本，如 [Proton GE](https://github.com/GloriousEggroll/proton-ge-custom)。可以支持一些额外的，官方暂不支持或支持不完善的游戏。

:::

::: tip ℹ️ 提示

可以在[protondb](https://www.protondb.com/)查看游戏在 linux 的支持情况（如是否可游玩，运行所需要的基本设置等等）

:::

## 👾 Lutris

[Lutris](https://lutris.net/) 是 Linux 上的开源游戏平台。可以使用 Lutris 安装、移除、配置、启动和管理游戏。它可以在一个单一界面中管理的 Linux 游戏、Windows 游戏、仿真控制台游戏和浏览器游戏。它还包含社区编写的安装脚本，使得游戏的安装过程更加简单。

Lutris 支持超过 20 个模拟器并且提供了从七十年代到现在的大多数游戏系统。目前支持的游戏系统包括但不限于：

::: details 支持列表

- Linux 原生
- Windows
- Steam（Linux 和 Windows）
- MS-DOS
- 街机
- Amiga 电脑
- Atari 8 和 16 位计算机和控制器
- 浏览器（Flash 或者 HTML5 游戏）
- Commmodore 8 位计算机
- 基于 SCUMM 的游戏和其它点击式冒险游戏
- Magnavox Odyssey²、Videopac+
- Mattel Intellivision
- NEC PC-Engine Turbographx 16、Supergraphx、PC-FX
- Nintendo NES、SNES、Game Boy、Game Boy Advance、DS
- Game Cube 和 Wii
- Sega Master Sytem、Game Gear、Genesis、Dreamcast
- SNK Neo Geo、Neo Geo Pocket
- Sony PlayStation
- Sony PlayStation 2
- Sony PSP

:::

1. 安装 [Lutris](https://archlinux.org/packages/extra/any/lutris/)<sup>extra / aur</sup>：

   ::: code-group

   ```sh [extra]
   sudo pacman -S lutris
   ```

   ```sh [aur]
   yay -S aur/lutris
   ```

   ```sh [aur (git)]
   yay -S lutris-git
   ```

   :::

2. 参考 [🍷 Wine](daily.md#🍷-wine) 安装 Wine

3. 登录 [Lutris 官方网站](https://lutris.net/) > 在右上角 🔍 搜索框中搜索你想玩的游戏 > 进入搜索到的游戏页面后，可以看到在相应版本右侧有一个 `Install` 按钮，点击后即可拉起 Lutris 进行安装

   ::: tip ℹ️ 提示

   还应仔细阅读相同位置下方的安装说明。

   :::

## 🍷 原生 Wine

通过原生 Wine 也可运行简单的 Windows 小游戏，但是很多情况下需要自行处理 Windows 下的依赖问题。常用的工具是 [Winetricks](https://archlinux.org/packages/multilib/x86_64/winetricks/)。但是这种方式费时费力，只运行无需处理依赖的小游戏或者 GalGame 还好。

详细步骤请参阅 [🍷 Wine](daily.md#🍷-wine)。

## ⛏️ 我的世界

> 🔗 相关链接：
>
> - [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Minecraft_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)

我的世界（Minecraft）是一个关于击毁和放置方块的游戏。游戏一开始玩家的主要目的是搭建各种结构使自己免遭夜晚出没的怪物的攻击并生存下来，但随着游戏的进行，玩家们可以合作创造出一些不可思议的、富有想象力的东西。

1. 安装 [Minecraft Launcher（我的世界官服启动器）](https://aur.archlinux.org/packages/minecraft-launcher/)<sup>EULA / cn / aur</sup>：

   ::: code-group

   ```sh [cn]
   sudo pacman -S minecraft-launcher
   ```

   ```sh [aur]
   yay -S aur/minecraft-launcher
   ```

   :::

   ::::: tip ℹ️ 提示

   除了官方启动器，还有第三方启动器 [HMCL（Hello Minecraft! Launcher）](https://hmcl.huangyuhui.net/)，支持模组管理、游戏定制、自动安装（Forge、LiteLoader 和 OptiFine）、模组包创建、UI 定制等。同时，国产第三方启动器如 hmcl 一般支持使用国内镜像源下载游戏，而非使用在国内访问不稳定的官方源下载游戏。

   安装 [HMCL](https://aur.archlinux.org/packages/hmcl/)<sup>cn / aur</sup>：

   ::: code-group

   ```sh [cn]
   sudo pacman -S hmcl
   ```

   ```sh [aur]
   yay -S aur/hmcl
   ```

   :::

   出于安全性的考虑，hmcl 仅在官方提供的构建版本才会包含微软登录功能。为了登陆正版账户，我们可以使用[hmcl-bin](https://aur.archlinux.org/packages/hmcl-bin)<sup>aur</sup>作为启动器：

   ```sh [aur]
   yay -S hmcl-bin
   ```

   :::::

​ 使用[hmcl-bin](https://aur.archlinux.org/packages/hmcl-bin)<sup>aur</sup>在让我们获取良好的官方支持以外，还能够让其自身使用系统的 java-openjfx 包，符合「低耦合、高内聚」的软件工程原则。

2. 打开 `Minecraft Launcher` > 根据提示登录帐号并下载主程序后即可畅玩：

   

   

### Minecraft 服务器

1. 安装管理脚本与服务端文件本体
   <sup>EULA / aur</sup>：

   ::: code-group

   ```sh[Java 版]
   yay -S minecraft-server
   ```

   ```sh[基岩版]
   yay -S minecraft-bedrock-server
   ```

   :::

2. 启动服务端

   手动启动服务端：

   ```sh
   minecraftd start
   ```

   设为开机自启：

   ```sh
   systemctl enable minecraftd
   ```

3. 同意 EULA

   修改 `/srv/minecraft/eula.txt`，将其中内容改为：

   ```text
   eula=true
   ```

4. 再次启动服务器

   这次你会发现，启动成功了。

5. 调整服务器

   通过编辑`/etc/conf.d/minecraft`来做一些小的调整 (比如：最大内存，线程数之类的)。

6. 命令介绍
   - `minecraftd start`：启动服务器。
   - `minecraftd restart`：重启服务器。
   - `minecraftd console`：进入服务器控制台，本质是 tmux，所以按`Ctrl + B`再按`D`来退出。你也可以直接在这里输入游戏中的命令。
   - `minecraftd stop`：停止服务器。
   - `minecraftd status`：显示服务器状态统计信息。
   - `minecraftd backup`：备份服务器存档，只能存储 10 个。
   - `minecraftd restore`：从备份恢复服务器文件。

::::: tip ℹ️ 提示

使用`MCSManager`的方式，由于其文档已经很完善，此处不再介绍。

:::::

## 🎮 游戏手柄

一般情况下手柄通过数据线连接计算机即可直接使用。支持无线的手柄（DUALSHOCK® 3、DUALSHOCK® 4、Xbox 360、Xbox One、8BitDo 等）也可以通过蓝牙直接连接，无需额外操作。

### Xbox 无线适配器

虽然无线手柄一般情况下可以通过蓝牙直连，但是通常这样会有较大的延迟。推荐使用 [Xbox 无线适配器](https://www.microsoftstore.com.cn/accessories/microsoft-xbox-wireless-adapter) 以获得近乎有线的低延迟体验。

为了在 archlinux 下使用 Xbox 无线适配器，需要安装第三方开源驱动 [xow](https://github.com/medusalix/xow)。

1. 安装 [xow](https://aur.archlinux.org/packages/xow-git/)<sup>cn / aur</sup>：

   ::: code-group

   ```sh [cn (git)]
   sudo pacman -S xow-git
   ```

   ```sh [aur]
   yay -S xow
   ```

   ```sh [aur (git)]
   yay -S aur/xow-git
   ```

   :::

2. 启动 `xcow` 服务：

   ```sh
   sudo systemctl enable xow.service
   ```

3. 重启计算机，插入 Xbox 无线适配器并和 🕹️ Xbox 手柄配对即可

实际体验和 Windows 下并无差异。对延迟敏感的音游（如 [喵斯快跑](https://store.steampowered.com/app/774171/Muse_Dash/)）在游戏设置中微调偏移值即可。

## 🎛️ 性能监控

类似 Windows 下的 [微星 Afterburner](https://cn.msi.com/Landing/afterburner/graphics-cards)<sup>EULA</sup> 性能显示的部分，Linux 上也有一款同类软件可以监控游戏中的电脑性能（CPU 占用率、帧数等等），名为 [MangoHud](https://github.com/flightlessmango/MangoHud)。

1. 安装 [MangoHud](https://aur.archlinux.org/pkgbase/mangohud/)<sup>extra / aur</sup>：

   ::: code-group

   ```sh [extra]
   sudo pacman -S mangohud lib32-mangohud
   ```

   ```sh [aur (git)]
   yay -S mangohud-git lib32-mangohud-git
   ```

   :::

2. 通过以下方法使用 MangoHud：

   - 通用方法

     在启动的游戏前面添加 `mangohud` 前缀：

     ```sh
     mangohud game_command
     ```

   - Steam

     对于 Steam 游戏，在 Steam 库中右键游戏封面 > 点击 `属性...` > 侧边栏 `通用` > 在 `启动选项` 中添加 `MANGOHUD=1 %command%`：

     

   - Lutris

     对于 Lutris 游戏，点击右上角的 `更多按钮`（三个点） > 点击 `System preferences`（系统设置） > 选项卡 `System preferences`（系统选项） > 勾选 `Show advanced options`（显示高级选项）> 在 `Command prefix`（命令前缀）中添加 `mangohud`：

     



::: tip ℹ️ 提示

部分游戏可能不支持 MangoHud。

:::

## 🔥 性能提升

在游戏之前，如果有强烈的性能需要，可先确保 CPU 处于性能模式，可采取两种方式，分别为使用[GameMode](https://github.com/FeralInteractive/gamemode)和手动控制

自动方式

1. 安装[GameMode](https://archlinux.org/packages/extra/x86_64/gamemode/)

   ```sh
   # 安装配置文件
   sudo pacman -S meson systemd git dbus libinih
   # 安装gamemode
   sudo pacman -S gamemode lib32-gamemode
   ```

2. 进行配置，配置模板可以参考[此处](https://github.com/FeralInteractive/gamemode/blob/master/example/gamemode.ini)

   ```sh
   # 进入下载配置文件的文件夹
   sudo cp gamemode.ini ~/.config/gamemode.ini
   # 注意：需要将当前用户名添加到gamemode用户组
   sudo usermod -aG gamemode username
   ```

3. 进行测试，运行`gamemoded -t`

   ```sh
   # 有可能这个测试会失败，可以不用理会
   gamemoded -t
   ```

   ::: tip ℹ️ 在 steam 中使用

   在 steam 的启动选项设置`gamemoderun %command%`,即可以 gamemode 启动游戏，gamemode 会自动进行防熄屏设置，更多设置（如显卡自动超频）请看官方文档！

   如果是配合 i+n 卡使用，可以在`/etc/environment`中设置`GAMEMODERUNEXEC=prime-run`，在使用 gamemode 启动游戏时会自动调用独显运行。

   :::

手动方式

1. 执行以下命令使电源处于 `High Performance` 模式：

   ```sh
   echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
   ```

   ::: tip ℹ️ 提示

   此模式会让 CPU 处于最高性能状态，风扇狂转，如果散热撑不住甚至会降频，得不偿失。请斟酌使用。

   :::

2. 如果希望将设置改回 `Power Save` 模式，那么只需要执行以下命令即可：

   ```sh
   echo powersave | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
   ```

## 🚀 网游加速

对于在 Linux 上玩网游，网络加速一直是一个难题，尤其是在玩一些外服网游的时候。这里提供一些在 Linux 下对网游加速的思路：

- 一些 ✈️ 场会提供网游游戏节点，这些节点专门为游戏优化，限制流量并且提高倍率，一般可以得到较好的加速效果。在 Linux 中配合 [透明代理](../../guide/rookie/transparent.md)，同时开启对 UDP 流量的代理加速，即可以得到优化网游网速的效果
- 购买内置市面上内置或可安装常见的网游加速器插件的中高端 [路由器](https://uu.163.com/router/crossover.html)（似乎确凿只能加速主机）

## 🐧 Fsync 内核

维尔福公司发布了一个可以帮助提升大量多线程应用运行帧率的特殊内核补丁。这对改善游戏性能有很大帮助。简单的方法是更换为 [linux-zen](https://archlinux.org/packages/extra/x86_64/linux-zen/) 内核，其从 5.2 版本开始已包括 Fsync 补丁。

详细步骤请参阅 [🐧 更换可选内核](../../guide/advanced/optional-cfg-2.md#🐧-更换可选内核)。

## 🌈 RGB 光污染

通过 [OpenRGB](https://openrgb.org/)，无论是键盘、鼠标、CPU 风扇、AIO，还是其它连接的外围设备或组件，都可以统一进行 RGB 灯光控制。

1. 安装 [OpenRGB](https://aur.archlinux.org/packages/openrgb/)<sup>cn / aur</sup>：

   ::: code-group

   ```sh [cn]
   sudo pacman -S openrgb
   sudo pacman -S openrazer-driver-dkms # 雷蛇用户需要安装
   ```

   ```sh [aur]
   yay -S aur/openrgb
   sudo pacman -S openrazer-driver-dkms # 雷蛇用户需要安装
   ```

   ```sh [aur (git)]
   yay -S openrgb-git
   yay -S openrazer-driver-dkms-git # 雷蛇用户需要安装
   ```

   :::

2. 为了让内核能够识别到设备文件，需要下载 [60-openrgb.rules](https://gitlab.com/CalcProgrammer1/OpenRGB/-/blob/master/60-openrgb.rules)，并将它复制到 `/etc/udev/rules.d` 文件夹下：

   ```sh
   sudo cp /path/to/60-openrgb.rules /etc/udev/rules.d
   ls -ahl /etc/udev/rules.d # 复查一下
   ```

   

3. 重启计算机或者通过以下命令重新载入 udev 规则（`.rules` 文件）：

   ```sh
   sudo udevadm control --reload-rules
   sudo udevadm trigger # 强制内核触发设备事件，主要用于重放内核初始化过程中的冷插（coldplug）设备事件
   ```

   

4. 若显卡、内存条或者主板等带有 RGB 需要控制，则还需要载入额外的驱动：

   ::: code-group

   ```sh [Intel]
   sudo modprobe i2c-dev # 显卡、内存条
   sudo modprobe i2c-i801 # 芯片组
   ```

   ```sh [AMD]
   sudo modprobe i2c-dev # 显卡、内存条
   sudo modprobe i2c-piix4 # 芯片组
   ```

   :::

   

5. 为了验证驱动载入情况，还需要安装 [I<sup>2</sup>C Tools](https://archlinux.org/packages/extra/x86_64/i2c-tools/)<sup>extra / aur</sup>：

   ::: code-group

   ```sh [extra]
   sudo pacman -S i2c-tools
   ```

   ```sh [aur (git)]
   yay -S i2c-tools-git
   ```

   :::

   

6. 验证驱动载入情况：

   ```sh
   sudo i2cdetect -l
   ```

   查看输出是否带有以下字段：

   - `nvkm` 字段 —— 带有光污染的 NVIDIA 显卡
   - `PIIX4` 字段 —— AMD 芯片组
   - `I801` 字段 —— Intel 芯片组

7. 打开 `OpenRGB`，将自动检测支持的外设，然后便可以进行灯光控制了

---

> 📔 本节参考资料：
>
> - [在 Linux 上使用 Lutries 管理你的游戏](https://linux.cn/article-10200-1.html)

---

### App Common Remote (`docs/app/common/remote.md`)

# 远程连接

> ### 🔗 蒹葭苍苍，白露为霜
>
> 这一小节讨论如何在 archlinux 上远程连接另外的计算机以及如何远程连接运行 archlinux 的计算机。

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## RealVNC

RealVNC 是一家提供远程访问软件的公司，成立于 2002 年。该软件由服务器(VNC 服务器，英语：VNC Server)和客户端(VNC 查看器，英语：VNC Viewer)组成，该软件通过 VNC 协议来远程控制另一台计算机的屏幕[1]。

```sh
sudo pacman -S realvnc-vnc-server
```

启动与开机设置

```sh
sudo systemctl start vncserver-x11-serviced
sudo systemctl enable vncserver-x11-serviced
```

::: tip ℹ️ 提示  
一般情况下以上设置就已经能够让 realvnc 比较完美地在 arch 下运行了，然后在菜单栏点击 realvnc 图标进行初始化运行。  
:::

---

### App Exclusive Audio (`docs/app/exclusive/audio.md`)

---
sidebarDepth: 2
---

# 音频制作

> ### 🎵 此曲只应天上有，人间能得几回闻
>
> 本小节讨论如何在 archlinux 上制作音乐、编辑音频等信息。

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## 🎚️ 音频编辑

### Ardour

[Ardour](https://ardour.org/) 是一款自由开源的让你可以在 Linux 上录音、编辑和混音的软件。

安装 [Ardour](https://archlinux.org/packages/extra/x86_64/ardour/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S ardour
```

```sh [aur (git)]
yay -S ardour-git
```

:::



### Kwave

[Kwave](https://apps.kde.org/zh-cn/kwave/) 是 KDE 开发的一款自由开源的音频编辑软件，可以录制、播放、导入和编辑许多音频文件，包括多声道文件。

安装 [Kwave](https://archlinux.org/packages/extra/x86_64/kwave/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S kwave
```

```sh [aur (git)]
yay -S kwave-git
```

:::



### Audacity

[Audacity](https://www.audacityteam.org/) 是一款跨平台的自由开源音频编辑软件，用于录音和编辑音频。2021 年 4 月 30 日，Audacity 被 [Muse Group](https://mu.se/) 收购。

安装 [Audacity](https://archlinux.org/packages/extra/x86_64/audacity/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S audacity
```

```sh [aur (git)]
yay -S audacity-git
```

:::



::: tip ℹ️ 提示

Audacity 被 Muse Group 收购后，根据 [相关报道](https://fosspost.org/audacity-is-now-a-spyware/)，其隐私政策的变化显示该工具正在收集其用户的数据并与其它公司共享。

在各大开源社区中出现了许多愤怒的回应，[GitHub](https://github.com/audacity/audacity/issues/1213) 和 [Reddit](https://www.reddit.com/r/linux/comments/od3h8b/audacity_may_collect_data_necessary_for_law/) 上的用户纷纷呼吁尽快派生（Fork）该软件（已经有了）。

若对此有关切，可以使用派生的版本 [`audiocity-git`](https://aur.archlinux.org/packages/audiocity-git/)<sup>aur</sup>（功能没有改动）：

```sh
yay -S audiocity-git
```

或者 [audacium](https://aur.archlinux.org/packages/audacium-git/)<sup>aur</sup>（添加了新特性）：

```sh
yay -S audacium-git
```

:::

### VCV Rack

[VCV Rack](https://vcvrack.com/) 是一款开源可视化、模块化的音响合成器。

1. 安装 [VCV Rack](https://archlinux.org/packages/extra/x86_64/audacity/)<sup>aur</sup>：

   ::: code-group

   ```sh [aur (bin)]
   sudo pacman -S vcvrack-bin
   ```

   ```sh [aur]
   sudo pacman -S vcvrack
   ```

   ```sh [aur (git)]
   yay -S vcvrack-git
   ```

   :::

2. 在终端通过 `vcvrack` 命令启动 VCV Rack：

   

## 🎛️ 唱片骑师

### Mixxx

[Mixxx](https://mixxx.org/) 集成了 DJ 使用数字音乐文件进行创造性现场混音所需的工具。

安装 [Mixxx](https://archlinux.org/packages/extra/x86_64/mixxx/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S mixxx
```

```sh [aur (git)]
yay -S mixxx-git
```

:::



## 🎼 编曲软件

### LMMS

[LMMS](https://lmms.io/) 是免费自由开源并且跨平台的作曲工具。通过制作旋律和节拍，合成和混合音频，安排音频片段等方法创作音乐。

安装 [LMMS](https://archlinux.org/packages/extra/x86_64/lmms/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S lmms
```

```sh [aur (git)]
yay -S lmms-git
```

:::



### MuseScore

[MuseScore](https://musescore.org/zh-hans) 是 Muse Group 开发的一个跨平台的自由开源制谱软件。

安装 [MuseScore](https://archlinux.org/packages/extra/x86_64/lmms/)<sup>extra / cn / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S musescore
```

```sh [cn (git)]
sudo pacman -S musescore-git
```

```sh [aur (git)]
yay -S aur/musescore-git
```

:::



## 🎙️ 变声器

### Lyrebird

[Lyrebird](https://github.com/lyrebird-voice-changer/lyrebird)是 自由开源且简单强大的 Linux 变声器，用 GTK 3 编写。

安装 [Lyrebird](https://archlinux.org/packages/extra/x86_64/lmms/)<sup>aur</sup>：

```sh
yay -S lyrebird
```



## 🗄️ 管理与转换

### SoundConverter

[SoundConverter](https://soundconverter.org/) 是 GNOME 桌面的音频文件转换器（这不影响在 Plasma 桌面环境下使用）。

安装 [SoundConverter](https://archlinux.org/packages/extra/any/soundconverter/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S soundconverter
```

```sh [aur (git)]
yay -S soundconverter-git
```

:::

---

### App Exclusive Code (`docs/app/exclusive/code.md`)

# 编程软件

本文介绍各个编程方向优质的软件介绍。各个编程方向的简述会在其余文章中展现。

## 前端编程

对于前端来说，一般需要浏览器以及 IDE 即可，附加一些网络工具。

关于 IDE(或编辑器),可以使用 [OSS code](https://www.archlinux.org/packages/extra/x86_64/code/) (微软 [Visual Studio Code](https://aur.archlinux.org/packages/visual-studio-code-bin/)<sup>aur</sup> 的开源版本，此外有社区构建的 [VSCodium](https://aur.archlinux.org/packages/vscodium-bin/)<sup>aur</sup> 可供选择)，[webstorm](https://aur.archlinux.org/packages/webstorm/)<sup>aur</sup> 或者 [atom](https://archlinux.org/packages/extra/x86_64/atom/)。

浏览器方面有 [firefox](https://archlinux.org/packages/extra/x86_64/firefox/)，[chromium](https://archlinux.org/packages/extra/x86_64/chromium/)，[google-chrome](https://aur.archlinux.org/packages/google-chrome/)<sup>aur</sup>，[vivaldi](https://archlinux.org/packages/extra/x86_64/vivaldi/)，[firefox-developer-edition](https://www.archlinux.org/packages/extra/x86_64/firefox-developer-edition/)，[Edge](https://aur.archlinux.org/packages/microsoft-edge-dev-bin/)<sup>aur</sup>，以及 [opera](https://archlinux.org/packages/extra/x86_64/opera/) 可供选择。

网络工具常使用 [charles](https://aur.archlinux.org/packages/charles/)<sup>aur</sup>，[postman](https://aur.archlinux.org/packages/postman-bin/)<sup>aur</sup>以及 [wireshark-qt](https://archlinux.org/packages/extra/x86_64/wireshark-qt/)。

至于 [yarn](https://www.archlinux.org/packages/extra/any/yarn/)、[npm](https://www.archlinux.org/packages/extra/any/npm/) 等前端常用工具，也均可用 pacman 安装。

> OSS code 存在的问题：[官方 wiki](https://wiki.archlinux.org/index.php/Visual_Studio_Code)。一个普遍问题是删文件 UI 会卡住很久，原因是 electron 在 linux 下默认使用 `gio` 删除，但是 KDE 用户一般都不装这个。解决办法是把 `ELECTRON_TRASH=kioclient5` 环境变量加在~/.pam_environment 里。

## 后端编程

Jetbrains 家的全家桶基本都有支持可以在源中或 AUR 中自行搜索，如[IntelliJ Idea](https://www.archlinux.org/packages/extra/x86_64/intellij-idea-community-edition/)，[PyCharm](https://www.archlinux.org/packages/extra/x86_64/pycharm-community-edition/)，[GoLand](https://aur.archlinux.org/packages/goland/)<sup>aur</sup>等。
较为老式的 IDE 有 [Netbeans](https://www.archlinux.org/packages/extra/any/netbeans/) 以及 eclipse，eclipse 有多种版本，可在 AUR 中自行搜索。

关于数据库相关软件，也有多种选择。

- [Mysql Workbench](https://www.archlinux.org/packages/extra/x86_64/mysql-workbench/)
- [pgadmin4](https://www.archlinux.org/packages/extra/x86_64/pgadmin4/)
- [dbeaver](https://www.archlinux.org/packages/extra/x86_64/dbeaver/)
- [robo3t](https://aur.archlinux.org/packages/robo3t-bin/)<sup>aur</sup>
- [RESP.app](https://aur.archlinux.org/packages/resp-app/)<sup>aur</sup> （原 redis-desktop-manager）
- [rdm-bin](https://aur.archlinux.org/packages/rdm-bin/)<sup>aur</sup> 如果上面的编译有问题，可用这个 bin 版本

## 安卓客户端编程

目前来说，安卓开发已经统一到了 [Android Studio](https://aur.archlinux.org/packages/android-studio/) 进行开发。当然老式的 Eclipse 也可以用来使用。

## 桌面应用编程

目前桌面开发较为流行的是 electron 和 Qt 应用。electron 可直接用 OSS Code 进行开发，Qt 应用使用 [Qt Creator](https://www.archlinux.org/packages/extra/x86_64/qtcreator/) 进行开发。

## 机器学习

安装 [jupyter-notebook](https://archlinux.org/packages/extra/any/jupyter-notebook/) 以及所需要的相关库如[numpy](https://archlinux.org/packages/extra/x86_64/python-numpy/)即可，均可在源中找到。机器学习常用开源框架有[Pytorch](https://pytorch.org/), [Tensorflow](https://www.tensorflow.org)等 ([Wiki](https://wiki.archlinux.org/title/List_of_applications/Science#Artificial_intelligence))。

## 科学计算

对于科研人士而言，做数值计算（或者叫科学计算）是使用 linux 的一大动力。目前科学计算的几大主流编程语言分别是

- Matlab (在 Linux 下安装 Matlab 时可能遇到符号链接损坏的问题，需要重新下载安装文件并利用 'unzip -X -K matlab_R20\*\_glnxa64.zip' 命令重新解压)
- Fortran
- Julia
- Python（以 Numpy 库为主）。
  另外还有 Mathematica 作数学计算用。
  考虑到有部分朋友容易把“语言”和“软件”混为一谈，在此稍作说明：Matlab 和 Mathematica 既是软件名称，也是一种语言。暂时可以认为这些软件就是写这些语言的 IDE。
  而 Python 之类则仅仅是“编程语言”。至于我们下载的 Python3.9 之类的包，则是 python 语言对应的库，并不是一个“写 python 的软件”。

### 开源软件替代：[SageMath](https://www.sagemath.org/)

SageMath(原名 Sage)是免费的、开源的数学软件，支持代数、几何、数论、密码学、数值计算和相关领域的研究和教学。Sage 的开发模式和 Sage 本身的技术都非常强调开放性、社区性、合作性和协作性：我们在制造汽车，而不是重新发明轮子。Sagemath 的总体目标是为"4M"（即 Maple、Mathematica、Magma 和 Matlab）提供一个可行的、免费的、开源的替代品。

SageMath 为目前科学计算领域的大多数开源软件/库统一重写了接口，提供了一种类兼容 python 的语法，可以说集开源数学软件之大成。目前已可部分替代"4M"。

[Arch Wiki](https://wiki.archlinux.org/title/SageMath)

[中文教程及文档](https://www.osgeo.cn/sagemath/index.html)

Matlab 与 Mathematica 则是商业软件，使用正版需要付费购买。二者均有 linux 版本可供安装。

- [Python](https://wiki.archlinux.org/title/Python)直接安装 python3.9
- [Numpy 库](https://archlinux.org/packages/extra/x86_64/python-numpy/)这个库包含很多科学计算的函数（例如矩阵运算）
- [Fortran 编译](https://wiki.archlinux.org/title/GNU_Compiler_Collection)直接安装 gcc-fortran 包
- [Julia](https://wiki.archlinux.org/title/Julia)
  顺便一提，使用 python 的朋友可能很多都听说或者使用过 Anaconda 这个包管器。其实很多库既可以通过[Anaconda](https://aur.archlinux.org/packages/anaconda/)<sup>aur</sup> 或[Miniconda](https://aur.archlinux.org/packages/miniconda3/)<sup>aur</sup> 下载，亦可通过 pacman 或 yay 下载。不得不说，AUR 是个好东西。

另外,Intel 在 2020 年推出了名为 OneAPI 的“统一应用程序编程接口的开放标准”。OneAPI 的组件亦可在 Archlinux 上安装。如果自己的电脑 CPU 是 Intel 家的，使用 OneAPI 提供的编译器（如 i++），可提升语言编译速度。
如有朋友对 AMD 在这方面有所了解，欢迎补充。

---

### App Exclusive Image (`docs/app/exclusive/image.md`)

---
sidebarDepth: 2
---

# 图像制作

> ### 🌺 乱花渐欲迷人眼，浅草才能没马蹄
>
> 本小节讨论如何在 archlinux 上编辑、管理位图以及矢量图，以及绘画。

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## 🖼️ 位图编辑

### GIMP

[GIMP](https://www.gimp.org/) 是一个自由开源的位图图像编辑器。其对标 [Adobe](https://www.adobe.com/cn/) 的 [Photoshop](https://www.adobe.com/cn/products/photoshop.html)<sup>EULA</sup>。

安装 [GIMP](https://archlinux.org/packages/extra/x86_64/gimp/)<sup>extra / cn / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S gimp
```

```sh [cn (git)]
sudo pacman -S gimp-git
```

```sh [aur (git)]
yay -S aur/gimp-git
```

:::



### Aseprite

[Aseprite](https://www.aseprite.org/) 是一款像素艺术绘制工具。

安装 [Aseprite](https://aur.archlinux.org/packages/aseprite/)<sup>EULA / aur</sup>：

::: code-group

```sh [aur]
yay -S aseprite
```

```sh [aur (bin)]
yay -S aseprite-bin
```

```sh [aur (git)]
yay -S aseprite-git
```

:::



### RawTherapee

[RawTherapee](https://rawtherapee.com/) 是一个自由开源的跨平台 RAW 格式图像处理程序。

安装 [RawTherapee](https://archlinux.org/packages/extra/x86_64/rawtherapee/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S rawtherapee
```

```sh [aur (git)]
yay -S rawtherapee-git
```

:::



### KolourPaint

KolourPaint 是 KDE 开发的一个简单易用的自由开源的绘图程序（类似 Windows 自带的画图），可以创建点阵图像。可用来对图片进行润色和简单编辑。

安装 [KolourPaint](https://archlinux.org/packages/extra/x86_64/kolourpaint/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S kolourpaint
```

```sh [aur (git)]
yay -S kolourpaint-git
```

:::



## 🖼️ 矢量图编辑

### Inkscape

Inkscape 是自由开源的矢量图形编辑器。该软件的开发目标是成为强大的绘图软件，且能完全遵循与支持 XML、SVG 及 CSS 等开放性的标准格式。

安装 [Inkscape](https://archlinux.org/packages/extra/x86_64/inkscape/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S inkscape
```

```sh [aur (git)]
yay -S inkscape-git
```

:::



> #### 📑 相关资料：什么是矢量图形？
>
> 矢量图形是计算机图形学中用点、直线或者多边形等基于数学方程的几何图元表示的图像。
>
> 矢量图形与使用像素表示图像的位图不同。任意放大矢量图形，不会丢失细节或影响清晰度。
>
> 下面这个图片便是矢量图，可以尝试将其放大：
>
> 

## 🎨 绘画

### Krita

[Krita](https://krita.org/zh/) 是一个自由开源的位图图像编辑器。它针对数字绘画和动画创作特化，提供包括低干扰用户界面、OpenGL 加速画布、色彩管理、功能强大的笔刷引擎、非破坏性图层和蒙版、图层分组、矢量图形支持和可切换界面预设等在内的一系列特色功能。

安装 [Krita](https://archlinux.org/packages/extra/x86_64/krita/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S krita
```

```sh [aur (git)]
yay -S krita-git
```

:::



## 🖼️ GIF 制作

### Gifcurry

[Gifcurry](https://lettier.github.io/gifcurry/) 是面向 GIF 制作者的开源、Haskell 构建的视频编辑器。

安装 [Gifcurry](https://aur.archlinux.org/packages/gifcurry/)<sup>aur</sup>：

```sh
yay -S gifcurry
```

---

### App Exclusive Media (`docs/app/exclusive/media.md`)

---
sidebarDepth: 2
---

# 其它内容

> ### 🌖 深林人不知，明月来相照
>
> 本小节讨论其它形式的多媒体创作。包括建模、UI & UX 设计、字体创作、动画创作，甚至家装辅助设计等。

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## 🗿 建模渲染与动画制作

### 斑斓（Blender）

[Blender](https://www.blender.org/) 是一款开源免费的三维图形图像软件，提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案。

安装 [Blender](https://archlinux.org/packages/extra/x86_64/blender/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S blender
```

```sh [aur (git)]
yay -S blender-git
```

:::



### Sweet Home 3D

[Sweet Home 3D](http://www.sweethome3d.com/zh-cn/) 是一款免费的家装辅助设计软件。它能帮您通过二维的家居平面图来设计和布置您的家具，还可以用三维的视角浏览整个装修布局的全貌。

安装 [Sweet Home 3D](https://archlinux.org/packages/extra/x86_64/sweethome3d/)：

```sh
sudo pacman -S sweethome3d
```



### Synfig Studio

[Synfig Studio](https://www.synfig.org/) 是一款免费开源的 2D 动画软件，用于使用矢量和位图图稿创建电影质量的动画。

安装 [Synfig Studio](https://archlinux.org/packages/extra/x86_64/synfigstudio/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S synfigstudio
```

```sh [aur (git)]
yay -S synfigstudio-git
```

:::



### Linux Stopmotion

[Linux Stopmotion](http://linuxstopmotion.org/) 是一个开源免费的应用程序，用于创建定格动画。

安装 [Linux Stopmotion](https://aur.archlinux.org/packages/linuxstopmotion-git/)<sup>aur</sup>：

```sh
yay -S linuxstopmotion-git
```



## ✏️ UI & UX 设计

可使用 [Figma 网页版](https://www.figma.com/)，或者使用一个非官方的 Linux Figma 桌面端软件 [Figma electron app](https://github.com/Figma-Linux/figma-linux)。

### Figma electron app

安装 [Figma electron app](https://aur.archlinux.org/packages/figma-linux/)<sup>aur</sup>：

```sh
yay -S figma-linux
```



## ✍️ 字体创作

### FontForge

[FontForge](https://fontforge.org/en-US/) 是一款自由开源、全功能、支持所有通用字体格式的字体编辑器。

安装 [FontForge](https://archlinux.org/packages/extra/x86_64/fontforge/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S fontforge
```

```sh [aur (git)]
yay -S fontforge-git
```

:::

---

### App Exclusive Video (`docs/app/exclusive/video.md`)

---
sidebarDepth: 2
---

# 视频制作

> ### 💃🏻 云想衣裳花想容，春风拂槛露华浓
>
> 本小节讨论如何在 archlinux 上制作视频以及直播推流。

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## 🎬 制作软件

### Kdenlive

[Kdenlive](https://kdenlive.org/zh/) 是由 KDE 开发的自由开源的免费视频编辑软件。

安装 [Kdenlive](https://archlinux.org/packages/extra/x86_64/kdenlive/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S kdenlive
```

```sh [aur (git)]
yay -S kdenlive-git
```

:::



### Shotcut

[Shotcut](https://www.shotcut.org/) 是一个免费开源的跨平台视频编辑软件。

安装 [Shotcut](https://archlinux.org/packages/extra/x86_64/shotcut/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S shotcut
```

```sh [aur (git)]
yay -S shotcut-git
```

:::



### MKVToolNix

[MKVToolNix](https://mkvtoolnix.download/index.html) 是一套功能强大的 \*.mkv 格式制作和处理的工具。支持将多种视频、音频、字幕等格式封装成 \*.mkv 格式。

安装 [MKVToolNix](https://archlinux.org/packages/extra/x86_64/mkvtoolnix-gui/)<sup>extra / aur</sup>：

::: code-group

```sh [extra]
sudo pacman -S mkvtoolnix-gui
```

```sh [aur (git)]
yay -S mkvtoolnix-git
```

:::



::: tip ℹ️ 提示

可在菜单栏 `MKVToolNix GUI` > `Preferences` > 侧边栏 `GUI` > `Interface language` 中将语言更改为 `简体中文`：



:::

### DaVinci Resolve

[DaVinci Resolve](http://www.blackmagicdesign.com/cn/products/davinciresolve/) 是一款将剪辑、调色、视觉特效、动态图形和音频后期制作融于一身的视频编辑软件。

安装 [DaVinci Resolve（免费版）](https://aur.archlinux.org/packages/davinci-resolve/)<sup>EULA / aur</sup>：

::: code-group

```sh [aur]
yay -S davinci-resolve
```

```sh [aur (beta)]
yay -S davinci-resolve-beta
```

:::

::: tip ℹ️ 提示

DaVinci Resolve（免费版）在 Linux 下支持的编解码格式有限，详情请参阅此 [📄 文档](https://documents.blackmagicdesign.com/SupportNotes/DaVinci_Resolve_15_Supported_Codec_List.pdf)。

DaVinci Resolve 没有编入 fcitx 模块，所以在 Linux 下不能输入中文，可以使用剪贴板解决。

:::

另外还有 [DaVinci Resolve Studio（付费版）](https://aur.archlinux.org/packages/davinci-resolve-studio/)<sup>EULA / aur</sup>：

::: code-group

```sh [aur]
yay -S davinci-resolve-studio
```

```sh [aur (beta)]
yay -S davinci-resolve-studio-beta
```

:::

## 📡 录屏直播

### OBS Studio

[OBS Studio](https://obsproject.com/zh-cn) 是免费开源的用于视频录制以及直播串流的软件。Linux 下操作与 Windows 下基本一致。

安装 [OBS Studio](https://www.archlinux.org/packages/extra/x86_64/obs-studio/)<sup>extra / aur</sup>：

::: code-group

```sh [aur (browser)]
yay -S obs-studio-browser # 有浏览器插件集成的 OBS Studio。编译要很久（大约 15 min）
```

```sh [extra]
sudo pacman -S obs-studio
```

```sh [aur (git)]
yay -S obs-studio-git
```

:::



::: tip ℹ️ 提示

如果你使用较新的 NVIDIA 显卡，可以使用 NVENC 编码器。这将大大降低直播或录制过程中 CPU 的压力。

详情请参阅 [NVIDIA NVENC OBS 指南](https://www.nvidia.cn/geforce/guides/broadcasting-guide/)。

如果想进一步优化直播或录制性能，可以安装[此仓库](https://github.com/keylase/nvidia-patch)中的 NvFBC 显卡驱动补丁，再安装[OBS NvFBC 插件](https://aur.archlinux.org/packages/obs-nvfbc-git/)<sup>aur</sup>，然后使用 NvFBC 来源即可。

```sh
yay -S obs-nvfbc-git
```

:::

### Bilibili Live Chat（推荐）

[Bilibili Live Chat](https://github.com/Tsuk1ko/bilibili-live-chat) 是一个无后端的、仿 YouTube Live Chat 的、箱都不用开就能食用的 Bilibili 直播弹幕姬。主要用于 OBS，为的是在低功能需求的情况下，不依靠任何第三方本地软件实现弹幕和礼物的展示。

可以直接使用部署在 Github Pages 的成品，也可以在本地运行一个服务器：

1. 克隆 [Bilibili Live Chat repo](https://github.com/Tsuk1ko/bilibili-live-chat) 到合适位置：

   ```sh
   git clone https://github.com/Tsuk1ko/bilibili-live-chat /path/to/some/folder
   ```

   

2. 安装 [Node.js](https://archlinux.org/packages/extra/x86_64/nodejs/) 和 [Yarn](https://archlinux.org/packages/extra/any/yarn/)：

   ```sh
   sudo pacman -S nodejs yarn
   ```

3. 进入克隆仓库并安装项目的所有依赖项：

   ```sh
   cd bilibili-live-chat
   yarn install
   ```

   

4. 运行本地服务器：

   ```sh
   yarn serve
   ```

   

   ::: tip ℹ️ 提示

   也可以使用 `yarn build` 进行编译。这将在 `dist/` 目录产生一个可用于生产环境的包，再将其部署在服务器上。

   更多信息可参阅 [Vue CLI 官方文档](https://cli.vuejs.org/zh/guide/cli-service.html#cli-%E6%9C%8D%E5%8A%A1)。

   :::

5. 打开对应本地链接并设置 > 点击 `Go!`：

   

   

6. 打开 [`OBS Studio`](video.md#obs-studio) > 在 `来源` 中添加 `🌏 浏览器`（BrowserSource）> 复制上方链接填写在 `URL`中。`宽度` 和 `高度` 可根据需要自行设置（不要在预览视图中拖拽缩放浏览器源的宽高），其它选项默认即可：

   

   ::: tip ℹ️ 提示

   Bilibili Live Chat 需要使用 [有浏览器插件集成的 OBS Studio](https://aur.archlinux.org/packages/obs-studio-browser)。

   :::

7. 在预览视图中将其移动至合适位置即可：

   

### 弹幕库（推荐）

[弹幕库](https://www.danmaku.live/) 是一个哔哩哔哩直播助手。目前已经 [停止更新](https://t.bilibili.com/378501835576827480)。

1. 安装 [弹幕库](https://www.danmaku.live/)<sup>cn / aur</sup>：

   ::: code-group

   ```sh [cn]
   sudo pacman -S bilibili-live-helper-bin
   ```

   ```sh [aur (git)]
   yay -S aur/bilibili-live-helper-bin
   ```

   ```sh [aur (git)]
   yay -S bilibili-live-helper-git
   ```

   :::

   

2. 点击 `应用模块` 或 `OBS 模块` 所需功能即可开启 / 设置对应功能，按照提示操作即可：

   

### screenkey

[screenkey](https://www.thregr.org/~wavexx/software/screenkey/) 是一个用于显示键盘键入在屏幕上的工具，可用于录屏演示。

1. 安装 [screenkey](https://archlinux.org/packages/extra/any/screenkey/)<sup>extra / aur</sup>：

   ::: code-group

   ```sh [extra]
   sudo pacman -S screenkey
   ```

   ```sh [aur (git)]
   yay -S screenkey-git
   ```

   :::

2. 在终端输入 `screenkey` 以启动：

   

3. 按下 `Ctrl` + `C` 即可退出

::: tip ℹ️ 提示

可以通过以下设置在录屏演示中突出显示鼠标位置与点击效果：

打开 `系统设置` > 点击侧边栏 `工作区行为` > `桌面特效` > 在 `无障碍功能` 中勾选 `鼠标定位` 与 `鼠标点击动效` > `应用`。

:::

## 🔤 字幕制作

视频字幕除了可以用上述视频编辑软件制作，还可以使用 [ffmpeg](https://ffmpeg.org/)（已经作为依赖安装）在命令行进行烧录。

### ffmpeg

一般情况来讲，一个视频加上外带的 \*.srt 字幕是较为普遍的情况。这里描述如何为 YouTube 视频加入字幕。

1. 首先要进行视频字幕的下载。这里可以使用一个 Chromium 浏览器拓展 —— [YouTube™ 双字幕](https://chrome.google.com/webstore/detail/youtube-dual-subtitles/hkbdddpiemdeibjoknnofflfgbgnebcm)

2. 接下来进行字幕与视频的重新烧录。[MKVToolNix](video.md#mkvtoolnix) 只能做那种分离的字幕，但是某些视频网站要上传烧录好的。为了更好的兼容性，建议始终将视频和文件重新烧录。使用 `ffmpeg` 进行操作：

   ```bash
   ffmpeg -i input.mp4 -vf subtitles=input.srt output.mp4
   ```

   ::: tip ℹ️ 提示

   如果需要制作双语字幕（同时显示，而不是分字幕轨道），可以使用两次 `ffmpeg` 命令 —— 第一次添加主字幕，第二次添加副字幕。

   1. 第一次添加主字幕。使用 MarginV 进行垂直方向的区分：

   ```sh
   ffmpeg -i input.mp4 -strict -2 -vf subtitles=input_zh.srt:force_style='Fontsize=20\,Fontname=FZYBKSJW--GB1-0\,MarginV=30\,Bold=-1\,BorderStyle=1' -qscale:v 3 output_with_zh.mp4
   ```

   2. 第二次添加副字幕：

   ```sh
   ffmpeg -i output_with_zh.mp4 -strict -2 -vf subtitles=input_en.srt:force_style
   ='Fontsize=15\,Fontname=FZYBKSJW--GB1-0\,Bold=-1\,BorderStyle=1' -qscale:v 3 output_with_double_subtitles.mp4
   ```

   更多参数可以参阅 [ffmpeg 文档](https://ffmpeg.org/ffmpeg.html)。

   :::

---

### Guide Advanced Beauty 1 (`docs/guide/advanced/beauty-1.md`)

# archlinux 系统美化（布局篇）

> ### 🌺 爱美之心，人皆有之
>
> 美化这个话题是永恒的。有些人用 Linux 的原因就是一开始被美化后桌面的截图惊艳到了
>
> 这一小节将会介绍如何对 KDE 桌面环境进行美化。受限于篇幅，本小节分为上下篇
>
> 从本章开始，过程将不会讲述的特别细节，根据界面提示操作即可

需要说明的是，不要过度美化！过度美化可能导致系统稳定性和性能下降等后果。

当然，尊重用户的个人选择，这也是 arch 之道。

本节介绍的步骤建议按顺序进行，**您可以选择在任何一步收手**，因为剩下的步骤可能显得多余，甚至可能适得其反。

同时，本小节将介绍两种桌面布局方式 —— 一种是传统的类似 Windows 的菜单栏布局，另一种是类似 macOS 的 Dock 栏布局。

::: tip ℹ️ 提示

若使用虚拟机，请不要过度美化！否则会降低性能甚至卡死。

:::

## 0. 换一张漂亮的壁纸

1. 在桌面右键 > 选择 `配置桌面和壁纸...`

2. 在设置窗口：

   - 选择 `添加图片` > 选择你想要的图片
   - 选择刚才添加的图片 > 点击 `应用`

   

   ::: tip ℹ️ 提示

   `壁纸类型` 可更改为：

   - `幻灯片` —— 若希望壁纸能够定时轮换
   - `每日一图` > 将 `提供` 改为喜欢的来源（如 `必应`，这将和 [必应](https://cn.bing.com) 的背景图片保持一致）

   :::

## 1. 更改用户头像

打开 `系统设置` > 点击侧栏 `用户` > 点击头像即可更改：



## 2. 确认显示特效混合器（混成器、合成器）状态

1. 打开 `系统设置` > 点击侧栏 `显卡与显示器` > `显示特效合成器`

2. 确认显示特效合成器运行状态：

   

## 3. 修改桌面布局

桌面布局之前，需要了解一些基本的概念：

- KDE 桌面中无论是菜单栏还是顶栏，本质上都是**面板**
- 面板上的元素（如托盘图标、数字时钟、网速显示、开始菜单图标）等都是**小组件**
- 小组件可以放置在面板里，也可以独立存在

更改桌面布局，本质上就是**调整面板和小组件的位置以及样式**。

### 3-0. 安装常用小组件

#### Weather Widget

天气插件。相比 KDE 自带的天气插件显示信息更加详细，也不会经常刷新不出天气信息。

安装 [Weather Widget](https://aur.archlinux.org/packages/plasma-applets-weather-widget-2)<sup>aur</sup>：

::: code-group

```bash [aur]
yay -S plasma-applets-weather-widget-2 qt6-5compat qt6-declarative # 必须安装
```

```bash [aur (git)]
yay -S plasma6-applets-weather-widget-3-git qt6-5compat qt6-declarative # 必须安装
```

:::



#### Split Digital Clock

放置在桌面的数字时钟。简单配置后可以很好看。

1. 在桌面右键 > 点击 `添加部件`：

   

2. 点击 `获取新部件...` > `下载新 Plasma 部件`：

   

3. 搜索小部件名 `Split Digital Clock` > 点击 `安装`：

   

#### Avalon Menu

程序启动器（开始菜单）。相比 KDE 自带的程序启动器更加简洁大方。

同上，搜索小部件名 `Avalon Menu` > 点击 `安装`：



#### Netspeed Widget

安装 [Netspeed Widget](https://aur.archlinux.org/packages/plasma5-applets-netspeed/)<sup>aur</sup>：

```bash
yay -S plasma5-applets-netspeed
```



::: tip ℹ️ 提示

其它小部件根据喜好自行安装即可。常用的还有：

- [Simple System Monitor](https://github.com/dhabyx/plasma-simpleMonitor) —— 系统信息

:::

### 3-1. 菜单栏布局

KDE 默认即菜单栏布局。只需调整一下小部件的位置和样式即可。

1. 右键菜单栏 > 点击 `编辑面板...`：

   

2. 点击 `添加部件...` > 将 `Avalon Menu` 拖放至菜单栏左侧：

   

   

3. 再次 `编辑面板...` > 将光标移动悬停在原来的程序启动器上 > 点击 `移除`：

   

4. 类似的，将 `Netspeed Widget` 和 `Weather Widget` 拖放至合适位置：

   

   ::: tip ℹ️ 提示

   您可能需要调整 `面板高度` 以使得小组件显示符合期望。

   :::

5. 再次 `编辑面板...` > 将光标移动悬停在 `Weather Widget` 上 > 点击 `配置`

6. 将默认的两个城市删掉：

   

7. 进入 [OpenWeather](https://openweathermap.org/) 网站 > 搜索需要显示的城市 > 将网址复制下来：

   

8. 点击 `＋ OWM` > 将复制的网址和城市名称填入 > 点击 `确定` > `应用`：

   

   

9. 点击侧栏 `外观` > 调整为喜欢的样式 > 点击 `应用`：

   

10. 查看效果：

    

### 3-2. Dock 栏布局

::: tip ℹ️ 提示

截至目前，Latte 尚未支持 KDE Plasma 6，所以该部分内容暂时折叠。

:::

::: details Latte 配置教程

1. 为了实现 Dock 栏布局，需要安装 [Latte](https://github.com/KDE/latte-dock)<sup>extra / cn / aur</sup>：

   ::: code-group

   ```bash [extra]
   sudo pacman -S latte-dock
   ```

   ```bash [cn (git)]
   sudo pacman -S latte-dock-git
   ```

   ```bash [aur (git)]
   yay -S aur/latte-dock-git
   ```

2. 进入 `编辑面板...` > 通过拖拽 `屏幕边缘` 按钮将菜单栏拖拽至底部或左右侧：

   

3. 尝试在终端打开 Latte：

   ```bash
   latte-dock
   ```

   

4. 默认 Latte 已经将自己添加到开机自动启动中了，打开 `系统设置` > 点击侧栏 `开机与关机` > `自动启动` 复查一下：

   

5. 重启，查看效果

6. 右键 Latte 面板 > 点击 `Edit Dock...`：

   

7. 点击 `Advanced` 以启用高级设置：

   

8. 将 `Dock` 更改为 `Panel`：

   

9. 在设置中进行如下更改：

   - 在标签页 `Behavior`（行为）：
     - `Alignment`（对齐）：
       - `Left`（左对齐）
       - `Center`（居中对齐，**推荐设置**）
       - `Right`（右对齐）
       - `Justify`（平铺）
     - `Visibility`（可见性）：
       - `Always Visible`（保持可见，但窗口不会在 Dock 栏下方）
       - `Dodge Active`（避开活动窗口，**推荐设置**）
       - `Windows Go Below`（保持可见，窗口在下方，**推荐设置**）
       - `Auto Hide`（自动隐藏，在鼠标靠近时显示）
       - `Dodge Maximized`（只在全屏显示窗口时隐藏，**推荐设置**）
       - `Dodge All Windows`（有窗口时隐藏）
       - `On Demand Sidebar`（按需隐藏侧边栏，只有当外部程序作用时响应）
       - `Auto Hide Sidebar`（自动隐藏侧边栏，只有当外部程序作用时响应）
   - 在标签页 `Appearence`（外观）：
     - `Items`（项目）：
       - 将 `Zoom on hover`（悬停时缩放比例）调整为 `85%` 或合适大小
     - `Margins`（外边距）：
       - 将 `Screen edge`（屏幕边缘距离）调整为 `8px` 或合适大小
     - `Background`（背景）：
       - 将 `Radius`（圆角）调整为 `16px` 或合适大小

   其它选项保持默认或按需调整即可。

10. 点击 `Close` 完成更改：

    

11. 类似的，右键 Latte 面板 > 点击 `Add Widgets...`（添加小部件） > 将小部件拖拽至合适位置即可

12. 将常用的应用也可以通过拖拽的方式（可能需要先创建快捷方式到桌面）或打开应用之后右键固定项目（`Pin Launcher`）固定到 Latte 面板：

    

    ::: tip ℹ️ 提示

    特别地，若要改变小部件的顺序或配置小部件：

    1. 右键 Latte 面板 > 点击 `Edit Dock...`

    2. 点击 `Rearrange and configure your widgets`（重新排序和配置小部件）

    3. 将光标悬停到对应小部件进行相关操作：

       

    :::

13. 调整顶栏（原菜单栏）的高度，相关小组件位置和样式等：

    - 通过点击 `添加间距` 添加两个 `面板间距` 在 `数字时钟` 两侧即可自动使时间居中

      

    - 添加全局菜单即可使菜单显示在顶栏中（类似 macOS）：

      

:::

### 3-3. 调整细节

1. 配置系统托盘，将不需要的项目隐藏：

   

2. 部分应用需要设置为对应的主题模式（暗色 / 亮色）：

   

## 4. 配置小组件

### 4-1. 配置 Split Digital Clock

1. 在 [Google Fonts](https://fonts.google.com/specimen/Pacifico) 上点击右上角的 `Download family` 下载 Pacifico 字体

2. 解压后安装字体：

   

3. 将 Split Digital Clock 拖拽到桌面后配置：

   - 更改 `Font Style` 为 `Pacifico`
   - 勾选 `Show Date`
   - 调整 `Color of text` 为 `#ffffff` 或合适颜色
   - 调整小部件为合适大小

   

4. 查看效果：

---

### Guide Advanced Beauty 2 (`docs/guide/advanced/beauty-2.md`)

# archlinux 系统美化（主题篇）

> ### 🌺 爱美之心，人皆有之
>
> 美化这个话题是永恒的。有些人用 Linux 的原因就是一开始被美化后桌面的截图惊艳到了
>
> 这一小节将会介绍如何对 KDE 桌面环境进行美化。受限于篇幅，本小节分为上下篇

## 1. 更改系统图标

如果觉得默认的微风主题图标不能满足你的审美，那么可以下载新的图标主题。

1. 安装图标主题：

   - 使用包管理器安装（推荐）

     ::: tip ℹ️ 提示

     推荐使用包管理器安装。

     实际上所有能用包管理器安装的（无论是图标主题、全局主题还是小组件）**都应该用包管理器安装**。

     这样做不仅可以简化安装步骤，还可以将这些东西纳入升级。

     :::

     1. 安装 [`tela-icon-theme`](https://github.com/vinceliuice/Tela-icon-theme)<sup>cn / aur</sup> 图标主题：

        ::: code-group

        ```bash [cn (git)]
        sudo pacman -S tela-icon-theme-git
        ```

        ```bash [aur (git)]
        yay -S aur/tela-icon-theme-git
        ```

        ```bash [aur]
        yay -S aur/tela-icon-theme
        ```

        :::

        

        ::: tip ℹ️ 提示

        其它图标主题请自行寻找对应包。

        :::

     2. 打开 `系统设置` > 点击侧栏 `外观` > `图标`

     3. 选择刚刚下载好的图标主题 > 点击 `应用`：

        

        查看效果：

        

   - 使用 KDE 系统设置安装

     1. 打开 `系统设置` > 点击侧栏 `外观` > `图标` > `获取新图标主题`：

        

        ::: tip ℹ️ 提示

        为了流畅的连接服务器，你可能需要按照章节 [透明代理](/guide/rookie/transparent.md) 配置透明代理。

        :::

     2. 搜索图标名 `Tela-icon-theme` 或喜欢的一套图标主题 > 点击 `安装` > 选择喜欢的颜色 `安装`：

        

        

     3. 安装完成后点击 `关闭`

     4. 选择刚刚下载好的图标主题 > 点击 `应用`：

        

        查看效果：

        

## 2. 更改 Fcitx5 输入法皮肤

默认的输入法主题并不好看,这里有三个漂亮的主题：

### [内置的Breeze](https://planet.kde.org/weng-xuetian-2022-07-04-fcitx-5-plasma-theme-support/)



只需在 fcitx5 的经典 UI 配置中选择“KDE Plasma (Experimental)”作为主题即可。

原作者的视频教程如下：

<video controls="" src="https://www.csslayer.info/wordpress/wp-content/uploads/2022/07/demo.mp4"></video>

### [fcitx5-nord](https://github.com/ayamir/fcitx5-nord)





按照 github 的说明安装即可：

```bash
git clone https://github.com/tonyfettes/fcitx5-nord.git
mkdir -p ~/.local/share/fcitx5/themes/
cd fcitx5-nord
cp -r Nord-Dark/ Nord-Light/ ~/.local/share/fcitx5/themes/
```

### [fcitx5-gruvbox](https://github.com/ayamir/fcitx5-gruvbox)





安装过程同上：

```bash
git clone https://github.com/ayamir/fcitx5-gruvbox
mkdir -p ~/.local/share/fcitx5/themes/ # 若安装nord主题时已经执行过此命令，则不必再执行一次
cd fcitx5-gruvbox
cp -r Gruvbox-Light/ Gruvbox-Dark ~/.local/share/fcitx5/themes/
```

## 3. 设置 SDDM 主题

默认的登录界面不太好看，我们将它替换掉。

1. 打开 `系统设置` > 点击侧栏 `开机和关机` > `登录屏幕（SDDM）`

2. 设置 SDDM 主题：

   - 若希望使用微风 SDDM 主题：

     你可能会发现默认选择的 SDDM 主题就是微风，实际上这只是显示有问题而已。

     1. 随便选择另外一套 SDDM 主题 > 点击 `应用`

     2. 重新选择微风 SDDM 主题 > 点击 `应用`

     3. 重启，查看效果：

        

   - 若希望使用其它 SDDM 主题：

     1. 点击右下角的 `获取新 SDDM 主题...`

     2. 搜索 SDDM 主题名 `McSur-light Sddm Theme` 或喜欢的一套 SDDM 主题 > 点击 `安装`：

        

     3. 安装完成后点击 `关闭`

     4. 选择刚刚下载好的 SDDM 主题 > 点击 `应用` 即可：

        

     5. 重启，查看效果：

        

3. 部分 SDDM 主题可以更换背景。点击对应 SDDM 主题中间的图片小图标 > `加载图像文件...` > 选择你想要的图片

4. 点击 `应用`

5. 重启，查看效果：

   

::: tip ℹ️ 提示

若发现 SDDM 显示字体和图标过小，请参阅 [✨ DPI 设置](optional-cfg-1.md#✨-dpi-设置)。

:::

## 4. 设置欢迎屏幕主题

登录界面后的欢迎屏幕也可以进行美化。

1. 打开 `系统设置` > 点击侧栏 `外观` > `欢迎屏幕` > `获取新欢迎屏幕...`：

   

2. 搜索欢迎屏幕主题名 `Snowy Night Miku` 或喜欢的一套欢迎屏幕主题 > 点击 `安装`：

   

3. 选择刚刚下载好的欢迎屏幕主题 > 点击 `应用` 即可：

   

4. 注销，查看效果：

   

## 5. 更改全局主题

::: tip ℹ️ 提示

若切换主题后，`Windows` 键不能呼出菜单，则需要重新配置快捷键：

1. 在程序启动器（开始菜单）右键 > 点击 `配置程序启动器...`

2. 在键盘快捷键中重新设置 `Windows` + `F1` 键，Windows 键会显示为 Meta 键。

:::

### 5-1. 设置窗口装饰

在 _系统设置_ > _外观_ > _窗口装饰_ 中，获取新窗口装饰，搜索 layan，并应用即可。

### 5-2. 配置 Kvantum Manager

主题配合 Kvantum Manager 可以达到更好的效果。

```bash
sudo pacman -S kvantum
```

在[这里](https://www.pling.com/p/1325246/)下载 Layan 的 Kvantum 主题，并解压。打开 Kvantum Manager,选择主题并安装，接下来在`Change/Delete Theme`中选择 Layan,Use this theme。最后在系统设置，外观中的应用程序风格中选择 kvantum 即可。

> 如果透明的效果没有显示，确保 KDE 的全局缩放比例为整数倍。或者尝试切换混成器中 openGL 的设置。

## 6. 更改字体

可以使用 [pacman](https://wiki.archlinuxcn.org/wiki/Pacman) 安装已启用的软件源中的字体和字体集。

例如在之前[安装基础功能包](../rookie/desktop-env-and-app.md#_6-安装基础功能包)时我们使用了：

```bash
sudo pacman -S adobe-source-han-serif-cn-fonts wqy-zenhei
sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra
```

所有可用的字体可以通过[查询包](https://wiki.archlinuxcn.org/wiki/Pacman#%E6%9F%A5%E8%AF%A2%E5%8C%85%E6%95%B0%E6%8D%AE%E5%BA%93)查找：

```bash
sudo pacman -Ss ttf | less
```

可以使用

```bash
fc-list | less
```

查看已安装的字体。

安装好之后可进入<b>系统设置>文字和字体>字体</b>更改系统字体。



## 7. 引导界面美化

### 7-1. 设置 GRUB 主题

开机时有个漂亮的 GRUB 也是很舒服的。

在[这里](https://www.pling.com/p/1482847/)下载 Distro 的 GRUB 主题并解压。接下来<b> `cd` 进解压出来的文件夹</b>，打开 konsole 输入

```bash
sudo cp -rf . /usr/share/grub/themes/Distro
```

以将主题放置在系统的 GRUB 默认文件夹内。

接着编辑 `/etc/default/grub` 文件，找到 `#GRUB_THEME=` 一行，将前面的注释去掉，并指向主题的 `theme.txt` 文件。即

```bash
#GRUB_THEME=
GRUB_THEME="/usr/share/grub/themes/Distro/theme.txt" #修改后
```

然后再在终端输入

```bash
grub-mkconfig -o /boot/grub/grub.cfg
```

更新 GRUB 即可。

### 7-2. 设置 rEFind 主题

---

### Guide Advanced Beauty 3 (`docs/guide/advanced/beauty-3.md`)

# archlinux 系统美化（终端篇）

> ### 🌺 爱美之心，人皆有之
>
> 美化这个话题是永恒的。有些人用 Linux 的原因就是一开始被美化后桌面的截图惊艳到了
>
> 这一小节将会介绍如何对 KDE 桌面环境进行美化。受限于篇幅，本小节分为上下篇

## 1. 设置 Konsole 样式

打开 Konsole， _设置_ > _编辑当前方案_ > _外观_，选择 `Red-Black` （或你喜欢的颜色主题），应用确认即可。

## 2. zsh 美化

::: tip ℹ️ 提示

确保你安装过 zsh ，安装方法及相关配置可在 [可选配置（基础）](/guide/advanced/optional-cfg-1.html) 一章中查看。

[oh-my-zsh](https://ohmyz.sh/) 实际上并没有那么好用，反而拖慢了 Zsh 的速度，本指南不会介绍。

若有需要请自行查阅相关资料。

:::

### 2-1. powerlevel10k

由于本指南不使用 `oh-my-zsh` ,因此使用另一个 Zsh 框架 `zim` 安装 powerlevel10k。

1.  安装 `zim` 。

```sh
curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh
```

2.  编辑 Zsh 配置文件 `~/.zimrc` ：

```sh
vim ~/.zimrc
```

3.  在文件最后加入下面的一行文字，以添加 `powerlevel10k` 模块，然后退出。

```
zmodule romkatv/powerlevel10k
```

4.  安装 `powerlevel10k` 模块，在终端输入如下命令即可。

```sh
zimfw install
```

安装之后，`powerlevel10k`会让你进行配置。

在此时配置时，很多图标符号看不到，因为 `powerlevel10k` 中包含许多特殊图标符号，需要与之兼容的字体。

5.  安装 Nerd Font 字体

Nerd Fonts 是一系列打过补丁的字体，支持 `powerlevel10k` 中的图标。

AUR 和 ArchLinuxCN 源中都有很多 Nerd Font，在终端使用 yay 搜索安装即可。

```sh
yay -Ss nerd-font
```

个人推荐使用 [ttf-jetbrains-mono-nerd](https://archlinux.org/packages/extra/any/ttf-jetbrains-mono-nerd/) 字体，可在 aur 中安装

```sh
sudo pacman -S ttf-jetbrains-mono-nerd
```

安装完任意一个 Nerd Font 字体后，打开 Konsole 的 _设置_ > _编辑当前方案_ > _外观_，把 _字体_ 改为刚刚安装的 Nerd Font 即可。

现在再打开 `powerlevel10k` 配置（`p10k configure`），就可以看到图标符号，正常配置了。

### 2-2. grml's zsh config

如果你不想麻烦，想要一个看起来还算可以并且包含许多高级功能（如拼写纠错）的 zsh 配置，可以使用 grml's zsh config。

```sh
sudo pacman -S grml-zsh-config
```

然后重新登录就可。如果出现了什么问题，请删除当前的 .zshrc 然后重新撰写一份。

## 3. vim 美化

安装 Vim-plug。这是一个极简风的 vim 插件管理器。

```sh
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
```

然后安装 Airline. 它是一个状态栏插件。

把下面的内容加入 .vimrc 中

```text
call plug#begin()

Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
let g:airline_theme='ayu_dark'

call plug#end()
```

然后进入 vim, 运行

```sh
:PlugInstall
```

## 4. ASCII 艺术与终端玩具

### lolcat

用渐变为终端输出着色，看起来就像彩虹一样！

1. 安装 [lolcat](https://archlinux.org/packages/extra/any/lolcat/)：

   ```bash
   sudo pacman -S lolcat
   ```

2. 通过管道符（`|`）将其它命令（如 `neofetch`）的输出传递给 `lolcat`：

   ```bash
   neofetch | lolcat
   ```

   

### cowsay

将文本作为 ASCII 艺术牛的讲话文本输出。

1. 安装 [cowsay](https://archlinux.org/packages/extra/any/cowsay/)：

   ```bash
   sudo pacman -S cowsay
   ```

2. 通过管道符（`|`）将简短的其它命令输出传递给 `cowsay`：

   ```bash
   echo "archlinux 简明指南" | cowsay
   ```

   

### figlet

显示由不同风格的 ASCII 艺术字符组成的文本。

1. 安装 [figlet](https://archlinux.org/packages/extra/x86_64/figlet/)：

   ```bash
   sudo pacman -S figlet
   ```

2. 通过管道符（`|`）将简短的其它命令输出传递给 `figlet`：

   ```bash
   echo "Love Live Linux" | figlet
   ```

   

   更多样式请参阅 [figlet 官网](http://www.figlet.org/)。

### boxes

使用 ASCII 艺术风格的字符形状框来包围文本。

1. 安装 [boxes](https://archlinux.org/packages/extra/any/cowsay/)<sup>aur</sup>：

   ::: code-group

   ```bash [aur]
   yay -S boxes
   ```

   ```bash [aur (git)]
   yay -S boxes-git
   ```

   :::

2. 通过管道符（`|`）将简短的其它命令输出传递给 `boxes`：

   ```bash
   echo "archlinux 简明指南" | boxes -d diamonds -a c
   ```

   

   更多样式请参阅 [boxes 官网](https://boxes.thomasjensen.com/) 以及 [boxes repo](https://github.com/ascii-boxes/boxes)。

### cmatrix

向下滚动的代码流如同黑客帝国一样！

1. 安装 [cmatrix](https://archlinux.org/packages/extra/x86_64/cmatrix/)：

   ::: code-group

   ```bash [extra]
   sudo pacman -S cmatrix
   ```

   ```bash aur (git)
   yay -S aur/cmatrix-git
   ```

   :::

2. 输入以下命令：

   ```bash
   cmatrix
   ```

   

3. 按下 `q` 即可退出

### asciiquarium

将终端化身海洋馆！

1. 安装 [asciiquarium](https://archlinux.org/packages/extra/any/asciiquarium/)<sup>extra / aur</sup>：

   ::: code-group

   ```bash [extra]
   sudo pacman -S asciiquarium
   ```

   ```bash [aur (git)]
   yay -S aur/asciiquarium-git
   ```

   :::

2. 输入以下命令：

   ```bash
   asciiquarium
   ```

   

3. 按下 `q` 即可退出

### sl

终端里的小火车。

1. 安装 [sl](https://archlinux.org/packages/extra/x86_64/sl/)：

   ```bash
   sudo pacman -S sl
   ```

2. 输入以下命令：

   ```bash
   sl
   ```

   

## 5. Linux 彩蛋

---

### Guide Advanced Btrfs (`docs/guide/advanced/btrfs.md`)

# Btrfs 介绍与相关操作

## Btrfs 介绍

Btrfs 是一种新型的写时复制（CoW）Linux 文件系统，已经并入内核主线。你可以读作 **B**e**t**te**r** **F**ile **S**ystem、**B**-**tr**ee **F**ile **S**ystem、**B**u**t**ter **F**ile **S**ystem 等等，都是正确的。Btrfs 在设计实现高级功能的同时，着重于容错、修复以及易于管理。它由 Oracle、Red Hat、Fujitsu、Intel、SUSE、STRATO 等企业和开发者共同开发。Btrfs 以 **GNU GPL** 协议授权，同时也欢迎任何人的贡献。

### Btrfs 的历史

- `2007` —— [甲骨文（Oracle）](https://www.oracle.com/cn/index.html) 宣布并开始研发
  - 对标 ZFS（开源社区对 ZFS 所作出的回应）
- `2010`
  - 在 SUSE Linux Enterprise Server 11 SP1（openSUSE 11）上技术预览
  - Btrfs 在 2010 年 10 月推出的 Ubuntu 10.10 中得到了应用
- `2011`
  - 2011 年 6 月 8 日，在 Fedora 工程指导委员会会议上，委员会决定 Fedora 16 将以 Btrfs 作为默认文件系统.
  - 2011 年 8 月 9 日，Fedora 撤回了决定，Btrfs 不再作为 Fedora 16 默认文件系统；原因是时间不充足，无法达到改变默认文件系统所要满足的基本要求
  - 2011 年 10 月 5 日，Fedora 16 测试版发布，BTRFS 将做为其默认文件系统
  - 2011 年 11 月 8 日，Fedora 16 正式版发布，默认文件系统依然采用 ext4，并未采用预计的 Btrfs 文件系统
- `2012` —— 在 SUSE Linux Enterprise Server 11 SP2（openSUSE 11）得到完整支持
- `2014` —— 在 SUSE Linux Enterprise Server 12（openSUSE 12）上作为默认文件系统
- `2018` —— 在 SUSE Linux Enterprise Server 15（openSUSE 15）上作为默认文件系统
- `2020` —— 2020 年 8 月 24 日，Btrfs 将取代 ext4 作为 Fedora 33 中的默认文件系统
- `2021` —— 在 SUSE MicroOS（openSUSE MicroOS）上作为默认文件系统

### Btrfs 的特性

> 带 ✅ 标记的是我们可以感受到的

#### 扩展性相关

1. B-tree
   - Btrfs 文件系统中所有的 metadata 都由 B-tree 管理。使用 B-tree 的主要好处在于查找、插入和删除操作都很高效。可以说 B-tree 是 Btrfs 的核心
2. 基于 Extent 的文件存储
3. ✅ 针对 SSD 的优化支持
   - Btrfs 的 CoW 技术从根本上避免了对同一个物理单元的反复写操作。如果用户打开了 SSD 优化选项，Btrfs 将在底层的块空间分配策略上进行优化：将多次磁盘空间分配请求聚合成一个大小为 2M 的连续的块。大块连续地址的 IO 能够让固化在 SSD 内部的微代码更好的进行读写优化，从而提高 I/O 性能
4. 动态 Inode 分配
5. 支持非常大的单个文件大小

#### 数据一致性相关

1. ✅ 写时复制（CoW）
   - 比就地修改的文件系统有更大的好处，详细的说明见下文
2. 校验和（Checksum）
   - 保证了数据的可靠性：由于硬件原因，从磁盘上读出的数据会出错。比如 block A 中存放的数据为 0x55，但读取出来的数据变成了 0x54，因为读取操作并未报错，所以这种错误不能被上层软件所察觉。解决这个问题的方法是保存数据的校验和，在读取数据后检查校验和。如果不符合，便知道数据出现了错误。如果最终从磁盘读取出来的数据和 checksum 不相同，Btrfs 会首先尝试读取数据的镜像备份，如果数据没有镜像备份，Btrfs 将返回错误。写入磁盘数据之前，Btrfs 计算数据的 checksum。然后将 checksum 和数据同时写入磁盘。

#### 多设备管理相关

1. ✅ 多设备管理
   - Btrfs 支持动态添加设备。用户在系统中增加新的磁盘之后，可以使用 `btrfs` 的相关命令将该设备添加到文件系统中
2. ✅ 子卷（Subvolume）
   - 把文件系统的一部分配置为一个完整的子文件系统
3. ✅ 快照（Snapshot）和克隆（Clone）
   - 支持快照
   - 支持快照的快照（增量备份）
   - 可以对单个文件进行备份
4. ✅ 内置支持 RAID，支持条带或 mirror 等常见的 RAID 功能
5. ✅ 支持热移除、热添加设备

#### 其他特性

1. ✅ 透明压缩
   - 减小了文件的大小，通过减少文件写入增幅来显著延长闪存介质的寿命。在某些特定的场景下（比如单线程、重负荷的文件 I/O）还提高了性能
2. 延迟分配（Delay allocation）
   - 在文件系统中，小块空间频繁的分配和释放会造成碎片。延迟分配则是这样一种技术 —— 当用户需要磁盘空间时，先将数据保存在内存中。将磁盘分配需求发送给磁盘空间分配器，磁盘空间分配器并不立即分配真正的磁盘空间。只是记录下这个请求便返回。磁盘空间分配请求可能很频繁，所以在延迟分配的一段时间内，磁盘分配器可以收到很多的分配请求 —— 一些请求也许可以合并，一些请求在这段延迟期间甚至可能被取消。通过这样的“等待”，往往能够减少不必要的分配，也有可能将多个小的分配请求合并为一个大的请求，从而提高 I/O 效率
3. Inline File
   - 系统中往往存在大量的小文件（几百个字节或者更小）。如果为其分配单独的数据 block，便会引起内部碎片，浪费磁盘空间。Btrfs 将小文件的内容保存在元数据中，不再额外分配存放文件数据的磁盘块。改善了内部碎片问题，也增加了文件的访问效率。得益于 Inline File 技术，Btrfs 处理小文件的效率非常高，也避免了磁盘碎片问题
4. 目录索引（Directory Index）
   - 当一个目录下的文件数目巨大时，目录索引可以显著提高文件搜索时间。 Btrfs 本身采用 B-tree 存储目录项，所以在给定目录下搜索文件的效率是非常高的。然而，Btrfs 使用 B-tree 管理目录项的方式无法同时满足 readdir 的需求。readdir 是 POSIX 标准 API，它要求返回指定目录下的所有文件；并且特别的，这些文件要按照 inode number 排序。而 Btrfs 目录项插入 B-tree 时的 Key 并不是 inode number，而是根据文件名计算的一个 hash 值。这种方式在查找一个特定文件时非常高效，但却不适于 readdir 。为此，Btrfs 在每次创建新的文件时，除了插入以 hash 值为 Key 的目录项外，还同时插入另外一种目录项索引，该目录项索引的 Key 以 sequence number 作为 B-tree 的键值。这个 sequence number 在每次创建新文件时线性增加。因为 Inode number 也是每次创建新文件时增加的，所以 sequence number 和 inode number 的顺序相同。以这种 sequence number 作为 Key 在 B-tree 中查找便可以方便的得到一个以 inode number 排序的文件列表
   - 另外以 sequence number 排序的文件往往在磁盘上的位置也是相邻的，所以以 sequence number 为序访问大量文件会获得更好的 I/O 效率
5. 预分配
   - 很多应用程序有预先分配磁盘空间的需要。他们可以通过 `posix_fallocate` 接口告诉文件系统在磁盘上预留一部分空间，但暂时并不写入数据。如果底层文件系统不支持 `fallocate`，那么应用程序只有使用 `write` 预先写一些无用信息以便为自己预留足够的磁盘空间。由文件系统来支持预留空间更加有效，而且能够减少磁盘碎片，因为所有的空间都是一次分配，因而更有可能使用连续的空间。 Btrfs 支持 `posix_fallocate`

### Btrfs 与其它文件系统功能比较

| Feature                       | Ext 2 / 3 | Ext 4   | ReiserFS | XFS     | OCFS2   | Btrfs      |
| ----------------------------- | --------- | ------- | -------- | ------- | ------- | ---------- |
| Journal (date / metadata)     | ⚫ / ⚫   | ⚫ / ⚫ | ⚪ / ⚫  | ⚪ / ⚫ | ⚪ / ⚫ | **N/A**    |
| Journal (internal / external) | ⚫ / ⚫   | ⚫ / ⚫ | ⚫ / ⚫  | ⚫ / ⚫ | ⚫ / ⚪ | N/A        |
| Offline extend / shrink       | ⚫ / ⚫   | ⚫ / ⚫ | ⚫ / ⚫  | ⚪ / ⚪ | ⚫ / ⚪ | ⚫ / ⚫    |
| Online extend / shrink        | ⚫ / ⚪   | ⚫ / ⚪ | ⚫ / ⚪  | ⚫ / ⚪ | ⚫ / ⚪ | ⚫ / ⚫    |
| Inode allocation map          | table     | table   | B\*-tree | B+-tree | table   | B-tree     |
| Sparse files                  | ⚫        | ⚫      | ⚫       | ⚫      | ⚫      | ⚫         |
| Tail packing                  | ⚪        | ⚫      | ⚫       | ⚪      | ⚪      | ⚫         |
| Defragmentation               | ⚪        | ⚫      | ⚪       | ⚫      | ⚪      | ⚫         |
| ExtArributes / ACLs           | ⚫ / ⚫   | ⚫ / ⚫ | ⚫ / ⚫  | ⚫ / ⚫ | ⚫ / ⚫ | ⚫ / ⚫    |
| Quotas                        | ⚫        | ⚫      | ⚫       | ⚫      | ⚫      | 🔴         |
| Dump / restore                | ⚫        | ⚫      | ⚪       | ⚫      | ⚪      | ⚪         |
| Default block size            | 4 KiB     | 4 KiB   | 4 KiB    | 4 KiB   | 4 KiB   | 4 KiB      |
| max. file system size         | 16 TiB    | 1 EiB   | 16 TiB   | 8 EiB   | 4 PiB   | **16 EiB** |
| max. file size                | 2 TiB     | 1 EiB   | 1 EiB    | 8 EiB   | 4 PiB   | **16 EiB** |
| Support status                | SLES      | SLES    | SLES     | SLES    | SLE HA  | SLES       |

### Btrfs 文件系统架构

### 理解写时复制（CoW）

## Btrfs 相关操作

> 📔 本节参考资料：
>
> 部分资料来自互联网（由于无法确认原作者，出处有待确认）

---

### Guide Advanced Debug (`docs/guide/advanced/debug.md`)

# 常见问题排除与解决

> ### 🏔️ 山重水复疑无路，柳暗花明又一村
>
> 本节介绍日常使用 archlinux 时可能会遇到的问题以及解决方法
> 更多问题请前往[Arch wiki](<https://wiki.archlinux.org/title/Table_of_contents_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)

## 硬件相关

### 系统没有声音

可以尝试安装 pipewire-pulse pipewire-alsa pipewire-jack

```bash
sudo pacman -S pipewire-pulse pipewire-alsa pipewire-jack
```

或者尝试安装 alsa-utils pulseaudio pavucontrol

```bash
sudo pacman -S alsa-utils pulseaudio pavucontrol
```

重启系统即可

另外，部分装有Nvidia显卡的笔记本（如dell g3-3590）可能会出现`aplay -l`只有Nvidia HDMI，无法识别内置音频的现象，这是soh驱动程序的问题~~从19年到现在还没修好~~<u>我们可以通过在内核启动时添加参数</u>解决这个问题：

```bash
snd_hda_intel.dmic_detect=0
```

::: tip ℹ️ 提示

各个boot-loader有自己的配置文件，如`grub`的配置文件在`/etc/default/grub`，修改内核启动参数在`GRUB_CMDLINE_LINUX_DEFAULT`，更改完成后需要运行`grub-mkconfig -o /boot/grub/grub.cfg`，请查阅您的boot-loader的配置说明。

:::

### 键盘没有反应

若为联想小新 Pro14 / YOGA 14s 2021 或相似机型，可能发现笔记本内建键盘没有反应。

另外，机械革命的内置键盘也存在问题，原因是其 BIOS 固件把一个 `ActiveHigh` 写为了 `ActiveLow` ，部分主板的强制修复代码（加入特殊的主板判断代码来强制覆盖 acpi 行为）已经在 6.5 以后加入内核（如蛟龙15系列），但是仍然有部分主板未被修复，比如翼龙15系列，需要我们自行修改 DSDT 解决问题。

请参阅 [🥙 杂七杂八](../rookie/basic-install-detail.md#🥙-杂七杂八) 解决。

## 服务相关

### 无法连接蓝牙设备（错误提示：br-connection-profile-unavailable,详见[Arch 社区](https://bbs.archlinux.org/viewtopic.php?id=270465)）

首先确保[系统已开启蓝牙服务](../rookie/desktop-env-and-app.md#_12-启动蓝牙-若有)

安装 bluez,bluez-utils 和 pulseaudio-bluetooth

```bash
sudo pacman -S bluez bluez-utils pulseaudio-bluetooth
```

然后重启系统即可

> 更多蓝牙相关问题见[Arch wiki](<https://wiki.archlinux.org/title/Bluetooth_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#%E7%96%91%E9%9A%BE%E8%A7%A3%E7%AD%94>)

### 关闭出错服务（错误启动项）

### 关机时卡住很久才能关机

一般屏幕会出现形如 `A stop job is running for...(1m30s)` 的信息，这是经常会遇到的关机卡住 1 分 30 秒的问题，一般来说这种情况是出现了某个进程在关机时不愿停止，需要等到超时时间到达强行停止。

通用的解决办法是调整缩短这个等待时间，建议从 1 分 30 秒调整至 30 秒，30 秒已经足够几乎所有进程正常结束。

1. 编辑 `/etc/systemd/system.conf`：

   ```bash
   sudo vim /etc/systemd/system.conf
   ```

   找到其中 `DefaultTimeoutStopSec` 一项，将其前方的井号去掉，并赋值为 30s 即可

2. 最后执行 daemon-reload 使其生效。

```bash
sudo systemctl daemon-reload
```

上述解决方案其实只是将这个等待时间缩小了，并没有解决实际问题。如果你想排查问题真正的原因所在，耐心等待其结束关机，然后重新启动电脑，执行以下命令：

```bash
journalctl -p5
```

按/(斜杠键)搜索`Killing`关键字，找到你关机的时间附近所在的匹配行，你可以在附近看到到底是哪一个进程导致了 timeout,然后再去排查这个进程有什么问题即可。

## 软件包相关

### 软件包降级

在 archlinux 上偶尔会出现某一个包的最新版本有各种问题的情况，此时需要降级该包以正常使用，包可以是普通软件，也可以是内核。

```bash
yay -S downgrade
```

安装此包即可，使用方法也很简单，downgrade 后加上需要降级的包名即可，随后会提示你选择需要降级到的版本，点选即可。

### 升级系统时

可能存在升级系统时异常关机或程序异常退出的情况，移除 pacman 的 db 锁即可

```bash
sudo rm /var/lib/pacman/db.lck
```

## KDE 桌面环境相关

### 手动开关显示特效混合器（混成器）

有时显示特效混合器会因为某些原因需要手动开启或关闭，但是目前在 KDE 下显示特效混合器在设置里无法在不关机的情况下直接关闭，下面命令提供手动开关混成器的效果：

```bash
qdbus org.kde.KWin /Compositor suspend # 禁用
qdbus org.kde.KWin /Compositor resume # 开启
```

## deepin-wine5 相关

## 滚挂了怎么办

### 为什么会滚挂

较长时间段内没有升级可能会造成各种问题（俗称`滚挂了`），这是因为 archlinux 的软件包更新速度很快，如果你的系统没有及时升级，可能会出现各种问题，比如软件包依赖问题，软件包冲突问题等等。

### 怎么解决

多看官网公告，勤滚，一般就不会挂。

To be continued...

---

### Guide Advanced Make Install Disk (`docs/guide/advanced/make-install-disk.md`)

# 制作系统盘

> ### 🥀 落红不是无情物，化作春泥更护花
>
> 本节介绍在 archlinux 下如何制作系统安装盘（启动盘）以及用来维护的 archlinux 内存系统盘（也就是将 archlinux 安装到 U 盘里）

## 通用方法

### Ventoy（推荐）

[Ventoy](https://www.ventoy.net/cn/index.html)<sup>cn / aur</sup> 是一个制作可启动 U 盘的开源工具。

Ventoy 有诸多优点：

- **无需反复地格式化 U 盘**，只需要把 ISO / WIM / IMG / VHD(x) / EFI 等类型的文件拷贝到 U 盘里面就可以启动了，无需其它操作
- 可以一次性拷贝多个不同类型的镜像文件，Ventoy 会在启动时显示一个菜单来供用户进行选择
- 同一个 U 盘可以同时支持 x86 Legacy BIOS、IA32 UEFI、x86_64 UEFI、ARM64 UEFI 和 MIPS64EL UEFI 模式

Ventoy 支持 [大部分常见类型的操作系统](https://www.ventoy.net/cn/isolist.html)。

安装 Ventoy：

::: code-group

```bash [cn]
sudo pacman -S ventoy-bin
```

```bash [aur]
yay -S aur/ventoy-bin
```

:::

#### 命令行模式

1. 制作 Ventoy U 盘：

   ```bash
   lsblk # 分辨要安装 Ventoy 的 U 盘
   sudo ventoy -i -g -r size /dev/sdx # 按提示操作即可
   sudo ventoy -l # 显示 U 盘中的 Ventoy 相关信息
   ```

   > 📑 命令参数说明：
   >
   > - `-i` —— 安装 Ventoy 到 U 盘中（如果对应磁盘已经安装了 Ventoy 则会返回失败）
   > - `-g` —— 使用 GPT 分区格式，默认是 MBR 格式
   > - `-r` —— 在 U 盘最后保留部分空间（可选，可以分区并格式化后使用）：
   >   - `size` —— 空间大小（单位是 MB）

   

   

   ::: danger ☢️ 警告

   Ventoy 不会检查输入的设备是 U 盘还是本地硬盘，如果输错了有可能会把系统盘格式化掉！

   :::

   ::: danger ☢️ 警告

   安装 Ventoy 到 U 盘会使 U 盘所有数据丢失，请事先确认。

   :::

   ::: tip ℹ️ 提示

   可用选项 `-I` 强制安装 Ventoy 到 U 盘中：

   ```bash
   sudo ventoy -I -g -r size /dev/sdx
   ```

   可用以下命令升级 U 盘中已经安装好的 Ventoy：

   ```bash
   sudo ventoy -u /dev/sdx
   ```

   :::

2. 拷贝镜像文件到镜像分区（卷标为 `Ventoy`）：

   ```bash
   lsblk # 分辨镜像分区
   sudo mount /dev/sdxn /mnt/mount_point # 挂载镜像分区
   sudo cp /path/of/some_os.iso /mnt/mount_point
   ls -hl /mnt/mount_point # 复查一下
   ```

   

   ::: tip ℹ️ 提示

   你可以将多个镜像文件拷贝到镜像分区。

   :::

   ::: tip ℹ️ 提示

   也可以在 Dolphin 文件管理器中挂载并复制。

   :::

自此，一个支持多系统的安装盘便制作完成了。

::: tip ℹ️ 提示

将 U 盘剩余空间创建新分区并格式化即可使用：

1. 类似 [7-1. 分区](../rookie/basic-install.md#_7-1-分区)，用 `cfdisk` 命令创建新分区。在 `Type` 中选择 `Microsoft 储存空间`（NTFS）：

   ```bash
   sudo cfdisk /dev/sdx
   ```

   

2. 格式化分区：

   ```bash
   sudo mkfs.ntfs -f /dev/sdxn # -f：快速格式化
   ```

   

也可以使用图形化的分区工具如 [KDE 分区管理器](https://apps.kde.org/partitionmanager/)。

:::

#### 图形化模式

1. 打开 Ventoy 基于浏览器的图形化操作界面：

   ```bash
   sudo ventoyweb
   ```

   

2. 使用浏览器访问提示的本地端口即可：

   

3. 按照界面提示完成操作即可，在终端按下 `Ctrl` + `C` 即可退出

::: tip ℹ️ 提示

目前 Linux 下 Ventoy 图形化模式还不太稳定，有可能制作失败。建议使用命令行模式。

:::

### balenaEtcher

::: tip ℹ️ 提示

此方法**不适用于制作 Windows 安装盘**。

:::

[balenaEtcher](https://www.balena.io/etcher/)<sup>aur</sup> 界面更加傻瓜一点。但是只支持对单个完整 U 盘进行制作，即使还有剩余的空间也无法使用。

1.安装 balenaEtcher：

::: code-group

```bash [aur]
yay -S etcher-bin
```

```bash [aur (git)]
yay -S etcher-git
```
:::



::: tip ℹ️ 提示

[`balena-etcher`](https://aur.archlinux.org/packages/balena-etcher) 打开后会白屏，无法正常使用。
请安装 [`etcher-bin`](https://aur.archlinux.org/packages/etcher-bin/) 或 [`etcher-git`](https://aur.archlinux.org/packages/etcher-git/)。

:::

2.打开 balenaEtcher，按提示操作即可：
   

::: tip ℹ️ 提示

使用 balenaEtcher 制作完成的安装盘若要重新作为普通 U 盘使用，需要用磁盘分区管理工具（如 [KDE 分区管理器](https://apps.kde.org/partitionmanager/)、[DiskGenius](https://www.diskgenius.cn/)<sup>EULA</sup>）重建分区表才能正常格式化。

:::

## 手动制作

### dd 命令

::: tip ℹ️ 提示

此方法**不适用于制作 Windows 安装盘**。

:::

`dd` 命令用于读取、转换并输出数据。

使用 `dd` 命令即可简单的制作 Linux 的安装盘。注意 `of` 的参数为 `sdx`，不是 `sdx1`、`sdx2` 等：

```bash
sudo dd bs=4M if=/path/of/some_os.iso of=/dev/sdx status=progress oflag=sync
```

> 📑 命令参数说明：
>
> - `bs=4M` —— 指定一个较为合理的文件输入输出块大小
> - `status=progress` —— 用来输出刻录过程总的信息
> - `oflag=sync` —— 用来控制写入数据时的行为特征。确保命令结束时数据及元数据真正写入磁盘，而不是刚写入缓存就返回

::: danger ☢️ 警告

此步骤会使 U 盘所有数据丢失，请事先确认。

:::

::: tip ℹ️ 提示

此时 U 盘应该未挂载。若已经挂载了请先卸载掉：

```bash
sudo umount /mnt/mount_point
```

:::

### win10 / win11 安装盘

以往在 Linux 下手动制作一个 win10 / win11 安装盘还是很简单的，但是随着近几年微软的更新，其 iso 安装镜像中存在一个名为`install.wim`的文件，其大小已经超出了 4GB（fat32 要求的单个文件最大 4GB）的限制。这使得必须用额外的步骤才能制作一个启动盘。

这里依旧使用 fat32 格式是因为其兼容性是最好的，NTFS 的 UEFI 安装盘很多情况下不被识别。

1. 首先用 `parted` 命令创建 U 盘的分区：

   ```bash
   sudo parted /dev/sdx # 执行 parted，进行磁盘类型变更
   (parted) mktable # 输入 mktable
   新的磁盘卷标类型？ gpt # 输入 gpt，将磁盘类型转换为 GPT 类型。如磁盘有数据会警告，输入 Yes 即可
   (parted) quit # 退出 parted 命令行交互
   ```

   

   ::: danger ☢️ 警告

   重建分区表会使 U 盘所有数据丢失，请事先确认。

   :::

   ::: tip ℹ️ 提示

   也可以使用图形化的分区工具如 [KDE 分区管理器](https://apps.kde.org/partitionmanager/)。

   :::

2. 接下来类似 [7-1. 分区](../rookie/basic-install.md#_7-1-分区)，用 `cfdisk` 命令创建新分区。在 `Type` 中选择 `Microsoft 基本数据`：

   ```bash
   sudo cfdisk /dev/sdx
   ```

   

3. 接下来使用 `mkfs.vfat` 命令格式化所创建的分区，这样 U 盘就准备好了：

   ```bash
   sudo mkfs.vfat /dev/sdxn
   ```

   

4. 接下来下载 win10 / win11 的 iso 镜像并解压。由于 Ark 尚不支持 UDF 文件系统的 ISO 文件，我们需要手动挂载并将其中的内容复制出来：

   

   ```bash
   sudo mount -o loop /path/of/windows_iso_name.iso /mnt/mount_point
   cp -a /mnt/mount_point /path/of/some_folder
   ```

   

5. 得到复制出来的文件后，最后要进行的就是压缩 `install.wim` 文件（在 `sources` 文件夹下）。这里需要首先安装一个包 [`wimlib`](https://archlinux.org/packages/extra/x86_64/wimlib/)（可能已经作为依赖安装了）：

   ```bash
   sudo pacman -S wimlib
   ```

6. 接下来进行压缩。这一步会持续较长时间，耐心等待。完成后可以看到文件已经被压缩到了 3.x GB：

   ```bash
   cd /path/of/some_folder/sources
   sudo wimlib-imagex optimize install.wim --solid
   ls -hl install.wim
   ```

   

7. 最后把全部文件复制到 U 盘中即可：

   ```bash
   sudo umount /mnt/mount_point # 卸载掉镜像
   sudo mount /dev/sdxn /mnt/mount_point # 挂载 U 盘
   sudo cp -r /path/of/some_folder/* /mnt/media # 复制全部文件
   ```

   

8. 复查一下并卸载 U 盘：

   ```bash
   ls -hl /mnt/mount_point # 复查一下
   sudo umount /mnt/mount_point # 卸载 U 盘
   ```

   

自此，一个 win10 / win11 安装盘便制作完成了。

## 制作 archlinux 内存系统盘

::: warning ⚠️ 注意

此处内容待核实。

:::

> 🔗 相关链接：
>
> 如有需要可参阅 [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)。

[Archiso](https://archlinux.org/packages/extra/any/archiso/)<sup>extra / aur</sup> 是自动化制作最新版 archlinux 镜像的工具集，可用于制作定制化的 archlinux 镜像。

### 1. 准备工作

1. 首先安装 Archiso 相关包：

::: code-group

```bash [extra]
sudo pacman -S archiso
```

```bash [aur (git)]
yay -S archiso-git
```

:::



2. 复制 `releng` 配置方案到合适位置：

   ```bash
   sudo cp -r /usr/share/archiso/configs/releng /path/of/some_folder/archlinux_live
   cd /path/of/some_folder/archlinux_live # 进入目录
   ```

   

   ::: warning ⚠️ 注意

   务必使用 root 权限操作（使用 `sudo` 提权），否则可能造成问题。

   :::

   ::: tip ℹ️ 提示

   Archiso 提供了两种配置方案：

   - `baseline` —— 只包含基本系统（只包括从介质启动实时环境所需的最低限度的软件包）
   - `releng` —— 可以制作定制镜像（用于创建正式的每月安装镜像，可以作为创建自定义镜像的起点）

   显然，这里我们使用 `releng` 配置方案。

   :::

### 2. 进行定制

首先了解下各个文件的用途：



- `packages.x86_64` —— 一份要安装在 Live 系统镜像的软件包列表，一行一个
- `pacman.conf` —— Pacman 的配置文件
- `airootfs` —— Live 系统的 rootfs（根文件系统，遵循 rootfs 的目录规则）。除了安装的包之外，其它的定制（包括启动执行脚本等）都在这里
- `efiboot` / `syslinux` —— 用于设置 BIOS / EFI 启动的配置

1. 编辑 `pacman.conf` 配置文件：

   ```bash
   sudo vim /path/of/some_folder/archlinux_live/pacman.conf
   ```

   在文档结尾处加入下面的文字，来添加 `archlinuxcn` 源。推荐的镜像源（选一个即可）也一并列出：

   ```conf {2}
   [archlinuxcn]
   Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch # 中国科学技术大学开源镜像站
   Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch # 清华大学开源软件镜像站
   Server = https://mirrors.hit.edu.cn/archlinuxcn/$arch # 哈尔滨工业大学开源镜像站
   Server = https://repo.huaweicloud.com/archlinuxcn/$arch # 华为开源镜像站
   ```

   去掉 `[multilib]` 一节中两行的注释，来开启 32 位库支持：

   

2. 然后修改 `packages.x86_64`：

   ```bash
   sudo vim packages.x86_64
   ```

   在文档结尾处加入 `archlinuxcn-keyring` 和其它需要预安装的包（根据喜好自定义）：

   ```bash
   # custom
   archlinuxcn-keyring
   htop # 系统监控与进程管理软件（top 的升级版）
   bashtop # 系统监控与进程管理软件（top 的豪华升级版）
   iftop # 流量监控工具
   iotop # 磁盘 I/O 监控工具
   ipmitool # 用于管理和配置，支持智能平台管理接口（IPMI）1.5 版和 2.0 版规范的设备的实用程序（给运维用的）
   fastfetch # 打印系统信息
   plasma-meta
   konsole
   dolphin
   ntfs-3g
   partitionmanager # KDE 分区管理器
   adobe-source-han-serif-cn-fonts
   wqy-zenhei
   noto-fonts
   noto-fonts-cjk
   noto-fonts-emoji
   noto-fonts-extra
   firefox
   ark
   gwenview
   yay
   timeshift
   mesa
   lib32-mesa
   vulkan-intel
   lib32-vulkan-intel
   cowsay
   ```

   

3. 可选向镜像里添加文件：

   - `airootfs` —— 看作是 Live 系统上的 '/' 根目录，在此中存放文件将覆盖或复制到对应的位置
   - `airootfs/etc/skel` —— 在 root 用户主目录里放置文件的方法有些许不同。不要把它们放在 `airootfs/home`，而是放置在此处

   以 `/root/.zshrc` 为例：

   ```bash
   sudo mkdir /path/of/some_folder/archlinux_live/airootfs/etc/skel
   sudo vim /path/of/some_folder/archlinux_live/airootfs/etc/skel/.zshrc
   ```

   

   添加以下内容：

   ```bash
   echo 'archlinux 简明指南' | cowsay
   ```

   

   > #### 🔗 相关链接
   >
   > 如有需要可参阅 [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#%E5%90%91%E6%98%A0%E5%83%8F%E9%87%8C%E6%B7%BB%E5%8A%A0%E6%96%87%E4%BB%B6>)。

4. 配置登录管理器：

   1. 启用登录管理器的 systemd 服务来做到在引导时启动 X：

      ```bash
      sudo ln -s /usr/lib/systemd/system/sddm.service /path/of/some_folder/archlinux_live/airootfs/etc/systemd/system/display-manager.service
      ```

      

   2. 为了让图形环境在启动过程中自动启动，创建并编辑 `airootfs/root/customize_airootfs.sh`：

      ```bash
      sudo vim /path/of/some_folder/archlinux_live/airootfs/root/customize_airootfs.sh
      ```

      添加以下内容：

      ```bash
      systemctl set-default graphical.target
      ```

      

### 3. 开始制作

1. 创建工作目录和输出目录：

   ```bash
   sudo mkdir -p /mnt/work /mnt/out
   ```

   

2. 开始制作镜像文件：

   ```bash
   sudo mkarchiso -v -w /mnt/work -o /mnt/out /path/to/profile/
   ```

   

3. 根据前述方法 [Ventoy（推荐）](make-install-disk.md#ventoy-推荐)、[balenaEtcher](make-install-disk.md#balenaetcher) 或 [dd 命令](./advanced/make-install-disk.md#dd-命令) 将镜像制作为 archlinux 内存系统盘即可

> 📔 本节参考资料：
>
> - [制作 Arch Linux 内存系统启动盘](https://blog.phoenixlzx.com/2018/12/14/bootable-archlinux-in-memory-rescue-system/)（知识共享署名-相同方式共享 4.0 国际许可协议）

---

### Guide Advanced Optional Cfg 1 (`docs/guide/advanced/optional-cfg-1.md`)

# 可选配置（基础篇）

> ### 🎑 一分耕耘，一分收获
>
> 这一节的配置都是可选的。这些配置根据个人喜好进行配置，往往可以让系统变得更好用
>
> Linux 基础相关的一些配置（如 alias 的配置）**不会**被讨论

## ⚙ 调整部分系统设置

### 以空会话启动

默认情况下，KDE 桌面环境中关机之后再开机会恢复先前保存的对话（如浏览器没有关掉，那么开机之后浏览器还在）。

如果你不喜欢这样，请按照以下步骤设置：

1. 打开 `系统设置` > 点击侧栏 `开机与关机` > `桌面会话`

2. 将 `登入时` 的选项改为 `以空会话启动`：



3. 点击 `应用` 保存设置

### 点击文件 / 文件夹行为

默认情况下，KDE 桌面环境中打开文件 / 文件夹是单击，若不习惯常常造成误触发。

若希望改为双击打开文件 / 文件夹（类似 win10），请按照以下步骤设置：

1. 打开 `系统设置` > 点击侧栏 `工作区行为` > `常规行为`

2. 将 `点击文件或文件夹时` 的选项改为 `选中它们`：



3. 点击 `应用` 保存设置

### 触摸板

一般情况下，libinput 已经安装到你的电脑，触摸板应该可用。

但是默认情况下，触摸板并不启用 `轻触点击`、`自然滚动` 等功能，打开 `系统设置` > 点击侧栏 `输入设备` > `触摸板` 来修改你想要的触摸板行为。

::: tip ℹ️ 提示

虽然 libinput 已经提供了手势操作，比如：捏、滑。但部分桌面环境（DE）和窗口管理器（WM）可能还没有支持这些功能。想要使用更多触摸板手势，可参阅 [ArchWiki 相关说明](https://wiki.archlinuxcn.org/zh/Libinput#%E6%89%8B%E5%8A%BF%E6%93%8D%E4%BD%9C)。

:::

## 🀄 字体设置

字体可以在 `系统设置` > `外观` > `字体` 中进行设置，一般默认即可：



::: tip ℹ️ 提示

有关用户全局级别更改日文异型字的设置，可参阅 [ArchWiki 相关说明](<https://wiki.archlinux.org/index.php/Localization_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)/Simplified_Chinese_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#%E4%BF%AE%E6%AD%A3%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%E6%98%BE%E7%A4%BA%E4%B8%BA%E5%BC%82%E4%BD%93%EF%BC%88%E6%97%A5%E6%96%87%EF%BC%89%E5%AD%97%E5%BD%A2>)。

:::

::: tip ℹ️ 提示

如果使用了 noto-fonts-cjk 作为汉字字体，请注意在该包从 20230817-2 版本 (打包于2024年06月08日) 开始移除了 `70-noto-cjk.conf`，可能会导致部分字体回落（表现为字体显示不统一，如 `字体` 的 `体`，`桌面` 的 `面` 在部分应用中显示为衬线字体（宋体））。
要解决这个问题，请参阅 [这里](https://bbs.archlinuxcn.org/viewtopic.php?pid=60100)

:::

### 安装 Windows 字体

Windows 字体不仅日常可能会使用到，还可以让部分需要这些字体的应用（如 Wine）显示字体不会乱码。

* 从本地 Windows 获取字体文件

   1. 首先需要挂载 Windows 下的 C 盘所在分区。若分区为 Bitlocker 上锁分区，可通过 Dolphin 使用对应的恢复密钥解锁

      ::: tip ℹ️ 提示

      有关解锁密钥的获取请参阅 [5. 获取 Bitlocker 恢复密钥](../rookie/pre-install.md#_5-%E8%8E%B7%E5%8F%96-bitlocker-%E6%81%A2%E5%A4%8D%E5%AF%86%E9%92%A5)。

      :::

   2. 建立 archlinux 下存放 Windows 字体的文件夹：

      ```sh
      sudo mkdir /usr/share/fonts/WindowsFonts
      ```

   3. 进入 Windows 的 `Fonts` 文件夹，将字体复制到建立的文件夹并设置合理的权限：

      ```sh
      cd /path/to/C:/Windows/Fonts # 或者通过 Dolphin 在此文件夹下右键 > 点击 打开终端
      sudo cp ./* /usr/share/fonts/WindowsFonts
      sudo chmod 755 /usr/share/fonts/WindowsFonts/* # 设置合理的权限
      ```

      

   4. 刷新字体：

      ```sh
      fc-cache -vf # -v：显示过程
      ```

* 从 AUR 安装

   通过以下命令安装 Windows 11 的中文字体
   ```
   yay -S ttf-ms-win11-auto-zh_cn
   ```
   ::: tip ℹ️ 提示

   原理是网络挂载 Windows 11 安装镜像并从中提取字体文件，完全合法   

   :::

> 🔗 相关链接：
>
> 关于字体的美化请参阅 [系统美化](./beauty-2.html#_6-更改字体)。

## 🍀️ 输入法

由于 Fcitx5 自带词库简陋，部分本地化符号难以输入（如中文输入下按下 `/` 键无法打出 `、`），Emoji 输入复杂等问题，本指南提供额外输入方案。

在步骤 [10. 安装输入法](/guide/rookie/desktop-env-and-app.md#_10-安装输入法) 中，我们已经安装了 Fcitx5 相关的包。接下来的操作要依赖之前的包。

1. 通过以下命令安装 Rime 输入法：

```bash
sudo pacman -S fcitx5-rime
```



2. 然后添加 Rime 输入法。打开 `系统设置` > 点击侧栏 `语言和区域设置` > `输入法`：



::: tip ℹ️ 提示

若提示检测到更新，点击 `更新` 即可。

:::

3. 点击 `添加输入法` > 找到**汉语**下的 `中州韵` > 点击 `添加`：



4. 若不想要之前的 Pinyin 输入法了，可以点击它最右边的按钮移除掉：



5. 通过以下命令安装 [🍀️ 四叶草拼音输入方案](https://github.com/fkxxyz/rime-cloverpinyin)<sup>cn / aur</sup>（四叶草许久没更新了，可换后文的雾凇拼音）：

::: code-group

```bash [cn]
sudo pacman -S rime-cloverpinyin
```

```bash [aur]
yay -S aur/rime-cloverpinyin
```

:::



5. 然后切换到 🍀️ 四叶草拼音输入方案。使用 `vim` 创建并编辑下述文件：

```bash
mkdir ~/.local/share/fcitx5/rime # 创建 rime 目录
vim ~/.local/share/fcitx5/rime/default.custom.yaml
```

在文件中加入以下内容：

```yaml
patch:
  "menu/page_size": 8
  schema_list:
    - schema: clover
```

其中 `8` 表示打字的时候输入面板的每一页的候选词数目，可以设置成 `1 ~ 9` 任意数字。



::: tip ℹ️ 提示

若有需要，关于 `default.custom.yaml` 文件的更多解释，可以参考 [Rime 官方定制指南](https://github.com/rime/home/wiki/CustomizationGuide)。

:::

6. 保存并退出 `vim`

7. 在可输入的位置通过 `Ctrl` + `空格` 切换到 `Rime` 输入法（此时将提示 `Rime` 就绪），在输入法托盘菜单的 `🌏 方案列表` 里面应该就有 `🍀️四叶草拼音输入法` 的选项了：



::: tip ℹ️ 提示

若之前 Rime 输入法已经启动了，那么请右键输入法托盘图标 > 点击 `重新部署`。在输入法托盘菜单的 `🌏 方案列表` 里应该就有 `🍀️四叶草拼音输入法` 的选项了。

若 `🍀️四叶草拼音输入法` 不是默认方案，只需点击 `🌏 方案列表` > 点击 `🍀️四叶草拼音输入法` 即可：



:::

8. 尝试在各个软件中输入中文：



::: tip ℹ️ 提示

同样的，通过 `Ctrl` + `空格` 切换中英文输入（若 Pinyin 输入法未移除则会在这三者之间循环切换）。

:::

### 雾凇拼音(Rime-ice)输入法

1. 安装[rime-ice输入法](https://github.com/iDvel/rime-ice)：

```bash
yay -S rime-ice
```

2. 创建ice的配置文件：

```bash
mkdir ~/.local/share/fcitx5/rime # 创建 rime 目录
vim ~/.local/share/fcitx5/rime/default.custom.yaml
```

输入以下内容

```yaml
patch:
  # 仅使用「雾凇拼音」的默认配置，配置此行即可
  __include: rime_ice_suggestion:/
  # 以下根据自己所需自行定义
  __patch:
    menu/page_size: 5   #候选词个数
```

保存并退出

3. 右键输入法图标，重新启动或重新部署即可启用雾凇拼音输入法

4. （可选）增加萌娘百科词库

雾凇拼音取消了对萌娘词库的支持，如果需要得自己添加

```bash
yay -S rime-pinyin-moegirl
```

安装完成之后将配置复制到个人配置目录

```bash
cp /usr/share/rime-data/rime_ice.dict.yaml ~/.local/share/fcitx5/rime/rime_ice.dict.yaml
```

打开配置文件

```bash
vim ~/.local/share/fcitx5/rime/rime_ice.dict.yaml
```

根据提示在`import_tables:`中添加词库

```yaml
import_tables:
  ...
  ...
  - moegirl
```

5. 尝试输入中文

> 🔗 相关链接：
>
> 关于 Fcitx5 输入法的美化请参阅 [系统美化](./beauty-2.html#_2-更改-fcitx5-输入法皮肤)。

## 🚀 zsh

zsh 基本兼容 bash，但相比 bash，又有诸多优点：

1. 更强大的 `tab` 补全
2. 更智能的切换目录
3. 大小写字母自动更正
4. 更强大的 `alias` 命令
5. 丰富多彩的主题
6. 可以集成各种类型的插件

> #### 🍧 碎碎念
>
> 当然，也有很多人对 bash 爱的深沉，这些都看个人喜好啦。

::: tip ℹ️ 提示

[oh-my-zsh](https://ohmyz.sh/) 实际上并没有那么好用，反而拖慢了 Zsh 的速度，本指南不会介绍。

若有需要请自行查阅相关资料。

:::

1. 通过以下命令安装 zsh 相关的包：

```bash
sudo pacman -S zsh zsh-autosuggestions zsh-syntax-highlighting zsh-completions
```

> 📑 相关包说明：
>
> - [`zsh-autosuggestions`](https://github.com/zsh-users/zsh-autosuggestions) —— 命令自动补全插件
> - [`zsh-syntax-highlighting`](https://github.com/zsh-users/zsh-syntax-highlighting) —— 语法上高亮插件
> - [`zsh-completions`](https://github.com/zsh-users/zsh-completions) —— 补充补全定义



2. 安装 [autojump](https://github.com/wting/autojump)<sup>cn / aur</sup> 插件：

::: code-group

```bash [cn]
sudo pacman -S autojump
```

```bash [aur]
yay -S aur/autojump
```

:::



3. 更改账户的默认 Shell：

::: code-group

```bash [非 root 账户]
chsh -l # 查看安装了哪些 Shell
chsh -s /usr/bin/zsh # 修改当前账户的默认 Shell
```

```bash [root]
chsh -l # 查看安装了哪些 Shell
sudo chsh -s /usr/bin/zsh root
```

:::





::: tip ℹ️ 提示

可以不为 root 账户更改默认 shell。

:::

4. 注销并重新登录 > 打开终端，此时会弹出如下界面进行设置：



- 按下 `0` 将创建一个只包含注释的 `~/.zshrc` 文件，在下次启动时不会再次弹出设置选项。
- 按下 `1` 即可进入设置：

```zsh
Please pick one of the following options:

(1)  Configure settings for history, i.e. command lines remembered
     and saved by the shell.  (Recommended.)

(2)  Configure the new completion system.  (Recommended.)

(3)  Configure how keys behave when editing command lines.  (Recommended.)

(4)  Pick some of the more common shell options.  These are simple "on"
     or "off" switches controlling the shell's features.

(0)  Exit, creating a blank ~/.zshrc file.

(a)  Abort all settings and start from scratch.  Note this will overwrite
     any settings from zsh-newuser-install already in the startup file.
     It will not alter any of your other settings, however.

(q)  Quit and do nothing else.  The function will be run again next time.
```

根据提示完成设置即可。也可以创建一个只包含注释的 `~/.zshrc` 文件以使用默认值。

::: tip ℹ️ 提示

root 账户需要手动创建 `root/.zshrc` 文件。

:::

::: tip ℹ️ 提示

若希望重新设置，只需要把 `~/.zshrc` 文件删掉即可。

:::

5. 为了让插件生效，需要修改 `~/.zshrc`。使用 `vim` 编辑 `~/.zshrc` 文件：

::: code-group

```zsh [非 root 账户]
vim ~/.zshrc
```

```zsh [root]
sudo vim root/.zshrc
```

:::

将以下内容分别添加到需要设置 zsh 账户的 `~/.zshrc` 中：

```zsh
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/autojump/autojump.zsh
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
```



6. 关闭并重新打开终端，测试一下：



::: tip ℹ️ 提示

有关 autojump 的使用可以参阅 [autojump repo](https://github.com/wting/autojump)。

:::

::: tip ℹ️ 提示

可能需要：

- 将在 `~/.bash_profile` 所做的配置复制到 `~/.zsh_profile`
- 将在 `~/.bashrc` 所做的配置复制到 `~/.zshrc`

如在步骤 [1. 配置 root 账户的默认编辑器](/guide/rookie/desktop-env-and-app.md#_1-配置-root-账户的默认编辑器) 和 [8. 配置非 root 账户的默认编辑器](/guide/rookie/desktop-env-and-app.md#_8-配置非-root-账户的默认编辑器) 所做的配置。

:::

::: tip ℹ️ 提示

在部分终端，<kbd>Home</kbd>键，<kbd>End</kbd>键和<kbd>Del</kbd>键在zsh里不起作用。一种方法是`autoload zkbd` 来问答式生成按键和含义对应表，一种是手动绑定按键。
前者是通用成熟的解决方案，但是为了一个<kbd>Home</kbd>键而去安装一个插件未免有些小题大做了。实际上，我们只需要我们的按键的转义字符，并
 在`~/.zshrc`追加`bindkey`便可。

下面这个小技巧可能鲜为人知，就是利用 `cat` 来查看按键码。很简单，在命令行下直接`cat`+ <kbd>Enter</kbd>，然后接着按你想知道转义字符的按键，下面以<kbd>Home</kbd>键为例：



我们获知：在我的设备上，<kbd>Home</kbd>键对应的转义字符是`^[[H`。依样画葫芦，我以如此格式在`~/.zshrc`绑定我的按键：

```bash
bindkey  "^[[H"   beginning-of-line
bindkey  "^[[F"   end-of-line
bindkey  "^[[3~"  delete-char
```

不同设备按键的转义字符不一样，请务必依照自己设备的实际情况操作。

:::

> 🔗 相关链接：
>
> 关于 zsh 的美化请参阅 [系统美化](./beauty-3.html#_2-zsh-美化)。

## ✨ DPI 设置

若发现 SDDM 显示字体和图标过小，可以尝试以下步骤。

1. 打开 `系统设置` > 点击侧栏 `开机与关机` > `登录屏幕（SDDM）`：



2. 点击 `同步配置` > `同步`：



3. 重启查看是否成功修改。若大小已经改变，则无需下面的步骤。若没有改变（通常发生在 NVIDIA 独显模式下），请确保你已经按照步骤 []() 安装了 optimus-manager，然后右键 optimus-manager 托盘图标 > 点击 `设置` > 点击侧栏 `NVIDIA`

4. 将 `DPI` 的数值适量提高：



::: tip ℹ️ 提示

`DPI` 数值可参考步骤 [🀄 字体设置](./optional-cfg.md#🀄-字体设置) 中下方的 `固定字体 DPI`：



:::

5. 点击 `确定` 保存设置

6. 重启查看效果

## ⚒ 虚拟机增强功能（客体机插件）

[VirtualBox 客体机插件](https://archlinux.org/packages/?name=virtualbox-guest-utils) 为虚拟机提供了必要的驱动与应用，作用包括改善图像分辨率与鼠标支持等。通过安装此插件，虚拟机分别率会自动适应虚拟机窗口大小。

1. 通过以下命令安装 VirtualBox 客体机插件：

```bash
sudo pacman -S virtualbox-guest-utils
```

2. 启动 `vboxservice` 服务：

```bash
sudo systemctl enable vboxservice.service
```



3. 重启虚拟机 > 点击菜单栏 `设备` > `拖放` > 点击 `双向`：



4. 同理，`共享粘贴板` > 点击 `双向`：



5. 尝试调整窗口大小、共享粘贴板、拖拽文件功能：



archlinux 向 win10 拖拽文件。

::: tip ℹ️ 提示

即使开启了双向拖拽文件，win10 向 archlinux 拖拽文件也可能无效。

:::



archlinux 根据窗口大小自动调整分辨率。



共享粘贴板。

---

### Guide Advanced Optional Cfg 2 (`docs/guide/advanced/optional-cfg-2.md`)

# 可选配置（进阶篇）

> ### 🎑 一分耕耘，一分收获
>
> 这一节的配置都是可选的。这些配置根据个人喜好进行配置，往往可以让系统变得更好用

## 🐧 更换可选内核

如有需要可参阅 [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Kernel_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>) 以及 [rEFind 官方文档](http://www.rodsbooks.com/refind/linux.html)。

除了 [linux](https://archlinux.org/packages/core/x86_64/linux/) 内核，还有以下官方支持的内核可供选择：

- [linux-zen](https://archlinux.org/packages/extra/x86_64/linux-zen/)
  - 一些内核黑客合作的结果，是适合日常使用的优秀内核
  - 以吞吐量和功耗为代价来换取性能
  - 相对 linux 内核加入了 Fsync 功能，在一些采用 .Net 的 wine 游戏中会有 [明显的性能提升](https://github.com/ValveSoftware/Proton/issues/3706#issuecomment-636632984)
- [linux-lts](https://archlinux.org/packages/core/x86_64/linux-lts/)
  - 包含了最新的长期支持的 Linux 内核和内核模块
  - 可以放心地在更长的时间内享受相同的内核版本
  - 若硬件不是最新硬件，则可以通过安装稍早的 LTS 内核提高稳定性
- [linux-hardened](https://archlinux.org/packages/extra/x86_64/linux-hardened/)
  - 更加注重安全的内核，采用一系列 [加固补丁](https://github.com/GrapheneOS/linux-hardened) 以减少内核和用户空间产生漏洞的风险
  - 启用了一些加固选项，比如用户命名空间（同时通过补丁禁用未授权用户的访问）、审计以及 SELinux
  - 需要注意的是使用此内核时部分软件包将不起作用

::: code-group

```bash [zen]
sudo pacman -S linux-zen linux-zen-headers
```

```bash [lts]
sudo pacman -S linux-lts linux-lts-headers
```

```bash [hardened]
sudo pacman -S linux-hardened linux-hardened-headers
```

:::







::: tip ℹ️ 提示

更换内核后还需要留意部分应用需要更换为相应的 dkms 版本。

本指南涉及的应用如下：

- [`nvidia-dkms`](/guide/rookie/graphic-driver.md#nvidia-独立显卡)
- [`bbswitch-dkms`](/guide/rookie/graphic-driver.md#电源管理)

:::

> #### 📑 相关资料：DKMS
>
> DKMS，即 **D**ynamic **K**ernel **M**odule **S**ystem。可以使内核变更（如升级）后自动编译模块，适配新内核。

2. 为了让 GRUB 记住最后在 GRUB 引导菜单里选择的内核，以便在下次启动时自动使用对应的内核，需要编辑 `/etc/default/grub` 文件：

```bash
sudo vim /etc/default/grub
```

在适当位置添加或修改为如下三行：

```bash
GRUB_DEFAULT=saved # 默认使用保存的内核条目
GRUB_SAVEDEFAULT=true # 保存最后一个使用的内核条目
GRUB_DISABLE_SUBMENU=y # 可选，禁用 GRUB 子菜单，使选择内核的操作更简单
```





3. 安装完毕后通过以下命令更新一下引导配置即可：

```bash
sudo grub-mkconfig -o /boot/grub/grub.cfg
```



4. rEFind 不需要做额外步骤，但会使用安装的最后一个内核作为默认内核。若想改变默认启动内核，需要修改 rEFind 配置文件：

```bash
sudo vim /boot/efi/EFI/refind/refind.conf
```

::: tip ℹ️ 提示

若您不是按照本指南章节 [archlinux 基础安装](/guide/rookie/basic-install.md) 安装的 archlinux，请确认您的 EFI 分区（ESP）位置。

:::

将 `fold_linux_kernels false` 前面的注释（`#`）去掉：



诚然，这不是一个优雅（elegant）的方案。它会将所有的内核直接在引导菜单首页显示出来，而不是在子菜单选择。但 [唯有这样](https://bbs.archlinux.org/viewtopic.php?id=258751) rEFind 才能记住最后选择的内核，而不是安装的最后一个内核。

5. 重启，查看引导菜单效果：





6. 使用以下命令查看内核：

::: code-group

```bash [uname]
uname -r
```

```bash [neofetch]
neofetch
```

:::





## 💤 休眠（hibernate）设置

如有需要可以参阅 [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Power_management_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)/Suspend_and_hibernate_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)。

KDE 自身提供开箱即用的睡眠功能（sleep），即将系统挂起到内存，消耗少量的电量。休眠（hibernate）则会将系统挂起到交换分区或交换文件，几乎不消耗电量。

挂起到硬盘的映像大小一般最大为物理内存的 `2/5`，其值在 `/sys/power/image_size` 中确定。故若想使用休眠功能，Swap 大小一般设置为物理内存的 60% 即可。

::: tip ℹ️ 提示

若 Swap 分区大小不够，则可尝试创建并休眠到 Swap 文件中。

但是需要注意！休眠镜像不能跨多个交换分区和 / 或交换文件。它必须完全适配**一个交换分区或一个交换文件**。

:::

### 休眠到 Swap 分区

1. 通过以下命令确认 Swap 分区的 `UUID`：

::: code-group

```bash {8} [lsblk]
lsblk -o name,mountpoint,size,uuid
```

```bash [blkid]
sudo blkid
```

:::

输出结果应类似：

::: code-group

```bash {6} [lsblk]
NAME   MOUNTPOINT              SIZE UUID
sda                             64G
├─sda1 /boot/efi               244M E519-88D8
├─sda2                           1G
├─sda3                           1G
├─sda4 [SWAP]                    4G 13ec7b86-eb9c-45a9-ae50-9606279b506a
└─sda5 /run/timeshift/backup  57.8G 860b9d91-590c-44d0-9d38-e4bf137b5d90
sr0                          755.3M 2021-05-01-05-18-20-00
```

```bash {2} [blkid]
/dev/sr0: BLOCK_SIZE="2048" UUID="2021-05-01-05-18-20-00" LABEL="ARCH_202105" TYPE="iso9660" PTTYPE="PMBR"
/dev/sda4: UUID="13ec7b86-eb9c-45a9-ae50-9606279b506a" TYPE="swap" PARTUUID="7a9e75d7-eca2-c849-9372-85c6889a7861"
/dev/sda2: PARTUUID="bfc5f742-be1e-cb41-911f-ec5466d670de"
/dev/sda5: LABEL="myArch" UUID="860b9d91-590c-44d0-9d38-e4bf137b5d90" UUID_SUB="5551b2c6-b767-4459-b7fc-de91500baec0" BLOCK_SIZE="4096" TYPE="btrfs" PARTUUID="815c3576-3bb8-dc4e-86d4-f41c45cffd42"
/dev/sda3: PARTUUID="23bddb1f-4ef9-844c-a92a-805a4063e3c1"
/dev/sda1: SEC_TYPE="msdos" UUID="E519-88D8" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="1976beb2-c881-8046-9066-21d5dac457ce"
```

:::

> #### 📑 相关资料：UUID
>
> UUID 即 **U**niversally **U**nique **Id**entifier（通用唯一识别码），它可以帮助 Linux 系统识别一个磁盘分区而不是块设备文件。

2. 使用 `vim` 编辑 `/etc/default/grub` 文件：

```bash
sudo vim /etc/default/grub
```

将相关参数加入内核启动参数中 —— 找到 `GRUB_CMDLINE_LINUX_DEFAULT` 一行，在其值后添加类似如下数据（根据你自身的 UUID 确定，参数之间以空格分隔）：

```conf
resume=UUID=13ec7b86-eb9c-45a9-ae50-9606279b506a
```



> #### 🍧 碎碎念
>
> 这个内核启动参数在步骤 [17. 安装引导程序](/guide/rookie/basic-install.md#_17-安装引导程序) 中也修改过，现在应该稍微熟悉一点了吧？

3. 接下来参考步骤 [共同后续步骤](optional-cfg-2.md#共同后续步骤) 完成配置。

### 休眠到 Swap 文件

1. 首先确认 Swap 文件所在分区的 `UUID`：

```bash
sudo findmnt -no UUID -T /swapfile
```

2. 确认 Swap 文件的偏移值：

- Btrfs 文件系统

```bash
sudo btrfs inspect-internal map-swapfile -r /swapfile
```

命令返回结果即所需要的数据。

- Ext4 文件系统

```bash
sudo filefrag -v /swapfile
```

第一行数据中的 `physical_offset` 一列的值即为所需要的数据。

3. 随后将这两个参数加入内核启动参数中。通过 `vim` 编辑 `/etc/default/grub` 文件：

```bash
sudo vim /etc/default/grub
```

找到 `GRUB_CMDLINE_LINUX_DEFAULT` 一行，在其值后添加类似如下两项数据，内容根据刚才查询的 `UUID` 以及偏移值确定。参数以空格分隔：

```conf
resume=UUID=9a940a0a-fa72-4973-9ccc-3eb93ad73b37 resume_offset=6418432
```

4. 接下来参考步骤 [共同后续步骤](optional-cfg-2.md#共同后续步骤) 完成配置。

### 共同后续步骤

1. 通过以下命令更新 GRUB 配置：

```bash
sudo grub-mkconfig -o /boot/grub/grub.cfg
```



2. 除此之外，还需配置 `initranfs` 的 `resume` 钩子。使用 `vim` 编辑 `/etc/mkinitcpio.conf`：

```bash
sudo vim /etc/mkinitcpio.conf
```

在 HOOKS 行添加 `resume` 值。注意，`resume` 需要加入在 `udev` 后。若使用了 LVM 分区，`resume` 需要加入在 `lvm2` 后：



::: tip ℹ️ 提示

使用 Intel CPU 并且为触摸板加载 `intel_lpss_pci` 模块的笔记本电脑，可能会在唤醒时发生内核崩溃（Caps Lock 灯闪烁），黑屏并无法成功唤醒。

此时需要编辑 `/etc/mkinitcpio.conf`，在 MODULES 行添加 `intel_lpss_pci` 值：

```conf
MODULES=(intel_lpss_pci)
```

:::

3. 最后通过以下命令重新生成 `initramfs` 镜像：

```bash
sudo mkinitcpio -P
```



4. 重启电脑

5. 重启之后可以开几个应用，尝试休眠：







虚拟机也可以通过休眠成功唤醒。

::: tip ℹ️ 提示

虚拟机可能在休眠唤醒后的关机时发生内核崩溃（Caps Lock 灯也会闪烁）。

:::

## 🔍 rEFind

如有需要可以参考 [ArchWiki 相关内容](<https://wiki.archlinux.org/title/REFInd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)。

相对于 GRUB，rEFind 的启动项更加灵活，相对来说也更加美观。

1. 使用以下命令安装 `refind` 包：

```bash
sudo pacman -S refind
```



2. 使用以下命令安装 rEFInd 启动管理器到 EFI 分区：

```bash
sudo refind-install
```



3. 使用以下命令复查安装情况：

```bash
ls -ahl /boot/efi/EFI/
```

::: tip ℹ️ 提示

若您不是按照本指南章节 [archlinux 基础安装](./basic-install.md) 安装的 archlinux，请确认您的 EFI 分区（ESP）位置。

:::



输出结果应该可以看到 `refind` 文件夹。

4. 使用 `vim` 编辑 `/boot/efi/EFI/refind/refind.conf` 文件：

```bash
sudo vim /boot/efi/EFI/refind/refind.conf
```

修改等待时间为合适数值（自定义）：

```bash
timeout 5
```



为了使 rEFInd 支持 archlinux 内核命名方案并使其与各自的 initramfs 镜像相匹配，取消注释并编辑 `extra_kernel_version_strings` 所在行：

```bash
extra_kernel_version_strings linux-hardened,linux-zen,linux-lts,linux
```



为了允许在 Btrfs 子卷上进行内核自动检测，取消注释并编辑 `also_scan_dirs`，在最后加上 `@/boot`：

```bash
also_scan_dirs boot,ESP2:EFI/linux/kernels,@/boot
```

::: tip ℹ️ 提示

若您不是按照本指南章节 [archlinux 基础安装](./basic-install.md) 安装的 archlinux：

- 若使用了 ext4 文件系统，则不用修改这一行。
- 若使用了 Btrfs 文件系统，请确认根目录或 `/boot` 目录对应子卷位置（简而言之这个位置是从 Btrfs 文件系统最上层开始寻找的）

:::



5. 保存并退出 `vim`

6. 若安装 archlinux 时按照步骤 [7. 分区和格式化（使用 Btrfs 文件系统）](/guide/rookie/basic-install.md#_7-分区和格式化-使用-btrfs-文件系统) 使用了 Btrfs 文件系统，为了让 rEFind 支持 Btrfs 子卷，需要使用以下命令手动为 rEFind 安装驱动：

```bash
sudo cp /usr/share/refind/drivers_x64/btrfs_x64.efi /boot/efi/EFI/refind/drivers_x64/btrfs_x64.efi
```



7. 使用以下命令复查安装情况：

```bash
ls -ahl /boot/efi/EFI/refind/drivers_x64/
```

输出如下：

```bash
-rwxr-xr-x 1 root root 114K Jun 15 23:00 /boot/efi/EFI/refind/drivers_x64/btrfs_x64.efi
```

8. 使用以下命令在内核所在文件夹（`/boot`）创建包含内核参数的 `refind_linux.conf` 文件：

```bash
sudo mkrlconf --force
```

::: tip ℹ️ 提示

对于自动检测到的内核，可以在 `/boot/refind_linux.conf` 中显式指定内核参数，也可以依靠 rEFInd 识别根分区和内核参数的能力。此处便是使用了后者。

若要修改内核参数，可以用 GRUB 使用新内核参数登录系统后重新使用此步骤命令重新生成 `/boot/refind_linux.conf` 文件，也可以直接在 `/boot/refind_linux.conf` 显式指定内核参数。

:::

9. 加载微码的内核参数不会自动创建。为了加载微码，需要手动编辑 `/boot/refind_linux.conf`：

```bash
sudo vim /boot/refind_linux.conf
```

在内核参数中加入以下内容：

```conf
initrd=@\boot\intel-ucode.img initrd=@\boot\initramfs-%v.img # Intel
initrd=@\boot\amd-ucode.img initrd=@\boot\initramfs-%v.img # AMD
```

::: tip ℹ️ 提示

若您不是按照本指南章节 [archlinux 基础安装](/guide/rookie/basic-install.md) 安装的 archlinux，请确认您的微码位置。

此外，参数 `initrd` 中使用反斜杠（`\`）而不是斜杠（`/`）作为路径分隔符。

:::

10. 复查 `/boot/refind_linux.conf` 文件：

```bash
cat /boot/refind_linux.conf
```

输出如下：

```bash
"Boot with standard options"  "root=UUID=860b9d91-590c-44d0-9d38-e4bf137b5d90 rw rootflags=subvol=@ loglevel=5 nowatchdog resume=UUID=13ec7b86-eb9c-45a9-ae50-9606279b506a initrd=@\boot\intel-ucode.img initrd=@\boot\initramfs-%v.img"
"Boot to single-user mode"    "root=UUID=860b9d91-590c-44d0-9d38-e4bf137b5d90 rw rootflags=subvol=@ loglevel=5 nowatchdog resume=UUID=13ec7b86-eb9c-45a9-ae50-9606279b506a initrd=@\boot\intel-ucode.img initrd=@\boot\initramfs-%v.img single"
"Boot with minimal options"   "ro root=UUID=860b9d91-590c-44d0-9d38-e4bf137b5d90"
```

::: tip ℹ️ 提示

若需要配置默认引导内核，请参阅步骤 [🐧 更换可选内核](optional-cfg-2.md#🐧-更换可选内核)。

:::

11. 重启电脑，便可以看到 rEFind 的引导页面了：



这个选项是通过 GRUB 套娃启动系统。



这个选项是通过 rEFind 直接引导进入系统。

::: tip ℹ️ 提示

在对应系统的位置按下 `F2` 可进入子菜单：

:::

::: tip ℹ️ 提示

若引导了 win10 也会显示出来。

:::

::: tip ℹ️ 提示

后面两位是虚拟机安装 archlinux 后留下来的安装镜像（实体机没有），不想要可以请使用以下步骤移除

1. 关闭虚拟机后打开虚拟机设置 > 侧栏 `存储` > 点击右侧 `分配光驱` 的右侧光盘小图标：



2. 点击 `移除虚拟盘`：



3. 开启虚拟机，查看效果：



:::

关于 rEFind 的美化请参阅 [系统美化]()。

---

### Guide Advanced Power Ctl (`docs/guide/advanced/power-ctl.md`)

# 功耗控制

> ### ⚡️ 千山鸟飞绝，万径人踪灭
>
> 针对散热不好的设备或者续航能力不佳的笔记本，功耗控制显得非常必要

## 使用 TLP 延长电池寿命及续航

> 🔗 相关链接：
>
> 如有需要可参阅 [TLP 官方文档](https://linrunner.de/tlp/settings/index.html) 和 [ArchWiki 相关内容](<https://wiki.archlinux.org/title/TLP_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)。

多年来，Linux 在电池优化方面取得了很大进步，但仍然有一些可选步骤改善笔记本电脑的电池寿命并且延长续航。

TLP 作为一款自由开源的高级电源管理工具提供开箱即用的默认配置。同时也可以高度定制化，以满足特定需求。

### 安装与配置

1. 安装 [TLP](https://linrunner.de/tlp/index.html)<sup>extra / aur</sup>、[`tlp-rdw`](https://archlinux.org/packages/extra/any/tlp-rdw/)<sup>extra / aur</sup> 以及可选安装图形界面 [TLPUI](https://github.com/d4nj1/TLPUI)<sup>aur</sup>：

   ::: code-group

   ```bash [extra]
   sudo pacman -S tlp tlp-rdw
   ```

   ```bash [aur (git)]
   yay -S tlp-git tlp-rdw-git
   ```

   :::

   ::: code-group

   ```bash [aur]
   yay -S tlpui
   ```

   ```bash [aur (git)]
   yay -S tlpui-git
   ```

   :::

   ::: tip ℹ️ 提示

   另外请参阅 [Smartmontools](/guide/advanced/system-ctl.html#smartmontools) 安装 Smartmontools 以显示 `tlp-stat` 中的 S.M.A.R.T. 数据。

   :::

   ::: tip ℹ️ 提示

   若是 ThinkPad 机型请查阅 [TLP 官方安装说明](https://linrunner.de/tlp/installation/arch.html#thinkpads-only)。

   :::

2. 相关服务设置：

   ```bash
   sudo systemctl enable tlp.service
   sudo systemctl enable NetworkManager-dispatcher.service
   sudo systemctl mask systemd-rfkill.service # 屏蔽以下服务以避免冲突，确保 TLP 无线设备的开关选项可以正确运行
   sudo systemctl mask systemd-rfkill.socket
   ```

3. 安装后，TLP 将在开机时自动启动。为了避免第一次重启系统，可以使用以下命令手动启动：

   ```bash
   sudo tlp start
   ```

   ::: tip ℹ️ 提示

   还可以使用此命令在编辑配置后应用更改。

   所有 TLP 设置都存储在 `/etc/tlp.conf` 中。一般情况下默认配置即可满足需求。

   :::

::: tip ℹ️ 提示

若安装了 TLPUI 可在图形界面进行相关配置。语言可在菜单栏 `Language` 处更改：



:::

### 使用 TLP 显示相关系统信息

通过 TLP 相关命令也可查看系统信息：

```bash
sudo tlp-stat -b # 显示电池信息
sudo tlp-stat -d # 显示磁盘信息
sudo tlp-stat -e # 显示 PCI 设备信息
sudo tlp-stat -g # 显示 GPU 信息
sudo tlp-stat -p # 显示 CPU 信息
tlp-stat -s # 显示系统数据信息 / 验证 TLP 服务运行状况
```



## 电压下探

> 🔗 相关链接：
>
> 如有需要可参阅 [ArchWiki 相关内容](https://wiki.archlinux.org/index.php/Undervolting_CPU)。

对处理器的电压进行最大限度的下探，在挖掘 CPU 体质的极限的同时，起到既能降低发热，又能最大限度保持性能的效果。

如果正常操作，降低电压**一般**不会损害 CPU，一般建议从 50 毫伏进行尝试，每次降压尝试多增加 10 毫伏。只要确保在降低电压前，系统中任务均被正确保存即可。

::: tip ℹ️ 提示

以下方法**仅适用于 Intel 四代酷睿 ™ Haswell 及更新 CPU**。有关 AMD CPU 和 Intel 四代酷睿 ™ Haswell 之前的 CPU 请参考 [ArchWiki 相关内容](https://wiki.archlinux.org/index.php/Undervolting_CPU)。

:::

使用 [`intel-undervolt`](https://github.com/kitsunyan/intel-undervolt)<sup>extra / aur</sup> 即可降压。

::: danger ☢️ 警告

`intel-undervolt` 可能会损坏您的硬件，因为它使用了一些逆向工程得到的方法。

使用它的风险自负。

:::

1. 安装 `intel-undervolt`：

   ::: code-group

   ```bash [extra]
   sudo pacman -S intel-undervolt
   ```

   ```bash [aur (git)]
   yay -S intel-undervolt-git
   ```

   :::

   

2. 编辑 `intel-undervolt.conf` 配置文件：

   ```bash
   sudo vim /etc/intel-undervolt.conf
   ```

   对于其配置文件中降压部分的五个参数含义如下:

   - `0` —— CPU 核心电压
   - `1` —— CPU 核芯显卡电压
   - `2` —— CPU 缓存电压
   - `3` —— 系统周边电压，与内存等设备相关
   - `4` —— 模拟 I/O 电压

   

   一般来说只调整 `0`（CPU 核心电压）和 `2`（CPU 缓存电压）两项电压即可。

3. 保存并退出 vim，使用以下命令应用配置：

   ```bash
   sudo intel-undervolt apply # 应用配置
   sudo intel-undervolt read # 复查是否成功降压
   ```

4. 可以尝试使用 [s-tui](https://archlinux.org/packages/extra/any/s-tui/) 这个工具进行烤机测试，同时观察温度、频率、TDP 的数据。

5. 在调整到一个合适的降压配置后，开启 `intel-undervolt.service` 服务即可：

   ```bash
   sudo systemctl enable --now intel-undervolt
   ```

## 降低功率墙

除了电压的下探，同时也可以尝试对处理器的功率墙（TDP）做出降低的限制。比如考虑这种情况 —— 在 CPU 满睿频时，其实不需要默认的那么多功耗来维持，也许在默认功耗的基础上减几瓦，也能维持满睿频，这样就又可以进一步降低温度。对功率墙进行限制不同于对电压进行下探，若限制功率墙的参数较低，这会不可避免的损失较多的性能，但是在散热过差的设备上这也是一个好办法。

对于功率墙的调整，有些主板在 BIOS 中提供了设置项可以直接调整。对于没有设置项的主板，有的主板是锁定了瞬时和长时功率墙，这种情况就无法调整功率墙了。有的主板 BIOS 随没有提供功率墙调整项，但依旧可以通过命令行设置。

通过以下的命令可以查看主板是否可以调整功率墙：

```bash
grep . /sys/class/powercap/intel-rapl/intel-rapl:0/* 2> /dev/null
```

如果在输出中看到了如下的 `enable` 值为 `1`，即可以调整。第一行的数字代表现有的功率墙限制：

```bash {2}
/sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw:100000000
/sys/class/powercap/intel-rapl/intel-rapl:0/enabled:1
```

具体的调整步骤参考 [askubuntu](https://askubuntu.com/questions/1226254/set-max-tdp-of-intel-h-series-cpu)。

::: tip ℹ️ 提示

此外，`intel-undervolt` 也可直接进行功率墙限制。

如看到 `package power limit is locked`，则说明这台电脑不可更改功率墙。

:::

---

### Guide Advanced System Ctl (`docs/guide/advanced/system-ctl.md`)

# Linux 日常操作与基础知识

> ### 🐱‍🚀 路漫漫其修远兮，吾将上下而求索
>
> 阅读完 🌱 新手上路章节，你的系统已完全可以使用
>
> KDE 桌面环境提供了强大的 [GUI](https://zh.wikipedia.org/wiki/%E5%9B%BE%E5%BD%A2%E7%94%A8%E6%88%B7%E7%95%8C%E9%9D%A2) 以供普通用户使用
>
> 绝大多数系统设置项可在 KDE 系统设置中找到（就像 Windows 一样！）
>
> 但如果想要游刃有余的掌控你的系统，你还需要阅读掌握本小节的内容

::: tip ℹ️ 提示

如果你想进一步详细了解本文各部分的详细知识，可以点击在各个小节给出的相关链接进行学习。

如果你不想详细了解，本章介绍的知识也足够你来应付日常的使用。

:::

## 必须掌握的 Linux 知识

此处只介绍最基本的，最必要的 Linux 知识点与小技巧。

1. 在 Linux 中，文件目录结构与 Windows 完全不同。Windows 存在 C 盘、D 盘等盘符，而在 Linux 中不存在这些划分。最上层的目录是根目录，路径为 `/` ，并以一个树形结构从此向下一级一级区分
2. 对于 Linux 的树形文件结构，存在相对路径与绝对路径之分：

   - 绝对路径代表从根目录 `/` 开始的完整路径：

     - 比如 `/home/myusername/Download`

   - 相对路径代表从当前目录或当前目录的上级目录，到目标目录的一个部分路径：

     - `.` 代表当前目录
     - `..` 代表当前目录的上级目录
     - 比如当前你所在的目录为 `/home/myusername` ，那么绝对路径下的 `/home/myusername/Download` 文件夹的相对路径即为 `./Download`

     - 比如你当前所在的路径为 `/home/myusername/Download` ，向上寻找到 `/home/myusername/Desktop` 的相对路径即为 `../Desktop`

3. 简单来说，Linux 中存在两类用户：

   - 第一类用户即为 root 用户，也称为超级用户，它拥有系统中最高的权限
   - 第二类用户就是除了 root 用户之外的普通用户，它们可以拥有不同等级的权限

     使用 root 权限时需要十分小心

4. 理论上来说，任何图形化界面中的操作都可以用对应的命令行命令完成。如果你打开某个程序报错，不妨试试找到它的对应启动命令，在终端中执行此命令，并观察它运行时的错误日志输出，查阅相关资料，解决问题
   
5. 不能未经辨别执行来源不明的命令。举个例子：

   ::: danger ☢️ 警告

   该命令具有高危险性，请勿执行。

   :::
   
   ```sh
   echo "c3VkbyBybSAtcmYgLyo=" | base64 -d | zsh
   ```
   它的含义是让 zsh 执行 `sudo rm -rf /*`, 会摧毁整个系统。
   
## 终端操作基础

如果想要熟练掌握 Linux，就必须掌握终端的常见命令与使用方式。

```bash
ls /some_path # 查看某个文件夹下的文件与子文件夹。/ 代表根目录，是 Linux 最顶端的路径，以此开头则为绝对路径
pwd # 查看当前终端所在路径
cat /home/testuser/testfile # 以输出流方式查看某个文件
cd /home/testuser # 切换目录命令。将当前终端切换到某一个路径下
cp ./a.py ./b.py # 复制命令。将当前路径下的 a.py 复制一份并命名为 b.py。./ 代表当前文件夹所在路径，以此开头则为相对路径
cp -r ./a ./b # 复制整体文件夹
rm b.py # 删除命令。删除 b.py
mv a.py b.py # 移动（重命名）命令。将 a.py 更名为 b.py
mkdir my_folder # 新建名为 my_folder 的文件夹
sudo some_command # 使普通用户以 root 权限执行某些命令
```

> 🔗 相关链接：
>
> - [Linux 命令行与 Shell 脚本教程](https://archlinuxstudio.github.io/ShellTutorial/#/)

## Pacman 包管理

在 archlinux 上安装的软件都通过 Pacman 来进行管理。

为了使用 Pacman 额外的命令需要先安装 [ `pacman-contrib` ](https://archlinux.org/packages/extra/x86_64/pacman-contrib/)<sup>extra / aur</sup>。

安装 `pacman-contrib` ：

::: code-group

```bash [extra]
sudo pacman -S pacman-contrib
```

```bash [aur (git)]
yay -S pacman-contrib-git
```

:::

可以把 Pacman 理解为一个软件管理器（软件管家？），可以进行软件的安装、删除、查询等：

```bash {1-4, 6-8, 10}
sudo pacman -S package_name # 安装软件包
pacman -Ss # 在同步数据库中搜索包，包括包的名称和描述
sudo pacman -Syu # 升级系统。 -y:标记刷新、-yy：标记强制刷新、-u：标记升级动作（一般使用 -Syu 即可）
sudo pacman -Rns package_name # 删除软件包，及其所有没有被其他已安装软件包使用的依赖包
sudo pacman -R package_name # 删除软件包，保留其全部已经安装的依赖关系
pacman -Qi package_name # 检查已安装包的相关信息。-Q：查询本地软件包数据库
pacman -Qdt # 找出孤立包。-d：标记依赖包、-t：标记不需要的包、-dt：合并标记孤立包
sudo pacman -Rns $(pacman -Qtdq) # 删除孤立包
sudo pacman -Fy # 更新命令查询文件列表数据库
pacman -F some_command # 当不知道某个命令属于哪个包时，用来在远程软件包中查询某个命令属于哪个包（即使没有安装）
pactree package_name # 查看一个包的依赖树

```

> 🔗 相关链接：
>
> - [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Pacman_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)
>
> 关于 Pacman 常见错误的排除请参阅 [常见问题](debug.md)。

::: danger ☢️ 警告

部分 Pacman 命令具有危险性，请谨慎执行。

:::

::: tip ℹ️ 提示

yay 的用法和 Pacman 是基本一样的。有额外几条常用命令：

```bash {1-3}
yay # 等同于 yay -Syu
yay package_name # 等同于 yay -Ss package_name && yay -S package_name
yay -Ps # 打印系统统计信息
yay -Yc # 清理不需要的依赖
```

:::

### Octopi

此外，还可以使用图形化的包管理软件（Pacman / yay 的图形前端）[Octopi](https://github.com/aarnt/octopi)<sup>aur</sup>。

1. 安装 Octopi：

::: code-group

```bash [aur]
   yay -S octopi
```

```bash [aur (git)]
   yay -S octopi-git
```

:::

2. 打开 Octopi 即可看到图形化的 Pacman / yay 界面：



> 🔗 相关链接：
>
> - [ArchWiki 相关内容](https://wiki.archlinux.org/index.php/Pacman)

### downgrade

由于 archlinux 的更新策略很激进, 导致某些软件过新, 而一些依赖并没有支持, 比如著名的[virtualbox 在 linux5.18 内核下的崩溃](https://bugs.archlinux.org/task/74900) , 所以有时候我们不得不安装过时的软件或者降级已安装的软件。

在 archlinux 上安装旧版软件都通过 downgrade 来进行管理。

为了使用 downgrade 额外的命令需要先安装 [ `downgrade` ](https://aur.archlinux.org/packages/downgrade)<sup>aur</sup>。

```bash
yay -S downgrade
```

这时我们就可以用 downgrade 降级软件了



## 终端编辑器 vim 的使用

我们需要掌握一个能在终端中进行文本编辑的软件，这里介绍 vim。

1. 创建并编辑名为 `hello.txt` 的文件：

```bash
   vim hello.txt
```

2. 此时可以看到进入了一个空的界面：



- 此时处在 vim 的 `命令模式` 。在 `命令模式` 下，可以用一些快捷指令来对文本进行操作
- 输入 `a` 进入 vim 的 `编辑模式` ，此时即可输入任意文本进行编辑
- 在输入完成后按下 Esc 键，即可从 `编辑模式` 退出到 `命令模式` 。此时输入 `:wq` 即可保存并退出 vim

下面介绍一些在命令模式下常用的命令：

- `:wq` —— 保存退出
- `:q!` —— 不保存，强制退出
- `dd` —— 删除一行
- `2dd` —— 删除两行
- `gg` —— 回到文本第一行
- `shift` + `g` —— 转到文本最后一行
- `/xxx` —— 在文中搜索 xxx 内容。回车 `Enter` 搜索，按 `n` 键转到下一个
- `?xxx` —— 反向搜索

::: tip ℹ️ 提示

可以在终端中输入以下命令来学习完整的 vim 教程：

```bash
vimtutor
```



:::

## 系统服务的介绍与操作

Linux 系统中运行着各种服务，你需要掌握查询，变更服务状态的方式。同时对创建服务最好也有大致的了解。

这里讲述命令 `systemctl` 的用法。以 `dhcpcd` 服务为例：

```bash
systemctl start dhcpcd # 启动服务
systemctl stop dhcpcd # 停止服务
systemctl restart dhcpcd # 重启服务
systemctl reload dhcpcd # 重新加载服务以及它的配置文件
systemctl status dhcpcd # 查看服务状态
systemctl enable dhcpcd # 设置开机启动服务
systemctl enable --now dhcpcd # 设置服务为开机启动并立即启动这个单元
systemctl disable dhcpcd # 取消开机自动启动
systemctl daemon-reload dhcpcd # 重新载入 systemd 配置。扫描新增或变更的服务单元、不会重新加载变更的配置
```

> 🔗 相关链接：
>
> - [ArchWiki 相关内容](https://wiki.archlinux.org/index.php/Systemd#Basic_systemctl_usage)
> - [systemd 配置文件样例解释](https://www.freedesktop.org/software/systemd/man/systemd.service.html#Examples)
>
> 关于关闭出错服务（出错启动项）请参阅 [常见问题](debug.md)。

## 文件解压缩

除了众所周知的 `tar` 命令，我们在之前安装过的 `ark` 包可以配合 Dolphin 文件管理器轻松的右键压缩包直接解压。其可选依赖提供了各个压缩格式的支持，可以自行选择安装。

但是使用此方法解压 Windows 下的压缩包可能会乱码。使用 [Unarchiver](https://archlinux.org/packages/extra/x86_64/unarchiver/) 可以避免这个问题。

1. 安装 Unarchiver：

```bash
sudo pacman -S unarchiver
```

2. 解压压缩包：

```bash
unar xxx.zip
```

## 磁盘空间信息

### df 命令

使用 `df` 命令即可显示目前在 Linux 系统上的文件系统对应的磁盘空间使用情况统计：

```bash
df -h # 以人类可读格式显示
```

### Filelight

使用 [Filelight](https://github.com/KDE/filelight)<sup>extra / aur</sup> 即可在图形化界面直观查看磁盘占用情况。

1. 安装 Filelight：

::: code-group

```bash [extra]
sudo pacman -S filelight
```

```bash [aur (git)]
yay -S filelight-git
```

:::

2. 打开 Filelight 即可直观的看到空间占用情况：



::: tip ℹ️ 提示

点击相应区块即可进一步深入分析。

:::

## 磁盘空间清理

有时需要对磁盘空间进行清理，以免磁盘空间不足，从而保证系统的正常运行。

首先应通过上文介绍的内容 [磁盘空间信息](/guide/system-ctl.md#磁盘空间信息) 对磁盘空间占用情况进行分析，随后采取对应的有效应对措施。

下面介绍一些通用措施。

### 清理软件包缓存及孤立包

执行以下命令清理软件包文件缓存及删除孤立软件包：

```bash {1-2, 4}
sudo pacman -Rns $(pacman -Qtdq) # 如上文所述，删除孤立软件包（常用）
sudo pacman -Sc # 删除当前未安装的所有缓存包和未使用的同步数据库（可选）
sudo pacman -Scc # 从缓存中删除所有文件，这是最激进的方法，不会在缓存文件夹中留下任何内容（一般不使用）
paccache -r # 删除已安装和未安装包的所有缓存版本，但最近 3 个版本除外

```

还可以在 `/etc/pacman.d/hooks` 文件夹下创建 `clean_package_cache.hook` 文件来在使用 `pacman` 时自动执行 `paccache`。

```bash
[Trigger]
Operation = Upgrade
Operation = Install
Operation = Remove
Type = Package
Target = *

[Action]
Description = Cleaning pacman cache...
When = PostTransaction
Exec = /usr/bin/paccache -rk 2
```

### 清理 yay 缓存

如果使用了 yay 来安装 AUR 中的软件包的话，可以选择清理 yay 的缓存目录：

```bash
rm -rf ~/.cache/yay
```

### 考虑快照大小

若在步骤 [13. 设置 Timeshift 快照](../rookie/desktop-env-and-app.md#_13-设置-timeshift-快照) 中没有使用 BTRFS 方式的 Timeshift 快照，而是使用了 RSYNC 方式的 Timeshift 快照，还应考虑 Timeshift 快照占用情况。

一般来说 RSYNC 方式的快照大小略大于当前实际使用大小。因为虽然 RSYNC 方式的快照是增量的，但**历史最久远的快照依然是完整备份**，随后才是增量的。而简单来说增量大小取决于历史最久远的快照和最新快照之间的差异。

通过 Timeshift 自动清理历史最久远的快照是简单有效的方法，但仍然需要注意不要保存太多快照。

## 硬件信息检测

### 磁盘信息

#### Smartmontools

[Smartmontools](https://archlinux.org/packages/extra/x86_64/smartmontools/) 通过使用自我监控（Self-Monitoring）、分析（Analysis）和报告（Reporting）三种技术（缩写为 S. M. A. R. T 或 SMART）来管理和监控存储硬件。

1. 安装 Smartmontools：

```bash
sudo pacman -S smartmontools
```

2. 查看磁盘信息：

::: code-group

```bash [SATA]
sudo smartctl -A /dev/sdx # 硬盘
sudo smartctl -d sat -A /dev/sdx # USB 设备
```

```bash [NVME]
sudo smartctl -A /dev/nvmexn1 # 硬盘
sudo smartctl -d sat -A /dev/sdx # USB 设备
```

:::

### CPU 信息

类似 Windows 下的 [CPU-Z](https://www.cpuid.com/softwares/cpu-z.html)<sup>EULA</sup>，Linux 下有 [CPU-X](https://x0rg.github.io/CPU-X/)<sup>cn / aur</sup>。

1. 安装 CPU-X：

::: code-group

```bash [cn]
sudo pacman -S cpu-x
```

```bash [aur]
yay -S aur/cpu-x
```

```bash [aur (git)]
yay -S cpu-x-git
```

:::

2. 打开 CPU-X 即可看到 CPU 详细信息：



### GPU 信息

使用 [GPU-Viewer](https://github.com/arunsivaramanneo/GPU-Viewer)<sup>aur</sup> 即可。

1. 安装 GPU-Viewer：

```bash
yay -S gpu-viewer
```

2. 打开 GPU-Viewer 即可看到 GPU 详细信息：



### 硬件完整信息

使用 [Dmidecode](http://www.nongnu.org/dmidecode/)<sup>extra / aur</sup> 可以完整查看系统绝大部分硬件信息，包括较难得到的内存频率等。

1. 安装 Dmidecode：

::: code-group

```bash [extra]
sudo pacman -S dmidecode
```

```bash [aur (git)]
yay -S dmidecode-git
```

:::

2. 输入以下命令使用 Dmidecode 查看系统硬件信息：

```bash
sudo dmidecode
```

## 系统快照（备份）与文件传输

### 从 Timeshift 快照中恢复

::: tip ℹ️ 提示

Timeshift 还能恢复到其它硬盘用作系统迁移，通过 arch 安装盘重新安装引导即可，这里不再赘述。

:::

#### 若能够进入桌面环境 😎

直接打开 Timeshift，选择快照后根据提示还原即可。

#### 若无法进入桌面环境

1. 通过 `Ctrl` + `Alt` + `F2 ~ F6` 进入 tty 终端

2. 使用快照还原系统：

```bash
sudo timeshift --list # 获取快照列表
sudo timeshift --restore --snapshot '20XX-XX-XX_XX-XX-XX' --skip-grub # 选择一个快照进行还原，并跳过 GRUB 安装，一般来说 GRUB 不需要重新安装
```

3. 根据提示继续，完成还原

#### 若无法进入系统 😱

此时系统一般已经完全崩溃，可以通过 Live CD 进行还原。（若使用 arch 安装盘请连接网络和配置好源后安装 Timeshift，然后通过命令行方式还原）

1. 进入 Live 系统后打开 Timeshift，点击设置按钮，设置为原来快照的存储位置。
2. 选择快照后根据提示还原即可。

或者通过命令行进行还原，但需要首先设置原来快照存储的位置：

```bash
sudo timeshift --restore --snapshot-device /dev/sdbx
```

后续步骤同 [若无法进入桌面环境](#若无法进入桌面环境)。

#### 恢复后无法挂载目录

Timeshift 恢复 Btrfs 快照时，可能出现由于子卷 ID 变更导致无法挂载目录而无法进入系统。

此时可以通过手动修改 fstab 配置，移除 `subvolid` 参数，改为通过名称指定子卷。

使用 `vim` 编辑器修改 `/etc/fstab` 文件：

```bash
vim /etc/fstab
```

进行如下修改：

- 删除 `/` 和 `/home` 条目中最后的 `subvolid=xxx` 参数

保存后重启即可正常使用。以后恢复快照时无需再次进行此操作。

也可以手动更正 `subvolid` ，通过以下命令查看正确的 ID：

```bash
sudo btrfs sub list -u /
```

#### 恢复后无法挂载 boot

Timeshift 恢复 Btrfs 快照时，可能出现由于内核版本不一致导致无法挂载 boot 分区而无法进入系统。执行 `journalctl -xb` 查看，可能会发现 _unknown filesystem type 'vfat'_ error。这里给出一个解法：进入 archiso 并[联网](../rookie/basic-install.md#_3-连接网络)后，执行以下修复：

```bash
# 手动挂载子卷 / 和 /boot（nvmexnxpx 填写实际分区号）
mount -t btrfs -o subvol=/@,compress=zstd /dev/nvmexnxpx /mnt
mount /dev/nvmexnxpx /mnt/boot
# chroot
arch-chroot /mnt
# 更新内核与软件包
pacman -Syu linux
# 重启
reboot
```

#### 定时任务不生效

Timeshift 设定任务后定时不生效，那是因为相关的服务 `cron` 没有启动导致的问题。
在终端命令行下输入以下命令，第一行为设置开机启动，第二行为启动相关服务：

```bash
sudo systemctl enable --now cronie.service
sudo systemctl start --now cronie.service
```

### rsync 命令

有一点 Linux 经验的同学应该知道 `scp` 这个命令。它常被用来在服务器间传输文件。

但是目前它应该被更现代的工具 [rsync](https://rsync.samba.org/) 替代。其拥有即时压缩、差量传输等新特性。同时， `rsync` 也被用来进行备份操作（Timeshift 的 RSYNC 模式即基于此实现）。

```bash
rsync foo.txt me@server:/home/me/ # 最基础的复制文件。与 scp 的操作完全相同
rsync -a bar/ me@server:/home/me/ # -a：标记实现目录复制等。比 scp -r 能更好的处理符号链接等情况
```

> 🔗 相关链接：
>
> - [ArchWiki 相关内容](https://wiki.archlinux.org/index.php/Rsync#Full_system_backup)

---

### Guide Prepare Head On Blow (`docs/guide/prepare/head-on-blow.md`)

# archlinux 真的适合我吗？

> ### 🍉 三思而后行
>
> 对于萌新（特别是对于 Linux 还是萌新的萌新）来说尝试安装 archlinux 之前，有必要了解 archlinux 是否真正适合 TA 们

## 判断标准

> 这里，笔者自作主张的设立了 3 个判断标准，按照重要程度排列

### 判断标准一：你是否具有一定的 Linux 基础？

不少 Linux 萌新可能从不同渠道听过一种说法，那就是选择 archlinux 作为 TA 们的入门发行版。理由包括但不限于：

1. 通过安装和使用 archlinux 我可以更好的了解 Linux 底层运作的原理
2. archlinux 的软件很多
3. 遇到问题好好看 [ArchWiki](<https://wiki.archlinux.org/title/Main_page_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>) 就好啦

这些理由所叙述的事实单独来看确实没有任何问题，但作为推荐 Linux 萌新选择 archlinux 作为入门发行版就显得不太合适了。理由有下：

1. 了解 Linux 底层运作的原理对于学习 Linux 的人来说无疑是一个进阶的话题了；脚踏实地，先**从 Linux 基础甚至基本的计算机常识开始掌握才是正确的学习姿势**。否则知识体系就如同空中楼阁，摇摇欲坠
2. archlinux 的软件确实很多，甚至由于 arch 之道中实用性大于意识形态的原则，包含有不开源甚至非自由软件；但是对于其它发行版来说，日常使用的大部分软件也都在软件仓库中存在
3. [ArchWiki](<https://wiki.archlinux.org/title/Main_page_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>) 的内容的确包含面非常广，甚至非常细节的问题也有说明和解答。但也正是由于这种特性，导致其指引性较差，让用户容易迷失方向，更不用说对于 Linux 萌新了

对于这一部分同学，笔者的建议是先去阅读相关的书籍，在掌握了扎实的 Linux 基础之后，再来尝试 archlinux 吧！这里推荐一本由刘遄老师编写的 Linux 入门 📖 书籍 [《Linux 就该这么学》](https://www.linuxprobe.com/docs/LinuxProbe.pdf)，并且作者本着开源精神让广大读者可以免费下载阅读，直接点击链接即可跳转下载（linuxprobe）。此外，掌握基础的英语阅读水平也是很有必要的，例如经常有一些同学在安装 archlinux 的时候由于看不懂英语的报错信息在已经发生错误的情况下继续执行下一步命令导致安装失败。

> #### 🍧 趣事
>
> 笔者曾经遇到过很多对于 Linux 毫无基础（包括曾经试用过“新手”发行版如 Ubuntu 但是依然不具备 Linux 基础知识）的人想要尝试 archlinux，却在安装时遇到“匪夷所思”的问题，对此略举一二（并没有）：
>
> 1. 某同学在 win10 下经过一上午的努力，终于用 [DiskGenius](https://www.diskgenius.cn/)<sup>EULA</sup>（win 下的磁盘分区工具）将 💾 磁盘分出了一部分空间以供安装 archlinux，但是却发现使用 `lsblk` 命令在安装环境无法看到分出来的空白空间！“问题”当然显而易见，因为没有分区的空白空间并不是块设备，自然无法用 `lsblk` 命令看到了
>
> 对于那些 `sudo` 命令输密码时看不到输出以为键盘坏了的，这些都是老生常谈了，就不多说了 QAQ

### 判断标准二：你是否愿意花费时间在折腾系统上？

archlinux 是简洁的操作系统。arch 将简洁定义为：避免任何不必要的添加、修改和复杂增加。这样做的好处显而易见：你可以自己决定使用哪种桌面环境、安装哪些组件和服务。这种精细化的控制能够赋予你一个精简的操作系统，可以让你自由选择所需的组件来构建属于你自己的系统。

但也正因为此，配置 archlinux 相对于其它 Linux 发行版来说是繁琐。首先，安装 archlinux 需要在命令行手动输入至少 30 多条命令，并且要保证正确：

```bash
iwctl
device list
station wlan0 scan
station wlan0 get-networks
station wlan0 connect wifi-name
exit
ping arch.icekylin.online
timedatectl set-ntp true
timedatectl status
vim /etc/pacman.d/mirrorlist
# 分区和挂载系列命令
pacstrap /mnt base base-devel linux linux-firmware
pacstrap /mnt dhcpcd iwd vim sudo bash-completion
genfstab -U /mnt > /mnt/etc/fstab
cat /mnt/etc/fstab
arch-chroot /mnt
vim /etc/hostname
vim /etc/hosts
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
locale-gen
echo 'LANG=en_US.UTF-8'  > /etc/locale.conf
passwd root
pacman -S intel-ucode
pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=ARCH
vim /etc/default/grub
grub-mkconfig -o /boot/grub/grub.cfg
exit
umount -R /mnt
reboot
```

其次，安装好的系统只是最基本的系统，不包含图形界面，还需要安装和配置更多的设置项（很多需要手动编辑配置文件）才可以正常使用。最后，日常维护 archlinux 可能也需要大量时间和精力（如 archlinux 更新后挂了，如何解决）。有的时候可能半天时间就这样“浪费”了。

::: info 🍧 碎碎念

不过对此也不用过于担心。本指南的目的之一就是为了减少不必要的排错成本。不少问题别人（包括笔者）也出现过，乐于助人的人也会将 TA 们的解决方法分享出来，何况还有 archlinux 开放、友好的强大社区生态呢！正所谓前人栽树后人乘凉嘛。

:::

### 判断标准三：在遇到难以解决的复杂问题时，能否冷静应对？

archlinux 作为现代的滚动发行版，遇到问题是非常正常的。其中大部分问题经过简单排查便可解决，但也不排除遇到重大问题导致系统崩溃，无法进入桌面环境甚至系统。部分萌新的解决方法简单粗暴 —— 直接重装。这个方法可能确实有效，但是有多少人会经得起重新安装的折腾呢？多重装几次可能“心态就炸了”。

实际上，即使系统无法正常进入了，我们依然可以使用安装盘 `arch-chroot` 进入原系统修复（如果暂时听不懂没有关系，后面会讲解，这里只要知道有办法解决就可以了）。例如大多数情况下可能只是启动引导出现了问题而已，如果为此而直接重新安装系统则显得有些小题大做了。

总而言之，在遇到难以解决的复杂问题时，不要慌张；静下心来好好想一想问题到底出在哪里，**对症下药、冷静应对才是正确的姿势**。

---

### Guide Prepare Understand (`docs/guide/prepare/understand.md`)

# 了解 archlinux

> ### 🌸 知己知彼，百战不殆
>
> 上一小节，我们已经讨论了萌新是否应该将 archlinux 作为 TA 们的入门发行版，以及 archlinux 是否能满足你的需求的相关话题
>
> 这一小节，笔者则重新 🔥 点燃大家安装使用 archlinux 的信心，来讨论一下 archlinux 的独特之处

## archlinux 的历史



- `2001 ~ 2002` —— 加拿大程序员兼吉他手 [Judd Vinet](https://github.com/jvinet) 从 2001 年初开始开发 archlinux，并在 2002
  年 3 月 11 日正式发行 0.1 版。它受到 Slackware、BSD、PLD Linux 和 CRUX 的启发。但是那时候这些发行版缺少软件包管理器。所以
  Judd Vinet 以同样的简洁原则建立了 archlinux 发行版，并编写了 `pacman` 软件包管理器，自动处理软件包的安装、删除和更新。
- `2005` —— 2005 年 7 月 8 日，用 MediaWiki
  搭建的 [ArchWiki](<https://wiki.archlinux.org/title/Main_page_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>) 开始运行。
- `2007` —— 2007 下半年，Judd Vinet 退出了 archlinux 的开发，并把统治权交给美国程序员 Aaron Griffin。
- `2012 ~ 2013` —— 2012 年 7 月发行的 archlinux 安装 ISO 映像开始放弃安装框架而转为使用不同的辅助脚本 [arch-install-scripts](https://archlinux.org/packages/extra/any/arch-install-scripts/)
  。并逐步开始将初始化系统迁移至 Systemd。
- `2017` —— archlinux 抛弃 32 位镜像和除 [Multilib 仓库](https://archlinux.org/packages/?sort=&repo=Multilib&q=&maintainer=&flagged=) 外的所有 32 位包的维护。
- `2020` —— Arch 开始用新的流程选择未来的领袖，Aaron Griffin 决定不再担任项目领导，因此 Arch [通过选举方式正式确认 Levente Polyak 为新的领导](https://archlinux.org/news/the-future-of-the-arch-linux-project-leader/)。

值得说明的是，archlinux 从早期开始就树立起了开放、友好和社区互助的形象。早期 archlinux 用户 Ben Mazer 在 2003
年发表的 [这篇文章](https://www.osnews.com/story/4827/) 可以看出这一点。

> _I think the best thing about ArchLinux is its “support”. Even though ArchLinux is not profit, it has got lots of
> people willing to help you._
>
> _There are active forums at both Archlinux.org and linuxquestions.org._
>
> _There is a very active IRC room where the developers (and other users) are always willing to lend a hand. I always
> learn something new when talking to them._
>
> -- Ben Mazer (2003-10-15)

## archlinux 的特点

archlinux 的许多特点如同双刃剑，既是优点，也是缺点。

### 1. 简洁

archlinux 将简洁定义为：避免任何不必要的添加、修改和复杂增加。简单来说，archlinux 是一个可以让用户自己动手打造的操作系统。从安装到管理，archlinux
放手让用户处理一切。

用户可以自己决定使用哪种桌面环境、安装哪些组件和服务。这种精细化的控制能够赋予你一个精简的操作系统，可以让用户自由选择所需的组件来构建属于用户自己的系统。

但也正因为此配置 archlinux 相对于其它 Linux 发行版来说是繁琐。但繁琐是自由的代价。如果你是一个 DIY 爱好者，那么相信你会爱上
archlinux 的 ❤️。

### 2. 滚动更新（现代）

滚动更新（rolling update）是指软件开发中经常性将更新发送到软件的概念。相较于滚动发行，有标准版本和小数点版本的版本号开发模式，必需通过重新安装以取代先前的发行版。archlinux
是没有版本概念的，它始终保持最新的状态，通俗地理解就相当于把发行版比喻为一部车，ubuntu 更新就是换一部新的，而 archlinux
就是把车里面旧的配件换成新的。

archlinux 是一个滚动发行版，这意味着：

1. 新的内核和应用程序版本一经发布，就会立即向用户推送
2. 当大多数其它 Linux 发行版还在提供旧的 Linux 内核版本时，archlinux 会迅速向用户提供最新的内核
3. 而软件也是如此。如果 archlinux 仓库中的软件发布了新版本，archlinux 用户通常会比其他用户先获得新版本
4. 在滚动发行模式下，一切都是新鲜和前沿的。用户不必把操作系统从一个版本升级到另一个版本，只要使用 `pacman`
   的升级命令，便会始终保持最新的版本

### 3. 实用

archlinux 注重实用性，避免意识形态之争。最终的设计决策都是由开发者的共识决定。开发者依赖基于事实的技术分析和讨论，避免政治因素，不会被流行观点左右。

archlinux 的仓库中包含大量的软件包和编译脚本。用户可以按照需要自由选择。仓库中既提供了开源、自由的软件，**也提供了闭源软件**
（大部分闭源软件在 `AUR` 仓库中）。**实用性大于意识形态**。

### 4. 以用户为中心

许多 Linux 发行版都试图变得更“用户友好”，archlinux 则一直是且永远会是“以用户为中心”。archlinux
是为了满足贡献者的需求，而不是为了吸引尽可能多的用户。archlinux 适用于乐于自己动手的用户，他们愿意花时间阅读文档，解决自己的问题。

archlinux
鼓励每一个用户 [参与](<https://wiki.archlinux.org/title/Getting_involved_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)
和贡献，报告和帮助修复 [bugs](https://bugs.archlinux.org/)，提供软件包补丁和参加核心 [项目](https://git.archlinux.org/) ——
archlinux 开发者都是志愿者，通过持续的贡献成为团队的一员。

Archers
可以自行贡献软件包到 [Arch 用户仓库](<https://wiki.archlinux.org/title/Arch_User_Repository_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)（`AUR`
）；提升 [ArchWiki 文档质量](<https://wiki.archlinux.org/title/Main_page_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)
；在 [论坛](https://bbs.archlinux.org/)、[邮件列表](https://lists.archlinux.org/listinfo/)
或者 [IRC](<https://wiki.archlinux.org/title/Arch_IRC_channels_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)
中给其他用户提供技术支持。archlinux
是全球很多用户的选择，已经有很多 [国际社区](<https://wiki.archlinux.org/title/International_communities_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)
提供帮助和文档翻译。

同样的，若希望为本指南做出贡献，以帮助更多的人，请参阅 [贡献指南](../../postscript/contribute.md)。

::: info 💕 相关链接：archlinux 中文社区

- [Arch Linux 中文社区](https://www.archlinuxcn.org/)
- [Arch Linux 中文论坛](https://bbs.archlinuxcn.org/)
- [archlinux 百度贴吧](https://tieba.baidu.com/f?kw=archlinux)
- [Telegram 交流群](https://t.me/archlinuxcn_group)

:::

::: info 🍧 碎碎念

“用户友好” 和 “以用户为中心” 是不一样的，对吧？

:::

### 5. Arch 用户仓库（AUR）

`AUR` 即 Arch 用户仓库（Arch User Repository）。它包含名为 `PKGBUILD` 的包描述，它可让用户使用 `makepkg`
从源代码编译软件包，然后通过 `pacman` 安装。

创建 `AUR` 的目的是组织和共享社区中的新软件包，并帮助加速将流行的软件包纳入社区仓库。进入官方仓库的大量新软件包都从 `AUR`
开始。在 `AUR` 中，用户可以贡献自己的软件包构建（`PKGBUILD` 和相关文件）。`AUR` 社区可以对 `AUR`
中的软件包进行投票。如果一个软件包变得足够流行（且具有兼容的许可证和良好的打包技术），那么可以将其加入 `pacman` 直接访问的社区仓库中。

### 6. 激进的内核更新机制

archlinux 在更新内核的时候会立即删除旧内核（因为内核也是一个软件包 `linux` / `linux-zen`...，由 `pacman` 更新）

立即删除旧的内核要求 archlinux 必须重启来加载新的内核，否则容易发生诡异的问题。这是因为 Linux
所谓的“内核”包含有大量的动态加载模块，如果在某次启动后，某个模块没有被加载过，然后系统内核更新了并且删除了旧的内核，那么这些模块将永远不能被加载了——因为它们随着旧内核被删掉了。除非用户重启系统以完整切换到新的内核以使用新版的动态加载模块。

笔者曾经就因为在升级内核后插上声卡无法工作而感到困惑，后来才意识到问题所在。所以建议在更新内核后重新启动系统以避免问题的产生。（win10
更新也要重启，对吧？）

> #### 📑 相关资料：什么是内核？
>
> _内核是计算机操作系统的核心组件，对系统有完全的控制。开机时最先启动，然后负责后续的启动工作。它负责处理其它软件的请求，将这些请求转化为中央处理器的数据处理请求。内核还负责管理内存，管理系统和其它打印机、扬声器等外围设备的通讯，是操作系统最基础的部分_
>
> -- Wikipedia

### 7. 软件包管理体系

不同于 Debian 系列的 `apt / dpkg` 和 Red Hat 系列的 `dnf（yum）/ rpm` 包管理体系，archlinux 只用了一个工具 pacman
就解决了获取和安装两个功能。这降低了为 archlinux 制作软件包的门槛，这也是 AUR 几乎能涵盖整个 Linux 软件生态的主要原因。但是这也导致
pacman 不支持虚包（virtual package）。

::: info 📑 相关资料：什么是虚包？

虚包是一个通用名称，适用于一组提供类似的基本功能的包中的任何一个包。

:::

### 8. 由社区创建、支持和拥有

Ubuntu 由 [Canonical](https://canonical.com/) 支持，Fedora 来自 [Red Hat](https://www.redhat.com/zh)（现在是 IBM
的一部分），openSUSE 来自 [SUSE](https://www.suse.com/zh-cn/)。这些主流发行版都是企业支持的。

这本身并不是坏事或过错，但是有一些人不喜欢企业参与开源项目。

正如 Debian 一样，archlinux 是为数不多的仅由社区创建、支持和拥有的的 Linux 发行项目之一。

## 与众不同的 archlinux

> 了解 archlinux 与其它的发行版之间的区别，有助于判断 archlinux 是否能满足个人的需求

###  Ubuntu / Kubuntu

- Ubuntu 基于 Debian，由 Canonical 公司提供商业支持；而 archlinux 是由社区创建、支持和拥有的
- Ubuntu 提供自动配置好的系统（包括桌面环境），对用户来说更“友好”；而 archlinux 设计了一个最小化的基础系统，然后严重依赖用户按自己的特定需求进行定制
- Ubuntu 每 6 个月发布一次新版本；而 archlinux 采用滚动升级
- archlinux 提供类 ports 的软件包构建系统和 Arch User Repository（`AUR`），用户可以分享源代码编译脚本，然后用 `pacman`
  安装管理；而 Ubuntu 使用更复杂的 `apt`，可以通过 PPA 分发软件

###  Linux Mint

- 基于 Ubuntu 的 Linux Mint
  - Linux Mint 主要运行 Cinnamon 和 MATE 作为它的图形界面，也可以选择 KDE 或者 Xfce4，同时这些桌面环境是开箱即用的；而
    archlinux 需要手动选择并安装桌面环境
  - 基于 Ubuntu 的 Linux Mint 每 6 个月发布一次新版本，时间大约是在新的 Ubuntu 版本发布一个月以后；而 archlinux 采用滚动升级
  - Linux Mint 几乎与 Ubuntu 软件仓库完全兼容，采用 `apt` 管理和 `.deb` 软件包
- 基于 Debian 的 Linux Mint（LMDE）
  - LMDE 基于 Debian 稳定版，并且采取不间断的对于 bug 和安全性问题进行修复的方式，同时间也会保持 Mint 其它组件的更新；而
    archlinux 采用滚动升级
- Linux Mint 提供一种更为开箱即用的用户体验，免去用户在安装系统后还要自己安装一系列满足基本使用需求的软件

###  Manjaro Linux

- Manjaro Linux 基于 archlinux
- Manjaro Linux 提供自动配置好的系统（包括桌面环境），对用户来说更“友好”；而 archlinux 设计了一个最小化的基础系统，然后严重依赖用户按自己的特定需求进行定制
- Manjaro Linux 和 archlinux 一样采用滚动更新；**但是 Manjaro 的更新策略不如 archlinux 激进，它的软件版本一般都落后于
  archlinux 若干周，而对于这类滚动更新的发行版来说，若干周的版本差距足以造成严重的兼容性问题**
- Manjaro Linux 虽然基于 archlinux，但拥有自己独立的软件仓库，**并且值得注意的是，Manjaro Linux 的软件源，早已不和 archlinux
  的相兼容**
- Manjaro Linux 本身使用三个软件仓库：
  1. 不稳定库，即含有那些不成熟的 archlinux 包，这些包与 archlinux 源有 1-2 天的延后
  2. 测试库，每周同步一次，包含那些 archlinux 不稳定源的包
  3. 稳定库，包含那些由开发团队确认稳定的软件
- Manjaro Linux 确实可以使用 `AUR`，**但是可能会经常遭遇问题**，因为：
  1. `AUR` 实际上不提供现成的软件包，而是提供一个 `PKGBUILD` 和少量的相关文件，让用户自己获取、编译（有时候不需要）、打包一个软件包，而该过程对其构建依赖和依赖项的要求是很严格的
  2. 一旦 Manjaro Linux 提供的仓库里的包名称不同，或版本不符合要求，包构建就会失败
  3. 某些包即使能如愿构建（或修改 `PKGBUILD` 来构建），也无法正常工作，而这通常也是基础软件包的区别造成的
- Manjaro Linux
  的一些做法已经不符合 [arch 之道](<https://wiki.archlinux.org/title/Arch_Linux_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)

::: tip ℹ️ 提示

1. Manjaro Linux 和 Arch 是两个完全不同的发行版（为什么有人觉得 Manjaro Linux 是 archlinux 而不觉得 Ubuntu 是 Debian 呢？）
2. 很多 Manjaro Linux 的问题，不能用 archlinux 的解决方案解决
3. 和平共处两项原则：
   - archlinux 用户不觉得自己高人一等，劝导 Manjaro Linux 用户前往对应的社区是善意的行为
   - 不要攻击 archlinux 配置繁琐。繁琐是自由的代价。这是 archlinux 的选择，也是 arch 之道的一部分

:::

> 📔 本节参考资料：
>
> - [ArchWiki](<https://wiki.archlinux.org/title/Arch_compared_to_other_distributions_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)
> - [Why People Are Crazy About Arch Linux? What’s so Special About it?](https://itsfoss.com/why-arch-linux/)
> - [What is Arch User Repository (AUR)? How to Use AUR on Arch and Manjaro Linux?](https://itsfoss.com/aur-arch-linux/)
> - [Linux 服务器几乎从不采用 Arch Linux？](https://www.linuxprobe.com/linux-arch-linux.html)

---

### Guide Rookie Basic Install Detail (`docs/guide/rookie/basic-install-detail.md`)

# 基础安装详解

> ### 🔭 知其然，知其所以然
>
> 这一节对上一节 [archlinux 基础安装](basic-install.md) 中关键的几步做出了更进一步的解释，知其然知其所以然。此节没有特定顺序，可根据需要选择性阅读
>
> 需要说明的是，本指南假定你有一定的 Linux 基础知识，基础知识相关的话题**不会**被讨论

## 💾 分区和格式化

> 1. 因本指南介绍使用的文件系统是 `Btrfs`，很多萌新可能有些不理解。这里有必要说明一下
> 2. 若**执意要用传统的 `ext4` 文件系统**，本指南也给出了示例
> 3. 对于全盘格式化后**全新安装**的（单 archlinux 系统）同学，这里也给出了需要做的额外步骤的说明
> 4. 对于 **Swap 分区还是 Swap 文件** 的话题，也会在此讨论

### 💾 为什么要用 Btrfs 文件系统



纵观 Btrfs 的历史，可以说 Btrfs 未来的发展是道阻且长的。也让我们感受到开源社区也并不是一根绳上的蚂蚱 —— 开源社区之间也有着各种各样的分歧。

但不管怎么说，Btrfs 的未来现在来看是光明的；我们也可以在 archlinux 上享受到 Btrfs 文件系统的特性带来的好处：

1. 快照 —— archlinux 作为滚动发行版，若滚挂了可以使用 Btrfs 的快照特性快速回滚
   - 若使用传统的 `ext4` 文件系统，我们可以使用 `timeshift` 的 `RSYNC` 模式进行增量备份。但是，一般来说 RSYNC 方式的快照大小略大于当前实际使用大小，也就是说实际上开启了 `timeshift` 的 `RSYNC` 模式快照相当于磁盘可用空间直接少了一半多。因为虽然 RSYNC 方式的快照是增量的，但历史最久远的快照依然是完整备份，随后才是增量的
2. 透明压缩 —— 可以大大减少磁盘的使用空间（压缩率大概在 10% 左右）

::: tip ℹ️ 提示

更多 Btrfs 文件系统介绍和操作请参阅 [Btrfs 介绍与相关操作](../advanced/btrfs.md)。

:::

### 💾 传统 ext4 文件系统说明

若执意使用传统的 `ext4` 文件系统，那么分区的建议为：

1. 若 archlinux 安装分区小于 `256GB`：

   - `/` 根目录：`全部空间`（用户主目录不单独分区）
   - `/boot` EFI 分区：`256MB`
   - Swap 分区：`>= 电脑实际运行内存的 60%`

2. 若 archlinux 安装分区大于 `256GB`：

   - `/` 根目录：`128GB`
   - `/home` 用户主目录：`剩余的全部空间`
   - `/boot` EFI 分区：`256MB`
   - Swap 分区：`>= 电脑实际运行内存的 60%`

分区同样使用 `cfdisk` 工具，具体操作类似上一节 [7-1. 分区](./basic-install.html#_7-1-分区) 所述，这里不再赘述。

- 使用以下命令格式化 `ext4` 分区：

::: code-group

```zsh [SATA]
mkfs.ext4 /dev/sdax
```

```zsh [NVME]
mkfs.ext4 /dev/nvmexn1pn
```

:::

- 使用以下命令挂载 `ext4` 分区：

::: code-group

```zsh [SATA]
mount /dev/sdxn /mnt
mkdir /mnt/home # 若 /home 目录单独分区
mount /dev/sdxn /mnt/home # 若 /home 目录单独分区
mkdir -p /mnt/boot
mount /dev/sdxn /mnt/boot
```

```zsh [NVME]
mount /dev/nvmexn1pn /mnt
mkdir /mnt/home # 若 /home 目录单独分区
mount /dev/nvmexn1pn /mnt/home # 若 /home 目录单独分区
mkdir -p /mnt/boot
mount /dev/nvmexn1pn /mnt/boot
```

:::

### 🆕 全新安装

若为全新安装（单 archlinux 系统），首先要对磁盘建立新的 GPT 分区表；同时，由于没有现存的 EFI 分区，所以我们还需要手动创建它（这一步在 [7. 分区和格式化（使用 Btrfs 文件系统）](basic-install.md#_7-分区和格式化-使用-btrfs-文件系统) 步骤之前）：

#### 1. 建立新的 GPT 分区表

1. 同样的，先通过 `lsblk` 命令，区分要全新安装 archlinux 的磁盘（通过观察磁盘的大小等判断）：

```zsh
lsblk # 显示当前分区情况
```

2. 通过以下命令将磁盘转换为 `gpt` 类型：

::: code-group

```zsh [SATA]
parted /dev/sdx # 执行 parted，进行磁盘类型变更
(parted) mktable # 输入 mktable
New disk label type? gpt # 输入 gpt，将磁盘类型转换为 GPT 类型。如磁盘有数据会警告，输入 Yes 即可
(parted) quit # 退出 parted 命令行交互
```

```zsh [NVME]
parted /dev/nvmexn1 # 执行 parted，进行磁盘类型变更
(parted) mktable # 输入 mktable
New disk label type? gpt # 输入 gpt，将磁盘类型转换为 GPT 类型。如磁盘有数据会警告，输入 Yes 即可
(parted) quit # 退出 parted 命令行交互
```

:::

::: danger ☢️ 警告

重建分区表会使磁盘所有数据丢失，请事先确认。

:::

#### 2. 建立 EFI 分区

进入 `cfdisk` 分区工具之后，类似上一节步骤 [7-1. 分区](basic-install.md#_7-1-分区) 的分区说明，建立 EFI 分区：

1. 选中 `Free space` > 再选中操作 `[New]` > 然后按下回车 `Enter` 以新建 `EFI` 分区

2. 输入 `分区大小`（建议 >= `256MB`、<= `1024MB`；推荐 `512MB`）> 然后按下回车 `Enter`

3. 选中操作 `[Type]` > 然后按下回车 `Enter` > 通过方向键 `↑` 和 `↓` 选中 `EFI System` > 最后按下回车 `Enter`

4. 接下来可以按照上一节 [7-1. 分区](basic-install.md#_7-1-分区) 的步骤创建其它分区

#### 3. 格式化 EFI 分区

::: code-group

```zsh [SATA]
mkfs.vfat /dev/sdxn
```

```zsh [NVME]
mkfs.vfat /dev/nvmexn1pn
```

:::

### 💾 Swap 分区和 Swap 文件

如果希望使用 Swap 文件替换 Swap 分区，那么在分区和挂载中不必创建和开启 Swap 分区。

::: tip ℹ️ 提示

但是，使用 Swap 文件会更加复杂。因为若使用 Swap 文件在 `Btrfs` 文件系统中设置休眠（hibernate）的时候需要额外的步骤，而且可能有兼容性问题。若没有动态改变 Swap 大小的需求，建议使用 Swap 分区。

:::

通过以下步骤创建和挂载 Swap 文件（这一步在 [18. 完成安装](basic-install.md#_18-完成安装) 步骤之后）：

1. 通过以下命令创建 Swap File：

```bash
sudo dd if=/dev/zero of=/swapfile bs=1M count=16384 status=progress # 创建 16G 的交换空间（大小 >= 电脑实际运行内存的 60%）
sudo chmod 600 /swapfile # 设置正确的权限
sudo mkswap /swapfile # 格式化 Swap 文件
sudo swapon /swapfile # 挂载 Swap 文件
```

2. 通过以下命令挂载 Swap 文件：

```bash
swapon /swapfile
```

3. 使用 `free` 命令复查 Swap 文件挂载情况：

```zsh
free -h # -h 选项会使输出以人类可读的单位显示
```

4. 最后，向 `/etc/fstab` 中追加如下内容：

```fstab
/swapfile  none  swap  defaults  0 0
```

## 💽 安装环境和新系统的关系

> 理解安装环境和新系统的关系，对于理解 archlinux 安装时所做的步骤具有重大意义。可以说，理解了它们的关系基本上就理解了 archlinux 的安装

为了生动形象的理解安装环境和新系统的关系，我们可以将安装系统的过程想象成搬家 🏠。

### 1. 🏠 建房子

我们可以将安装环境比喻成一个临时的家。为了住进新家，我们需要先把新家的房子建起来。这个过程就是 [7. 分区和格式化](basic-install.md#_7-分区和格式化-使用-btrfs-文件系统)。在磁盘上建立新的分区并格式化，就好比在空余的土地上建立起新的房子。

### 2. 🛣️ 建立通道

新房建好了，我们首先还要建立一条联通旧家和新家之间的通道 —— 不然我们怎么走到新家去呢！更不要提将家具什么的安置到新家去了。这个步骤就是 [8. 挂载](/guide/rookie/basic-install.md#_8-挂载)。通过将新的分区挂载到 `/mnt` 下，我们才能对新的分区进行操作。

### 3. 🛋️ 添置家具

光有一个空荡荡的房子是没有用的。为了变成一个能够生活的温馨小窝，我们还需要添置家具。这个步骤就是 [9. 安装系统](basic-install.md#_9-安装系统)。在执行 `pacstrap` 脚本的过程中，其实就是将系统运行需要的一些基础的东西安装到新的系统中 —— 类似把家具放到新的家里。

### 4. 🚚 搬进新家

最后，新家建好了，装修啊、家具啊也弄好了，我们可以搬进新家了！这一步骤就是 [11. change root](./basic-install.html#_11-change-root)。`arch-chroot` 脚本是软件包 [`arch-install-scripts`](https://archlinux.org/packages/?name=arch-install-scripts) 的一部分，但本质上只是在 `chroot` 命令的基础上添加了一些功能，简化了“搬家”的流程。其类似（注意，只是类似，`arch-chroot` 还会做一些其它的工作，安装时请使用 `arch-chroot`）以下命令：

```zsh
mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount -o bind /dev /mnt/dev
chroot /mnt bash
```

`chroot` 顾名思义，就是 **ch**ange **root** 的意思。`chroot` 命令把根目录换成指定的目录。通常，切换根目录一般的目的是为了系统维护，例如重装引导程序或者重置遗忘的密码；而在安装时则是为了安装（大雾 🌫️。在安装过程中，新的根目录就是 `/mnt`。这个过程就好比从原来的家搬到了新的家一样，是不是这样理解起来就简单一点了呢？

## 🥙 杂七杂八

其它琐碎的问题不在一一展开叙述，这里通过列表统一说明：

1. EFI 分区（又称 esp 分区）不一定要挂载在 `/boot` 目录下；也可以是 `/efi` 或者其他非常见路径（当然一般推荐挂载在 `/boot` 下，方便引导程序读取同样在这个目录下的内核、微码等启动系统的必要文件）
2. 若为**联想小新 Pro14 / YOGA 14s 2021** 机型，发现安装前后键盘都无法正常工作。此时安装时请使用外接键盘。为了解决该问题，在 [17. 安装引导程序](./basic-install.html#_17-安装引导程序) 步骤中编辑 `/etc/default/grub` 文件时添加额外的 GRUB 参数 —— 在 `GRUB_CMDLINE_LINUX_DEFAULT` 这一行中添加参数 `i8042.dumbkbd`

修改后复查：

```bash
head /etc/default/grub
```

输出如下：

```grub {8}
# GRUB boot loader configuration

GRUB_DEFAULT_SUBMENU=y
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
GRUB_TIMEOUT=2
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=5 nowatchdog i8042.dumbkbd"
GRUB_CMDLINE_LINUX=""
```

3. 若为机械革命机型，则建议通过 CPIO archive 修复

本部分来源于：[机械革命 蛟龙 15K Linux 内置键盘失灵解决 (ACPI)_linux 笔记本键盘失灵](https://blog.csdn.net/ZGY_121/article/details/134834265)

工具：acpica和cpio

```bash
sudo pacman -S acpica cpio
```

获得原来的 DSDT

```bash
cat /sys/firmware/acpi/tables/DSDT > dsdt.dat # 获取dsdt
iasl -d dsdt.dat # 反编译DSDT成AML文件(.dsl)
```

修改 dsdt.dsl ： 找到 Device(PS2K) ，向下找第一个 ActiveLow 改成 ActiveHigh ，样例如下：

```
Device (PS2K)
{                                             
    Name (_HID, "MSFT0001")  // _HID: Hardware ID
    Name (_CID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */)  // _CID: Compatible ID
    Method (_STA, 0, NotSerialized)  // _STA: Status
    {                    
        Return (0x0F)
    }                    
    
    Name (_CRS, ResourceTemplate ()  // _CRS: Current Resource Settings
    {
        IO (Decode16,
            0x0060,             // Range Minimum
            0x0060,             // Range Maximum
            0x00,               // Alignment
            0x01,               // Length
            )
        IO (Decode16,
            0x0064,             // Range Minimum
            0x0064,             // Range Maximum
            0x00,               // Alignment
            0x01,               // Length
            )
        IRQ (Edge, ActiveLow, Shared, ) // <<=== 目标
            {1}
    })
//... 省略无关内容
}
```

最后，给DefinitionBlock 升一个版本 (最后一个十六进制数加一)： `DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x01072009)` 改为 `DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x0107200A)`

编译新的 AML 文件

```bash
iasl dsdt.dsl
```
加入 initrd

```
mkdir -p kernel/firmware/acpi
cp dsdt.aml kernel/firmware/acpi
find kernel | cpio -H newc --create > acpi_override
sudo cp acpi_override /boot
echo "GRUB_EARLY_INITRD_LINUX_CUSTOM=\"acpi_override\"" >> /etc/default/grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
```

::: tip ℹ️ 提示

如果使用 systemd-boot , 则只需要在内核加载后再加一条 `initrd` 命令即可，样例如下：

```
# Created by: archinstall
# Created on: 2024-07-28_08-06-24
title   Arch Linux (linux-zen)
linux   /vmlinuz-linux-zen
initrd  /acpi_override # 这一行
initrd  /initramfs-linux-zen.img
options root=PARTUUID=d1204e8c-13ab-4c8d-a6fd-45d731684912 zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs
```

:::

---

### Guide Rookie Basic Install (`docs/guide/rookie/basic-install.md`)

# archlinux 基础安装

> ### ⛵ 万事俱备，只欠东风
>
> 经过了上一节的准备工作，我们可以开始正式安装 archlinux 了。如果你还没有完成前面的阅读，请先仔细阅读章节 [安装前的准备](pre-install.md)。如果对本节的步骤不理解或者有疑问，请阅读下一节 [基础安装详解](basic-install-detail.md)

本节从安装最基础的、无图形化界面的 archlinux 系统开始。如有需要可以参阅 [ArchWiki 官方安装指南](<https://wiki.archlinux.org/title/Installation_guide_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)。

::: tip ℹ️ 提示

本节中的截图来自虚拟机和已经安装好的 archlinux。不用担心！和你在实体机看到的是一样的。

:::

::: warning ⚠️ 注意

请按照指南的步骤一步一步进行！不要跳步、也不要在步骤中添加多余的动作！

另外，如果安装中有报错，请弄清楚报错的原因（这要求你起码能看懂有报错）！常见的原因包括但不限于输错了命令、添加了多余的步骤等。在解决了问题之后再进行下一步！

:::

## 0. 进入安装环境



1. 在第一个选项回车



2. 进入安装环境后，便可以开始通过命令安装 archlinux 了

::: tip ℹ️ 提示

- 在2025年后，用于自动更新 `mirrorlist`（软件包管理器 `pacman` 的软件源）的 `reflector` 服务由于会误删某些有用的源信息已被默认禁用，无需再手动禁用。

:::

::: tip ℹ️ 提示
- 在命令行中你可以使用如下命令清屏：

  ```zsh
  clear
  ```

  同时，你可以使用 `Tab` 键在输入命令的时候对命令、参数或文件路径进行自动补全，提高效率的同时降低输入错误的风险。

- `Tab` 无法补全时，有些设备的蜂鸣器会发出“哔——”声，可以使用如下命令禁用蜂鸣器内核模块：

  ```zsh
  rmmod pcspkr
  ```
- 要永久禁用蜂鸣器内核模块, 请创建并编辑 `/etc/modprobe.d/blacklist.conf`

  ```zsh
  sudoedit /etc/modprobe.d/blacklist.conf
  ```

  加入以下内容

  ```
  blacklist pcspkr
  ```

  这样下次启动就不会加载 pcspkr 模块了

:::

## 1. 确认是否为 UEFI 模式

我们先来确认一下是否为 `UEFI` 模式：

```zsh
ls /sys/firmware/efi/efivars
```



若输出了一堆东西（`efi` 变量），则说明已在 `UEFI` 模式。否则请确认你的启动方式是否为 `UEFI`。

## 2. 连接网络

::: tip ℹ️ 提示

archlinux 的安装**必须**要求网络环境。

:::

::: tip ℹ️ 提示

若为虚拟机且按照上一节 [虚拟机安装前的准备](pre-virt.md#_3-配置-virtualbox) 进行了配置；同时宿主机连接了网络，那么虚拟机应该已经连接网络了。

:::

### 若使用**无线连接**

使用 `iwctl` 进行连接：

```zsh {2,4}
iwctl # 进入交互式命令行
device list # 列出无线网卡设备名，比如无线网卡看到叫 wlan0
station wlan0 scan # 扫描网络
station wlan0 get-networks # 列出所有 wifi 网络
station wlan0 connect wifi-name # 进行连接，注意这里无法输入中文。回车后输入密码即可
exit # 连接成功后退出
```

::: tip ℹ️ 提示

若无线网卡无法显示，请按照上一节 [确保网络环境](pre-install.md#_1-确保网络环境) 的说明**确保你的无线网卡硬件开关处于打开状态**。

你可以使用如下命令查看内核是否加载了你的无线网卡驱动。

```zsh
lspci -k | grep Network
```

以我的硬件为例，输出如下：

```zsh
00:14.3 Network controller: Intel Corporation Wi-Fi 6 AX201 (rev 20)
```

如果你的 BIOS 没有开启无线网卡的开关可以参考下列的命令来开启 `WIFI`

```zsh
rfkill list #查看无线连接 是否被禁用(blocked: yes)
ip link set wlan0 up #比如无线网卡看到叫 wlan0
```

若看到类似`Operation not possible due to RF-kill`的报错，继续尝试`rfkill unblock wifi`来解锁无线网卡。

```zsh
rfkill unblock wifi
```

部分无线网卡不兼容，请考虑使用有线连接安装 archlinux。

:::

### 若使用**有线连接**

正常来说，只要插上一个已经联网的路由器分出的网线（DHCP），直接就能联网。

可以等待几秒等网络建立连接后再进行下一步测试网络的操作。

若笔记本没有网线接口请使用带网线接口的扩展坞。

## 3. 测试网络连通性

通过 `ping` 命令测试网络连通性：

```zsh
ping www.bilibili.com
```



稍等片刻，若能看到数据返回，即说明已经联网。与 Windows 不同的是，需要按下 `Ctrl` + `C` 手动退出 `ping` 命令。

::: tip ℹ️ 提示

如果无线网络还是无法连接，请使用 `ip link` 命令查看无线网卡设备，使用 `ip link set <设备名> up` 命令激活对应的无线网卡。若看到类似 `Operation not possible due to RF-kill` 的报错，继续尝试 `rfkill unblock wifi` 来解锁无线网卡。

如有需要，可以参考 [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Network_configuration_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)/Wireless_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#%E6%A3%80%E6%9F%A5%E8%AE%BE%E5%A4%87%E7%8A%B6%E6%80%81>)。

:::

## 4. 更新系统时钟

使用 `timedatectl` 确保系统时间是准确的。这一步**不是**可选的，正确的系统时间对于部分程序来说非常重要：

```zsh
timedatectl set-ntp true # 将系统时间与网络时间进行同步
timedatectl status # 检查服务状态
```



## 5. 更换国内软件仓库镜像源加快下载速度

使用 `vim` 编辑器修改 `/etc/pacman.d/mirrorlist` 文件。将 `pacman` 软件仓库源更换为国内软件仓库镜像源：

```zsh
vim /etc/pacman.d/mirrorlist
```

::: tip ℹ️ 提示

如果不会使用 `vim` 编辑器，请参阅 [这里](../advanced/system-ctl.md#终端编辑器-vim-的使用)。

`vim` 编辑器在安装和配置系统的过程中还需要使用多次。

:::

放在最上面的是会使用的软件仓库镜像源，推荐的镜像源如下：

```mirrorlist {1}
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch # 中国科学技术大学开源镜像站
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch # 清华大学开源软件镜像站
Server = https://repo.huaweicloud.com/archlinux/$repo/os/$arch # 华为开源镜像站
Server = http://mirror.lzu.edu.cn/archlinux/$repo/os/$arch # 兰州大学开源镜像站
```



修改完成的 `/etc/pacman.d/mirrorlist` 文件如图所示。

::: tip ℹ️ 提示

如果发现 `/etc/pacman.d/mirrorlist` 是如图这个样子的，那么说明你禁用 `reflector` 服务晚了。`reflector` 已经自动帮你生成了新的软件仓库镜像源列表。不过没有关系，手动将国内软件仓库镜像源放在最前面即可。



:::

::: warning ⚠️ 注意

前车之鉴 —— 请不在这一步中添加 `archlinuxcn` 源！如果你在 `/etc/pacman.conf` 中添加了内容，请将它们删掉。

:::

## 6. 分区和格式化（使用 Btrfs 文件系统）

### 6-1. 分区

::: tip ℹ️ 提示

虚拟机安装请同时参阅步骤 [🆕 全新安装](basic-install-detail.md#🆕-全新安装)。

分区步骤对于有些人来说是个难点，如果有不理解的地方请参阅下一节 [基础安装详解](basic-install-detail.md#💾-分区和格式化)。

同时，分区其它说明也会在下一节 [基础安装详解](basic-install-detail.md#💾-分区和格式化) 详细列出。

:::

::: danger ☢️ 警告

分区操作的部分命令具有危险性！除非你知道每一个命令在干什么，否则请不要执行！

同时，请提前做好数据备份，防止数据丢失！

:::

本指南考虑到多数情况，在这里首先介绍 win10 和 archlinux 在一个磁盘上双系统的分区配置。

- `/` 根目录：`>= 128GB`（和用户主目录在同一个 `Btrfs` 文件系统上）
- `/home` 用户主目录：`>= 128GB`（和根目录在同一个 `Btrfs` 文件系统上）
- `/boot` EFI 分区：`256MB`（由电脑厂商或 Windows 决定，无需再次创建）
- Swap 分区：`>= 电脑实际运行内存的 60%`（设置这个大小是为了配置休眠准备）

::: tip ℹ️ 提示

因为采用 `Btrfs` 文件系统，所以根目录和用户主目录实际在一个分区上，只是在不同的子卷上而已。这里根目录和用户主目录的大小仅为参考，一般来说日常使用的 linux 分配 128GB 已经够用了。

:::

1. 通过 `lsblk` 命令，区分要安装 archlinux 的磁盘（通过观察磁盘的大小、已存在的分区情况等判断）并显示当前磁盘的分区情况：

```zsh
lsblk # 显示当前分区情况
```



此处要分区和安装 archlinux 的磁盘即为 `sda`。请根据你的实际情况判断！

::: tip ℹ️ 提示

为了模拟真实的环境，笔者手动创建了三个分区分别代表：

1. `sda1` —— EFI 分区
2. `sda2` —— win10 下的 C 盘（象征性的分了 `1GB`）
3. `sda3` —— win10 下的 D 盘（象征性的分了 `1GB`）

:::

::: tip ℹ️ 提示

注意此处并不会显出出未分配的磁盘空间！只有在使用 `cfdisk` 执行分区操作后才会显示出来。

:::

::: tip ℹ️ 提示

如果你的硬盘是 NVME 协议的固态硬盘，那么将不是 `sdx` 而是 `nvmexn1`。

:::

2. 接下来使用 `cfdisk` 命令对磁盘分区（对于 SATA 协议的硬盘，`x` 为字母 `a`、`b` 或 `c` 等等；对于 NVME 协议的硬盘，`x` 为数字 `0`、`1` 或 `2` 等等，请根据实际情况判断）：

::: code-group

```zsh [SATA]
cfdisk /dev/sdx # 对安装 archlinux 的磁盘分区
```

```zsh [NVME]
cfdisk /dev/nvmexn1 # 对安装 archlinux 的磁盘分区
```

:::



进入 `cfdisk` 分区工具之后，你会看到如图所示的界面。通过方向键 `↑` 和 `↓` 可以在要操作磁盘分区或空余空间中移动；通过方向键 `←` 和 `→` 在对当前高亮的磁盘分区或空余空间要执行的操作中移动。

3. 首先创建 Swap 分区。选中 `Free space` > 再选中操作 `[New]` > 然后按下回车 `Enter` 以新建 `swap` 分区（类似 Windows 的交换文件）



4. 按下回车后会提示输入 `分区大小`，Swap 分区建议为**电脑内存大小的 60%**，或者和内存大小相等 > 然后按下回车 `Enter`



::: tip ℹ️ 提示

单位可以自行输入，如 `GB`、`MB` 等等。

:::

5. 默认新建的类型是 `Linux filesystem`，我们需要将类型更改为 `Linux swap`。选中操作 `[Type]` > 然后按下回车 `Enter` > 通过方向键 `↑` 和 `↓` 选中 `Linux swap` > 最后按下回车 `Enter`







6. 我们再只需要一个分区即可（因为使用 `Btrfs` 文件系统，所以根目录和用户主目录在一个分区上），所以类似的：选中 `Free space` > 再选中操作 `[New]` > 然后按下回车 `Enter` 以新建分区



7. 输入 `分区大小`（默认是剩余的全部空间。请根据实际情况输入）> 然后按下回车 `Enter`



8. 分区类型默认即可，无需更改。接下来选中操作 `[Write]` 并回车 `Enter` > 输入 `yes` 并回车 `Enter` 确认分区操作





::: warning ⚠️ 注意

只有写入了操作分区表才会更改。

:::

9. 选中操作 `[Quit]` 并回车 `Enter` 以退出 `cfdisk` 分区工具



::: danger ☢️ 警告

再次提醒！请仔细检查命令和操作的正确性，否则将出现不可预料的情况。最危险的是可能造成数据丢失！

常见的错误包括不小心把 Windows 的分区删掉了 😥。

:::

10. 分区完成后，使用 `fdisk` 或 `lsblk` 命令复查分区情况：

::: code-group

```zsh [fdisk]
fdisk -l # 复查磁盘情况
```

```zsh [lsblk]
lsblk # 复查磁盘情况
```

:::





### 6-2. 格式化并创建 Btrfs 子卷

#### 6-2.0. 格式化 EFI 分区

::: code-group

```zsh [SATA]
mkfs.fat -F32 /dev/sdxn
```

```zsh [NVME]
mkfs.fat -F32 /dev/nvmexn1pn
```

:::

::: warning ⚠️ 注意

如果目标是双系统（Win10/Win11 + Arch Linux），并且 Win10/Win11 和 Arch Linux 将要共存在一个硬盘上的话，不要重新格式化原有的 EFI 分区，因为它可能包含启动其他操作系统所需的文件。

:::

#### 6-2-1. 格式化 Swap 分区

通过以下命令格式化对应的 Swap 分区，请按照实际情况替换 `x` 和 `n`（下同）：

::: code-group

```zsh [SATA]
mkswap /dev/sdxn
```

```zsh [NVME]
mkswap /dev/nvmexn1pn
```

:::



#### 6-2-2. 格式化 Btrfs 分区

1. 首先我们需要将整一个分区格式化为 `Btrfs` 文件系统。使用如下命令进行格式化：

::: code-group

```zsh [SATA]
mkfs.btrfs -L myArch /dev/sdxn
```

```zsh [NVME]
mkfs.btrfs -L myArch /dev/nvmexn1pn
```

:::

> 📑 命令参数说明：
>
> - `-L` 选项后指定该分区的 `LABLE`，这里以 `myArch` 为例，也可以自定义，但不能使用特殊字符以及空格，且最好有意义



2. 为了创建子卷，我们需要先将 `Btrfs` 分区挂载到 `/mnt` 下：

::: code-group

```zsh [SATA]
mount -t btrfs -o compress=zstd /dev/sdxn /mnt
```

```zsh [NVME]
mount -t btrfs -o compress=zstd /dev/nvmexn1pn /mnt
```

:::

> 📑 命令参数说明：
>
> - `-t` 选项后指定挂载分区文件系统类型
> - `-o` 选项后添加挂载参数：
>   - `compress=zstd` —— 开启透明压缩

3. 使用 `df` 命令复查挂载情况：

```zsh
df -h # -h 选项会使输出以人类可读的单位显示
```



#### 6-2-3. 创建 Btrfs 子卷

1. 通过以下命令创建两个 `Btrfs` 子卷，之后将分别挂载到 `/` 根目录和 `/home` 用户主目录：

```zsh
btrfs subvolume create /mnt/@ # 创建 / 目录子卷
btrfs subvolume create /mnt/@home # 创建 /home 目录子卷
```



::: warning ⚠️ 注意

除非你清楚你的操作产生的后果，否则请保持子卷名称和结构与本指南一致，因为在后面我们会设置的快照工具 `timeshift` 只支持这种子卷布局。

:::

2. 通过以下命令复查子卷情况：

```zsh
btrfs subvolume list -p /mnt
```



3. 子卷创建好后，我们需要将 `/mnt` 卸载掉，以挂载子卷：

```zsh
umount /mnt
```



## 7. 挂载

1. 在挂载时，挂载是有顺序的，需要从根目录开始挂载。使用如下命令挂载子卷：

::: code-group

```zsh [SATA]
mount -t btrfs -o subvol=/@,compress=zstd /dev/sdxn /mnt # 挂载 / 目录
mkdir /mnt/home # 创建 /home 目录
mount -t btrfs -o subvol=/@home,compress=zstd /dev/sdxn /mnt/home # 挂载 /home 目录
mkdir -p /mnt/boot # 创建 /boot 目录
mount /dev/sdxn /mnt/boot # 挂载 /boot 目录
swapon /dev/sdxn # 挂载交换分区
```

```zsh [NVME]
mount -t btrfs -o subvol=/@,compress=zstd /dev/nvmexn1pn /mnt # 挂载 / 目录
mkdir /mnt/home # 创建 /home 目录
mount -t btrfs -o subvol=/@home,compress=zstd /dev/nvmexn1pn /mnt/home # 挂载 /home 目录
mkdir -p /mnt/boot # 创建 /boot 目录
mount /dev/nvmexn1pn /mnt/boot # 挂载 /boot 目录
swapon /dev/nvmexn1pn # 挂载交换分区
```

:::





2. 使用 `df` 命令复查挂载情况：

```zsh
df -h
```



3. 使用 `free` 命令复查 Swap 分区挂载情况：

```zsh
free -h # -h 选项会使输出以人类可读的单位显示
```



## 8. 安装系统

1. 通过如下命令使用 `pacstrap` 脚本安装基础包：

```bash
pacstrap /mnt base base-devel linux linux-firmware btrfs-progs
# 如果使用btrfs文件系统，额外安装一个btrfs-progs包
```

> 📑 命令参数说明：
>
> - `base-devel` —— `base-devel` 在 `AUR` 包的安装过程中是必须用到的
> - `linux` —— 内核软件包，这里建议先不要替换为其它内核



如果提示 GPG 证书错误，可能是因为使用的不是最新的镜像文件，可以通过更新 `archlinux-keyring` 解决此问题

```bash
pacman -S archlinux-keyring
```

2. 通过如下命令使用 `pacstrap` 脚本安装其它必要的功能性软件：

```bash
pacstrap /mnt networkmanager vim sudo zsh zsh-completions
```

> 📑 命令参数说明：
>
> - `zsh` —— `zsh-completions` 如果你是 bash 的爱好者，请把这两个包换成`bash-completion`
> - 如果你是第一次接触\*nix 系统的新手，不建议换成 bash



经过一系列安装时提示信息的刷屏，这些包就安装好了。

::: warning ⚠️ 注意

在执行命令前，请仔细检查命令的拼写正确；同时注意不要漏装东西。

很多人在后续的步骤中报错就是因为这里漏装了东西。

如果报错，请**检查拼写**，同时请确保之前的步骤 [更换国内软件仓库镜像源加快下载速度](#_6-更换国内软件仓库镜像源加快下载速度) 中**没有**添加 `archlinuxcn` 源。

:::

## 9. 生成 fstab 文件

1. `fstab` 用来定义磁盘分区。它是 Linux 系统中重要的文件之一。使用 `genfstab` 自动根据当前挂载情况生成并写入 `fstab` 文件：

```zsh
genfstab -U /mnt > /mnt/etc/fstab
```

2. 复查一下 `/mnt/etc/fstab` 确保没有错误：

```zsh
cat /mnt/etc/fstab
```



若为 NVME 协议的硬盘，输出结果应该与此类似：

```fstab {2,5,8,11}
# /dev/nvme0n1p6  /  btrfs  rw,relatime,compress=zstd:3,ssd,space_cache,subvolid=256,subvol=/@,subvol=@ 0 0
UUID=d01a3ca5-0798-462e-9a30-97065e7e36e1 /  btrfs  rw,relatime,compress=zstd:3,ssd,space_cache,subvolid=256,subvol=/@,subvol=@  0 0

# /dev/nvme0n1p1  /boot vfat  rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro      0 2
UUID=522C-80C6  /boot vfat  rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2

# /dev/nvme0n1p6  /home btrfs rw,relatime,compress=zstd:3,ssd,space_cache,subvolid=257,subvol=/@home,subvol=@home 0 0
UUID=d01a3ca5-0798-462e-9a30-97065e7e36e1 /home btrfs rw,relatime,compress=zstd:3,ssd,space_cache,subvolid=257,subvol=/@home,subvol=@home 0 0

# /dev/nvme0n1p5  none  swap  defaults  0 0
UUID=8e40dbed-590f-4cb8-80de-5cef8343a9fc none  swap  defaults  0 0
```

## 10. change root

使用以下命令把系统环境切换到新系统下：

```zsh
arch-chroot /mnt
```



此时，原来安装盘下的 `/mnt` 目录就变成了新系统的 `/` 目录。同时，可以发现命令行的提示符颜色和样式也发生了改变。

## 11. 设置主机名与时区

1. 首先在 `/etc/hostname` 设置主机名：

```bash
vim /etc/hostname
```



加入你想为主机取的主机名，这里比如叫 myarch。

::: tip ℹ️ 提示

主机名不要包含特殊字符以及空格。

:::

2. 接下来在 `/etc/hosts` 设置与其匹配的条目：

```bash
vim /etc/hosts
```

加入如下内容：

```bash
127.0.0.1   localhost
::1         localhost
127.0.1.1   myarch.localdomain myarch
```



::: tip ℹ️ 提示

你可以使用 `Tab` 对齐。

:::

::: tip ℹ️ 提示

某些情况下如不设置主机名，在 KDE 下可能会存在网络情况变更时无法启动 GUI 应用的问题，在终端中出现形如 `No protocol specified qt.qpa.xcb: could not connect to display` 的错误。这种情况极为少见。

但不管如何，即使没有问题，我们都应该设置好主机名。

:::

3. 随后设置时区，在 `/etc/localtime` 下用 `/usr` 中合适的时区创建符号链接：

```bash
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
```



> #### 🍧 碎碎念
>
> 不要找北京啦！这里没有北京，只有上海啦！🚀

::: tip ℹ️ 提示

同时，你也可以使用其它时区：



:::

## 12. 硬件时间设置

使用如下命令将系统时间同步到硬件时间：

```bash
hwclock --systohc
```

## 13. 设置 Locale

`Locale` 决定了软件使用的语言、书写习惯和字符集。

1. 编辑 `/etc/locale.gen`，去掉 `en_US.UTF-8 UTF-8` 以及 `zh_CN.UTF-8 UTF-8` 行前的注释符号（`#`）：

```bash
vim /etc/locale.gen
```





::: tip ℹ️ 提示

有几个选项极具迷惑性，请不要取消注释错了。

:::

2. 然后使用如下命令生成 `locale`：

```bash
locale-gen
```



3. 向 `/etc/locale.conf` 输入内容：

```bash
echo 'LANG=en_US.UTF-8'  > /etc/locale.conf
```

::: warning ⚠️ 注意

不推荐在此设置任何中文 `locale`，会导致 `tty` 乱码。

:::

## 14. 为 root 用户设置密码

```bash
passwd root
```



::: tip ℹ️ 提示

根据提示操作即可。注意输入密码时不会显示哦，不要以为 ⌨ 键盘坏了。

:::

## 15. 安装微码

通过以下命令安装对应芯片制造商的微码：

```bash
pacman -S intel-ucode # Intel
pacman -S amd-ucode # AMD
```

::: tip ℹ️ 提示

🎉 恭喜你！这是你在新系统中第一次使用 `pacman` 软件包管理器安装软件！在这里一路回车完成安装即可。

如果你不会使用，请参阅 [这里]()。

:::

## 16. 安装引导程序

如有需要可以参阅 [ArchWiki 相关内容](<https://wiki.archlinux.org/title/GRUB_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)。

1. 安装相应的包：

```bash
pacman -S grub efibootmgr os-prober
```

> 📑 命令参数说明：
>
> - `-S` 选项后指定要通过 `pacman` 包管理器安装的包：
>   - `grub` —— 启动引导器
>   - `efibootmgr` —— `efibootmgr` 被 `grub` 脚本用来将启动项写入 NVRAM
>   - `os-prober` —— 为了能够引导 win10，需要安装 `os-prober` 以检测到它

2. 安装 GRUB 到 EFI 分区：

```bash
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH
```

> 📑 命令参数说明：
>
> - `--efi-directory=/boot` —— 将 `grubx64.efi` 安装到之前的指定位置（EFI 分区）
> - `--bootloader-id=ARCH` —— 取名为 `ARCH`



3. 接下来使用 `vim` 编辑 `/etc/default/grub` 文件：

```bash
vim /etc/default/grub
```

进行如下修改：

- 去掉 `GRUB_CMDLINE_LINUX_DEFAULT` 一行中最后的 `quiet` 参数
- 把 `loglevel` 的数值从 `3` 改成 `5`。这样是为了后续如果出现系统错误，方便排错
- 加入 `nowatchdog` 参数，这可以显著提高开关机速度



- 为了引导 win10，则还需要添加新的一行 `GRUB_DISABLE_OS_PROBER=false`

```grub {8}
# GRUB boot loader configuration

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=5 nowatchdog"
GRUB_CMDLINE_LINUX=""
GRUB_DISABLE_OS_PROBER=false
...
```

::: tip ℹ️ 提示

`nowatchdog` 参数无法禁用英特尔的看门狗硬件，改为 `modprobe.blacklist=iTCO_wdt` 即可。如有需要可以参考 [ArchWiki 对应内容](https://wiki.archlinuxcn.org/wiki/性能优化#看门狗)

:::

4. 最后生成 `GRUB` 所需的配置文件：

```bash
grub-mkconfig -o /boot/grub/grub.cfg
```



若引导了 win10，则输出应该包含倒数第二行：



若 win10 安装在另一个硬盘中则不会输出
可在进入系统后挂载硬盘并重新执行该命令

::: tip ℹ️ 提示

1.在某些主板安装完成后，你会发现没有启动条目。这是因为某些主板的 UEFI 固件在显示 UEFI NVRAM 引导条目之前，需要在特定的位置存放可引导文件，不支持自定义存放 `efi` 文件（如微星 Z170-A Gaming PRO）。解决方案是在默认启动路径下安装 `GRUB`。重新插入安装优盘，按原先顺序挂载目录（不需要再次创建文件夹了），`chroot` 到 `/mnt`，然后你可以重新用 `--removable` 安装grub2，如下命令所示。只有安装完成后你的主板不出现启动条目才需要尝试如下命令，正常安装无需执行。如有需要可以参考 [ArchWiki 对应内容](https://wiki.archlinuxcn.org/wiki/GRUB#缺省/后备启动路径)。

```bash
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH --removable
```

2.`os-prober` 在 chroot 环境中可能无法正常运作。如果遇到这种情况，重启并引导进入系统后再次尝试生成配置文件。
:::

## 17. 完成安装

1. 输入以下命令：

```bash
exit # 退回安装环境
umount -R /mnt # 卸载新分区
reboot # 重启
```



注意，**重启前要先拔掉优盘**，否则你重启后还是进安装程序而不是安装好的系统。

::: tip ℹ️ 提示

虚拟机直接重启即可。

:::



如图即为 GRUB 引导界面。

::: tip ℹ️ 提示

若引导了 win10 也会显示出来。

:::

::: tip ℹ️ 提示

若 win10 分区使用了 🔐 Bitlocker 加密，则第一次从 GRUB 进入需要输入解锁密钥。

你应该在步骤 [5. 获取 Bitlocker 恢复密钥](pre-install.md#_5-获取-bitlocker-恢复密钥) 中已经知晓了 Bitlocker 解锁密钥。

若无法从 [aka.ms 相关页面](https://aka.ms/myrecoverykey) 获取解锁密钥，请尝试在 BIOS 中将 Windows Boot Manager 移动到启动顺序首位再尝试进入 win10。

:::

2. 重启后使用 root 账户登录系统：



3. 设置开机自启并立即启动 networkmanager 服务，即可连接网络：

```bash
systemctl enable --now NetworkManager # 设置开机自启并立即启动 NetworkManager 服务
ping www.bilibili.com # 测试网络连接
```



4. 若为无线连接，则需要在启动 `networkmanager` 后使用 `nmcli` 连接网络：

```bash
nmcli dev wifi list # 显示附近的 Wi-Fi 网络
nmcli dev wifi connect "Wi-Fi名（SSID）" password "网络密码" # 连接指定的无线网络
```

也可以使用 `nmtui` 来配置网络

```bash
nmtui
```

::: tip ℹ️ 提示

neofetch 原作者 dylanaraps 已于 2024 年 04 月 26 日归档 neofetch 仓库，在下面我们会使用 `fastfetch` 代替 `neofetch`。

:::


5. `fastfetch` 可以将系统信息和发行版 logo 一并打印出来。通过 `pacman` 安装 `fastfetch`：

```bash
pacman -S fastfetch
```

使用 `fastfetch` 打印系统信息：

```bash
fastfetch
```



> #### 🍧 碎碎念
>
> 又到了 `fastfetch` 的时间了吗？

## 🎉 祝贺！🎉

到此为止，一个基础的、无图形界面的 archlinux 已经安装完成了！这时你应该可以感到满满的满足感（即使你还没有见到图形化的界面）。好好享受一下成功安装 archlinux 的喜悦吧！

如果你对本节的部分步骤不理解，请仔细阅读下一节 [基础安装详解](basic-install-detail.md)。在此之后，我们来安装图形界面。

::: tip ℹ️ 提示

你可以使用以下命令关机：

```bash
shutdown -h now
# 或者
poweroff
```

:::

::: tip ℹ️ 提示

archlinux 在 2021 年 4 月在安装镜像中内置了一个 [安装脚本](https://archlinux.org/packages/extra/any/archinstall/)，类似一个一键安装脚本，提供一些选项，即可快速安装（填问卷安系统）。和所有一键安装脚本类似，提供自动化，但不灵活的安装过程。缺陷包括但不限于：

1. 只提供有限的文件系统格式
2. 只可限定在一个磁盘
3. 不能指定软件仓库镜像源
4. 只提供有限的桌面选择
5. 自动分区不可手动干预
6. 输入错误直接崩溃退出
7. 仅支持 UEFI 等

不建议使用这个安装脚本，除了以上各种原因，初学者也无法在这种安装过程中学到任何东西。如果你因为某些原因需要快速启动一个基础的 archlinux 环境，那么可以尝试此脚本。

:::

---

### Guide Rookie Desktop Env And App (`docs/guide/rookie/desktop-env-and-app.md`)

# 桌面环境与常用应用安装

> ### 🏔 两岸猿声啼不住，轻舟已过万重山
>
> 没有图形界面的 archlinux 显然作为日常使用的操作系统是不合适的。但经过这一节的安装和配置后，我们的系统就可以当作日常的操作系统使用了

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

这一小节，我们开始着手安装桌面环境和一些常用的软件。如有需要可以参阅 [ArchWiki 一般性建议](<https://wiki.archlinux.org/title/General_recommendations_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)。

::: tip ℹ️ 提示

指南中带有 <sup>aur</sup> 角标的软件代表是在 [AUR](https://aur.archlinux.org/)（Arch User Repository）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>cn</sup> 角标的软件代表是在 [archlinuxcn](https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/)（Arch Linux 中文社区仓库）中用户自行打包的软件。不在 arch 官方支持范围内，可能会出现各种问题如更新不及时、无法安装、使用出错等。

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## 0. 确保系统为最新

如果你在做完章节 [archlinux 基础安装](basic-install.md) 的内容后，关机并放置过一段时间，那么需要先按照 [18. 完成安装](./basic-install.html#_18-完成安装) 中连接网络的方法重新连网，然后使用以下命令更新系统：

```bash
pacman -Syu # 升级系统中全部包
```



## 1. 配置 root 账户的默认编辑器

默认情况下，archlinux 在一些终端编辑场景调用 `vi` 编辑器，但是我们使用 `vim` 编辑器。

如果不做额外配置且不显式的指定编辑器，在一些终端场景下（如下面的 `visudo`、`git` 等）调用编辑器时会出错。

1. 使用 `vim` 编辑 `~/.bash_profile` 文件：

```bash
vim ~/.bash_profile
```

在适当位置加入以下内容：

```bash
export EDITOR='vim'
```

::: tip ℹ️ 提示

也可以添加到 `~/.bashrc` 中，但是（如果不做其它配置或显式的执行）在登录命令行 `tty` 后不会被执行，也就失去了意义。

一般来说我们登录 root 账户时很可能是在命令行 `tty` 登录的（有时也会 `su`）。

:::

2. 保存并退出 `vim`

## 2. 准备非 root 用户

1. 通过以下命令添加用户，比如新增加的用户叫 `myusername`：

```bash
useradd -m -G wheel -s /bin/bash myusername
```

> 📑 命令参数说明：
>
> - `-m` 创建用户的同时创建用户家目录
> - `-G` 选项后指定附加组
>   - `wheel` —— `wheel` 附加组可 `sudo` 进行提权
> - `-s` 选项后指定 shell 程序
> - `myusername` —— 用户名（**请自定义**，但不要包含空格和特殊字符）

2. 通过以下命令根据提示设置新用户 `myusername` 的密码：

```bash
passwd myusername
```

::: tip ℹ️ 提示

弱密码已经不被接受，请设置一个较为复杂的密码，如 `i_love_archlinux`。

:::



3. 使用 `vim` 编辑器通过 `visudo` 命令编辑 `sudoers` 文件：

```bash
EDITOR=vim visudo # 这里需要显式的指定编辑器，因为上面的环境变量还未生效
```

4. 找到如下这样的一行，把前面的注释符号 `#` 去掉：

```sudoers
#%wheel ALL=(ALL:ALL) ALL
```



> 📑 这里稍微解释一下：
>
> - `%wheel` —— 用户名或用户组，此处则代表是 `wheel` 组，`%` 是用户组的前缀
> - `ALL=` —— 主机名，此处则代表在所有主机上都生效（如果把同样的 `sudoers` 文件下发到了多个主机上）
> - `(ALL:ALL)` —— (任意用户:任意用户组)，此处则代表可以成为任意目标用户/用户组
> - 最后的 `ALL` —— 代表可以执行任意命令
>
> 几个更详细的例子:
>
> 1. 在 `mailadmin` 组里的用户可以作为 `root` 用户，在 `snow` 和 `rain` 这两台主机执行一些邮件服务器控制命令（命令之间用 `,` 分隔）：
>
> ```sudoers
> %mailadmin  snow,rain=(root)  /usr/sbin/postfix, /usr/sbin/postsuper, /usr/bin/doveadm
> ```
>
> 2. 用户 `whoami` 可以在所有主机上以 `root` 用户不输入密码执行 `rndc reload` 这条命令（正常来说 `sudo` 都是要求输入调用方的密码的）：
>
> ```sudoers
> whoami  ALL=(root)  NOPASSWD: /usr/sbin/rndc reload
> ```
>
> 3. 当在 `users` 组里的用户以 `sudo passwd` 或者 `sudo passwd root` 方式运行命令的时候，可以直接把 `root` 用户的密> 码 改掉，这真是太危险了！必须要把这两条命令禁止掉，但我们又希望用户可以通过 `sudo passwd` 修改其它用户的密码。那么我们可以在命令前面加上 `!` 来表示不可执行的命令：
>
> ```sudoers
> %users  ALL=(root)  !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
> ```
>
> 总结一下，语法如下：
>
> ```sudoers
> 用户名/%用户组名 主机名=(目标用户名) 命令1, 命令2, !命令3
> ```

5. 保存并退出 `vim` 编辑器

## 3. 开启 32 位支持库与 Arch Linux 中文社区仓库（archlinuxcn）

1. 编辑 `/etc/pacman.conf` 文件：

```bash
vim /etc/pacman.conf
```

2. 去掉 `[multilib]` 一节中两行的注释，来开启 32 位库支持



3. 在文档结尾处加入下面的文字，来添加 `archlinuxcn` 源。推荐的镜像源（选一个即可）也一并列出：

```conf {2}
[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
# 中国科学技术大学开源镜像站
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
# 清华大学开源软件镜像站
Server = https://mirrors.hit.edu.cn/archlinuxcn/$arch
# 哈尔滨工业大学开源镜像站
Server = https://repo.huaweicloud.com/archlinuxcn/$arch
# 华为开源镜像站
```



::: tip ℹ️ 提示

此外，还有其它镜像源在 [archlinuxcn 官方 Github Repo](https://github.com/archlinuxcn/mirrorlist-repo#arch-linux-cn-community-repo-mirrors-list) 列出，可以根据自己实际情况另行选择。

archlinuxcn 仓库服务器位于欧洲，在中国大陆、中国香港、美国有镜像。

:::

4. 保存并退出 `vim` 编辑器

5. 通过以下命令刷新 `pacman` 数据库并更新：

```bash
pacman -Syyu
```



## 4. 安装 KDE Plasma 桌面环境

::: tip ℹ️ 提示

新手推荐安装 KDE Plasma 桌面环境，此外有 GNOME、 Xfce 等[桌面环境](https://wiki.archlinux.org/title/Desktop_environment)和一众[窗口管理器](https://wiki.archlinux.org/title/Window_manager)可供选择。本教程仅列出 KDE 安装使用教程。

:::

1. 通过以下命令安装相关软件包：

```bash
pacman -S plasma-meta konsole dolphin # plasma-meta 元软件包、konsole 终端模拟器和 dolphin 文件管理器
```



2. kde 默认安装的是[xorg](https://wiki.archlinuxcn.org/zh-hans/Xorg)，如果想使用[wayland](https://wiki.archlinuxcn.org/wiki/Wayland)的话安装以下包：

```bash
pacman -S  plasma-workspace xdg-desktop-portal
# N卡用户需要额外安装egl-wayland,xdg-desktop-portal包是为了如obs此类工具录制屏幕使用
# xdg-desktop-portal包组提供了不同环境下使用的软件包
# 例如kde用户可选择xdg-desktop-portal-kde包
```

3. 安装完成后，可以在后续登录时选择使用 xorg 还是 wayland

## 5. 配置并启动 greeter sddm

1. 开启 sddm.service 守护进程：

```
systemctl enable sddm
```

2. 通过以下命令启动显示管理器或重启电脑，即可看到欢迎界面：

```bash
systemctl start sddm  # 直接启动显示管理器，与以下reboot命令二选一即可
```

```bash
reboot
```



3. 输入新用户的密码并回车 `Enter` 即可登录桌面



::: tip ℹ️ 提示

若虚拟机下在 sddm 输入密码登录后无法进入桌面，只有黑屏和光标，请确认在步骤 [3. 配置 VirtualBox](pre-virt.md#_3-配置-virtualbox) 中**没有**勾选 `启用3D加速`。

:::



::: tip ℹ️ 提示

值得注意的是此时操作系统尚未安装相应的显卡驱动。如在进入桌面环境时遭遇闪退花屏等意外情况，建议尝试安装相应的显卡驱动。详情请参阅[显卡驱动](graphic-driver.md)。

:::

## 6. 安装基础功能包

1. 进入桌面后，在开始菜单搜索并打开 Konsole。它是 KDE 桌面环境默认的终端模拟器



2. 首先进行桌面环境中的网络设置：

```bash
ping www.bilibili.com # 测试网络连通性
```

KDE 桌面环境中连接网络和 win10 一样，这里不再赘述。

3. 接下来安装一些基础功能包：

```bash
sudo pacman -S sof-firmware alsa-firmware alsa-ucm-conf # 声音固件
sudo pacman -S ntfs-3g # 使系统可以识别 NTFS 格式的硬盘
sudo pacman -S adobe-source-han-serif-cn-fonts wqy-zenhei # 安装几个开源中文字体。一般装上文泉驿就能解决大多 wine 应用中文方块的问题
sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra # 安装谷歌开源字体及表情
sudo pacman -S firefox chromium # 安装常用的火狐、chromium 浏览器
sudo pacman -S ark # 压缩软件。在 dolphin 中可用右键解压压缩包
sudo pacman -S packagekit-qt6 packagekit appstream-qt appstream # 确保 Discover（软件中心）可用，需重启
sudo pacman -S gwenview # 图片查看器
sudo pacman -S steam # 游戏商店。稍后看完显卡驱动章节再使用
```

4. 最后执行安装 `archlinuxcn` 源所需的相关步骤：

```bash
sudo pacman -S archlinuxcn-keyring # cn 源中的签名（archlinuxcn-keyring 在 archlinuxcn）
sudo pacman -S yay # yay 命令可以让用户安装 AUR 中的软件（yay 在 archlinuxcn）
```

::: tip ℹ️ 提示

若安装 `archlinuxcn-keyring` 时报错，是由于密钥环的问题。可先按照 [archlinuxcn 官方说明](https://www.archlinuxcn.org/gnupg-2-1-and-the-pacman-keyring/) 执行其中的命令，再安装 `archlinuxcn-keyring`。

`archlinuxcn` 社区源的 `keyring` 包 `archlinuxcn-keyring` 由 `farseerfc` 的 key 签署验证，而 `Arch Linux` 官方 `keyring` 中包含了 farseerfc 的 key 。自 12 月初 `archlinux-keyring` 中删除了一个退任的 [master key](https://gitlab.archlinux.org/archlinux/archlinux-keyring/-/issues/246) 导致 `farseerfc` 的 key 的信任数不足，由 `GnuPG` 的 `web of trust` 推算为 `marginal trust`，从而不再能自动信任 `archlinuxcn-keyring` 包的签名。

如果你在新系统中尝试安装 `archlinuxcn-keyring` 包时遇到如下报错：

```bash
error: archlinuxcn-keyring: Signature from "Jiachen YANG (Arch Linux Packager Signing Key) <farseerfc@archlinux.org>" is marginal trust
```

请使用以下命令在本地信任 `farseerfc 的 key` 。此 `key` 已随 `archlinux-keyring` 安装在系统中，只是缺乏信任：

```bash
sudo pacman-key --lsign-key "farseerfc@archlinux.org"
```

之后继续安装 `archlinuxcn-keyring` ：
`sudo pacman -S archlinuxcn-keyring`
https://www.archlinuxcn.org/archlinuxcn-keyring-manually-trust-farseerfc-key/

:::

## 7. 检查家目录

检查家目录下的各个常见目录是否已经创建，若没有则需通过以下命令手动创建：

```bash
cd ~
ls -hl
xdg-user-dirs-update
```



## 8. 配置非 root 账户的默认编辑器

1. 使用 `vim` 编辑 `~/.bashrc` 文件：

```bash
vim ~/.bashrc
```

2. 在适当位置加入以下内容：

```bash
export EDITOR='vim'
```

::: tip ℹ️ 提示

也可以添加到 `~/.bash_profile` 中。

:::

## 9. 设置系统为中文

1. 打开 `System Settings` > `Language and Regional Settings` > 在 `Language` 中点击 `Add languages...` > 选择中文加入 `ADD`，再拖拽到第一位 > 点击 `Apply`



2. 注销并重新登陆即可生效



::: tip ℹ️ 提示

很多人会错误的更改 `System Settings` > `Regional Settings` > `Formats` 中的值为中文蒙古、默认或者其他值。这会导致系统中一半英文一半中文。这里的值要保持默认的 `en_US` 或 `zh_CN`，或者改为你在 `locale.gen` 中添加的任意一种语言。

部分设备在设置系统语言后仍然出现部分设置为英文的情况（比如右键、部分菜单设置项）
过修改 `~/.config/plasma-localerc` 中的为`zh_CN`可以`zh_CN.UTF-8`解决

:::

## 10. 安装输入法

如有需要可以参阅 [Fcitx5 官方文档](<https://wiki.archlinux.org/index.php/Fcitx5_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)。

1. 通过以下命令安装相关软件包：

```bash
sudo pacman -S fcitx5-im # 输入法基础包组
sudo pacman -S fcitx5-chinese-addons # 官方中文输入引擎
sudo pacman -S fcitx5-anthy # 日文输入引擎
sudo pacman -S fcitx5-pinyin-moegirl # 萌娘百科词库。二刺猿必备（archlinuxcn）
sudo pacman -S fcitx5-material-color # 输入法主题
```

2. 此外，我们还需要设置环境变量。通过 `vim` 创建并编辑文件 `~/.config/environment.d/im.conf`：

```bash
vim ~/.config/environment.d/im.conf
```

3. 在文件中加入以下内容并保存退出：

```environment
# fix fcitx problem
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus
```



Konsole 以及 Dolphin 都需要这些环境变量，倒是 Firefox 和 Chromium 都不需要就可以输入中文。

::: tip ℹ️ 提示

1. 如果使用 Wayland 而非 X11，请参照如下方式进行配置而非上面的配置方法：

> 在「系统设置 - 输入设备 - 虚拟键盘」中选中 Fcitx 5；`environment` 仅保留 `XMODIFIERS=@im=fcitx` 一行；在基于 Chromium 的程序（包括浏览器和使用 Electron 的程序）中加入 `--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime` 启动参数。

2. 检查一下是否有拼写错误，如果输入法无法正常切换，可尝试执行 `fcitx5-diagnose` 命令来诊断问题的原因。

由于存在[安全性问题](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-4708)，自 2022 年 10 月 21 日起，[Arch Linux 默认不再读取](https://github.com/archlinux/svntogit-packages/commit/891610cfcc202916cf5eb46d6df56e885062f78e) `~/.pam_environment` 文件中的设置。

:::

4. 打开 `系统设置` > `区域设置` > `输入法`

5. 点击提示信息中的 `运行 Fcitx`：



6. 点击 `添加输入法` > 找到简体中文下的 `Pinyin` > 点击 `添加` 即可加入拼音输入法：



7. 接下来点击 `Pinyin` 右侧的配置按钮 > 点选 `云拼音` 和 `在程序中显示预编辑文本` > 最后点击 `应用`：



8. 回到输入法设置 > 点击 `配置附加组件` > 找到 `Classic User Interface` > 在主题里选择一个你喜欢的颜色 > 最后点击 `应用`：



9. 注销并重新登陆，发现已经可以在各个软件中输入中文了：



::: tip ℹ️ 提示

通过 `Ctrl` + `空格` 切换中英文输入。

:::

## 11. 启动蓝牙（若有）

通过以下命令开启蓝牙相关服务并设置开机自动启动：

```bash
sudo systemctl enable --now bluetooth
```

## 12. 设置 Timeshift 快照

1. 通过以下命令安装 Timeshift：

```bash
sudo pacman -S timeshift
```



::: tip ℹ️ 提示

若安装 AUR 时无法正常下载，请先参照章节 [透明代理](transparent.md) 配置透明代理。

:::

安装之后，如果 Timeshift 没有自动备份，需要手动开启`cronie`服务：

```bash
sudo systemctl enable --now cronie.service
```

2. 打开 Timeshift，第一次启动会自动启动设置向导

### 12-1. 若使用 Btrfs 文件系统

若按照步骤 [7. 分区和格式化（使用 Btrfs 文件系统）](basic-install.md#_7-分区和格式化-使用-btrfs-文件系统) 使用的 Btrfs 文件系统，则进行如下操作。

1. 快照类型选择 `BTRFS`，点击 `下一步`：



2. 快照位置选择 `BTRFS` 分区，点击 `下一步`：



::: tip ℹ️ 提示

Timeshift 只支持快照操作系统安装在具有 Ubuntu 类型的子卷布局（`@` 和 `@home` 子卷）的 BTRFS 分区。

若此处提示不支持的子卷布局，请确保按照步骤 [7. 分区和格式化（使用 Btrfs 文件系统）](basic-install.md#_7-分区和格式化-使用-btrfs-文件系统) 的说明分区。

:::

3. 选择快照计划，点击 `下一步`：



::: tip ℹ️ 提示

由于 BTRFS 类型快照占用空间相对较小，可以适当提高快照数量。

:::

4. 若希望 `/home` 用户主目录也快照，则勾选在备份中包含 `@home` 子卷，然后点击 `下一步`：



5. 点击 `完成` 结束配置

::: warning ⚠️ 注意

完成后建议执行下述指令删除 `subvolid`：

```bash
sudo sed -i -E 's/(subvolid=[0-9]+,)|(,subvolid=[0-9]+)//g' /etc/fstab
```

否则，恢复 BTRFS 类型快照时，可能因子卷 ID 改变导致无法正常进入系统，参阅 [恢复后无法挂载目录](../advanced/system-ctl.md#恢复后无法挂载目录)。

:::

### 12-2. 若使用 ext4 文件系统

若使用的为传统的 ext4 文件系统，则进行如下操作。

1. 快照类型选择 `RSYNC`，点击 `下一步`
2. 快照位置选择较大的分区，快照将保存在此分区的 `/timeshift` 目录下
3. 选择快照计划，点击 `下一步`

::: tip ℹ️ 提示

由于 RSYNC 类型快照占用空间较大，请不要保存过多的历史快照。

:::

4. `/home` 用户主目录可选全部包含，或者**选择排除一切，在下一项中进行更详细配置**。其中 `root` 默认全备份（即使选择排除一切）
5. 若用户主目录选择排除一切，在包含/排除模式中建议进行如下配置（注意顺序，可拖拽移动顺序）：
   - `+ /home/user/.config/***`（注意是 `***`）
   - `+ /home/user/.local/***`
   - `- /home/user/.**`
   - `- /home/user/**`
   - `- /root/**`
6. 点击 `完成` 结束配置

自此，Timeshift 快照已经成功设置。Timeshift 将按照计划快照系统并删除久远的快照。Timeshift 快照为系统增加了一层保障。

## 13. 自动生成快照启动项

通过安装 `grub-btrfs` 包，可以实现在每次使用 `grub-mkconfig` 重新生成 GRUB 启动项时，自动添加快照的启动入口。
如果希望在 Timeshift 自动创建快照的能够同时自动生成启动项，可以通过以下命令运行 `grub-btrfsd.service` 并将其配置为自动启动

```bash
sudo systemctl enable --now grub-btrfsd.service
```

由于该服务默认的监视路径为 `/.snapshots`，因此还需要对该路径进行修改，你需要：

1. 覆盖默认配置

```bash
sudo systemctl edit grub-btrfsd.service
```

在默认的光标位置，添加以下内容后保存并退出

```
[Service]
ExecStart=
ExecStart=/usr/bin/grub-btrfsd --syslog --timeshift-auto
```

2. 重载并重启服务

```bash
sudo systemctl daemon-reload
sudo systemctl restart grub-btrfsd.service
```

这样就能够实现在 Timeshift 生成快照时，自动添加快照启动项

::: tip ℹ️ 提示

目前（v24.06.3）Timeshift 创建的快照默认是可读可写，并且没有提供创建只读快照的功能。

如果你不是使用 Timeshift 对系统进行快照管理，而是使用其它工具，你可能会遇到由于创建了只读快照导致无法正常启动到快照系统的问题，你需要通过 `btrfs property set` 修改快照的读写属性才能解决。

对此，grub-btrfs 提供了一个[initramfs hook](https://github.com/Antynea/grub-btrfs/blob/master/initramfs/readme.md)，你可以添加这个名为 `grub-btrfs-overlayfs` 的 hook，使用 overlayfs 的方式启动只读快照。

这样每当启动到只读快照时，所有的写操作都会被重定向到 overlayfs 的 upper 层，也就是将数据写入到内存中，而不会影响到快照本身，就像 live-cd 一样。

你需要编辑 `/etc/mkinitcpio.conf`

```bash
sudo -e /etc/mkinitcpio.conf
```

找到 `HOOKS`，并在列表末尾添加 `grub-btrfs-overlayfs`，就像这样:

```
HOOKS=(base udev autodetect microcode modconf keyboard keymap consolefont block filesystems fsck resume numlock grub-btrfs-overlayfs)
```

并重新生成 initramfs:

```bash
sudo mkinitcpio -P
```

:::

## ✨ 太棒了

自此，一个可以当作日常系统使用的 archlinux 已经基本配置完成了！KDE 桌面环境经过了多年的迭代更新，已经非常完善和强大了，将 archlinux 作为日常使用的主力系统不在话下。

接下来，在下一节 [显卡驱动](graphic-driver.md) 中，我们将配置显卡驱动；最后将迎来 🌱 新手上路的最后一节 [透明代理](transparent.md)。

祝你好运！

---

### Guide Rookie Graphic Driver (`docs/guide/rookie/graphic-driver.md`)

# archlinux 显卡驱动

> ### 🪁 接天莲叶无穷碧，映日荷花别样红
>
> 近年来，archlinux 的显卡驱动安装已经变得非常容易。本小节区分集成显卡、独立显卡和双显卡（集显 + 独显）三大类讨论 archlinux 显卡驱动的安装

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

所有 AMD 显卡建议使用开源驱动，英伟达显卡建议使用闭源驱动。

::: tip ℹ️ 提示

进行本小节内容时建议按照步骤 [12. 设置 Timeshift 快照](desktop-env-and-app.md#_12-设置-timeshift-快照) 设置了 Timeshift 快照，并且已经有至少一张快照。

:::

::: tip ℹ️ 提示

虚拟机不需要安装显卡驱动。

:::

::: tip ℹ️ 提示

若在设置过程中导致黑屏无法进入桌面，请尝试使用使用 `Ctrl` + `Alt` + `F1 ~ F6` 在 `tty1 ~ tty6` 之间切换。

将导致黑屏的配置删掉或使用快照恢复后重新启动电脑。

:::

::: warning ⚠️ 注意

请确保已经按照本指南之前的章节安装配置好系统再向下进行，**不要多个教程混着看（尤其是一些过时的教程）**。因为可能导致漏掉本指南前置步骤中的某些操作，从而造成问题。

:::

## 集成显卡

### Intel 核芯显卡

如有需要可以参阅 [ArchWiki 相关内容](https://wiki.archlinux.org/index.php/Intel_graphics)。

通过以下命令安装如下几个包即可：

```bash
sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel
```

::: tip ℹ️ 提示

不建议安装 `xf86-video-intel`，而应使用 Xorg 的 modesetting 驱动（也就是什么都不用装的意思）

注意，只有 Intel HD 4000 及以上的集显才支持 vulkan。

:::

### AMD 集成显卡

如有需要可以参阅 [ArchWiki 相关内容](https://wiki.archlinux.org/title/ATI)。

#### 选择驱动

对于具有集成显卡的 AMD 处理器，需要先确定集显架构（Architecture）是什么，再决定安装什么驱动。

推荐在 [TECHPOWERUP](https://www.techpowerup.com/) 进行查询，信息非常全面。在确定了显卡架构后，再根据架构对照下表决定安装什么驱动。

|   GPU 架构    |    Radeon 显卡    |   开源驱动    |  非开源驱动  |
| :-----------: | :---------------: | :-----------: | :----------: |
| GCN 4 及之后  |      多种\*       |   AMDGPU\*    | AMDGPU PRO\* |
|     GCN 3     |       多种        |    AMDGPU     |  AMDGPU PRO  |
|     GCN 2     |       多种        | AMDGPU/ ATI\* |    不支持    |
|     GCN 1     |       多种        | AMDGPU / ATI  |    不支持    |
| TeraScale 2&3 | HD 5000 - HD 6000 |      ATI      |    不支持    |
|  TeraScale 1  | HD 2000 - HD 4000 |      ATI      |    不支持    |
|    旧型号     |   X1000 及之前    |      ATI      |    不支持    |

\*[多种](https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units)

\*[AMDGPU](<https://wiki.archlinux.org/title/AMDGPU_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)

\*[AMDGPU PRO](https://wiki.archlinux.org/title/AMDGPU_PRO)

\*[ATI](<https://wiki.archlinux.org/title/ATI_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)

::: tip ℹ️ 提示

对于 `GCN 2.0` 及以下架构的老显卡，**直接安装开源 ATI 驱动即可**，原本老旧的闭源 Catalyst 驱动在 2021 年已被废弃。

`GCN 2.0` 及以下架构的老显卡也**不要使用开源 AMPGPU 驱动**，因为其仅处于实验性质，需要各种自定义内核编译选项与配置，非常麻烦、得不偿失。

对于新型号（`GCN 3` 架构及更新）的集成显卡，**直接安装开源驱动 AMDGPU 即可**。

:::

下面是一些例子：

- 你的笔记本 cpu 是目前常见的 AMD Ryzen™ 7 4800U，它的集显为 Vega 8。通过查询，可知其为 `GCN 5.0` 架构，那么对照上表，你应该安装 AMDGPU 开源驱动。

- 你的台式机 cpu 是目前常见的 AMD Ryzen™ 5 3400G，它的集显为 Vega 11。通过查询，可知其为 `GCN 5.0` 架构，那么对照上表，你应该安装 AMDGPU 开源驱动。

- 再老一些的 7th Gen A10-9700 APU 处理器 ，它的集显为 Radeon R7。通过查询，可知其为 `GCN 2.0` 架构，那么对照上表，你应该安装 ATI 开源驱动。

#### 安装驱动

通过以下命令安装如下几个包即可：

::: code-group

```bash [开源驱动 AMDGPU]
sudo pacman -S mesa lib32-mesa xf86-video-amdgpu vulkan-radeon lib32-vulkan-radeon
```

```bash [开源 ATI 驱动]
sudo pacman -S mesa lib32-mesa xf86-video-ati
```

:::

## 独立显卡

### NVIDIA 独立显卡

::: tip ℹ️ 提示

部分 NVIDIA 独立显卡目前在 archlinux 下体验非常不好，存在以下问题：

1. 部分桌面特效（如窗口惯性晃动）很卡
2. 游戏无法正常运行
3. 画面撕裂

若遇到了上述问题，建议在 archlinux 中还是单独使用集成显卡（如果有）吧（还可以节省电量）。如果要 🎮 打游戏不妨重启到 win10。

:::

如有需要可以参阅 [ArchWiki 相关内容](<https://wiki.archlinux.org/title/NVIDIA_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)。

- 对于 [Turing (NV160/TUXXX)](https://nouveau.freedesktop.org/CodeNames.html#NV160) 系列或更新的显卡，需要安装 nvidia-open 驱动

::: tip ℹ️ 提示

该驱动的质量目前处于 'alpha quality' 状态，所以也许会有问题。并且它暂时不适用于具有 AMD 集成 GPU 的系统。

:::

::: code-group

```bash [linux]
sudo pacman -S nvidia-open nvidia-settings lib32-nvidia-utils # 必须安装
```

```bash [others]
sudo pacman -S nvidia-open-dkms nvidia-settings lib32-nvidia-utils # 必须安装
```

:::

- 其他较新型号的独立显卡使用以下命令直接安装如下几个包即可：

::: code-group

```bash [linux]
sudo pacman -S nvidia nvidia-settings lib32-nvidia-utils # 必须安装
```

```bash [others]
sudo pacman -S nvidia-dkms nvidia-settings lib32-nvidia-utils # 必须安装
```

:::

- 如果是 GeForce 630 以下到 GeForce 400 系列的老卡，使用以下命令安装 [nvidia-390xx-dkms](https://aur.archlinux.org/packages/nvidia-390xx-dkms/)<sup>aur</sup> 及其 32 位支持包：

```bash
yay -S nvidia-390xx-dkms nvidia-settings lib32-nvidia-390xx-utils
```

- 再老的显卡直接使用以下命令安装 [开源驱动](<https://wiki.archlinux.org/title/Nouveau_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>) 即可：

```bash
sudo pacman -S mesa lib32-mesa xf86-video-nouveau
```

::: tip ℹ️ 提示

安装 NVIDIA 官方的驱动之后，需要编辑 `/etc/mkinitcpio.conf`，在 `HOOKS` 一行删除 `kms` 并保存，然后执行 `mkinitcpio -P` 重新生成一次镜像。这能防止 initramfs 包含 nouveau 模块，避免 nouveau 和官方驱动的冲突。

:::

### AMD 独立显卡

AMD 独立显卡的驱动安装步骤实际上**和 AMD 集成显卡是相同的**，都需要先确定架构，然后选定正确的驱动安装即可。参考步骤 [AMD 集成显卡](graphic-driver.md#amd-集成显卡)。

## 双显卡（集显 + 独显）

如有需要可以参阅 [ArchWiki 相关内容](<https://wiki.archlinux.org/title/PRIME_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)。

### NVIDIA 独立显卡

::: tip ℹ️ 提示

optimus-manager 已经支持 AMD 集成显卡 + NVIDIA 独立显卡组合。

:::

如有需要可以参考 [optimus-manager 官方文档](https://github.com/Askannz/optimus-manager/wiki)。

同时拥有集成显卡与独立显卡的笔记本电脑，同样需要**按照上述步骤先安装各个对应的软件包**。除此之外还需要安装 optimus-manager<sup>cn / aur</sup> 以及其图形前端 optimus-manager-qt<sup>aur</sup>。通过该程序可以在集成显卡和独立显卡间轻松切换。optimus-manager 提供三种模式 —— 分别为仅用独显、仅用集显以及 hybrid 动态切换模式。

1. 使用以下命令安装相关软件包：

::: code-group

```bash [cn]
yay -S optimus-manager optimus-manager-qt
```

```bash [aur]
yay -S aur/optimus-manager optimus-manager-qt
```

:::

2. 安装完成后重启即可使用。optimus-manager 安装完成后会默认设置 `optimus-manager.service` 服务自动启动，但建议还是通过以下命令手动设置一下：

```bash
sudo systemctl enable optimus-manager.service
```

3. 重启后在在菜单栏打开 optimus-manager 即可使用。可在其设置中设置开机自动启动：



此时你应该已经可以进行显卡切换了。

::: tip ℹ️ 提示

如果有问题，请详细阅读 optimus-manager 的文档，里面有详细的描述。由于各类问题太多，本文不再赘述。此处仅列出几项较为重要的注意事项:

- 如果需要在独显和集显模式间切换，要注意你没安装各类 GPU 监控插件，它们会阻止显卡切换，导致不可预料的错误
- 不要使用 Nvidia Control Panel 中的 `Save to X Configuration file` ，会导致配置冲突
- 在显卡之间的切换时，重新登陆后如在 splash screen 卡住或者黑屏，可以尝试按照上述提示在 `tty1 ~ tty6` 之间进行切换

:::

#### 动态切换

::: tip ℹ️ 提示

hybrid 动态切换模式并不是自动的（类似 win10），需要手动添加环境变量。

:::

hybrid 动态切换模式本质上是使用**针对使用闭源驱动**的双显卡 [PRIME](https://wiki.archlinux.org/title/PRIME#PRIME_render_offload) 方法进行切换 —— 这需要设置三个环境变量。有两种方法：

1. 通过命令手动添加前缀，也可直接添加环境变量在全局环境下（不推荐）。如果加在了全局环境中，在从 hybrid 动态切换模式切换到其他模式之前一定要去掉这三个环境变量，否则会黑屏

2. 用 nvidia-prime 包提供的命令 `prime-run`

##### prime-run 方法

::: tip ℹ️ 提示

`prime-run` 部分应用可以不需要安装 optimus-manager，直接运行。

但不推荐这样，因为除了部分应用会报错之外也无法使用仅独立显卡模式。

:::

1. 通过以下命令安装 nvidia-prime 包：

```bash
sudo pacman -S nvidia-prime
```

2. 通过以下命令（请将 `%command%` 替换为要运行的命令）以使用 NVIDIA 独立显卡运行程序：

```bash
prime-run %command%
```

运行 steam 游戏的例子：

```bash
prime-run steam steam://rungameid/570 # 运行 Dota 2
prime-run steam steam://rungameid/730 # 运行 CS:GO
```

::: tip ℹ️ 提示

steam 游戏的启动参数 `steam://rungameid/xxx` 可通过以下方式查找：

1. 右键需要运行的游戏图标 > 点击 `编辑应用程序...`：



2. 在 `应用程序` 选项卡 > `命令` 处查看：



:::

##### 环境变量方法

###### 手动输入

通过以下命令（请将 `%command%` 替换为要运行的命令）以使用 NVIDIA 独立显卡运行程序：

```bash
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME="nvidia" __VK_LAYER_NV_optimus="NVIDIA_only" %command%
```

运行 steam 游戏的例子：

```bash
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME="nvidia" __VK_LAYER_NV_optimus="NVIDIA_only"  steam steam://rungameid/570 # 运行 Dota 2
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME="nvidia" __VK_LAYER_NV_optimus="NVIDIA_only"  steam steam://rungameid/730 # 运行 CS:GO
```

###### 全局变量

::: warning ⚠️ 注意

[optimus-manager 官方文档](https://github.com/Askannz/optimus-manager/wiki/Nvidia-GPU-offloading-for-%22hybrid%22-mode#setup) 中不推荐将此环境变量添加到全局环境。

_It is not recommended to set those variables system-wide (like in `/etc/environment`), since it would defeat the point of hybrid mode, and can also break desktop compositing on some environment (resulting in a black screen)._

也就是说会遇到这些问题：

1. Kwin / 显示特效混合器（混成器）崩溃（毛玻璃效果消失，原本是透明或毛玻璃效果的背景变黑）
2. 黑屏

:::

1. 使用 `vim` 编辑 `/etc/environment` 文件：

```bash
sudo vim /etc/environment
```

加入以下内容：

```bash
__NV_PRIME_RENDER_OFFLOAD=1
__GLX_VENDOR_LIBRARY_NAME="nvidia"
__VK_LAYER_NV_optimus="NVIDIA_only"
```

2. 保存并退出 `vim`

#### 电源管理

::: tip ℹ️ 提示

如果不是强烈追求能效控制以及注重电池寿命的用户，那么可以略过此段。配置电源管理需要针对你的硬件以及笔记本型号尝试正确的电源管理方式。

此部分的设置可能导致黑屏，并且尝试过程可能较长，也可能会遇到各类问题。请根据自身需求和能力选择是否操作。

:::

电源管理做的事情是，**在只用集显的模式下，确保正确关闭独立显卡**；而在混合模式下，绝大多数情况下 NVIDIA 模块实际是始终开启的，**电源管理并不生效**。

这件事情其实很复杂，因为对于不同的显卡型号，以及笔记本型号的组合，可行的方案都是不同的。笼统来说，最广泛适用的办法是 Bbswitch。但**不建议上来就按照此方式安装使用**，因为某些特定的硬件就是会出问题（黑屏）。

建议按照 [optimus-manager 官方文档](https://github.com/Askannz/optimus-manager/wiki/A-guide--to-power-management-options) 一步步尝试，最后找到属于你自己电脑合适的电源管理方式。**此文档必须详细阅读！**

针对大多数笔记本适用的 Bbswitch，此处进行安装使用的讲解。

1. 通过以下命令安装包 `bbswitch`；若使用其它内核，则安装包 `bbswitch-dkms`：

::: code-group

```bash [linux]
sudo pacman -S bbswitch
```

```bash [others]
sudo pacman -S bbswitch-dkms
```

:::

2. 右键 optimus-manager 的托盘图标 > 点击 `设置` > 在 Optimus 选项卡中的 `switch method` 中选择 `Bbswitch` 即可：



3. 重启之后，若使用仅集显模式使用如下命令验证 NVIDIA 独立显卡是否被禁用：

```bash
lspci | grep NVIDIA
```



若有 `rev ff` 字样，则表示独显已经成功禁用。

### AMD 独立显卡

虽然 AMD 独立显卡无法使用 optimus-manager，但可以使用**针对使用开源驱动**的双显卡 [PRIME](https://wiki.archlinux.org/title/PRIME#For_open_source_drivers_-_PRIME) 方法进行切换。也就是使用 `DRI_PRIME=1` 前缀使用独立显卡（可能还更简单了？🤔）。

- 通过以下命令（请将 `%command%` 替换为要运行的命令）以使用 AMD 独立显卡运行程序：

```bash
DRI_PRIME=1 %command%
```

运行 steam 游戏的例子：

```bash
DRI_PRIME=1 steam steam://rungameid/570 # 运行 Dota 2
DRI_PRIME=1 steam steam://rungameid/730 # 运行 CS:GO
```

- 可以使用以下命令分别对集成显卡和独立显卡进行性能测试，选择分数更高的一个使用：

::: code-group

```bash [集成显卡]
glmark2
```

```bash [独立显卡]
DRI_PRIME=1 glmark2
```

:::

关于 glmark2 的说明请参阅 [glmark2](graphic-driver.md#glmark2)。

- 可以在 steam 游戏的启动前缀中加入 `DRI_PRIME=1 mangohud %command%` 来使用独显的同时显示帧数等信息。关于 [mangohud](https://aur.archlinux.org/packages/mangohud)<sup>aur</sup> 的使用请参阅 [这里]()。

## 性能测试

如有需要可以参考 [ArchWiki 相关内容](<https://wiki.archlinux.org/title/Benchmarking_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)>)。

### glxgears

最传统和广为人知的方式是使用 `glxgears` 命令进行测试，其属于 [mesa-utils](https://www.archlinux.org/packages/extra/x86_64/mesa-utils/) 包。

1. 通过以下命令安装 [mesa-utils](https://www.archlinux.org/packages/extra/x86_64/mesa-utils/) 包（可能已经安装了）：

```bash
sudo pacman -S mesa-utils
```

2. 通过以下命令进行测试：

```bash
glxgears
```

随后会弹出一个小窗口运行测试程序：



帧数会打印在终端中：



3. 使用 `Ctrl` + `C` 退出测试

`glxgears` 仅仅只能提供简单的测试场景及帧数显示，只测试了当前 OpenGL 功能的一小部分，功能明显不足。笔者推荐如下两种工具。

### glmark2

glmark2 提供了一系列丰富的测试，涉及图形单元性能（缓冲、建筑、照明、纹理等）的不同方面，允许进行更全面和有意义的测试。每次测试单独计算帧速率。最终，程序根据之前的所有测试给出一个最终分数。在 archlinux 上属于包 [glmark2](https://aur.archlinux.org/packages/glmark2/)<sup>cn / aur</sup>。

1. 使用以下命令安装 glmark2：

::: code-group

```bash [cn]
sudo pacman -S glmark2
```

```bash [aur]
yay -S aur/glmark2
```

:::

2. 使用以下命令启动 glmark2：

```bash
glmark2
```

随后会弹出一个小窗口运行测试程序：



以笔者的硬件为例（集成显卡），测试结果如下：



### Unigine benchmark

Unigine 3D 引擎是一个更全面的基准测试工具。截止目前有五个版本，从新到旧分别是：

- superposition<sup>EULA</sup>（2017）
- valley<sup>EULA</sup>（2013）
- heaven<sup>EULA</sup>（2009）
- tropics<sup>EULA</sup>（2008）
- sanctuary<sup>EULA</sup>（2007）

1. 可以使用以下命令从 [AUR](https://aur.archlinux.org/packages/?O=0&K=unigine) 下载全部版本（选一个即可）：

```bash
yay -S unigine-superposition
yay -S unigine-valley
yay -S unigine-heaven
yay -S unigine-tropics
yay -S unigine-sanctuary
```



2. 使用以下命令启动 Unigine benchmark（输入对应安装的版本）：

```bash
unigine-superposition
unigine-valley
unigine-heaven
unigine-tropics
unigine-sanctuary
```



3. 调整参数后，点击 `RUN` 即可进入测试，帧数会显示在右上角

4. 点击左上角 `基准` 开始基准测试

5. 点击左上角 `退出` 并 `确定` 即可退出测试

此基准测试工具拥有实时的环境遮挡、来自不同来源的相互关联的灯光、HDR 效果图、逼真的水和具有大气光散射的动态天空。此外还可以设置抗锯齿级别、纹理质量和滤波、各向异性和着色器质量。

## 显卡信息查看

### NVIDIA 独立显卡

`nvidia-settings` 这个包即可全面的展示显卡相关信息（在步骤 [NVIDIA 独立显卡](graphic-driver.md#独立显卡) 中已经安装）。

### AMD 独立显卡 / 集成显卡

1. 通过以下命令安装 [radeon-profile-git](https://aur.archlinux.org/packages/?O=0&SeB=nd&K=radeon-profile-git&outdated=&SB=n&SO=a&PP=50&do_Search=Go)<sup>aur</sup> 包以及其依赖 [radeon-profile-daemon-git](https://aur.archlinux.org/packages/?O=0&SeB=nd&K=radeon-profile-daemon-git&outdated=&SB=n&SO=a&PP=50&do_Search=Go)<sup>aur</sup>：

```bash
yay -S radeon-profile-git radeon-profile-daemon-git
```

2. 使用以下命令启动这个进程，即可以图形化的方式查看 AMD 显卡信息：

```bash
sudo systemctl enable --now radeon-profile-daemon.service
```

::: tip ℹ️ 提示

不要对左下角的 `auto low high` 进行更改，有 bug 会导致卡死。

同时，显存占用在某些型号显卡上展示可能有误。

:::

---

### Guide Rookie Pre Install (`docs/guide/rookie/pre-install.md`)

# 安装前的准备

> ### 🧭 凡事预则立，不预则废
>
> 这一章开始，我们正式开始安装 archlinux。但是我们首先要做一些准备工作。

::: tip ℹ️ 提示

由于当前 UEFI 已普及十余年，安装将全部以 `UEFI + GPT` 的形式进行，传统 `BIOS` 方式不再赘述。

:::

::: tip ℹ️ 提示

指南中带有 <sup>EULA</sup> 角标的软件代表是 [专有软件](https://www.gnu.org/proprietary/proprietary.html)。请自行斟酌是否使用。

:::

## 1. 确保网络环境

如果你可以使用路由器分接出来的网线，以 dhcp 的方式直接上网，那么不用准备什么。如果你的环境只能使用无线网络安装，需要事先把自己所用的
wifi 名称改成自己能记住的英文名称。因为**安装时无法显示和输入中文名的 wifi**，你会看到一堆不知道是什么的方块，并且在安装过程中你将没有办法输入中文的无线名称进行连接。



其次，有些笔记本电脑上存在无线网卡的硬件开关或者键盘控制，开机后安装前需要**确保你的无线网卡硬件开关处于打开状态**。

## 2. 下载安装镜像

安装镜像 iso 在开源镜像站（推荐）或者 [archlinux 官方下载页面](https://archlinux.org/download/) 下载。

下面是国内常用的提供 archlinux 安装镜像的开源镜像站（选一个即可）：

- [中国科学技术大学开源镜像站](http://mirrors.ustc.edu.cn/)
- [清华大学开源软件镜像站](https://mirrors.tuna.tsinghua.edu.cn/)
- [华为开源镜像站](https://repo.huaweicloud.com/archlinux/)
- [兰州大学开源镜像站](https://mirror.lzu.edu.cn/archlinux/)



其中前两者点击网页右侧侧栏的获取下载链接，选择 archlinux 下载即可。



后两者需要依次点击 `iso` > `20XX.XX.XX` > `archlinux-20XX.XX.XX-x86_64.iso`。

::: warning ⚠️ 注意

请确保下载最新的安装镜像！因为 archlinux 是滚动发行版，不存在使用旧的安装镜像安装旧版本的说法。

这里也可以看出 archlinux 每月 1 日释出新的安装镜像。

:::



中科大的开源镜像站下载速度还是很快的。

## 3. 刻录安装 U 盘

准备一个 2G 以上的 U 盘，刻录一个安装盘。

### 3-1. Windows

Windows 下推荐使用 [Ventoy](https://www.ventoy.net/cn/doc_start.html)、[Rufus](https://rufus.ie/)
或者 [Power ISO](https://www.poweriso.com/download.php)<sup>EULA</sup> 进行 U 盘刻录。三者皆为免费使用的软件。具体操作请自行查阅，都非常简单。

除此之外，如果你还嫌麻烦，还可以使用更为简单的安装盘制作工具 [balenaEtcher](https://www.balena.io/etcher/)：



::: tip ℹ️ 提示

使用 balenaEtcher 制作完成的安装盘若要重新作为普通 U
盘使用，需要用磁盘分区管理工具（如 [KDE 分区管理器](https://apps.kde.org/partitionmanager/)、[DiskGenius](https://www.diskgenius.cn/)<sup>
EULA</sup>）重建分区表才能正常格式化。

:::

### 3-2. Linux

Linux 下同样可以使用 Ventoy 和
balenaEtcher，具体步骤可参阅 [Ventoy（推荐）](../advanced/make-install-disk.md#ventoy-%E6%8E%A8%E8%8D%90)
以及 [balenaEtcher](../advanced/make-install-disk.md#balenaetcher)。

也可以直接用 `dd` 命令进行刻录，具体步骤可参阅 [dd 命令](/guide/advanced/make-install-disk.html#dd-命令)。

## 4. 为 archlinux 分出硬盘空间（可选）

### (1) 系统盘

如果目标是双系统（win10 + archlinux），并且 win10 和 archlinux 将要共存在一个硬盘上的话，往往要在 win10 使用的分区上分出空闲硬盘空间给
archlinux。这里建议**至少分 `128GB` 给 archlinux**。

1. 右键点击 `开始菜单` > 点击 `磁盘管理`

   

2. 右键点击 `需要压缩的分区` > 点击 `压缩卷`

   

3. 在 `输入压缩空间量(MB)` 输入需要分给 archlinux 的空闲硬盘空间大小。假设分配 `128GB` 则输入 `131072`（1GB =
   1024MB，128GB = 128 \* 1024MB = 131072MB）

   

4. 点击 `压缩`，完成之后关闭磁盘管理即可

::: warning ⚠️ 注意

请不要做多余的动作！不要在这里为分出的硬盘空间创建分区！

:::

### (2) EFI 分区

如果 archlinux 需要和 Windows 共存在一个硬盘上，需要通过 DiskGenius 或其他分区软件检查 EFI 分区容量不小于 256MB，如果小于，可能需要扩容（推荐，但可能不太好整）或者按照 [ArchWiki 提供的第三种挂载方式](https://wiki.archlinuxcn.org/wiki/EFI_%E7%B3%BB%E7%BB%9F%E5%88%86%E5%8C%BA#%E5%85%B8%E5%9E%8B%E6%8C%82%E8%BD%BD%E7%82%B9) 新增一个额外的挂载点。

## 5. 获取 Bitlocker 恢复密钥

若 win10 分区使用了 🔐 Bitlocker 加密，请提前获取恢复密钥。

关于解锁密钥的查找请参阅 [Microsoft 相关页面](https://support.microsoft.com/zh-cn/windows/%E5%9C%A8-windows-10-%E4%B8%AD%E6%9F%A5%E6%89%BE-bitlocker-%E6%81%A2%E5%A4%8D%E5%AF%86%E9%92%A5-6b71ad27-0b89-ea08-f143-056f5ab347d6)。

一般来说使用与 win10 相同的微软账号登录 [aka.ms 相关页面](https://aka.ms/myrecoverykey) 即可获取。

## 6. 进入主板 BIOS 进行设置

**插入优盘并开机**。在开机的时候，按下 `F2` / `F8` / `F10` / `DEL` 等（取决与你的主板型号，具体请查阅你主板的相关信息）按键，进入主板的
BIOS 设置界面。

除此之外，如果你还嫌麻烦，还可以使用以下方法进入 BIOS：

1. 在 win10 下 按住 `Shift` 键同时点击 `重启`

   

2. 保持按住 `Shift` 键直到进入如图所示界面

   

3. 选择 `疑难解答` 并回车 `Enter`

   

4. 选择 `UEFI 固件设置` 并回车 `Enter`

   

5. 按下 `Enter` 重启，此时应该已经进入了 BIOS

::: info 🍧 碎碎念

随着时代的发展，主板的 BIOS 界面也越来越现代；很多主板都有了中文，根据主板 BIOS 界面的提示进行操作吧！

:::

## 7. 关闭 BIOS 设置中的 Secure Boot



在类似名为 `security`（安全） 的选项卡中，找到一项名为 `Secure Boot`（安全启动，名称可能略有差异）的选项，选择 `Disable` 将其禁用。

::: info 🍧 碎碎念

有少数奇葩的主板里面，`Secure Boot` 被设置为开启，却不存在关闭它的选项，但系统主板内置有 Windows 系统的公钥证书签名，使其只能加载
Windows，其它系统（包括 archlinux）一律不予加载。用户不能关闭它，还没法换系统，实在让人无语 😶

如果你正好是这样的电脑，emmm... 不妨在虚拟机里尝试下 archlinux 吧！

:::

## 8. 调整启动方式为 UEFI（可能不需要）

在某些旧的主板里，需要调整启动模式为 `UEFI`，而非传统的 `BIOS/CSM`。在类似名为 `boot` 的选项卡中，找到类似名为 `Boot Mode`
的选项，确保将其调整为 `UEFI only`，而非 `legacy/CSM`。

## 9. 调整硬盘启动顺序





在类似名为 `boot` 的选项卡中，找到类似名为 `Boot Options`（名称可能略有差异）的设置选项，将优盘的启动顺序调至首位。

## 10. 保存 BIOS 设置



最后保存 BIOS 设置并退出，一般的按键是 `F10`。

## 11. 准备安装





此时电脑重启，不出意外的话根据提示你应该可以顺利进入 archlinux 的安装界面了（有一头 🐄 牛牛在讲话）。

::: tip ℹ️ 提示

archlinux 安装盘应该一直插在电脑上。

:::

---

### Guide Rookie Pre Virt (`docs/guide/rookie/pre-virt.md`)

# 虚拟机安装前的准备

> ### ✔ 磨刀不误砍柴工
>
> 在实体机安装 archlinux 前，不妨先在虚拟机中尝试一下 archlinux 的安装。同样的，我们需要做一些设置。

> ### 🔖 这一节将会讨论：
>
> ::: details 目录
>
> [[toc]]
>
> :::

本小节将在 win11 环境下使用 [Oracle VM VirtualBox](https://www.virtualbox.org/) 虚拟机安装 archlinux。

> #### 📑 相关资料：VirtualBox
>
> VirtualBox 是一款开源虚拟机软件。由德国 Innotek 公司开发，Sun Microsystems 公司出品。使用 Qt 编写，在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。采用 GPL 协议开源。

## 1. 安装 VirtualBox

VirtualBox 安装包同样可以在开源镜像站（推荐）或者 [VirtualBox 官方下载页面](https://www.virtualbox.org/wiki/Downloads) 下载。

下面是国内常用的提供 VirtualBox 安装包的开源镜像站（选一个即可）：

- [清华大学开源软件镜像站](https://mirrors.tuna.tsinghua.edu.cn/help/virtualbox/)
- [哈尔滨工业大学开源镜像站](https://mirrors.hit.edu.cn/virtualbox/)



根据安装包的提示安装即可。

## 2. 下载安装镜像

同样的，虚拟机安装 archlinux 也需要安装镜像。

请参阅上一节 [安装前的准备](pre-install.md#_2-下载安装镜像) 下载。

## 3. 配置 VirtualBox



1. 打开 VirtualBox > 点击 `新建`



2. 基础设置
   1. 输入虚拟机的名字。建议不要在名字中带有特殊字符
   2. 选择虚拟机相关文件的保存位置（你的虚拟硬盘也会保存在这个位置！请确保有足够的磁盘空间）
   3. 若名字中含有 `arch` 字眼，VirtualBox 会自动将类型和版本修改为 archlinux，否则请手动选择
   4. 点击 `下一步`

::: tip ℹ️ 提示

你可以在这一步就选择虚拟光盘，但本教程将在后面启动时选择。

:::



3. 设置硬件
   1. 将 `内存大小` 修改为合适大小。建议大于 2GB。因为即使 archlinux 可以在 512MB 的内存下运行，但安装还需要更多的内存
   2. 适当调整 `处理器数量`
   3. 勾选 `启用 EFI`
   4. 点击 `下一步`



4. 指定虚拟磁盘大小。建议大于 64 GB（因为是动态分配，不会立即占用硬盘空间，请放心选择；同时我们在虚拟机里不会安装过多的软件，所以 64GB 足够我们使用，当然你也可以自由调整） > 点击 `下一步`



5. 确认无误后，点击 `完成`

::: tip ℹ️ 提示

设置向导完成后，请**不要**立即启动。

:::



6. 点击 `设置`



7. 点击侧栏 `系统` > `主板` > 在 `扩展特性` 中检查是否勾上 `启用 EFI` （如果没有，说明前面没有跟教程做，现在勾上也不晚！）



8. `显存大小` 可以做适当调整。如果是高分屏可以适当调大 `缩放率` 防止后面虚拟机启动后字太小

::: warning ⚠️ 注意

请不要勾选 `启用3D加速`。否则会导致安装好桌面环境后无法进入桌面，只有黑屏和光标。如有需要可以参阅 [ArchWiki 相关说明](<https://wiki.archlinux.org/title/VirtualBox_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#Arch_Linux_guest%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B8%AD%E6%B2%A1%E6%9C%89%E7%A1%AC%E4%BB%B63D%E5%8A%A0%E9%80%9F>)。

:::



9. 在侧栏 `网络` > `网卡 1` > 将 `连接方式` 改为 `桥接网卡`



10. 点击 `启动`，开启虚拟机



11. 在弹出的窗口的下拉菜单中选择 `其他`



12. 在弹出的资源管理器中选择 `archlinux 安装镜像`



13. 点击 `挂载并尝试启动`



14. 在第一个选项回车 `Enter`



15. 此时虚拟机会黑屏一会，经过一段时间的等待和提示信息的刷屏，就可以进入安装环境了

---

### Guide Rookie Transparent (`docs/guide/rookie/transparent.md`)

# archlinux 透明代理

> ### 🕊 纵使千山多万壑，犹有青鸾踏云间
>
> 全球化浪潮无法阻挡，我们常常有访问一些资料的客观需求。但有的时候因为一些因素往往导致无法正常访问（包括但不限于**终端中下载文件特别慢、无法访问部分网站、部分应用无法正常使用**等）。虽然前路千沟万壑，但无法阻挡我们前行的脚步。本节我们通过设置透明代理解决这一问题

::: tip ℹ️ 提示

鉴于 Qv2ray 原项目已[停止开发](https://github.com/Qv2ray/Qv2ray)，新的版本还不够完善，有魔法上网需求者建议使用 v2rayA 或 dae 替代 Qv2ray。

:::

## v2rayA

v2rayA 的优势：

- 支持一键开启全局代理，配置方便
- 客户端运行在浏览器中，轻量

### 安装 v2ray 和 v2rayA:

::: code-group

```bash [cn]
sudo pacman -S v2ray v2raya
```

```bash [aur]
sudo pacman -S v2ray
yay -S aur/v2raya
```

:::

### 配置 v2rayA

安装后启动服务：

```bash
sudo systemctl enable --now v2raya
```

随后在开始菜单中搜索 v2rayA，点击即可打开浏览器页面。在其中加入订阅(没有魔法上网节点？请参考[原文档相关内容](https://archlinuxstudio.github.io/ArchLinuxTutorial/#/rookie/fxckGFW?id=%e5%b7%b2%e6%9c%89%e7%a7%91%e5%ad%a6%e4%b8%8a%e7%bd%91%e7%9a%84%e8%8a%82%e7%82%b9%e7%9a%84%e6%83%85%e5%86%b5))。在设置中建议开启全局透明代理(选择`大陆白名单`)，同时开启防止 DNS 劫持功能，否则可能会拿不到被 DNS 污染的资源(如 github raw)。

## v2rayn

v2rayn可一键开启tun模式，支持xray、sing-box、mihomo多核心，可以直接从aur安装二进制包

```bash [aur]
yay -S v2rayn-bin
```

## dae

::: tip ℹ️ 提示

v2rayA 开发者已逐步转向 dae。作为 v2rayA 的继承者，dae 放弃了 v2ray-core，以更灵活地满足用户的需求。daed 的图形化界面界面仍与 v2rayA 相似。

dae 的优势：

dae 是一种高性能透明代理解决方案。
为了尽可能提升分流性能，dae 利用了 Linux 内核中的 eBPF 技术，采用了透明代理和流量分流套件。因此，dae 可以使流量直接绕过代理应用程序转发，从而实现真正的直接分流。

你可以直接安装 dae 内核，或者安装带有图形化界面的 daed.

:::

### 安装 dae 或 daed:

::: code-group

```bash [cn]
sudo pacman -S dae daed
```

```bash [aur]
yay -S aur/dae aur/daed
```

:::

### 配置 dae

安装后启动服务：
::: code-group

```bash [dae]
sudo systemctl enable --now dae
```

```bash [daed]
sudo systemctl enable --now daed
```

:::

然后你就可以参照官方文档来使用了：

dae：https://github.com/daeuniverse/dae/blob/main/docs/zh/README.md

daed：https://github.com/daeuniverse/daed/blob/main/docs/getting-started.md
安装完 daed 后，打开浏览器访问 http://localhost:2023 开始使用

## 安装和配置 Qv2ray

### 1. 安装 Qv2ray 和 V2Ray / Xray 内核

通过以下命令安装 [Qv2ray](https://github.com/Qv2ray/Qv2ray)<sup>cn</sup> 和 [V2Ray](https://archlinux.org/packages/?sort=&q=v2ray&maintainer=&flagged=) / [Xray](https://github.com/XTLS/Xray-core)<sup>cn</sup> 内核：

::: code-group

```bash [V2Ray]
sudo pacman -S qv2ray-dev-git v2ray
```

```bash [Xray]
sudo pacman -S qv2ray-dev-git xray
```

:::

::: tip ℹ️ 提示

若安装 V2Ray 核心时报错，请尝试更换镜像源。

:::



> #### 📑 相关资料：Qv2ray
>
> Qv2ray 是一个使用 Qt 编写的跨平台的 v2ray 图形前端。

### 2. 配置 Qv2ray

1. 打开 Qv2ray > 点击 `首选项`：



2. 在 `内核设置` 选项卡中，点击 `检查 V2Ray 核心设置` 以验证 V2Ray 核心设置：



::: tip ℹ️ 提示

1. 若使用 Xray 内核，则先需修改：

   1. `V2Ray 核心可执行文件路径` 为 `/usr/bin/xray`

   2. `V2Ray 资源目录` 为 `/usr/share/xray`

2. 再点击 `检查 V2Ray 核心设置` 以验证 Xray 核心设置：



:::

### 3. 配置订阅

1. 在主窗口中点击 `分组`：



2. 修改 `分组名称` 的 `默认分组` 为自定义名称（通常为 ✈ 场名称）：



3. 切换到 `订阅设置` 选项卡并进行如下配置：

   1. 勾选 `此组是一个订阅`

   2. 设置 `订阅地址` 为 ✈ 场提供的 `订阅链接`

   3. 点击 `更新订阅` 按钮并等待完成

   4. 点击 `确定` 以应用设置并关闭对话框



::: tip ℹ️ 提示

若使用 `qv2ray-dev-git`<sup>cn</sup>，则需要注意的是最新的 `qv2ray-dev-git` 已经将机场的默认订阅类型改为规范 `SIP008`。

如果你的 ✈ 场订阅类型为 `base64`，则需要在 `订阅设置` 面板 > `订阅类型` 中，将 `SIP008` 改为 `base64`，否则你将拿不到订阅链接中的任何节点。

:::

### 4. 通过系统代理方式尝试连接

1. 双击分组中添加的订阅即可查看更新出的节点，右键并点击 `测试延迟` 可以测试分组或节点的延迟：



2. 右键需要连接的节点 > 点击 `连接到此服务器` 即可连接：



3. 打开不存在的网站验证连接：



::: tip ℹ️ 提示

Qv2ray 会自动配置系统代理。也可以点击托盘图标 > 在弹出菜单中，依次选择 `系统代理` > `启用 / 禁用系统代理` 以启用或禁用系统代理。

:::

::: tip ℹ️ 提示

GNOME 的系统代理设置非常有效。这是因为 GNOME 的系统代理设置得到了普遍的适配。

但是 KDE 的系统代理设置更像是一个玩具。甚至 KDE 系列应用程序本身也不会读取和使用那个配置。所以我们需要通过设置透明代理的方式解决这个问题。

同时这也可以使终端下的应用使用代理连接（如 git）。

:::

### 5. 安装 cgproxy

通过以下命令安装 [cgproxy](https://github.com/springzfx/cgproxy)<sup>cn / aur</sup>：

::: code-group

```bash [cn]
sudo pacman -S cgproxy-git
```

```bash [aur]
yay -S aur/cgproxy
```

:::

### 6. 配置 Qv2ray 透明代理设置

1. 打开 Qv2ray > `首选项` > `入站设置` > 取消勾选 `设置系统代理`：



2. 勾选 `透明代理设置`：



其它设置保持默认即可，`IPv4 端口` 可自定义为其它端口。

::: tip ℹ️ 提示

关于代理 `udp` 流量的设置稍微有一些复杂，配置有误便会导致无法上网。

本指南不对此展开介绍，如有需要可参考 [Project V 官方网站相关内容](https://www.v2ray.com/chapter_02/04_dns.html)。一般情况下不需要代理 `udp` 流量。

而属于 `udp` 类型的 `dns` 流量，我们只需要在系统设置里设置一个可用的 DNS 服务器即可。

:::

3. 点击 `确定` 保存设置

### 7. 配置 cgproxy

1. 通过 `vim` 编辑 `/etc/cgproxy/config.json` 文件：

```bash
sudo vim /etc/cgproxy/config.json
```

进行如下修改：

- 在 `cgroup_proxy` 中括号里加上 `"/"`（包含引号）
- 将 `port` 改为 Qv2ray 首选项里的透明代理端口（默认是和 Qv2ray 默认对应的 `12345`）
- 将 `enable_dns`、`enable_udp`、`enable_ipv6` 改为 `false`
- 如果希望当本机作为网关设备时为连接到本机网关的其他设备（如连接到本机开设的 wifi 热点的设备）也提供透明代理，则将 `enable_gateway` 改为 `true`



::: tip ℹ️ 提示

cgproxy 默认配置是代理所有 `tcp` 和 `udp`、`ipv4` 和 `ipv6` 的流量。

如果不希望代理其中的某种（些）流量，则将对应的 `enable_xxx` 改为 `false`。注意，这里的配置要和 Qv2ray 选项里的配置一致（例如 Qv2ray 选项里没有勾选 `udp`，则这里务必把 `enable_udp` 改为 `false`）

:::

2. 保存并退出 `vim`

### 8. 配置可用的 DNS 服务

1. 打开 `系统设置` > 点击侧栏 `连接`：



2. 选择当前连接 > 点击 `ipv4` 选项卡：



3. 在 `其它 DNS 服务器` 中添加没有污染的 DNS 服务器：



4. 保存并退出系统设置

### 9. 启动 cgproxy 服务

1. 在 Qv2ray 中连接一个节点

2. 在 Qv2ray 托盘菜单中关闭系统代理（如果已经启动）

3. 通过以下命令启动 cgproxy 服务：

```bash
sudo systemctl start cgproxy.service
```

::: tip ℹ️ 提示

每次重启后都要重新命令启动 cgproxy 服务。

若要设为开机自启，请执行以下命令：

```bash
sudo systemctl enable cgproxy.service
```

若要关闭 cgproxy 服务，请执行以下命令：

```bash
sudo systemctl stop cgproxy.service
```

:::

4. 通过以下命令检查 cgproxy 服务运行情况：

```bash
systemctl status cgproxy.service
```



5. 打开不存在的网站验证连接：



::: tip ℹ️ 提示

如果 cgproxy 不生效 😢，请尝试以下步骤：

1. 观察 Qv2ray 日志，看流量是否被定向到了 Qv2ray
2. 如果没有，请检查配置是否准确、cgproxy 服务是否开启等
3. 如果还是没发现问题，尝试更换端口
4. 使用以下命令尝试给核心文件加上相应的特权：

:::

::: code-group

```bash [V2Ray]
sudo setcap "cap_net_admin,cap_net_bind_service=ep" /usr/bin/v2ray
```

```bash [Xray]
sudo setcap "cap_net_admin,cap_net_bind_service=ep" /usr/bin/xray
```

:::

## nekoray

一个基于 Qt 的跨平台客户端，后端基于 Xray 和 sing-box。

```bash
yay -S nekoray
# yay -S nekoray-git #开发版
```

## Clash

::: tip ℹ️ 提示

下面所介绍的 Clash 系部分项目已删除或存档，但就目前而言不影响安装及使用。但建议换用仍在更新的客户端和内核。

:::

Clash 本身是一个网络连接的代理内核，通过预先定义的**规则**，对网络连接进行转发。Clash 内核规定了配置文件 `config.yaml` 的格式。支持 VMess、Shadowsocks、Trojan、Snell 协议。

[Clash.Meta（现改名成 mihomo）](https://github.com/MetaCubeX/mihomo/tree/Alpha)（为了表达方便后面会使用 Meta 指代这个版本）是一个基于开源项目 Clash 的二次开发版本，增加了一些独有特性。支持所有原版 Clash 开源核心的全部特性，支持原 Clash Premium 核心部分特性。基于目前原版内核已无人维护且 Meta 更新较为活跃，更推荐使用 Meta 而非原版。

Meta 的大体配置步骤可参考[官方教程](https://wiki.metacubex.one/startup/service/)，其中的 `config.yaml` 配置文件需要自己新建并填入内容，配置文件可直接复制 Meta 官方文档的[配置示例-懒人配置](https://wiki.metacubex.one/example/#_2)，在 `proxy-providers` 补充你的 ✈ 场提供的订阅链接即可。

::: details 原版 Clash 配置方法

```shell
# 配置文件
vim ~/.config/clash/config.yaml
```

如果你有一个 ✈ 场提供的订阅链接，可以通过以下指令手动配置到 Clash：

```shell
curl -A clash -o ~/.config/clash/config.yaml <SUSCRIPTION_URL>
# 使用`clash`的用户代理（UA）。
# 请将 <SUSCRIPTION_URL> 替换成你的订阅链接。
```

:::

::: tip ℹ️ 提示

请在使用 Clash 等代理服务前确保自己已经校准系统时钟，否则可能出现无法联网的问题。如果需要校准，可以使用

```shell
sudo timedatectl set-ntp true
```

:::

### Clash-verge-rev

Clash-Verge 目前的继任者（原版仓库目前还在存档），基于 tauri 框架开发的开源跨平台 Clash 客户端<small>（远离 Electron 从我做起）</small>

```
yay -S clash-verge-rev-bin
```

### Clash for Windows（不建议，现已停止更新）

这是一个功能较全的客户端，支持 Windows/macOS/Linux ，基于 Clash 和 Electron 的一个 GUI 客户端。未开源

```
yay -S clash-for-windows-bin
```

## 其它代理方法（非透明代理）

> 虽然 cgproxy 很好，但有的时候就是会有诡异的 bug。本指南为了内容的全面性，介绍其它的代理方法。

### 系统代理

如步骤 [4. 通过系统代理方式尝试连接](transparent.md#_4-通过系统代理方式尝试连接) 所述，但在很多应用不生效（主流浏览器已支持 KDE 的系统代理）。

### 应用自身的代理配置

#### Firefox

Firefox 可使用系统代理，也可手动配置：



#### Telegram

1. 点击 `Settings` > `Advanced` > `Connection type` > `Use custom proxy`



2. 点击 `ADD PROXY` > 填写合适的类型和端口 > `SAVE`：



#### Visual Studio Code（code OSS）

1. 点击 `File`（`文件`） > `Preference`（`首选项`） > `Settings`（`设置`）

2. 搜索 `proxy`，在其中填入 http 代理地址（`http://127.0.0.1:xxxx`）即可：



::: tip ℹ️ 提示

其它应用请自行寻找代理设置。

:::

### export

通过以下 `export` 命令设置当前终端的代理方式：

```bash
export https_proxy=http://127.0.0.1:xxxx
export http_proxy=http://127.0.0.1:xxxx
export all_proxy=http://127.0.0.1:xxxx
```

::: tip ℹ️ 提示

不同终端命令所识别的环境变量名不同，如 `all_proxy` 对 `curl` 生效，而对 `wget` 则不生效，具体可查看各个命令的 `man page`

:::

### proxychains-ng

如果对于一个应用，KDE 系统代理不生效，在终端 `export` 了 `ALL_PROXY` 变量再用终端启动此应用代理也不生效，并且这个应用自身也没有配置代理的选项，此时可以尝试使用 proxychains-ng。

它可以为单行命令配置代理。它是一个预加载的 hook，允许通过一个或多个 SOCKS 或 HTTP 代理重定向现有动态链接程序的 TCP 流量。

1. 通过以下命令安装 proxychains-ng 包：

```bash
sudo pacman -S proxychains-ng
```

2. 通过 `vim` 编辑 `/etc/proxychains.conf` 文件：

```bash
sudo vim /etc/proxychains.conf
```

把配置文件中最后两行改为 Qv2ray 代理的 ip 和端口：



在 `proxy_dns` 一行前添加 `#` 注释掉此行，否则使用 `proxychains` 启动 yay 会报错：



在 `quiet_mode` 一行前删除 `#` 解注释掉此行，以关闭调用 library 产生的输出：

```properties
# Quiet mode (no output from library)
quiet_mode
```

3. 使用代理方式为在单一命令前添加 `proxychains` 前缀：

```bash
proxychains %command%
```

如使用 proxychains-ng 代理 yay:

```bash
proxychains yay -Syu
```



> 📔 本节参考资料：
>
> - [Qv2ray](https://qv2ray.net/lang/zh/)

---

### Guide Security Apparmor (`docs/guide/security/apparmor.md`)

# Apparmor



## 什么是 Apparmor，它是干什么的？

AppArmor 是一个有效且易于使用的 Linux 应用程序安全系统 (LSM, Linux Security Module)。 AppArmor 通过强制访问控制（[MAC,  Mandatory access control](https://wiki.archlinux.org/title/Security#Mandatory_access_control)）来补充传统的Unix自主访问控制（DAC）模型，主动保护操作系统和应用程序免受外部或内部威胁，甚至 zero-day attacks。

# 在 Arch Linux 启用 Apparmor

## 1. 检查内核是否支持 Apparmor

如果你使用的是官方内核则无需检查，因为官方内核默认支持 Apparmor

如果你使用的是第三方内核，请检查内核是否支持 Apparmor：



__如果能找到 CONFIG_SECURITY_APPARMOR=y 和 CONFIG_AUDIT=y 则说明此内核支持 Apparmor__ 

## 2. 添加内核启动参数

由于官方内核默认没有开启 Apparmor，所以要添加 lsm=apparmor 和 audit=1 到内核启动参数里

```bash
sudo vim /boot/grub/grub.cfg

    ......
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash lsm=apparmor audit=1" # 找到这一行并添加参数到末尾
    ......

sudo grub-mkconfig -o /boot/grub/grub.cfg
```

## 3. 安装 Apparmor

3-1. 安装所需组件

```bash
sudo pacman -S apparmor audit

reboot
```

3-2. 重启后检查 Apparmor 状态

```bash
sudo aa-status
```

---

### Guide Security Encryption (`docs/guide/security/encryption.md`)

# 磁盘加密

## 什么是磁盘加密，它是干什么的？

磁盘加密是一种通过将信息转换为无法识别的编码来保护信息的技术，这些编码无法被未经授权的人轻易破译，最终防止未经授权访问数据存储。

## Linux 上的加密选项

1. Loop-AES # 存在时间最长的；可能是最快的；适用于传统系统
2. dm-crypt +/- LUKS # Linux 上块设备加密的标准；非常灵活
3. VeraCrypt # TrueCrypt 的受维护分支，支持 TrueCrypt 和 VeraCrypt 卷
4. fscrypt # 默认用于 Chrome OS 和 Android 加密

::: warning ⚠️ 注意

此文章只介绍 dm-crypt 和 fscrypt 这两种加密方式

:::

# 使用 cryptsetup 进行全盘加密 (dm-crypt +/- LUKS)

::: danger ☢️ 警告

此操作只能在[全新安装](../rookie/basic-install-detail.md#-全新安装)的时候进行

[GRUB 对 LUKS2 的支持有限](https://wiki.archlinux.org/title/GRUB#Encrypted_/boot)

:::

## 1. 创建加密分区

::: tip ℹ️ 提示

请先完成磁盘分区，否则无法执行这一步哦

:::

::: code-group

```zsh [SATA]
cryptsetup luksFormat --type luks2 /dev/sdxn

WARNING!
========
This will overwrite data on /dev/sdxn irrevocably.

Are you sure? (Type uppercase yes): YES # 这里要用全大写输入YES
Enter passphrase:
Verify passphrase:
```

```zsh [NVME]
cryptsetup luksFormat --type luks2 /dev/nvmexn1pn

:::

WARNING!
========
This will overwrite data on /dev/nvmexn1pn irrevocably.

Are you sure? (Type uppercase yes): YES # 这里要用全大写输入YES
Enter passphrase:
Verify passphrase:
```

:::

::: tip ℹ️ 提示

为了避免密码被其他人看到，输入密码时不会显示

:::

::: danger ☢️ 警告

严禁加密 EFI 分区，否则系统将无法启动

加密分区时会清除分区里面的数据

请妥善保管好密码，否则你将无法解锁你的加密分区

:::

## 2. 打开加密的分区

使用 `cryptsetup open` 命令解密磁盘

::: code-group

```zsh [SATA]
cryptsetup open /dev/sdxn cryptlvm

🔐 Please enter current passphrase for disk /dev/sdxn # 这里输入你刚才设置的密码
```

```zsh [NVME]
cryptsetup open /dev/nvmexn1pn cryptlvm

🔐 Please enter current passphrase for disk /dev/nvmexn1pn: # 这里输入你刚才设置的密码
```

:::

::: tip ℹ️ 提示

打开后，此分区设备地址将是 `/dev/mapper/cryptlvm` 而不是分区

命令后面的 `cryptlvm` 可以修改成任何名称，假设改成 `root`，则此分区设备地址将是 `/dev/mapper/root`

:::

## 3. 设置 LVM 逻辑卷

```zsh
pvcreate /dev/mapper/cryptlvm

vgcreate vg /dev/mapper/cryptlvm

lvcreate -l 100%FREE vg -n root
```

::: tip ℹ️ 提示

此时会多出 `/dev/vg/root` 的设备，这个就是要挂载到根目录的设备

:::

## 4. 挂载逻辑分区

4-1. 格式化逻辑分区：

```zsh
mkfs.btrfs /dev/vg/root
```

4-2. 挂载逻辑分区到 /mnt 目录：

```zsh
mount /dev/vg/root /mnt
```

然后[继续完成安装](../rookie/basic-install.md#10-生成-fstab-文件)

## 5. (可选) 使用 TPM 自动解锁 LUKS 分区

::: warning ⚠️ 注意

开始之前，请先确定你的电脑存在并启用了 TPM (Trusted Platform Moudle) 模块 (如Intel PTT、AMD fTPM 技术)

:::

5-1. 安装所需软件

```bash
sudo pacman -S tpm2-tools tpm2-tss 
```

5-2. 重新安装内核以生成 initramfs

__原因是要将 tpm2-tss 模块导入 initramfs__

::: code-group

```bash [linux]
sudo pacman -S linux
```

```bash [linux-hardened]
sudo pacman -S linux-hardened
```

```bash [linux-zen]
sudo pacman -S linux-zen
```

```bash [linux-lts]
sudo pacman -S linux-lts
```

:::

5-3. 将密钥导入 TPM

::: code-group

```bash [SATA]
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs="0+1+2+3+4+5+7+13" /dev/sdnx

🔐 Please enter current passphrase for disk /dev/sdxn:  # 这里输入你设置的密码
```

```bash [NVME]
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs ="0+1+2+3+4+5+7+13" /dev/nvmexn1pn

🔐 Please enter current passphrase for disk /dev/nvmexn1pn:  # 这里输入你设置的密码
```

:::

::: warning ⚠️ 注意

由于 `PCR7 `(用于检查安全启动状态) 是强制要求，所以 `--tpm2-pcrs` 参数里的值必须包含7

部分电脑在导入 TPM 密钥后无法自动解锁 LUKS 分区 (如 Intel NUC), 日志显示 TPM is in DA Lockout Mode。这时需要进入固件设置，先禁用 TPM 然后重新启用或者清除 TPM 即可

:::

::: tip ℹ️ 提示

`--tpm2-pcrs` 参数有很多值可以配置，详情可以参阅 [Arch Wiki](https://wiki.archlinux.org/title/Trusted_Platform_Module#Accessing_PCR_registers)

:::

5-4. 重启系统，你会发现无需输入解密密码，直接进入登录界面

## 系统更新后无法自动解锁 LUKS 分区？

可能是你更新了引导加载器或者更改了固件设置引起的，这时只需要重新将密钥导入 TPM 即可：

::: code-group

```bash [SATA]
sudo systemd-cryptenroll --wipe-slot tpm2 --tpm2-device auto --tpm2-pcrs "0+1+2+3+4+5+7+13" /dev/sdnx
```

```bash [NVME]
sudo systemd-cryptenroll --wipe-slot tpm2 --tpm2-device auto --tpm2-pcrs "0+1+2+3+4+5+7+13" /dev/nvmexn1pn
```

:::

还有可能是你配置 `--tpm2-pcrs` 参数不正确，请删除 `--tpm2-pcrs` 参数里有问题的值：

::: code-group

```bash [SATA]
sudo systemd-cryptenroll --wipe-slot tpm2 --tpm2-device auto --tpm2-pcrs "0+1+7" /dev/sdnx
```

```bash [NVME]
sudo systemd-cryptenroll --wipe-slot tpm2 --tpm2-device auto --tpm2-pcrs "0+1+7" /dev/nvmexn1pn
```

:::

# 使用 fscrypt 对 /home 目录进行文件级加密
 
::: warning ⚠️ 注意

`fscrypt` 只适用于 `EXT4`、`F2FS` 和 `UBIFS`，如果想同时使用 `fscrypt` 和 `Btrfs`，请你单独创建一个分区，用上述文件系统格式化并挂载到 `/home` 目录

⚠️对分区进行格式化时需要加入 `encrypt` 参数，如下所示：

EXT4: mkfs.ext4 -O encrypt ***

F2FS: mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum,encrypt ***

⚠️对于已经格式化的分区：

EXT4: sudo tune2fs -O encrypt ***

F2FS: sudo fsck.f2fs -O encrypt ***

⚠️ 这里`***`指的是分区的路径 ⚠️
:::

## 1. 安装fscrypt

```bash
sudo pacman -S fscrypt
```

## 2. 初始化 fscrypt 并配置

2-1. 初始化 fscrypt

```bash
sudo fscrypt setup # 这会生成 /etc/fscrypt.conf 文件和 /.fscrypt 目录
```

2-2. 配置 fscrypt

如果你没有为 `/home` 目录挂载单独的分区，请输入：

```bash
sudo fscrypt setup /
```

如果你已经为 `/home` 目录挂载单独的分区，请输入：

```bash
sudo fscrypt setup /home 
```

::: danger ☢️ 警告

严禁删除 `.fscrypt` 目录，否则永远无法解密被加密的目录

:::

## 3. 设置 PAM 模块

__为了可以在用户登录时自动解密被加密的目录，需要配置此模块__

```bash
sudo vim /etc/pam.d/system-login
    
    #%PAM-1.0

    auth       required   pam_shells.so
    auth       requisite  pam_nologin.so
    auth       include    system-auth
    auth       optional   pam_fscrypt.so # 添加这一行到这里

    account    required   pam_access.so
    account    required   pam_nologin.so
    account    include    system-auth

    password   include    system-auth

    session    optional   pam_loginuid.so
    session    optional   pam_keyinit.so       force revoke
    session    [success=1 default=ignore]  pam_succeed_if.so  service = systemd-user quiet # 添加这一行到这里
    session    optional                    pam_fscrypt.so # 添加这一行到这里
    session    include    system-auth
    session    optional   pam_motd.so
    session    optional   pam_mail.so          dir=/var/spool/mail standard quiet
    session    optional   pam_umask.so
    -session   optional   pam_systemd.so
    session    required   pam_env.so
```

```bash
sudo vim /etc/pam.d/passwd

    #%PAM-1.0
    auth		include		system-auth
    account		include		system-auth
    password	include		system-auth
    password        optional        pam_fscrypt.so # 添加这一行到这里
```

::: warning ⚠️ 注意

如果这两个文件没有正确配置，在用户登录时将无法自动解密被加密的目录

:::

## 4. 加密 /home 目录
 
4-1. 备份用户数据目录并创建新的用户数据目录

```bash
sudo mv /home/xxx /home/xxx.bak # 这里 xxx 是你的用户名

sudo mkdir /home/xxx

sudo chown xxx:xxx /home/xxx

sudo cp -a -T /home/xxx.bak /home/xxx
```

4-2. 加密用户数据目录

```bash
sudo fscrypt encrypt /home/xxx --user=xxx # 这里 xxx 是你的用户名

Should we create a new protector? [y/N] y
Your data can be protected with one of the following sources:
1 - Your login passphrase (pam_passphrase)
2 - A custom passphrase (custom_passphrase)
3 - A raw 256-bit key (raw_key)
Enter the source number for the new protector [2 - custom_passphrase]: 1 # 这里选1
Enter login passphrase for xxx: # 这里输入你的用户登录密码
"/home/xxx" is now encrypted, unlocked, and ready for use.
```

4-3. 检查加密状态

```bash
fscrypt status /home/xxx

"/home/xxx" is encrypted with fscrypt.

Policy:   046e333ea0ec7cd83ae34f85374994fd
Options:  padding:32  contents:AES_256_XTS  filenames:AES_256_CTS  policy_version:2
Unlocked: Yes

Protected with 2 protectors:
PROTECTOR         LINKED   DESCRIPTION
e9ac6267b2a1c60b  Yes (/)  login protector for xxx
20b94b2cb1827423  No       custom protector "Recovery passphrase for xxx"
```

## 5. 退出登录并重新登录

如果登录成功后发现文件/文件夹名称是正常的且可以正常打开或写入，说明数据被成功解密，可以删除备份

此时的 `fscrypt status`：

```bash
sudo fscrypt status /home/xxx

"/home/xxx" is encrypted with fscrypt.

Policy:   046e333ea0ec7cd83ae34f85374994fd
Options:  padding:32  contents:AES_256_XTS  filenames:AES_256_CTS  policy_version:2
Unlocked: Yes # 这里显示 Yes 说明成功✌️

Protected with 2 protectors:
PROTECTOR         LINKED   DESCRIPTION
e9ac6267b2a1c60b  Yes (/)  login protector for xxx
20b94b2cb1827423  No       custom protector "Recovery passphrase for xxx"
```

删除备份：

```bash
sudo find /home/xxx.bak -type f -print0 | xargs -0 shred -n1 --remove=unlink

sudo rm -rf /home/xxx.bak
```

如果登录成功后发现全部文件/文件夹名称变成了乱码，说明数据没有被解密，这时需要检查 [PAM 模块](#3-设置-pam-模块)是否正确配置或者用备份恢复数据

此时的 `fscrypt status`：

```bash
sudo fscrypt status /home/xxx

"/home/xxx" is encrypted with fscrypt.

Policy:   046e333ea0ec7cd83ae34f85374994fd
Options:  padding:32  contents:AES_256_XTS  filenames:AES_256_CTS  policy_version:2
Unlocked: No # 这里显示 No 说明失败 ❌

Protected with 2 protectors:
PROTECTOR         LINKED   DESCRIPTION
e9ac6267b2a1c60b  Yes (/)  login protector for xxx
20b94b2cb1827423  No       custom protector "Recovery passphrase for xxx"
```

用备份恢复数据：

```bash
sudo rm -rf /home/xxx

sudo mv /home/xxx.bak /home/xxx

reboot
```

---

### Guide Security Secureboot (`docs/guide/security/secureboot.md`)

# 安全启动

## 什么是安全启动，它是干什么的？

安全启动 (Secure Boot) 是电脑行业成员开发的一种安全标准，用于帮助确保设备仅使用受OEM信任的软件进行启动。当电脑启动时，固件会检查每个启动软件片段的签名，包括 UEFI 固件驱动程序、EFI 应用程序和操作系统。 如果签名有效，则电脑将会启动，而固件会将控制权转递给操作系统。（来源：微软官方）

## 安全启动可以抵御哪些威胁？

可以抵御一种叫作 Bootkit [(例如BlackLotus) ](https://github.com/ldpreload/BlackLotus)的恶意软件，这种恶意软件在系统加载前注入恶意代码。相比常见的恶意软件，它更加难以被察觉，且不易被清除。

::: warning ⚠️ 注意

有些 Bootkit 带有微软的签名，如果没有更新 DBX 密钥，这种 Bootkit (如上述的 BlackLotus ) 可以绕开安全启动

:::


此图为 BlackLotus Bootkit 攻击示意图



# 在 Arch Linux 实现安全启动

## 1. 开始之前，请检查⚠️

1.  你需要一个可以正常启动的Arch Linux (纯属废话😄)

2. 你的电脑必须支持UEFI和Secure Boot，并且关闭 CSM 模式

3. ☢️ 你的电脑必须支持导入你自己的 Secure Boot 密钥 ☢️

## 2. 备份原来的密钥

2-1. 安装efitools

```bash
sudo pacman -S efitools
```

2-2. 备份密钥

```bash
sudo efi-readvar -v PK -o factory_PK.esl

sudo efi-readvar -v KEK -o factory_KEK.esl

sudo efi-readvar -v db -o factory_db.esl

sudo efi-readvar -v dbx -o factory_dbx.esl
```

::: warning ⚠️ 注意

如果想手动导入 DBX 密钥则必须执行 `sudo efi-readvar -v dbx -o factory_dbx.esl`

:::

## 3. 进入电脑的固件设置，将安全启动模式设置成Setup Mode (设置模式)

::: warning ⚠️ 注意

这里以 Intel NUC 为例，不同品牌的设置可能会不一样

:::

3-1. 按下 F2 进入固件设置，依次选择 `Boot -> Secure Boot -> Clear Secure Boot Data `__(这里要临时开启安全启动才可以执行此操作)__


3-2. 按下 F10 保存并退出

3-3. 再次进入固件设置，你会发现 PK、KEK、DB、DBX 密钥都被清除了


## 4. 安装 sbctl 并配置

4-1. 安装 [sbctl](https://archlinux.org/packages/extra/x86_64/sbctl/)<sup>Extra</sup> 包：

```bash
sudo pacman -S sbctl
```

4-2. 使用 `sbctl` 生成 `PK`、`KEK`、`DB` 密钥：

```bash
sudo sbctl create-keys
```

## 5. 重新安装GRUB

```bash
sudo grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB --modules="tpm" --disable-shim-lock   # 重新安装 Grub

sudo grub-mkconfig -o /boot/grub/grub.cfg    # 生成启动项
```

## 6. 对GRUB进行签名并将密钥导入UEFI环境里

6-1. 使用 `sbctl sign` 对引导文件签名：

```bash
sudo sbctl sign -s /boot/vmlinuz-linux

sudo sbctl sign -s /boot/EFI/GRUB/grubx64.efi
```
6-2. 进行检查

```bash
sudo sbctl verify
```

## 7. (可选) 手动导入 DBX 密钥

将原来备份的 DBX 密钥导入到 UEFI 环境里

```bash
sudo efi-updatevar -a -e -f factory_dbx.esl dbx
```

::: warning ⚠️ 注意

由于 `sbctl enroll-keys` 命令会导入 PK (Platform Key) 密钥，会导致安全启动模式变成 User 模式，使得导入新密钥很难，所以推荐你在执行 `sbctl enroll-keys` 命令前执行上述命令

通过此方法导入的 DBX 密钥是原机备份的，所以这个密钥可能不是最新的(目前最新版本是371)，可能需要[更新 DBX 密钥](#9-可选-更新-dbx-密钥)

:::

## 8. 将密钥导入UEFI环境并启用安全启动

如果你只安装Arch Linux且不需要双系统，请输入：

```bash
sudo sbctl enroll-keys
```

sbctl 只会把它生成的密钥导入UEFI环境里

 如果你安装 Arch 和 Windows 双系统，请输入：

```bash
sudo sbctl enroll-keys -m
```

sbctl 会把它生成的密钥和微软的密钥一并导入UEFI环境里

::: danger ☢️ 警告

使用“sudo sbctl enroll-keys”可能会导致你的电脑变砖。原因是你的电脑固件中的 [OpROM (Option ROM)](https://learn.microsoft.com/zh-cn/windows-hardware/manufacture/desktop/uefi-validation-option-rom-validation-guidance?view=windows-10) 带有微软的签名验证 (例如大部分独立显卡的VBIOS固件)，或者是电脑固件存在[BUG](https://wiki.archlinux.org/title/Lenovo_ThinkPad_T14s_(AMD)_Gen_1#Secure_boot)，这种情况可以尝试“sudo sbctl enroll-keys -m”。

:::

::: warning ⚠️ 注意

如果你导入了微软的密钥，强烈推荐你手动导入最新的DBX (Secure Boot Forbidden Signature Database) 密钥来防止如上述 [ BlackLotus ](https://github.com/ldpreload/BlackLotus) 这样的 Bootkit 绕开安全启动。

:::

再次进入固件设置，开启安全启动

## 9. (可选) 更新 DBX 密钥

::: tip ℹ️ 提示

此操作只对导入了微软密钥的设备有效

:::

9-1. 安装 fwupd

```bash
sudo pacman -S fwupd
```

9-2. 启用服务

```bash
sudo systemctl enable --now fwupd
```

9-3. 更新 fwupd 元数据

```bash
sudo fwupdmgr refresh --force
```

9-4. 对 fwupd 的 EFI 文件签名

```bash
sudo sbctl sign -s /usr/lib/fwupd/efi/fwupdx64.efi -o /usr/lib/fwupd/efi/fwupdx64.efi.signed
```

9-5. 更新 DBX 密钥

```bash
sudo fwupdmgr get-updates # 用于查看是否有更新

sudo fwupdmgr update # 用于更新
```

::: tip ℹ️ 提示

如果你的设备是联想的 ThinkPad 系列、惠普或者戴尔，可能会同时把设备 BIOS 固件一起更新了。注意更新 BIOS 固件时千万不能断电，否则后果很严重(可能无法开机)😱

:::

---

### Guide Security Summary (`docs/guide/security/summary.md`)

# 安全强化
> ### 🛡 你使用的系统真的安全了吗？
> 
> 可以对系统进行加固 (Hardened) 来降低你的设备受到攻击的风险

## 为什么要为系统进行安全强化？

1. 系统强化的主要目的是提高整体安全性

2. 降低了数据泄露、未经授权的访问和恶意软件注入的风险


## 开始之前，你必须知道的是：

1. 永远无法令系统 100% 安全

2. 遵循[最小权限原则](https://www.cnblogs.com/huangjiabobk/p/18188638)

3. 这里提供的部分教程需要结合[基础安装教程](../rookie/basic-install.md)

4. 进行系统加固可能会使系统损坏或无法启动

## 此栏目将会提到

1. 安全启动

2. 全盘加密和文件级加密

3. Apparmor 配置和使用

4. 还在施工中...

---

--- METRICS ---
- Files Extracted: 43
- Estimated Token Budget: ~61494 tokens
- Canonical Reference: https://codewiki.google/github.com/nakanomikuorg/arch-guide
