“理解”并安装 Arch Linux (UEFI)

我翻开博客一查,这博文没有年代。歪歪斜斜的每页上都写着“安装教程”几个字,我横竖睡不着,仔细看了半夜,才从字缝里看出来,满篇上都写着两个字“劝退”!

缘由

最近我发现了一个有趣的现象。很多 Linux 新手用户都承认他们非常希望尝试 Arch Linux,但是他们几乎都没能成功地安装 Arch Linux。相比之下,提供 GUI 安装向导的 Linux 发行版,确实看起来更新手友好一些。

但是新手友好是有代价的。GUI 安装向导给你做了太多额外的事情,也强迫你接受了太多预设的、本可以由用户自己选择的东西(比如 DE 和一些看起来很常用的软件;但也有选择自由度很高的安装向导,后果是社区里充斥着“我该选哪个”的问题)。

大部分没法安装一个正常运行的 Arch Linux 的用户,是因为不够了解 Arch Linux 安装的几个基本步骤,以及这些步骤的作用;很多正常安装了数遍 Arch Linux,却仍然完全依赖 Arch Wiki 完成下一次安装的用户,可能每次安装也只是对指令不加理解的抄写。

所以,本文的目的在于帮助新手粗略理解 Arch Linux 安装的若干个步骤,以及每个步骤可以参考的配置,或者,有闲心的话,详尽的参考文献地址。

开始之前

请注意以下几点:

  • 本文的目的不仅是告诉别人如何安装 Arch Linux,还会解释每一个行为和指令的意义,以便于逐渐脱离 Wiki 安装 Arch Linux,并更自由地配置自己的下一份 Arch Linux 实例。不过我猜,只希望复制粘贴的人,就算我写了这些也并不会看。
  • 本文只给出对于硬件和环境不那么奇怪的情况下的大致安装步骤,如果你拥有奇怪的键盘布局,或是奇怪的网络环境,或是根本没有网络环境,或是准备在苹果设备上安装,或是打算在手机上安装,那你走错地方了。
  • 本文只包含最基本的步骤,只适用于全盘安装 Arch Linux,或如果你还离不开 Windows 的话,在虚拟机中尝试 Arch Linux。因为配置双系统启动是另一个话题,而且我已经数年没有做过了。
  • 本文只针对 UEFI 机器。

由于是便于新人理解的粗糙讲解,很多描述可能并不严谨,也可能并不准确。请老手不要用过于复杂的描述指正。

基本步骤

我大致将 Arch Linux 的安装划分为了以下的步骤:

  • 准备环境。启动 Arch ISO,联网,调整系统时间;
  • 准备磁盘分区。分区策略和分区,按照目录结构挂载分区;
  • 安装。修改 /etc/pacman.d/mirrorlist,使用 pacstrap 安装系统;
  • 必要的配置。配置启动引导程序,主机名,root 密码,生成 fstab;
  • 额外的配置。添加用户,修改 sudoers 文件,安装桌面环境,语言配置;

此外,我会在后续更新中提供对于已经充分理解上述步骤的用户的一些额外选项,包括使用 systemd-boot 卖掉自己的底裤清晰化启动配置,完全无输出的安静启动,Arch CN 源和 fcitx5 (仅限KDE)。

准备环境

Arch ISO

Arch ISO 是一个用来启动 Arch Linux 基本安装环境的 Live CD。我假定你决定安装 Arch Linux 时已经找到了 Arch Linux 的官方下载页并下载好了 Arch ISO。

实体机需要 U 盘启动

  • 将 ISO 烧写入 U 盘(这通常会洗掉所有的数据!)。不要使用 UltraISO,因为很多人和我说用它烧写的 U 盘并不能被 EFI 固件识别。推荐一个好用的工具 Etcher。烧写完毕之后 U 盘的容量以及在 Windows 下的行为极不正常不要惊慌,之后我们会恢复它。从 U 盘启动你的机器。通常,你需要去 EFI 固件设置里关掉安全启动(Secure Boot),因为 Arch Linux 及其 ISO 的引导程序通常没有注册自己为受信任的 EFI 可执行程序。

