2022年12月8日小更新一波
- 增加了i3的一些配置说明
2022年11月17日小更新一波
- 增加了一些双系统相关说明
- 增加了终端字体推荐
- 修改了一些错误内容
其实arch的安装不是一件很难的事情,但是随着时间的推移会出现一些坑,所以我记录一下安装过程。
参考文章:
本文分为三个部分进行讲解,第一部分是安装整个系统(不带图形界面),第二部分是安装桌面或者窗口管理器,第三部分是进行一些简单配置,第四部分是一些简单总结。
本文讲解虽然较为详细,但是不建议纯小白尝试(跟着来也没啥问题。。。)建议你能够做对下列名词解释再继续:
vim neovim nvim NVME SATA BIOS UEFI kernel Nvidia console bash :q ^X ^C
如果上述单词中 80% 以上不知道什么意思,建议左转ubuntu或者deepin,对 linux 稍作了解之后再尝试 Arch。
1. 系统安装
1.1 进入live系统
其实这个live系统和ubuntu或者manjaro的live系统是完全一致的,只是有没有图形界面,以及系统安装程序的区别,在arch的live系统中,需要我们手动输入命令进行操作。
- 制作启动盘的过程就不详细说了,建议使用ventoy进行制作(我们以ventoy为例),避免重复格式化U盘的问题,当然,使用rufus也是可以的,不推荐使用UltraISO,容易出问题。
- 确认系统的引导方式是UEFI,,如果不是,请进入BIOS开启。
- 插入U盘,重启电脑,根据电脑型号按相应的键盘按键进入启动引导选择,选择刚刚USB启动器。进入ventoy界面,选取你下载的ArchLinux安装镜像(*.iso),进入Arch安装界面。
- 选择画面中的第一项(Arch Linuxinstallmedium(x86_64,UEFI)),按回车键,待加载完成后,进入ArchLinux的Live环境。如果出现“root@archiso~#”,说明启动成功,已经进入终端。
- 验证是否为UEFI启动(如果你确定已经是UEFI的话可以略过)
输入“ls /sys/firmware/efi/efivars”
输入这一行代码后,如果反馈目录不存在,则说明电脑没有以UEFI启动,需要重新执行步骤 3,不要继续,因为没有UEFI启动在后面写入引导的时候几乎绝对报错。如果有输出,说明电脑是以UEFI启动的。
1.2 联网
arch的系统镜像只有 800m,并没有包含所有的系统文件,所以网络是必要的。
1.2.1 电脑有wifi的情况,跟参考文章中操作一致
- 1. 输入“iwctl”进入iwd模式,也就是终端最前方有“[iwd]#”字样。
- 在iwd模式下输入“device list”,按回车(按回车是基本操作,所以下文省略),查询电脑的网卡。记住你的网卡号,一般是wlan0或者wlan1(本文以多数情况wlan0为例)
- 在iwd模式下输入“station wlan0 scan”,然后再输入“station wlan0 get-networks”,显示周围的wifi的ssid扫描结果。(如果你知道自己要连接的wifi名称,可以跳过这一步)
- 在iwd模式下输入“station wlan0 connect <ssid>”,如果是加密的wifi,系统会提示输入wifi密码,如无意外,就连上网了。
- 验证联网。按ctrl+c退出iwd模式,回到[root@archiso~]模式,输入“ping baidu.com”,如果有返回数据,说明已经连上网了。
1.2.2 电脑没有wifi的情况
这种情况下,usb无线网卡一般是用不了的,因为arch的iso中不带有驱动,而网店里的免驱网卡驱动需要在AUR里才能找到,因此,只能考虑USB共享手机网络,或者连接网线(这个就不多说了)。
- (以iphone为例)选一根质量好的线,连上电脑的usb口即可。
- 此时手机上会让你信任该设备,信任即可。
- 打开热点,输入“ping baidu.com”,如果有返回数据,说明已经连上网了。
iphone设备,以及usb接口的驱动在live系统中是存在的,所以非常简单,安卓设备也应该是类似的方法。但是有一点大坑需要注意,usb接口驱动需要在后续所安装的系统中单独安装,否则,重启之后是连不上手机的。
pacman -S usbmuxd
1.2.3 更新时间
timedatectl set-ntp true
1.3 磁盘分区
以前的arch需要使用fdisk命令进行分区,劝退了不少人,现在提供了更人性化的cfdisk工具进行分区,操作简单很多了,操作过程与参考文章类似。
- 输入“fdisk -l”,查看硬盘列表,SATA硬盘或者机械硬盘是/dev/sdX,nvme固态硬盘则显示/dev/nvme0nX。
- 认准你想作为系统盘的硬盘(sda的例子参考文章已经给出,所以我以/dev/nvme0n1为例),输入“cfdisk /dev/nvme0n1”进入伪图形界面进行分区。
- 参考划分大小如下
分区 | 挂载点 | 我划分的大小,仅供参考 |
---|---|---|
/dev/nvme0n1p1 | / | 100g(软件包都会装在根目录,建议大一点) |
/dev/nvme0n1p2 | /boot/efi | 500m(不要低于500m) |
/dev/nvme0n1p3 | /home | 60g(看个人情况,我的文件多为代码,占用空间较小) |
/dev/nvme0n1p4 | swap | 24g(交换空间,即虚拟内存) |
注意:
- boot分区一定是挂载到/boot/efi,后续挂载的时候会再提到。
- home分区在重装系统的时候是可以复用的,建议单独分区以避免丢失文件。
- swap视自己内存情况而定,一般 <= 电脑内存(我内存16g,分了24g swap好像也没啥)
1.4 分区格式化
依次输入下面的命令:(需要确认时输入“y”)
mkfs.fat -F32 /dev/nvme0n1p2 (boot分区必须使用fat32格式)mkfs.ext4 /dev/nvme0n1p1 (/ 和 /home 一般使用ext4分区格式)mkswap /dev/nvme0n1p4 (swap分区使用swap格式)swapon /dev/nvme0n1p4 (激活swap分区,不激活不会使用这部分空间)mkfs.ext4 /dev/nvme0n1p3 (/home分区)
格式化结束之后,使用 lsblk 命令查看分区是否划分以及格式化正确
nvme0n1 259:0 0 476.9G 0 disk├─nvme0n1p1 259:1 0 59.3G 0 part ├─nvme0n1p2 259:2 0 24G 0 part ├─nvme0n1p3 259:3 0 117.9G 0 part ├─nvme0n1p4 259:4 0 477M 0 part
我这里跟例子分区顺序不太一样,请根据自己实际情况确定。
1.5 分区挂载
基本和参考文章中一样,但是他犯了一个严重错误,boot分区一定是挂载到/boot/efi,,而不是/efi
依次输入下面的命令:
mount /dev/nvme0n1p1 /mnt (将 / 分区挂载到 live系统中的 /mnt 目录,此时 /mnt 目录就是我们所安装系统的 / 目录)mkdir -p /mnt/boot/efi (在新系统的 / 目录中新建 efi 文件夹,-p 参数表示递归创建)mount /dev/nvme0n1p2 /mnt/boot/efi (将 boot 分区挂载到efi文件夹)mkdir /mnt/home (同理,创建home目录)mount /dev/nvme0n1p3 /mnt/home (将home分区挂载到home目录)
挂载完成之后会变成这样(根据你的实际分区情况显示)
nvme0n1 259:0 0 476.9G 0 disk├─nvme0n1p1 259:1 0 59.3G 0 part /home├─nvme0n1p2 259:2 0 24G 0 part [SWAP]├─nvme0n1p3 259:3 0 117.9G 0 part /├─nvme0n1p4 259:4 0 477M 0 part /boot/efi
1.6 安装必要的包,并在系统中写入分区表
跟参考文章类似,但是,如果你使用usb分享网络,要多加一个usbmuxd包。
换源:很重要,不然等到天荒地老。方法很多,可以直接修改/etc/pacman.d/mirrorlist文件,也可以直接
reflector --country China --age 72 --sort rate --protocol https --save /etc/pacman.d/mirrorlist
解决问题,我一般还是手动换,即替换/etc/pacman.d/mirrorlist中内容为(任选其一,建议第一个):
Server = https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$archServer = https://mirrors.cqu.edu.cn/archlinux/$repo/os/$archServer = https://mirrors.dgut.edu.cn/archlinux/$repo/os/$archServer = https://mirrors.neusoft.edu.cn/archlinux/$repo/os/$archServer = https://mirrors.nju.edu.cn/archlinux/$repo/os/$archServer = https://mirror.redrock.team/archlinux/$repo/os/$archServer = https://mirrors.sjtug.sjtu.edu.cn/archlinux/$repo/os/$archServer = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$archServer = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$archServer = https://mirrors.xjtu.edu.cn/archlinux/$repo/os/$arch
安装基本系统(包括linux内核以及基础软件包),这里相比参考文章多给了几个软件包,因为这些对用户来说还是比较重要的 ,有几种内核可以安装:
- 普通内核(linux linux-headers)
- lts稳定版内核(linux-lts linux-lts-headers)
- zen内核(linux-zen,linux-zen-headers)(高性能)
按自己的需求安装就可以
这里需要提前说一下,linux-zen 内核不支持 nvidia 显卡,有这个需求的就别装了,如果是原版 linux 内核的话,就要做好随时滚挂的准备,最近的 5.18 内核更新就会导致 nvidia-5.15 版本驱动失效无法开机(需要在启动选项中添加ibt=off),如果你希望稳定使用,就选择 linux-lts 内核和linux-lts-headers,并安装相应的 nvidia-lts 驱动(后面会有详细说明),不过不用太担心,即便是系统安装完成,你也可以随时切换自己想要的内核版本。
pacstrap /mnt base linux linux-headers linux-firmware base-devel (usbmuxd)或者pacstrap /mnt base linux-lts linux-lts-headers linux-firmware base-devel (usbmuxd)
写入分区表:
genfstab -U /mnt >> /mnt/etc/fstab
开机的时候,系统按照fstab文件的分区信息进行挂载,你也可以修改fstab以达到自动挂载某个磁盘的功能,例如
UUID=86ABB6FEAA91229C /home/XXX/Documents ntfs-3g defaults 0 0
就可以把 UUID 为 86ABB6FEAA91229C 的ntfs分区挂载到 /home/XXX/Documents 下面(PS:双系统用这个方式挂载win盘很爽
然后使用如下命令进入新系统,进入后会显示[root@archiso /]# 。
arch-chroot /mnt
1.7 新系统的配置
1.7.1 安装必要软件包
参考文章给出的命令如下:
pacman -S vim iwd networkmanager ttf-dejavu sudo bluez
我解释一下这都是干嘛的。
- vim:文本编辑器,可替代有neovim,nano,其中nano对新手比较友好,推荐经验较少或者刚入坑的同志使用。
- iwd,networkmanager:用iwd作为nm的backend进行使用。(但是我这样使用在i3下会出现不少问题,比如网络经常自动断,且短时间无法重连等(KDE也会出现,但感觉没有i3频繁,我觉得可能是命令行的原因,安装完成之后卸载掉networkmanager问题解决。另外,如果需要使用网线和usb网络共享,networkmanager必须安装,最好加装一个dhcpcd)
- ttf-dejavu:开源字体
- sudo:用于非root用户暂时获取root权限
- bluez:蓝牙模块
- usbmuxd:参考文章没给这个。现在系统中使用的网络来自于live系统,不装这个的话,重启是无法通过usb连接手机共享网络的,根据个人情况选择,建议安装。
- wqy-zenhei:中文字体,避免进入系统后无法显示中
- dhcpcd:连网线用
- ntfs-3g:挂载ntfs磁盘需要
我最后选择这样安装,所以后续以vim为例。
pacman -S neovim iwd ttf-dejavu sudo bluez usbmuxd networkmanager dhcpcd wqy-zenhei ntfs-3g
neovim和vim的启动命令是不一样的,neovim为“nvim”,vim是“vim”我一般会通过软链接
ln -s /bin/nvim /bin/vimln -s /bin/nvim /bin/vi
将他们软链接起来看,这样的话,通过“vim”“vi”命令也可以启动neovim了。
nano的启动命令是“nano”
1.7.2 一通设置
这一部分都是差不多的,也没啥坑。
1. 设置时区和时间
依次输入下面的命令:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime (设置时区为上海)hwclock --systohc
2. 设置语言
输入“vim /etc/locale.gen”,删除【en_US.UTF-8】和【zh_CN.UTF-8】两项前面的“#”,保存。(如果有其他语言需求也可以自行取消注释,比如台湾地区和港澳地区)
(vim的光标移动、删除和保存退出等命令请另行百度),当然,也可以用nano
输入“locale-gen”,再输入
echo LANG=en_US.UTF-8 >> /etc/locale.conf
,意思是将 "en_US.UTF-8" 追加到 /etc/locale.conf 文件里面,这里不建议使用
echo LANG=zh_CN.UTF-8 >> /etc/locale.conf
这样会使系统语言成为中文,从而导致tty显示中文,但是tty本身是不支持中文的,所以会乱码。而中文的问题,一般会通过修改 ~/.xprofile(DE) 或者 ~/.xinitrc(WM) 进行解决
3. 设置root用户的密码
输入“passwd”,再输入密码,密码不会有任何显示,但是是输进去了的。
4. 设置主机名(系统名)
输入“echo {你要设置的主机名,随便一个,不要大括号,不要中文名} >> /etc/hostname”,例如
echo sukipai >> /etc/hostname
主机名会显示在bash中,例如
[sukipai@sukipai ~]$
意为我用sukipai(前)用户登陆了名为sukipai(后)的主机。
5. 设置网络
输入“vim /etc/hosts”,把下面的文字打进去,保存(以sukipai为例)。(vim的光标移动、删除和保存退出等命令请另行百度。)
127.0.0.1 localhost::1 localhost127.0.1.1 sukipai.localdomain sukipai
1.7.3 安装引导并重启系统
与参考文章中安装引导有一些差异,输入下面的命令:
pacman -S grub efibootmgr (安装grub)grub-install /dev/nvme0n1 (超级大坑,注意选择的是整个硬盘,而不是boot分区)
一定要注意这个地方,是安装在整个磁盘,而不是boot分区。
创建grub配置文件
grub-mkconfig -o /boot/grub/grub.cfg
重启系统(请再次确认你是否需要,且已经安装usbmuxd):
exit (退出新系统,回到live系统)umount -R /mnt (递归卸载 /mnt 中的磁盘)reboot (重启)
重启之后登录到root账户,密码就是你之前设置的。
1.8 打开联网服务和蓝牙
1. 首先激活服务
systemctl start iwd.servicesystemctl enable iwd.servicesystemctl start systemd-resolved.servicesystemctl enable systemd-resolved.servicesystemctl enable bluetooth.servicesystemctl enable NetworkManagersystemctl enable dhcpcd
2. 配置网络连接和DNS
输入“vim /etc/iwd/main.conf”,把下面的文字打进去,保存。
[General]EnableNetworkConfiguration=trueNameResolvingService=systemd
3. 安装了netwokmanager的配置
如果安装了networkmanager,则需要将backend服务修改为iwd,总体上iwd比wpa好用很多。
输入“vim /etc/NetworkManager/NetworkManager.conf”,把下面的文字打进去,保存。(vim的光标移动、删除和保存退出等命令请另行百度。)
[device]wifi.backend=iwd
如果只安装networkmanager而不安装iwd的话,是不需要这一步的,nm会使用默认的wpa。(猜测)
然后重启,并安装先前的联网方法进行联网,并更换mirrorlist中的软件源(如果前面更换过了,这里就不用更换了),这里不再赘述。
1.9 安装一些硬件设备
- CPU编码
pacman -S intel-ucode (intel的cpu装这个)pacman -S amd-ucode (amd的cpu装这个)
注意是 CPU 编码,不是显卡
2. 显卡驱动
pacman -S xf86-video-intel(Intel核心显卡驱动,用Intel核显就装,否则不用装)pacman -S mesa nvidia(-lts) nvidia-settings nvidia-dkms nvidia-utils nvidia-prime(nvidia显卡驱动,用nvidia显卡就装,否则不用装)pacman -S xf86-video-amdgpu (AMD显卡驱动,用amd显卡的就装)
这里举两个例子,我的笔记本,i7-11代,搭配intel核显以及3050显卡,所以安装前两个。我的台式机,e3-1230垃圾CPU,搭配HD6950显卡,所以装第三个。nvidia-dkms 与 nvidia-lts 不兼容,如果装lts驱动的话无需安装dkms 。
注意:nvidia驱动的安装与前面选择的内核有关,如果你安装的是linux-lts内核,那么需要将nvidia更换为nvidia-lts,linux-zen不支持nvidia显卡(务必对号入座),如果你选择安装新内核,则需要修改一下ibt=off ,否则无法进入系统
3. 声卡驱动
在我的设备上,只需这样安装
pacman -S pipewire (alsa-utils) pipewire-pulse pipewire-jack pipewire-alsa
就可以了,使用参考文章中的 pulseaudio 也是可以的。alsa-utils 用于终端下的音量调节,如果你使用KDE,Gnome等桌面环境,可以不装这个。
使用pulseaudio的话,需要进行一下配置(我没试过),pipewire则不用:
输入“vim /etc/modprobe.d/disable_dmic.conf”,把下面的文字打进去,保存。
options snd_hda_intel dmic_detect=0
1.10 创建一个用户
仍然以 sukipai 为例
useradd -m -G wheel -s /bin/bash sukipai (添加一个名为sukipai的用户进入wheel用户组,并将bash作为启动命令)passwd sukipai (设置密码,和设置root是类似的)
然后输入
visudo
如果报错的话(应该不会),就改为
vim /etc/sudoers
找到如下内容,取消掉“# %wheel ALL=(ALL:ALL) ALL”前面的“# ”
## User privilege specification##root ALL=(ALL:ALL) ALL## Uncomment to allow members of group wheel to execute any command# %wheel ALL=(ALL:ALL) ALL## Same thing without a password# %wheel ALL=(ALL:ALL) NOPASSWD: ALL
这里说一下,取消“# %wheel ALL=(ALL:ALL) NOPASSWD: ALL”前的“# ”也是可以的,区别就在于,取消这一行后,wheel组的用户使用 sudo 就不用输密码了,如果你是新手,不建议这么做,如果你是老鸟,可以考虑取消NOPASSWD 所在的这一行。(我取消的是NOPASWD这行,图方便)
下面还有个sudo组的选项,但是我没有试过加入sudo组是什么效果,这里就不多说了。
1.11 重启系统
reboot
此时的系统已经基本可以使用了,但是还没有配置图形界面,如果你不需要图形界面,就只需登陆sukipai用户就可以使用了。
2. 图形界面安装
!!!注意:从这里开始,如果登陆的是普通用户,则所有的pacman和systemctl都需要 sudo , 如果嫌麻烦,可以先在 ~/.bashrc 中添加 “alias pacman='sudo pacman'和alias systemctl='sudo systemctl'”,我这里就不多写sudo了。如果提示需要权限,同样加sudo即可。所以这部分安装建议登陆root用户。
首先需要选择X11或者是Wayland,现在来看Wayland是比较先进的,但为了方便和兼容性还是用X11吧。
pacman -S xorg
这个是必须安装的,后面的DE和WM都是基于x服务。
2.1 KDE
特点:美观,比较稳定,自定义功能强大,配置方便(最推荐)(括号中为推荐的可替代品)
pacman -S plasma sddm konsole dolphin kate ark okular spectacle yay
plasma:桌面环境
sddm:登录管理器,KDE配套的
konsole:kde下的终端,功能多但是比较慢,也可以使用其他终端
(alacritty,kitty)
kate:文本编辑器,很强大,但是资料比较少,需要自己配置。我感觉比vscode好用很多,但是没火起来,很可惜。
(vim,neovim,gvim,nano,gedit,sublime,vscode,atom)(sublime,vscode需要在AUR源或者Clansty源中安装)
ark:解压与压缩
okular:PDF查看器
(wps,edge,chrome,zotero……)
spectacle:截图工具,这三件套配合KDE很方便
安装完成之后,需要启用sddm
systemctl enable sddm
重启即可
2.2 Gnome
特点:自定义功能丰富(但是被阻隔了),
pacman -S gnomesystemctl enable gdm
重启即可,部分软件仍然可以用上述软件替代
2.3 i3
pacman -S xorg-xinit xorg-server (窗口管理器一般不会使用登陆管理器(dm),所以xorg-xinit是必要的)pacman -S i3 (安装i3,或者i3-gaps)
由于窗口管理器配置比较复杂,所以这里只讲最基本的安装。
在此之前,先补充一下用户登陆的时候发生了什么事。
- 用户输入账户sukipai以及密码,正确。
- tty会解释执行用户目录下的 .bashrc 文件(如果你用的zsh,则读取.zshrc,以此类推),相当于手动执行source ~/.bashrc ,(~ 表示用户目录,我这里为/home/sukipai/)
- 此时登陆到了 tty1
- 你想要进入i3,则需要执行 startx 命令
- startx 会执行 ~/.xinitrc 中的内容
所以我们的逻辑就很清楚了,如果你想要自动登陆i3,就需要修改.bashrc中的逻辑,而startx时要做的事情,就需要写在 ~/.xinitrc 文件中。
export LANG=zh_CN.UTF-8 # 将语言环境设置为中文xrdb -merge ~/.Xresources # 读取~/.Xresources 文件中的信息,我用来修改dpiexec i3 # 进入i3wm
为什么要把“export LANG=zh_CN.UTF-8”写在 ~/.xinitrc 里面,是因为,如果你不想进入图形界面,那么你就会停留在 tty,而 tty 本身是不支持中文的。此时,LANG的值仍然是之前所设置的“en_US.UTF-8”就不会出现乱码的问题,如果把这句话写在 ~/.bashrc 中,那么每次一登陆就会将语言修改为中文,导致tty 永远处在乱码状态。
说明一下.Xresources文件,这个文件可以用来调节dpi(默认96),适合高分辨率屏幕,加入以下内容即可
Xft.dpi: 192
里面的数字填 ( 放大倍数 ) * 96 就可以了,比如192就是放到200%,给个简单参考
- 15.5寸笔记本,1920x1080,填144
- 15.5寸笔记本,2560x1440,填192
- 如果觉得太大了,可以调小, 建议为25%的倍数
那么如何设置自动进入i3桌面呢?很简单,将一下代码贴在 ~/.bashrc 中即可
if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then exec startxfi
这样我们就拥有了一个i3wm了。
3. 后续的配置
KDE,gnome,i3 等桌面环境的配置,就不在这里赘述了,每个人的需求不一样。
3.1 中文输入法
推荐使用 fcitx5
sudo pacman -S fcitx5 fcitx5-chinese-addons fcitx5-gtk fcitx5-qt fcitx5-configtool
然后添加环境变量
sudo vim /etc/environmentGTK_IM_MODULE=fcitxQT_IM_MODULE=fcitxXMODIFIERS=@im=fcitxINPUT_METHOD=fcitxSDL_IM_MODULE=fcitxGLFW_IM_MODULE=ibus
然后设置开机启动即可(桌面环境不同,方法也不同),这里提供一个简单的思路。
tty 下面是不需要中文输入法的(也用不了),所以修改 ~/.xinitrc ,添加代码
fcitx5 -d & (后台运行fcitx5,且开机自启)
wiki上的描述
注意:如果您使用的桌面环境是兼容 XDG 的(例如 KDE、GNOME、Xfce、LXDE等),则 无需 此步骤(添加自启)。如果使用i3、awesome等窗口管理器,需要在其脚本中添加 Fcitx5 以实现自启动。例如,如果您使用 i3 或 sway ,可以在配置文件中添加exec --no-startup-id fcitx5 -d如果使用dwm,则需要添加 autostart 补丁。在 ~/.dwm/autostart.sh 中添加fcitx5 -d
根据需求自取即可。
3.2 添加archlinuxcn源,并配置yay
在装系统时我们已经将 /etc/pacman.d/mirrorlist 换为了国内源(有时候会玄学变回国外源,需要自己查看一下),所以只需要添加archlinuxcn即可。
使用方法:在 /etc/pacman.conf 文件末尾添加以下两行:
[archlinuxcn]SigLevel = Optional TrustAllServer = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
如果SigLevel 那一行不加,后面安装 archlinuxcn-keyring 时不会报错的话,可以不加,但是我报错了所以加上了。
这里有一个坑,要取消这两行前面的注释,不然有一部分32位包无法安装。
84 # [muiltilib] 85 # Include = /etc/pacman.d/mirrorlist
之后安装 archlinuxcn-keyring 包导入 GPG key。
sudo pacman -Syyusudo pacman -S archlinuxcn-keyring
然后运行
sudo pacman -S yay
安装yay即可,现在yay不能换国内源了,所以无需多余配置。电信网使用yay容易连不上,建议使用联通。
安装终端字体,推荐nerd-fonts-hack 需要anchlinuxcn
pacman -S nerd-fonts-hack
3.3 配置zsh(可选)
zsh是一个非常好用的解释器,配置也不复杂。
这里就不多赘述,直接开搞
sudo pacman -Sy zsh zsh-autosuggestions zsh-syntax-highlighting zsh-theme-powerlevel10k zsh-completions(安装zsh以及相应组件)chsh -s /usr/bin/zsh (修改为默认解释器)
然后把 ~/.bashrc 中的所有内容迁移到 ~/.zshrc ,没有就自己创建,并加入
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zshsource /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zshsource /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme
然后重启就可以使用了,可以删除掉 ~/.bashrc 和 ~/.bash_history 中的内容,因为已经不用了。
再贴一份好用的配置文件,直接复制所有内容到 ~/.zshrc 最后就行了,然后按需修改,主要修改 alias 部分,以及删去ibus输入法相关配置。
链接里面的内容不太好复制,我这里直接贴上来吧(一般来说,alias和function用的比较多,其他内容不改就行)
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zshsource /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zshsource /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme#color{{{autoload colors && colors#命令别名 {{{alias cp='cp -i'alias mv='mv -i'alias rm='rm -i'alias ls='ls -a --color=auto'alias grep='grep --color=auto'#终端代理function proxy_on() { export http_proxy=http://127.0.0.1:7890 export https_proxy=$http_proxy echo -e "终端代理已开启。"}function proxy_off(){ unset http_proxy https_proxy echo -e "终端代理已关闭。"}for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; doeval _$color='%{$terminfo[bold]$fg[${(L)color}]%}'eval $color='%{$fg[${(L)color}]%}'(( count = $count + 1 ))doneFINISH="%{$terminfo[sgr0]%}"#}}}#命令提示符RPROMPT=$(echo "$RED%D %T$FINISH")PROMPT=$(echo "$CYAN%n@$YELLOW%M:$GREEN%/$_YELLOW>$FINISH ")#PROMPT=$(echo "$BLUE%M$GREEN%/#$CYAN%n@$BLUE%M:$GREEN%/$_YELLOW>>>$FINISH ")#标题栏、任务栏样式{{{case $TERM in (*xterm*|*rxvt*|(dt|k|E)term)precmd () { print -Pn "\e]0;%n@%M//%/\a" }preexec () { print -Pn "\e]0;%n@%M//%/\ $1\a" };;esac#}}}#编辑器export EDITOR=vim#关于历史纪录的配置 {{{#历史纪录条目数量export HISTSIZE=10000#注销后保存的历史纪录条目数量export SAVEHIST=10000#历史纪录文件export HISTFILE=~/.zhistory#以附加的方式写入历史纪录setopt INC_APPEND_HISTORY#如果连续输入的命令相同,历史纪录中只保留一个setopt HIST_IGNORE_DUPS#为历史纪录中的命令添加时间戳setopt EXTENDED_HISTORY #启用 cd 命令的历史纪录,cd -[TAB]进入历史路径setopt AUTO_PUSHD#相同的历史路径只保留一个setopt PUSHD_IGNORE_DUPS#在命令前添加空格,不将此命令添加到纪录文件中#setopt HIST_IGNORE_SPACE#}}}#每个目录使用独立的历史纪录{{{cd() {builtin cd "$@" # do actual cdfc -W # write current history filelocal HISTDIR="$HOME/.zsh_history$PWD" # use nested folders for historyif [ ! -d "$HISTDIR" ] ; then # create folder if neededmkdir -p "$HISTDIR"fiexport HISTFILE="$HISTDIR/zhistory" # set new history filetouch $HISTFILElocal ohistsize=$HISTSIZEHISTSIZE=0 # Discard previous dir's historyHISTSIZE=$ohistsize # Prepare for new dir's historyfc -R #read from current histfile}mkdir -p $HOME/.zsh_history$PWDexport HISTFILE="$HOME/.zsh_history$PWD/zhistory"function allhistory { cat $(find $HOME/.zsh_history -name zhistory) }function convhistory {sort $1 | uniq |sed 's/^:[0−9]∗:[0-9]*;.∗/\1::::::\2/' |awk -F"::::::" '{ $1=strftime("%Y-%m-%d %T",$1) "|"; print }'}#使用 histall 命令查看全部历史纪录function histall { convhistory =(allhistory) |sed '/^.\{20\} *cd/i\\' }#使用 hist 查看当前目录历史纪录function hist { convhistory $HISTFILE }#全部历史纪录 top50function top50 { allhistory | awk -F':[ 0-9]*:[0-9]*;' '{ $1="" ; print }' | sed 's/ /\n/g' | sed '/^$/d' | sort | uniq -c | sort -nr | head -n 50 }#}}}#杂项 {{{#允许在交互模式中使用注释 例如:#cmd #这是注释setopt INTERACTIVE_COMMENTS #启用自动 cd,输入目录名回车进入目录#稍微有点混乱,不如 cd 补全实用setopt AUTO_CD#扩展路径#/v/c/p/p => /var/cache/pacman/pkgsetopt complete_in_word#禁用 core dumpslimit coredumpsize 0#Emacs风格 键绑定bindkey -e#bindkey -v#设置 [DEL]键 为向后删除#bindkey "\e[3~" delete-char#以下字符视为单词的一部分WORDCHARS='*?_-[]~=&;!#$%^(){}<>'#}}}#自动补全功能 {{{setopt AUTO_LISTsetopt AUTO_MENU#开启此选项,补全时会直接选中菜单项#setopt MENU_COMPLETEautoload -U compinitcompinit#自动补全缓存#zstyle ':completion::complete:*' use-cache on#zstyle ':completion::complete:*' cache-path .zcache#zstyle ':completion:*:cd:*' ignore-parents parent pwd#自动补全选项zstyle ':completion:*' verbose yeszstyle ':completion:*' menu selectzstyle ':completion:*:*:default' force-list alwayszstyle ':completion:*' select-prompt '%SSelect: lines: %L matches: %M [%p]'zstyle ':completion:*:match:*' original onlyzstyle ':completion::prefix-1:*' completer _completezstyle ':completion:predict:*' completer _completezstyle ':completion:incremental:*' completer _complete _correctzstyle ':completion:*' completer _complete _prefix _correct _prefix _match _approximate#路径补全zstyle ':completion:*' expand 'yes'zstyle ':completion:*' squeeze-shlashes 'yes'zstyle ':completion::complete:*' '\\'#彩色补全菜单eval $(dircolors -b)export ZLSCOLORS="${LS_COLORS}"zmodload zsh/complistzstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'#修正大小写zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}'#错误校正zstyle ':completion:*' completer _complete _match _approximatezstyle ':completion:*:match:*' original onlyzstyle ':completion:*:approximate:*' max-errors 1 numeric#kill 命令补全compdef pkill=killcompdef pkill=killallzstyle ':completion:*:*:kill:*' menu yes selectzstyle ':completion:*:*:*:*:processes' force-list alwayszstyle ':completion:*:processes' command 'ps -au$USER'#补全类型提示分组zstyle ':completion:*:matches' group 'yes'zstyle ':completion:*' group-name ''zstyle ':completion:*:options' description 'yes'zstyle ':completion:*:options' auto-description '%d'zstyle ':completion:*:descriptions' format $'\e[01;33m -- %d --\e[0m'zstyle ':completion:*:messages' format $'\e[01;35m -- %d --\e[0m'zstyle ':completion:*:warnings' format $'\e[01;31m -- No Matches Found --\e[0m'zstyle ':completion:*:corrections' format $'\e[01;32m -- %d (errors: %e) --\e[0m'# cd ~ 补全顺序zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'#}}}##行编辑高亮模式 {{{# Ctrl+@ 设置标记,标记和光标点之间为 regionzle_highlight=(region:bg=magenta #选中区域special:bold #特殊字符isearch:underline)#搜索时使用的关键字#}}}##空行(光标在行首)补全 "cd " {{{user-complete(){case $BUFFER in"" ) # 空行填入 "cd "BUFFER="cd "zle end-of-linezle expand-or-complete;;"cd --" ) # "cd --" 替换为 "cd +"BUFFER="cd +"zle end-of-linezle expand-or-complete;;"cd +-" ) # "cd +-" 替换为 "cd -"BUFFER="cd -"zle end-of-linezle expand-or-complete;;* )zle expand-or-complete;;esac}zle -N user-completebindkey "\t" user-complete#}}}##在命令前插入 sudo {{{#定义功能sudo-command-line() {[[ -z $BUFFER ]] && zle up-history[[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"zle end-of-line #光标移动到行末}zle -N sudo-command-line#定义快捷键为: [Esc] [Esc]bindkey "\e\e" sudo-command-line#}}}#[Esc][h] man 当前命令时,显示简短说明alias run-help >&/dev/null && unalias run-helpautoload run-help#历史命令 top10alias top10='print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10'#}}}#路径别名 {{{#进入相应的路径时只要 cd ~xxxhash -d A="/media/ayu/dearest"hash -d H="/media/data/backup/ayu"hash -d E="/etc/"hash -d D="/home/ayumi/Documents"#}}}##for Emacs {{{#在 Emacs终端 中使用 Zsh 的一些设置 不推荐在 Emacs 中使用它#if [[ "$TERM" == "dumb" ]]; then#setopt No_zle#PROMPT='%n@%M %/#>>'#alias ls='ls -F'#fi#}}}#{{{自定义补全#补全 pingzstyle ':completion:*:ping:*' hosts 192.168.1.{1,50,51,100,101} www.google.com#补全 ssh scp sftp 等#zstyle -e ':completion::*:*:*:hosts' hosts 'reply=(${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) /dev/null)"}%%[# ]*}//,/ })'#}}}#{{{ F1 计算器arith-eval-echo() {LBUFFER="${LBUFFER}echo \$(( "RBUFFER=" ))$RBUFFER"}zle -N arith-eval-echobindkey "^[[11~" arith-eval-echo#}}}####{{{function timeconv { date -d @$1 +"%Y-%m-%d %T" }# }}}zmodload zsh/mathfuncautoload -U zsh-mime-setupzsh-mime-setupsetopt EXTENDED_GLOB#autoload -U promptinit#promptinit#prompt redhatsetopt correctallautoload compinstall#漂亮又实用的命令高亮界面setopt extended_globTOKENS_FOLLOWED_BY_COMMANDS=('|' '||' ';' '&' '&&' 'sudo' 'do' 'time' 'strace')recolor-cmd() {region_highlight=()colorize=truestart_pos=0for arg in ${(z)BUFFER}; do((start_pos+=${#BUFFER[$start_pos+1,-1]}-${#${BUFFER[$start_pos+1,-1]## #}}))((end_pos=$start_pos+${#arg}))if $colorize; thencolorize=falseres=$(LC_ALL=C builtin type $arg 2>/dev/null)case $res in*'reserved word'*) style="fg=magenta,bold";;*'alias for'*) style="fg=cyan,bold";;*'shell builtin'*) style="fg=yellow,bold";;*'shell function'*) style='fg=green,bold';;*"$arg is"*)[[ $arg = 'sudo' ]] && style="fg=red,bold" || style="fg=blue,bold";;*) style='none,bold';;esacregion_highlight+=("$start_pos $end_pos $style")fi[[ ${${TOKENS_FOLLOWED_BY_COMMANDS[(r)${arg//|/\|}]}:+yes} = 'yes' ]] && colorize=truestart_pos=$end_posdone}check-cmd-self-insert() { zle .self-insert && recolor-cmd }check-cmd-backward-delete-char() { zle .backward-delete-char && recolor-cmd }zle -N self-insert check-cmd-self-insertzle -N backward-delete-char check-cmd-backward-delete-char
3.4 安装必要软件
这个就自己按需安装了,根据评论区建议,可以添加一个pacman.ltd源,里面有很多常用的软件,matlab和mathmatica都有,直接 "vim /etc/pacman.conf",在后面添加:
[Clansty]SigLevel = NeverServer = https://repo.lwqwq.com/archlinux/$archServer = https://pacman.ltd/archlinux/$archServer = https://repo.clansty.com/archlinux/$arch
vscode、matlab、texlive-full之类的东西都可以直接pacman安装了。
4 总结
本来没想要写这么多的,但是写了就。。。。。应该还算比较详细了,罗列了很多教程里面的坑,资料来源几乎都是wiki,流程主要参考开头的文章,希望可以帮助到大家。我很喜欢 archlinux ,能高兴能出一份力。
然后总结一下需要注意的坑点
- pacman务必先换源
- 如果需要有线网和usb共享的话,iwd和networkmanager必须安装,且在第一次重启之前装好。如果只需要无线网,可以卸载networkmanager,只使用iwd
- grub-install 是对整个硬盘,不是boot分区
- KDE有些组件比较臃肿,是可以替换的。
- 输入法不要再用旧版的fcitx4
- boot分区挂载到 /boot/efi 而不是 /efi
- usb共享网络安装时,提前安装好usbmuxd,networkmanager
- 如果需要开启sshd服务,请使用 sudo systemctl enble sshd,否则别人连不上你电脑
- dhcpcd是网线用户需要安装的必备组件
- 不取消注释 /etc/pacman.conf 中的 [multilib] 行,virtualbox装不上。