虚拟机从 ISO 启动

  • 我假定你了解如何使用你的虚拟机平台,教授别人使用虚拟机平台不是本文的目的。新建一个 Linux 4.x 64-bit 的新虚拟机,给它 64GB 的硬盘大小,和 4GB 的 RAM。这个配置可能过剩了,但过剩总比不够好。配置虚拟机为 UEFI 启动,并关掉安全启动(Secure Boot)。指定虚拟机从 Arch ISO 启动。

如果你能在一大堆输出里找到 Welcome to Arch Linux!,并很快进入了自动登录了 root 用户的 shell,你已经成功启动了 Arch ISO。

Arch ISO

如果你不能启动 Arch ISO,请仔细观察输出。如果它并没有启动到内核而是崩溃在了引导时,请尝试用合适的工具重写 Arch ISO 媒介;如果它启动了内核,却无法完成启动过程,则可能是由于你的硬件不够正常造成的:比如某些带有英伟达独显的双显卡笔记本

若是由于英伟达双显卡机器无法启动,可以在 Arch ISO 的系统选单上按下 e 键修改内核参数,在启动选项的最后加上 modprobe.blacklist=nouveau 以禁用造成问题的开源英伟达驱动 nouveau;若是其它硬件兼容性问题,请离开本文直到 Arch ISO 支持你的硬件。

试着敲入几个字母。如果它们不符合预期,你大概有一个奇怪的键盘布局。请离开本文参考 Wiki 来调整键盘布局。

联网

为什么要联网

网络是正常安装 Arch Linux 的必要前提。因为不同于很多别的发行版将核心软件包内建在了巨大的安装镜像里,Arch Linux 从软件源下载最新的软件包并安装它们。这种方式极大地压缩了 Arch ISO 的大小,并能保证系统安装完就是最新的。缺点是安装时必须联网。

对于有线网络

对于自动分配 IP 地址的有线网络(绝大多数有线网络都是自动分配 IP 地址的),使用 dhcpcd 指令来联网。判断网络是否联通的方法是 ping baidu.com (百度唯一的作用),如果你能得到回应,那么网络是联通的,DNS 也是正常的。如果你的有线网络并非自动分配 IP 地址,或是 dhcpcd 不能让你连接上你确定没有问题的网络,请离开本文参考 Wiki 页面

dhcpcd

对于无线网络

使用 wifi-menu 这个 TUI 工具连接无线网络。如果你的网络不显示在网络列表里,或你的网络不被 wifi-menu 支持(比如企业 WPA/WPA2 网络,需要用户名和密码的那种),或是需要打开一个网页来认证上网,请寻找一个更合适的网络环境。使用 ping baidu.com 来同时检查网络连接和 DNS。

调整系统时间

为什么系统时间很重要

你的系统时间直接关系到程序在你的系统上生成的时间戳。正确的(误差之内的)时间戳在验证连接或证书的可信程度时非常重要;如果你有一个错得离谱的时间,你会频繁遭遇各种意料之外的错误,比如无法检验证书,或无法建立 SSL 连接,或无法校验下载的软件包。

自动调整系统时间

如果网络是正常的,可以让系统自己调整时间(你已经是一个成熟的系统了,应该学会自己调整时间)。这可以通过启用 NTP 来完成。

1
timedatectl set-ntp true

手动调整系统时间

如果出于某些原因自动时间调整无法完成,请使用 timedatectl 按照如下方法手动调整时间。

1
timedatectl set-time "yyyy-MM-dd hh:mm:ss"

检查系统时间

直接运行不带参数的 timedatectl 来检查 UTC 时间是否正确。注意,UTC 时间通常不是本地时间

检查系统时间

准备磁盘分区

分区策略

本文只针对 UEFI 机器,并基于最简单的硬盘结构,采用最简单的分区策略。即:

  • 512 MB ESP(EFI 系统分区),fat32;
  • 8 GB SWAP(Linux 交换分区,可大可小),swap;
  • 剩下的全部 /(根目录,整个文件目录的根),ext4;

分区和 fdisk

fdisk 是命令行下常用的分区工具。本文针对最简单的硬盘结构,即只有一块常规的硬盘。如果你有一块固态硬盘和一块机械硬盘,本文只会将 Arch Linux 安装在其中的一块上。通常情况下,你的第一块硬盘对应的设备文件是 /dev/sda。执行下面的指令,观察输出中的信息,并确认它真的是你的目标盘。

1
fdisk -l /dev/sda

结果一例

如果容量和名称明显不符合预期,那么它就不是你的目标盘。逐一检查 /dev/sdX 形式的设备文件,直到确定你的目标盘的设备文件名称(注意,其中有一个很有可能是你的 U 盘)。如果你的设备未按 /dev/sdX 的形式列出,那么很有可能你有一块 NVMe 硬盘,或不常规的硬盘,或你根本没有硬盘。如果你拥有 NVMe 硬盘,则对应的设备名称会是 /dev/nvmeXnY 的形式;XY 都是数字,通常 X0Y1

开始分区

!注意,下面是危险操作!

使用(注意把 sda 替换成你自己的设备文件):

1
fdisk /dev/sda

进入分区程序。输入 m 可以查看 fdisk 的帮助。在决定写入之前,所有的更改都不会被保存。按照上面描述的分区策略,我们输入 g 新建一个 GPT 分区表;输入 n 建立第一个分区,不用填写 first sector(这样会使用默认值),在提示输入 last sector 的时候输入 +512M 来依据分区大小自动计算终止扇区。

建立ESP

重复上面的步骤,建立一个 8 GB 大小(或你自己决定的 SWAP 分区大小)的分区;再次重复上面的步骤,但不填写 last sector 从而自动将所有的剩余空间划分给第三个分区。

建立分区

我们需要为 ESP 和 SWAP 分区添加额外的标记。输入 t 修改分区类型,选择第一个分区,输入 1 将类型修改为 EFI System;重复该步骤,将第二个分区的类型改为 19,也就是 Linux swap。

修改类型

输入 p 查看暂定的分区结果;检查的部分包括分区表类型、分区数目、分区大小和分区标记。如果发现任何不正常的地方,请立即作出修改。

结果一例

确认分区无误,且磁盘上没有其它重要数据之后,输入 w 写入更改。注意!此操作后你的目标硬盘上的分区表会被彻底覆盖,也就无法正常访问任何以前的数据了。

写入更改

如果不希望作出修改,输入 q 不写入分区表而退出 fdisk。

格式化分区

我们需要为每个分区创建文件系统,这样 Linux 才知道如何从每个分区里读取,或往每个分区里写入数据;这一步通常被成为“格式化”。Linux 用于格式化磁盘的指令名称很好记,mkfs.文件系统名称;mkfs 是 make filesystem 的缩写。

按照上述分区策略,执行以下指令分别为每个分区建立文件系统(照旧,替换 sda 为你的目标设备):

1
2
3
mkfs.fat -F32 /dev/sda1
mkswap /dev/sda2
mkfs.ext4 -L root /dev/sda3

Linux 对磁盘分区的命名也很直观。设备 /dev/sda 上的第一个分区就是 /dev/sda1,第二个分区就是 /dev/sda2,以此类推。对于 NVMe 硬盘,设备 /dev/nvme0n1 上的第一个分区是 /dev/nvme0n1p1,第二个分区就是 /dev/nvme0n1p2,以此类推。

格式化分区

在上面的指令第一句中,我们为 /dev/sda1 分区,也就是 sda 磁盘的第一块分区,建立了 fat 文件系统;-F32 表明我们建立的是 fat32 而非 fat16 或其它不是我们想要的 fat。

而在第二句中,我们为 /dev/sda2 创建了专用于 swap 的存储系统;这是一个特殊的分区类型,它很难被当作 filesystem,所以建立它的指令是 mkswap 而非 mkfs.sth

在最后一条指令中,我们为 /dev/sda3 建立了一个 ext4 文件系统;-L root 选项表示设置这个新分区的标签为 root,以便于后续引用它。不设定标签也是可以的,但以后我们将只能通过分区的 UUID (很长一串)来引用它,可读性不高,也很容易抄错。

挂载分区

Linux 大致的目录结构

和 Windows 不同,Linux 的整个目录结构只有一个根,也就是 /。根目录下放置着一些 Linux 常用的一级子目录,比如 /usr/boot/home 之类,它们都有自己独特的分工;对于多个磁盘分区的设备来说也是如此。Linux 下的逻辑,是将磁盘分区挂载到目录结构中的一处,从那处开始往深,就会被储存在被挂载的磁盘分区上。

本实例的目录结构

本文采用了对于 UEFI 机器最简单的分区策略,目录结构并不复杂。它大致如下:

  • /dev/sda3 被挂载于 根目录,这是整棵目录树的根部;
  • /dev/sda1 被挂载于 /boot,这个分区存放和启动有关的程序,对于 UEFI 机器,它们就是 EFI 可执行文件、相应的配置文件以及内核镜像;
  • /dev/sda2 是交换分区;

按照目录结构挂载分区

首先启用交换分区:

1
swapon /dev/sda2

可以使用 swapon --show 来检查交换分区有没有被正确启用。

启用交换分区

然后挂载整个新系统的,这里我们将它挂载到 Arch ISO 环境的 /mnt 下。不要担心,Linux 有一个实用工具 chroot,可以将目录结构的任意点作为新的根。

1
mount /dev/sda3 /mnt

按照我们对新系统目录结构的理解,/dev/sda1 应该被挂载于新系统的 /boot,也就是 Arch ISO 环境的 /mnt/boot。但是这个目录目前仍不存在(因为 /dev/sda3 是空的),所以我们手动创建它,然后再进行挂载。

1
2
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

mount 指令正常执行完毕是不会产生输出的。如果你的机器安静地完成了挂载步骤,那么可以继续下一步了。

挂载分区

安装系统

Arch Linux 如何完成安装

正如前文所述,Arch ISO 并不携带需要被安装的软件包,所以 Arch Linux 安装时需要从软件源里下载软件包。对于 Arch Linux 来说,软件包简单来讲就是一个附带有少量脚本的压缩包,它按照对应的目录结构储存着软件的内容;而安装一个软件包,也无非就是依照控制脚本执行该执行的指令,和将软件包内容一股脑解压到目录结构里罢了。对于 Arch Linux 来讲,系统本身就是数百个软件包组成的,这种组合在一起完成了一类功能、或是一个大工程的小组件,通常都会被定义为一个软件包组,而对于 Arch Linux,一个叫 base 的软件包组里的包,组成了整个 Arch Linux 的核心部分。安装这个包组,就会有数百个软件包被获取、然后解压到指定的目录里,从而构成一个正常运转的系统。

安装 Arch Linux

修改软件源镜像

Arch Linux 并非只有一个软件包源服务器,而是拥有很多位于全球各地、和主源服务器同步的镜像源服务器。在中国,它们一般由各大学、知名 IT 企业提供。

Arch Linux 的包管理工具 pacman,和安装时会用到的 pacstrap,会从 /etc/pacman.d/mirrorlist 文件中读取要使用的软件包源地址,按照罗列的先后顺序依次 fallback。对于中国大陆用户,可以将清华大学的 tuna 软件源和中国科学技术大学的软件源挪到最前面。即,使用 nano 编辑 /etc/pacman.d/mirrorlist,在最前面加上:

1
2
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch

这样将极大提升获取软件包的速度。

使用 pacstrap 安装系统

如前文所述,Arch Linux 安装一个软件本质上是将软件包内容解压至指定目录;对于 pacman 来说,它被解压至根目录。而这里,我们需要将它安装到新系统的根,也就是 Arch ISO 环境的 /mnt 下。借助实用工具 pacstrap 完成这一步。

1
pacstrap /mnt base base-devel dialog ntfs-3g wpa_supplicant

上面的指令中,第一个参数告诉 pacstrap,我们希望将接下来的软件包(或软件包组)安装至 /mnt;接下来,我们选择安装了 base 包组,这个包组包含了最基础的 Arch Linux;接着选择安装了 base-devel 包组,这个包组虽然不是必须,但包含了很多至关重要的工具,sudo 就是其中之一;后面的三项是三个独立的软件包:dialog 允许在新的系统里使用 wifi-menu 联网、ntfs-3g 允许新的系统挂载 NTFS 类型的分区、而wpa_supplicant 则提供 WPA 认证支持。

按下回车,这个过程可能需要一小段时间。泡杯茶或者咖啡,坐和放宽。

pacstrap输出一例

必要的配置

为何需要进行配置

虽然系统安装完成了,但 pacstrap 和软件包大约也只是将合适的文件放在了合适的位置,并没有完成进一步的配置。也就是说,你的新系统已经诞生,但它仍处于不可用状态;因为它根本无法启动。

arch-chroot

前文中提到过,chroot 工具能指定目录结构任意的位置为新的根;由于我们需要进行的配置应该在新系统上完成,所以我们应该 chroot 到新系统的根,也就是 /mnt。普通的 chroot 是可行的,但是为了让 chroot 环境行为正常,我们还需要手动挂载几个“动态目录”,比如 /run。这很麻烦,但是 Arch ISO 提供了一个额外的工具 arch-chroot 来自动帮我们完成这些步骤,并完成 chroot。

1
arch-chroot /mnt

如果你进入了另一个风格明显不同自动登录了 root 的 shell,那么你现在已经位于新系统的根下了。

完成chroot

额外配置

配置引导程序

我推荐新人使用的引导程序是 grub,因为它虽然陈旧臃肿,但是配置起来是最简单的。我会在随后的附加内容里提到如何配置 systemd-boot 而不使用 grub,但对于新手,请耐心学习 grub 的配置。

首先,我们需要安装 grub。由于现在已经处于新系统的 chroot 环境里,我们可以按照给普通本地系统安装软件包的方式来安装 grub。

1
pacman -S grub efibootmgr

pacman 是 Arch Linux 的包管理工具,-S 表示执行安装操作,grubefibootmgr 是需要安装的软件包;前者是引导程序,后者用于提供 EFI 支持。

安装grub

配置 grub 相对比较方便,因为 grub 提供了方便的实用工具安装自己到 /boot,并可以自动生成配置文件。

1
2
grub-install --efi-directory=/boot
grub-mkconfig -o /boot/grub/grub.cfg

上述命令中的第一句表明将 grub 的 EFI 部分安装至 /boot,也就是我们的 ESP;grub 会自动探测机器类型并采取对应的操作。第二句则让 grub 自动生成一个适合当前机器的配置文件,并覆盖原有的示例配置。如果两条指令都未出现致命错误,则 grub 已经配置完毕。

配置grub

配置主机名

配置主机名是过程最少的一步。创建或修改(可以使用 nano)文件 /etc/hostname,添加或修改第一行记录为你想要的主机名即可。主机名必须是合法的。

修改 root 密码

你是否发现,到目前为止,我们一次都没有被问到过任何密码?这经常导致配置 root 密码这一步被忘记,重启后却发现自己根本不知道登录密码的尴尬。

使用 passwd 指令修改密码。需要注意的是,因为暴露自己密码的长度等于稍微减弱了密码的强度,所以 Linux 大部分询问密码的 CLI 程序默认都不会显示密码回显。也就是,你输入密码时,屏幕不会有任何提示。

修改root密码

Arch Linux 从不告诉用户什么是对的,所以你不会因为设置了太弱的口令而得到警告。

生成 fstab

fstab 是 filesystem table 的缩写。看名字就知道,这个东西是文件系统的一个表;事实上,它是告诉系统启动时该如何挂载各分区的表。幸运的是,Arch ISO 给我们提供了实用工具来自动生成它。

首先执行 exit 退出 chroot 环境回到 Arch ISO;然后使用 genfstab 实用工具来生成 fstab 文件。

1
genfstab /mnt > /mnt/etc/fstab

上述指令告诉 genfstab,依照 /mnt 下的目录结构和挂载点生成一份对应的 fstab,并通过输出重定向写入 /mnt/etc/fstab 文件中。对于新系统,这是 /etc/fstab

由于这是比较重要、比较容易出错的文件,可以用 cat /mnt/etc/fstab 来检查其是否正确。你应该能看到分区和对应的目录成对,并有一个 swap。

fstab内容一例

重启计算机

重启计算机,不要再从 U 盘启动(你可以在断电后拔掉 U 盘),你应该能看到 grub 引导菜单。选择 Arch Linux 这个 Entry,你应该能正确启动 Arch Linux 并到达字符终端的登录界面。使用用户名 root 和所设置的 root 密码登录,就应该登入了你自己安装的 Arch Linux 基础系统。重新使用前面所述的方法连接网络,就可以进行下面的步骤了。

额外的配置

为什么叫额外的配置

因为做完上面的步骤,安装就已经完成了。你得到了一个能工作的 Arch Linux 基础系统。只是,它还很不堪用,所以本节的内容是让它更好用。

用户与权限配置

添加普通用户

正经的 Linux 用户不会用 root 干所有的事情:那不仅很危险,而且很危险,还很危险。创建一个普通的用户,并让它可以通过 sudo 指令用 root 权限执行命令是一般的解决方案。

Arch Linux 使用 useradd 指令来添加用户。

1
useradd -m -G wheel 你的用户名

用户名必须是合法的。最简单的就是不带空格的字母和数字的组合。-m 参数表示同时创建该用户的家目录,这会被默认置为 /home/用户名-G wheel 表示同时将该用户加入 wheel 用户组,这便于之后配置 sudoers 文件。

使用 passwd 修改新添加的用户的密码。

1
passwd 用户名

配置 sudoers

sudo 指令可以让普通用户以 root 权限运行一句或一组指令,但很明显,不是所有人都有权这么做。控制哪些人可以如何使用 sudo 的配置文件为 /etc/sudoers。我们需要修改它,以使得我们新建的用户能够使用 sudo 指令。事实上,我们将允许 wheel 组内所有人使用 sudo 指令。

首先安装文本编辑工具 vim,以便于执行 visudo

1
pacman -S vim

执行 visudo 来修改 sudoers 文件。使用它的好处是,它会在保存时作语法检查,以避免错误的更改使 sudo 彻底不可用;需要掌握 vi 的用法。如果不会使用 vi,也可以使用 nano 直接修改 /etc/sudoers 文件(危险!)。

找到这一句:

1
# %wheel ALL=(ALL) ALL

去掉前面的注释,保存后更改就会生效。它意味着,wheel 组内的任何人能在任何登录地址运行任何指令。

如果你厌倦了每次 sudo 都需要输入密码,则应该去掉这一句的注释:

1
# %wheel ALL=(ALL) NOPASSWD: ALL

它意味着,wheel 组内的任何人能在任何登录地址无需密码地运行任何指令。

退出,用新用户登录

使用 exit 退出 root 用户的登录,使用新的用户的用户名和密码登录系统。

图形

安装桌面环境

对于新手,我个人推荐 KDEGnome。它们各自有一套自己的全家桶,无需额外安装并配置一个 Display Manager(显示管理器,DM),并且相对比较易用。这里拿 KDE 作例子,因为它的默认环境更贴近 Windows 用户的习惯。

使用 pacman 安装桌面环境,和常用的图形工具(比如文件管理器、终端仿真器等等)。

1
sudo pacman -S plasma kdebase

因为现在是普通用户了,所以我们需要使用 sudoplasma 包组是最基础的 KDE plasma 桌面环境,而 kdebase 包组则是一组常用的 KDE 自由软件。静候软件包安装完成。

启用 DM 和 Network Manager

KDE 携带了推荐的显示管理器 SDDMSDDM 又提供了一个 systemd 服务来让自己自启。systemd 是 Arch Linux 唯一的 init 程序,浅显地说,系统启动的第一步就是启动 systemd,然后由 systemd 接管接下来的启动过程。

启用 SDDM 的 systemd 服务,便可让系统自动启动图形登录界面。

1
sudo systemctl enable sddm

同样,KDE 默认的网络管理器 Network Manager 也提供了一个 systemd 服务,启用它以让 Network Manager 开机自动启动,从而不再需要使用上文所述的方法连接网络,只需要按照 Windows 的逻辑点点鼠标、之后就会自动连接了。

1
sudo systemctl enable NetworkManager

注意这个服务的名称是有大小写区分的。

如果你成功地启用了它们,你应该能看到如下输出:

启用systemd服务

重新启动操作系统,在图形界面登录你的账户,进入桌面环境,用 Windows 的操作逻辑连上网络(如果是有线网络应该已经自动连接了)。之后我们无需再使用纯字符终端,而是使用图形界面的终端仿真器了(对于 KDE,它叫 Konsole)。

KDE和Konsole

配置语言

现在的界面是英文的,但是 Linux 的中文翻译通常相当到位。我们需要进行配置来让 Linux 用简体中文和我们说话。

生成 locale

在设置相应的 locale 为默认值之前,需要先生成它。控制生成哪些 locale 的文件是 /etc/locale.gen;编辑它(注意,这里可能需要用 sudo nano),去掉这几行前面的注释:

1
2
3
4
5
6
7
...
#en_US.UTF-8 UTF-8
...
#zh.CN_UTF-8 UTF-8
...
#zh.HK_UTF-8 UTF-8
...

接着,使用 locale-gen 来生成这些 locale。

1
sudo locale-gen

生成过程需要一小段时间,请耐心等待。

生成locale

设置默认 locale

设置 locale 可以通过创建或修改 /etc/locale.conf 来完成。创建它或者修改它,让文件内仅有下面一行:

1
LANG=zh_CN.UTF-8

保存这个文件,下次启动时,应该就会默认使用中文了。不仅是 UI,命令行输出也会尽可能使用中文翻译。但不要急着重启,还有事情没做。

安装中文字体

在完成上述步骤后,系统将会尝试使用中文显示任何能显示的东西,但是此时的系统没有可用的中文字体,会导致显示出的东西是“豆腐块”。我们需要给它安装亚洲语言字体 noto-fonts-cjk;noto 是 no tofu 的意思,也就是“消灭豆腐块”。

1
sudo pacman -S noto-fonts-cjk

完成后重启系统,你会发现从登录界面开始,几乎一切的东西都是中文显示了。

输入法

系统以中文显示了,但是我们却不能输入中文。因为还没有安装中文输入法。

安装输入法

Linux 下有两种主流的输入法框架,ibusfcitx,对于 KDE 来说,fcitx 是比较好的选择。使用下面的指令安装它:

1
sudo pacman -S fcitx-im fcitx-sunpinyin kcm-fcitx

上面安装的东西里,fcitx-im 是一个包组,包含了 fcitx 本身和让 fcitx 能正常运行在各版本 qt 和 gtk 程序里的组件;fcitx-sunpinyin 是使用 fcitx 框架的拼音输入法;kcm-fcitx 则是集成到 KDE 系统设置内的 fcitx 设置程序。

从应用程序菜单中找到 输入法Fcitx,启动它,你会在任务托盘里看到一个小企鹅图标。通过它的右键菜单配置输入法,将 sunpinyin 加入可用的输入法列表,这样我们就能切换到它了;设置界面还有其他重要的设置,包括快捷键其它常用选项。

配置环境变量

此时我们仍不能正确输入中文。因为我们还未配置环境变量来让程序们使用 fcitx。创建或修改 ~/.pam_environment 文件(~ 是你的家目录),用它来指定环境变量。在里面加上如下内容:

1
2
3
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

它们会指定 fcitx 为几乎所有程序的 IM;当然某些不听话的程序除外,比如 Sublime,但这类程序几乎遇不到。重新启动系统,你应该能自由地输入中文了。

安装结束

如果你顺利完成了上面的步骤,你应该已经获得了一个基本可以使用的 Arch Linux 实例。熟悉并习惯它,多查 Arch Wiki 解决问题,并把它调教成自己喜欢的样子。对于 KDE 我可能会写一篇额外的文章,来说明如何使用简单的配置,给它一个相对美观的外观。

是Arch!

后续更新

有空时会更新额外的小技巧