ArchLinux安装指南

ArchLinux是一款灵活、强大、可定制的Linux发行版,提供丰富的软件包和工具,支持滚动更新和多种桌面环境,拥有庞大的社区支持和方便的包管理器,适合各种用户需求和使用场景。Endeavour 是一个基于ArchLinux的轻量级和用户友好的发行版,预装了桌面环境和预配置的软件包,旨在提供一个无忧的ArchLinux体验。本手册给出ArchLinux及其衍生版官方网站, 提供完整可靠的安装流程和很多典型问题的有效解决方案,如果您追求省心,开箱即用,请安装Endeavour, 如果您追求简洁的极致体验,请选择ArchLinux。由于个人能力有限,出现错误在所难免,欢迎反馈问题,交流学习共同进步。

版本选择

ArchLinux的安装镜像是没有安装桌面环境的,只安装了一些必备的软件,它的安装需要在命令行中进行,如果您已经有一定的Linux基础,那建议您直接按照本教程安装ArchLinux。如果您是一名初学者,不熟悉Linux命令,只要您尝试过UbuntuDebianLinuxMintLinuxDeepin等发行版,那您完全可以选择ArchLinux的衍生版Endeavour, Endeavour 让你有机会学习 Arch,而无需同时学习 EFI、驱动搜索和安装(看着你的 nVidia)、桌面环境/窗口管理器、显示管理器等。它可以一次性设置好所有东西,让你有时间按照自己的节奏学习 Arch Linux 的内部工作。由于图形化安装的简便性,本文不打算详述,直接参考Endeavour的官方文档(相当详细):BTRFS InstallationEndeavour Wiki

刚刚入门的小白往往选择宣传的比较多的Ubuntu,但是我想告诉您,尝试一下其他发行版,您会找到更好的。下面的文章可以帮您做出选择:

从运行速度的角度讲,执行systemctl list-unit-files --state=enabled --no-pager得到默认情况下运行的服务和守护进程的数量,Ubuntu 为90个,Manjaro 为24个, Endeavour 为 17个,而按我的教程配置好的 ArchLinux 仅11个,所以原生的ArchLinux才是最佳选择。


ArchLinux安装流程

制作启动盘

WiFi联网

  • 如果是有线网,且网络已经连通,时,则已经联网成功,可以跳过。
  • 在校园里使用校园网是需要验证的,最佳的做法是用手机联网, 使用数据线连接电脑USB接口, 打开手机: 设置连接移动热点和网线共享USB网络共享
  • 检测联网成功:ping www.baidu.com 看到较快的返回值,证明已经联网成功。
查看网卡
1
2
iwctl
device list

执行完以上命令后,获得无线网卡信息:

1
2
3
4
5
                                   Devices                                   *
--------------------------------------------------------------------------------
Name Address Powered Adapter Mode
--------------------------------------------------------------------------------
wlan0 d0:ab:d5:c0:08:00 on phy0 station
转接无线网线
1
2
3
station <无线网卡名> scan
station <无线网卡名> get-networks
station <无线网卡名> connect <网络名>
接下来他会让你输入wifi密码,输入完毕,再执行命令exit退出,网络就连接好了。

硬盘分区

下面给出的是Windwos11Archlinux双系统的安装方案,分区后应当先安装好Windows11再安装Archlinux,这样在构建GrubLinux可以自动探测到windows的启动引导菜单,反之Windwos11安装程序会覆盖LinuxGrub,因此

分区方案

执行lsblk 得到分区结果
1
2
3
4
5
6
7
8
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 953.9G 0 disk
├─nvme0n1p1 259:1 0 501M 0 part /boot/efi
├─nvme0n1p2 259:2 0 100G 0 part /
├─nvme0n1p3 259:3 0 8G 0 part [SWAP]
├─nvme0n1p4 259:4 0 790G 0 part /home
├─nvme0n1p5 259:5 0 16M 0 part
└─nvme0n1p6 259:6 0 55.4G 0 part

上图是我当前的分区方案,各部分作用为

  1. nvme0n1p1/boot/efi分区,安装grub、存放Linux kernel 以及 initrd 映像。这些都是启动时必需的东西,单独存在 boot 区便于管理。
  2. nvme0n1p2/分区, 安装Linux系统及其默认软件。
  3. nvme0n1p3swap分区,当内存不够时充当虚拟内存, Linux的swap分区格式为内存交换做过专门优化。
  4. nvme0n1p4/home分区,是用户的文档、视频等文件存放的目录,对于单用户而言这部分要尽可能设置大一些。
  5. nvme0n1p5nvme0n1p6 是安装windows11留出的空间,其中p5windwos11安装过程中自动生成的,由于安装windwos11的空间不允许小于54G,所以给了它55.4G, 由于我的电脑安装了单独的2242 m2硬盘,windwos11可以自动识别,所以只给windwos11留一个可以安装启动的空间就可以了。

格式化和挂载分区

1
2
3
4
5
6
7
8
9
10
mkfs.fat -F32 /dev/nvme0n1p1
mkfs.ext4 /dev/nvme0n1p2
mkswap /dev/nvme0n1p3
mkfs.ext4 /dev/nvme0n1p4
mount /dev/nvme0n1p2 /mnt/
mkdir /mnt/boot
mkdir /mnt/boot/efi
mount /dev/nvme0n1p1 /mnt/boot/efi
mkdir /mnt/home
mount /dev/nvme0n1p4 /mnt/home

如果您不熟悉命令行分区操作,可以启动一个Live发行版,使用其内置的磁盘分区工具在图形界面下分区,然后再转回到文本安装Archlinux。推荐基于ArchlinuxManjaro,启动镜像后使用Gparted来分区即可。

如果是重装系统,那,因为里面保存有Windows的启动引导程序,直接挂载就可以了。

换国内源

  1. 打开官方镜像源网址:https://archlinux.org/mirrors/

  2. 点击第二列Country, 于是各国家可用镜像按字母顺序排列,找到China

  3. 编辑/etc/pacman.d/mirrorlist添加国内源即可

由于换源属于一个使用频率相当低的操作,所以建议使用手动配置。

  1. 国内常用的:选择在,并且是位于中国的12个镜像,然后根据下载速度进行排序,最后将结果覆写到 /etc/pacman.d/mirrorlist 文件

    切换为国内最快的12个ArchLinux源
    1
    2
    reflector --verbose -c China --latest 12 --sort rate --threads 100 --save /etc/pacman.d/mirrorlist
    pacman -Syu

  2. 需要全球最新:下载速度进行排序,并筛选出前5个最近同步的镜像,最后将结果覆写到 /etc/pacman.d/mirrorlist 文件

    全球最新
    1
    2
    reflector --verbose --latest 5 --sort rate --save /etc/pacman.d/mirrorlist
    pacman -Syu

全球最新可以让您将获得最新的系统,但是并不意味在国内速度最快,因为国内镜像源肯定比国外快,但是却不一定是最新的,如果选择国内常用的,那您将获得国内最新的系统。二选一,请您自己决定。 2024年01月19日, 在更新系统时发现reflector返回错误error: no mirrors found, 在问题没有被官方解决前可以使用手动方法切换镜像,对于低频率操作影响不大。

安装系统

1
2
pacstrap /mnt base base-devel linux linux-firmware
genfstab -U /mnt >> /mnt/etc/fstab

至此系统安装好,由于还没有配置,暂时无法使用。

设置系统

切换到安装在硬盘中的系统

1
arch-chroot /mnt

安装必要软件

1
pacman -S grub efibootmgr vim neovim iwd dhcpcd sudo networkmanager os-prober fastfetch

fastfetch 在终端上输出本机信息,另外还有 screenfetch 和 neofetch, 因为 fastfetch 是用 C 语言写的,所以速度极快。

启用网络

1
systemctl enable dhcpcd NetworkManager iwd

设置root密码

1
passwd

新增用户

1
2
useradd -m -G wheel <用户名>
passwd <用户名>

加入sudo

1
EDITOR=vim visudo

找到 %wheel All=(ALL:ALL) ALL把前面的注释去掉

安装grub引导

1
vim /etc/default/grub

找到 GRUB_DISABLE_OS_PROBER=false 去掉前面的注释(应该是文件的最后一行)

安装引导

1
2
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id= ArchLinux
grub-mkconfig -o /boot/grub/grub.cfg

设置语言

1
vim /etc/locale.gen

去掉 en_US.UTF-8zh_CN.UTF-8前的注释,再执行

1
locale-gen

设置时区

1
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

设置硬件时间

1
hwclock --systohc --utc

安装桌面环境

作为一名资深Linux使用都,我推荐大家使用Plasma5, 目前它已经相当稳定。最初我从Plasma4转到Gnome3是因为Plasma4经常崩溃,但是到了Plasma5就稳定了。在使用Gnome3的过程中,发现它也很优秀,它很干净整洁,没有过多的配置选项,美观独特,但是想要提高工作效率还必须安装一些Gnome3的插件才行,比如hide-top-bardash-to-dock,这两个是必备插件,但是这也成为了它的致命缺点,每次Gnome3大版本升级时,一大批插件就会挂掉,而且不能做到同步更新,插件失效的空白期是相当影响工作效率的。比如hide-top-bar到现在已经过去二个月了,还没有适配Gnome3 V45, 这也是直接导致我选择KDE-Plasma5的原因,所以推荐大家工作的话还是使用KDE-Plasma5吧,因此我把它放在了默认标签打开。

安装KDE-Plasma
1
2
3
4
sudo pacman -S xorg plasma-desktop kwallet-pam plasma-nm plasma-pa powerdevil firefox spectacle gwenview dolphin konsole
sudo pcaman -S sddm sddm-kcm
sudo systemctl enable sddm.service
sudo systemctl enable NetworkManager
  • Simple Desktop Display Manager (SDDM)是一个显示管理器。它是KDE PlasmaLXQt桌面环境推荐的显示管理器。
  • sddm-kcm 软件包(包含在plasma包组 用户组)提供了一个图形用户界面以在Plasma系统设置中配置SDDM
  • SDDM-ArchWiki
安装Gnome3
1
2
3
sudo pacman -S gnome gdm wqy-microhei
sudo echo LANG=zh_CN.UTF-8 > /etc/locale.conf
sudo systemctl enable gdm

安装Nvidia显卡

安装显卡

1
sudo pacman -S  dkms  nvidia-dkms nvidia-utils glxgears

注意:在我安装完ArchLinux后,原本按nvidia官方的方法配置了显卡,但是发现系统启动后不能正常加载模块,在2024-01-01升级完系统后,更是无法启动系统,这让我误以为滚挂系统但问题绝对不会是nvidia官方显卡的使用方式,但是排查下来发现问题确实还真是它。在没有足够时间研究这个问题的时候,我决定安装Endeavour,结果发现表现良好!于是直接借用了Endeavour的配置方式,使用dkms的方式使用nvidia, 详细技术请参考:DKMSglxgears命令会出现一个转动的齿轮,用来测试独立显卡是否工作。经测试均正常工作。此命令没有实质性作用,测试完成后可以删除。

安装电源管理软件

Endeavour的默认电源管理

1
sudo pacman -S power-profiles-daemon

高级电源管理工具TLP

对于笔记本电脑而而言,需要安装TLP,否则会出现电源消耗过大,风扇逛转,睡眠或休眠后无法唤醒等问题,特别是睡眠无法唤醒问题会严重影响使用体验!下面根据TLP官网记录具体操作步骤:

  1. 安装软件

    1
    2
    sudo pacman -S tlp tlp-rdw smartmontools
    paru --skipreview --noconfirm -S tp_smapi-dkms

  2. 启动服务

    1
    2
    sudo systemctl enable tlp.service
    sudo systemctl enable NetworkManager-dispatcher.service

  3. 屏蔽与TLP冲突的服务

    1
    sudo systemctl mask systemd-rfkill.service systemd-rfkill.socket

ThinkPads only: External Kernel Modulestp_smapi, 显示tlp-stat中的S.M.A.R.T数据smartmontools. 在2024年01月04日发现系统又一次提示登录模块错误,于是判断为这个外加的tp_smapi, 本想直接删除这个模块,但是使用paru找到了其dkms版本,于是通过paru安装了tp_smapi-dkms, 重启后发现不再有模块登录失败的提示。

ThinkPad-T490 识别M2. 2248固态硬盘

在安装好TLP之后解决了ArchLinux无法从睡眠中唤醒的问题,意外的部分解决了M2. 2248固态硬盘的识别问题。说其部分解决,因为系统正常启动后并不识别这个外加于WWAN口上的固态硬盘,其在睡眠后再唤醒,文件管理器Dolphin左侧就可以识别出此硬盘。在Windows下启动后就是识别的,而在Linux下部分的识别也是一大进步。

关于这个问题,或许是系统启动机制导致的,Linux启动时会扫描硬盘识别硬件,但是这个WWAN口本是一个无线网卡槽,所以不是标准设计,系统就没有识别。但是,睡眠后再唤醒,这期间电脑肯定又触发了某一个操作,此操作使得系统识别了这个M2. 2248固态硬盘,只是目前我还没有确定是哪一个操作,如果把这个操作添加到开机启动中,那么这个问题也就完全解决了。当前时间, 先记录下这个问题,待后面研究透后,再来修改。

安装蓝牙服务

KDE-Plasma5 配置BlueTooth

1
2
3
sudo pacman -S --needed --noconfirm bluez bluez-utils pipewire-pulse bluedevil
sudo systemctl enable bluetooth.service
sudo systemctl start bluetooth.service

以前的教程中安装的pulseaudio-bluetooth与现在pipewire-pulse冲突,但是当前的pipewire-pulse是自动安装上的,所以从依赖角度讲它是最新的,因此不准备删除,经测试确实效果很好。

Gnome3 配置BlueTooth

1
sudo systemctl enable bluetooth.service

上述命令是启动蓝牙服务,archlinux 默认不启用蓝牙服务。然后修改蓝牙配置文件/etc/bluetooth/main.conf,找到AutoEnable=true 取消注释,使其默认启动蓝牙服务。

安装fwupd升级系统固件()

ThinkPad 可以用fwupd来更新固件,如果您的电脑可以正常工作,请勿执行此操作。

1
2
3
sudo pacman -S fwupd
sudo fwupdmgr get-updates
sudo fwupdmgr update

上述第一行是安装软件fwupd, 第二行查看是否存在更新,如果存在更新,则通过第三行的命令来更新固件,注意更新固件时请保持电脑连接电源。

2023年12月29日, 我执行了固件升级命令sudo fwupdmgr update, 然后我的Thinkpad T490 就更新了固件,然后直接导致了电脑再次无法唤醒睡眠!同时半解决状态的2242固态硬盘变成睡眠也无法识别出来的无法解决状态。重启电脑后直接进入到了Windows11, 在Windows11下安装Lenovo官方ThinkVantage, 然后自动检测后升级相应的BIOS组件后终于恢复了睡眠唤醒。经过这件事情,想告诫同学,如果BIOS工作正常,非必要不升级,如果要升级也请切换到Windows下使用官的固件升级软件处理。

退出换根并重启

1
2
exit
reboot

重新启动后拔掉U盘完成安装。


ArchLinux配置流程

基础设置

配置国内镜像源

在安装阶段我们已经配置了镜像源,但那是在Live系统上做的配置,为了方便安装系统和软件。 安装好的ArchLinux默认镜像源也是由安装阶段所设置的,刚刚安装的镜像与Live系统不 一样,它不包括自动选择镜像的程序reflector, 它是一个Python编写的脚本,会自动从 https://archlinux.org/mirrors/status/ 上获取镜像地址,可以通过参数筛选出自己需要的镜像地址。为了方便自己设置,需要先安装一下,然后切换到自己想要的源就可以了。

切换为国内最快的12个ArchLinux源
1
2
3
sudo pacman -S reflector
sudo reflector --verbose -c China --latest 12 --sort rate --threads 100 --save /etc/pacman.d/mirrorlist
sudo pacman -Syu

配置国内CN源

Arch Linux 中文社区仓库是由 Arch Linux 中文社区驱动的非官方用户仓库。包含中文用户常用软件、工具、字体/美化包等。

  1. /etc/pacman.conf 文件末尾添加以下两行

    /etc/pacman.conf
    1
    2
    [archlinuxcn]
    Server = https://repo.archlinuxcn.org/$arch

  2. 安装 archlinuxcn-keyring 包以导入 GPG key

    安装archlinuxcn-keyring
    1
    sudo pacman -S archlinuxcn-keyring

  3. 安装 archlinuxcn-mirrorlist-git 包可以获得一份镜像列表

    安装archlinuxcn-mirrorlist-git
    1
    sudo pacman -S archlinuxcn-mirrorlist-git
    安装完成后,会生成文件/etc/pacman.d/archlinuxcn-mirrorlist, 其包含最新的国内镜像。

  4. 在 pacman.conf 中直接引入archlinuxcn-mirrorlist

    /etc/pacman.conf末尾追加,同时注释掉Server
    1
    2
    3
    [archlinuxcn]
    #Server = https://repo.archlinuxcn.org/$arch
    Include = /etc/pacman.d/archlinuxcn-mirrorlist

  5. 编辑/etc/pacman.d/archlinuxcn-mirrorlist文件,去掉要引用的源前面的注释符即可。

配置arch4edu源

Arch4edu是面向高校用户推出的非官方软件仓库,支持Arch LinuxArch Linux ARM, 主要包含高校用户常用的科研、教学及开发软件。

  1. 导入 GPG key

    1
    2
    3
    sudo pacman-key --recv-keys 7931B6D628C8D3BA
    sudo pacman-key --finger 7931B6D628C8D3BA
    sudo pacman-key --lsign-key 7931B6D628C8D3BA

  2. /etc/pacman.conf文件末尾添加以下内容

    1
    2
    [arch4edu]
    Server = https://mirrors.cernet.edu.cn/arch4edu/$arch

    上述镜像源是CERNET-校园网联合镜像站(mirrorz-302智能选择), 由于他的自动选择属性以及使用sudo的安全属性,所以我设置了这个镜像站点。

  3. 安装pkgstats帮助了解我们维护包的均势。

    1
    sudo pacman -S pkgstats

  4. 其他arch4edu镜像:arch4edu-mirrorlist

Arch4edu 一个面向全球高校用户的社区源, 初衷是实验室的服务器都有装同一批软件的需求,后来干脆就做成软件源了. 支持 Arch Linux 和 Arch Linux ARM, 主要包含高校用户常用的科研、教学及开发软件。现在arch4edu主要涵盖以下方向的包:

  • 机器学习工具:tensorflow, caffe, torch等等
  • IDE及编辑器:android-studio, pycharm, vs code, sublime等等
  • Android开发:android-studio, android-sdk, android-ndk等等
  • 语音信号处理:kaldi, cmusphinx, opensmile等等
  • 图像处理:opencv-git
  • 通用:anaconda, zotero, atlas-lapack, openblas等等
共104个包。理论上说至少大学生常用的,不限于上述方向的包都可以加,欢迎大家发Package Request. 现在的更新频率是日更。由于结构是仿照archlinuxcn搭建的,所以git版本的包会及时更新。

安装中文字体

安装windows10下拷贝来的fonts字体、founder及adobe 等到系统的指定目录/usr/share/fonts/:

1
2
3
4
sudo cp ./Fonts/Adobe/* /usr/share/fonts/Adobe/
sudo cp ./Fonts/windows10/ /usr/share/fonts/windows10/
sudo cp ./Fonts/founder_GBK/ /usr/share/fonts/Founder/
sudo fc-cache -vf

设置系统为中文

要设置整个系统使用的区域设置,需要在 /etc/locale.conf 中写入 LANG 变量,以下的 zh_CN.UTF-8 应为 /etc/locale.gen 中某个未注释条目的第一列:

/etc/locale.conf
1
2
#LANG="C.UTF-8"
LANG=zh_CN.UTF-8

由于前面已经配置好了语言,据Local-ArchLinux, 当做完以上配置,同时重起系统后设置区域和语言语言设置成简体中文, 后系统仍然不能完全汉化,对于KDE Plasma, 这一点本人测试成功。

全局配置gitgithub.com镜像

  1. 安装git

    1
    pacman -S git curl

  2. 修改全局配置文件~/.gitconfig

    ~/.gitconfig
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [user]
    email = YourEmail
    name = YourName
    [url "https://hub.yzuu.cf/"]
    ; [url "https://hub.njuu.cf/"]
    ; [url "https://hub.nuaa.cf/"]
    ; [url "https://kkgithub.com/"]
    ; [url "https://gitclone.com/github.com/"]
    insteadOf = https://github.com/

注意:此配置全局gitgithub.com镜像是最简单的一劳永逸的方法,稍微麻烦但更加有效的方法参考:使用Git下载Github资源的有效方法

安装paruyay

安装paruyay, 最新的paru表现更好,建议安装。

  1. 安装paru
1
sudo pacman -S paru
  1. 使用paru时跳过审阅并自动确认安装
1
paru --skipreview --needed --noconfirm -S foobar
  1. 关闭默认审阅流程的方法: 在配置文件/etc/paru.conf 内增加SkipReview。参考 Paru默认关闭审阅流程
  • archlinuxcn源安装
1
sudo pacman -S yay
  • 编译安装
1
2
3
4
pacman -S --needed git base-devel
git clone https://aur.archlinux.org/yay-bin.git
cd yay-bin
makepkg -si
  • 源码安装
1
2
3
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

在2022年7月20日安装ArchLinux时发现如此安装不成功,解决方案参考:yay安装失败的解决方案。使用go语言换源解决,临时换源解决方案代码如下

1
2
3
4
5
6
$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct
$ export GO111MODULE=on
$ export GOPROXY=https://goproxy.cn
$ makepkg -si

配置paruyay多线程下载

使用本人定制的axel多线程下载工具可以提高下载速度,获得更佳的使用体验:

配置Paru和yay多线程下载
1
2
3
4
5
6
7
sudo curl -o ParuAxel.7z https://gitlab.com/fengzhenhua/zipconf/-/raw/main/ParuAxel.7z\?inline\=false
unar ParuAxel.7z
cd ./ParuAxel
chmod +x install.sh
./install.sh
cd ..
rm -rf ParuAxel.7z ParuAxel

Paru 高级用户配置

基本命令

  • paru <用户输入>:搜索并安装“用户输入”
  • paru -:paru -Syu 的别名
  • paru -Sua:仅升级 AUR 包。
  • paru -Qua:打印可用的 AUR 更新
  • paru -Gc <用户输入>:显示“用户输入”的 AUR 评论

编辑 PKGBUILD (对于高级用户)

如果你是一个有经验的 Linux 用户,你可以通过 paru 编辑 AUR 包。要做到这一点,你需要在 paru 配置文件中启用该功能,并设置你所选择的文件管理器。在此例中,我将使用配置文件中的默认值,即 vifm 文件管理器。如果你还没有使用过它,你可能需要安装它。

  • 安装vifm

    1
    sudo pacman -S vifm

  • 修改配置文件/etc/paru.conf,取消注释

    /etc/paru.conf
    1
    2
    3
    4
    [bin]
    FileManager = vifm
    #MFlags = --skippgpcheck
    #Sudo = doas

系统会提示你审查该软件包→输入 Y 并按下回车→从文件管理器中选择 PKGBUILD →按下回车查看软件包→做出修改。你所做的任何改变都将是永久性的,下次升级软件包时,你的改变将与上游软件包合并。

配置桌面环境

对于桌面环境的配置,主要是配置MacOSWhitSur主题,由于已经配置了ArchLinuxCN源和安装了Paru也可以使用Aur所以使用PacmanParu来安装皮肤比自行下载手动安装要好。本教程使用Aur源安装:

paru安装WhitSur皮肤
1
2
3
4
5
6
7
8
9
10
11
paru --skipreview --needed --noconfirm -S plasma5-themes-whitesur-git
paru --skipreview --needed --noconfirm -S whitesur-icon-theme-git
paru --skipreview --needed --noconfirm -S whitesur-cursor-theme-git
git clone --depth 1 https://github.com/vinceliuice/grub2-themes.git
git clone --depth 1 https://github.com/vinceliuice/WhiteSur-gtk-theme.git
chmod +x ./grub2-themes/*.sh
chmod +x ./WhiteSur-gtk-theme/*.sh
cd ./grub2-themes/
./install.sh -b -t whitesur -i whitesur -s 1080p
cd ../WhiteSur-gtk-theme
./tweaks.sh -f

一般安装好后系统自动配置好了,同时如果有更新也可以及时更新。需要做的工作:

  • 启用全局主题: 系统设置外观全局主题WhitSur(选中桌面和窗口布局)。 之后系统的桌面就配置成WhitSur主题了,但是桌面背景还是黑色的,说明这几个包设计的不是很完善,这时只要右键设置背景图片就可以了。
  • 启用登录屏: 设置开机与关机登录屏幕(SDDM), 选择WhitSur
  • 配置启动Latte停靠栏: 在Latte上右键→配置Latte,选中开机启动。然后对应布局编辑器选择WhitSur
  • 配置状态状态栏,安装好主题后状态栏并没有配置好,配置步骤:状态栏上右键编辑模式更多选项最大化面板 ,否则状态栏上的内容会显示不出来。
  • 配置Fcitx5使用自带皮肤,完成第一步时其实就可以了。如果第一步没有输入法面板, 那需要添加系统托盘,此时显示就正常了。参考KDE下设置Fcitx5
  • 手动安装WhitSur主题请参考: ArchLinux安装Plasma5
  • 由于Grub主题使用paru安装时不能自动配置,所以改成了手动安装。而WhiteSur-gtk-theme仅用来设置firefox主题,需要再安装主题。
  1. 安装浏览器插件

在安装gnome插件前,需要先安装浏览器插件才能通过https://extensions.gnome.org 安装插件。

1
yay -S chrome-gnome-shell

2022年11月01日 升级完系统发现插件gnome-shell-hidetopbar-git不能正常工作了,于是打开安篇之前写好的文档,计划从网页安装插件。但是执行上述命令时发现找不到了!!然后通过 GNOME Shell browser integration Installation Guide 找到答案。因为这个插件更名了,于是执行如下命令解决问题:

1
yay -S gnome-browser-connector

或者使用命令

1
2
3
$ git clone https://aur.archlinux.org/gnome-browser-connector.git
$ cd gnome-browser-connector
$ makepkg -si

之后安装插件 dash-to-dockhide-top-bar 基本完成操作。

  1. 安装Gnome 主题
仿苹果主题:Shell、图标、鼠标、Grub、动态壁纸
1
2
3
4
5
yay -S whitesur-gtk-theme-git  whitesur-icon-theme-git cursor-theme-macos-big-sur
yay -S dynamic-wallpaper-catalina-gnome-timed-git
yay -S dynamic-wallpaper-mojave-gnome-timed-git
git clone git@gitee_key_one:fengzhenhua/monterey-grub-theme
sudo ./install.sh

注意此安装Grub主题必须切换到root权限。如果更像苹果系统则,请再安装图标插件 Logo Menu ,这样子左上角的Archlinux标志将会换成Mac标志,同时增加了对应的菜单。

  1. Dash-To-Dock 升级Gnome 42-

在我使用Manjaro作为主力办公的时候,于2021年7月7日升级时发现此拓展失效,通过浏览器无法安装。同时于2022年04月10日升级ArchLinux后发现此拓展在Gnome42版本下失效,于今日在dash-to-dock的用户评论中发现了解决方案https://github.com/tau-OS/dash-to-dock,于是通过gitee克隆后顺利安装,由于此拓展的重要性,所以专门记录其手动安装。

1
2
$ git clone git@gitee_key_one:fengzhenhua/dash-to-dock.git
$ cd ./dash-to-dock
  • 安装编译插件所需的软件及设置环境变量
1
2
# pacman -S sassc
# export SASS=sassc
  • 编译安装插件
1
2
3
4
# exit
$ cd ~/下载/dash-to-dock
$ make
$ make install

关闭文件索引

由于文件索引会消耗大量的资源,这就导致了电脑温度过高,风扇逛转不停,而现实的使用过程中对于搜索的要求并不高,一般人都能够合理的安排自己的文件位置。于是关闭这项服务可以更好的发挥计算机性能,总体来讲利大于弊。

关闭KDE Plasma5 文件索引!

  1. 使用命令关闭

    1
    2
    3
    balooctl disable
    balooctl suspend
    balooctl status

  2. 通过图形界面关闭:点击系统设置搜索文件搜索去掉启用文件索引前的对号→右下角应用

关闭Gnome3文件索引

  1. 使用gsettings禁用tracker-miner应用

    1
    2
    gsettings set org.freedesktop.Tracker.Miner.Files crawling-interval -2
    gsettings set org.freedesktop.Tracker.Miner.Files enable-monitors false
    同时删除旧数据tracker reset --hard

  2. 或者禁止tracker-*软件启动

    1
    2
    3
    sudo sed -i "s/X-GNOME-Autostart-enabled=true/X-GNOME-Autostart-enabled=false/g" /etc/xdg/autostart/tracker-*.desktop
    tracker reset --hard
    tracker reset --hard

删除多余的EFI启动项

有时候重装系统的时候为了保留原来的启动项而不对EFI分区重新格式化,这导致了每安装一次系统都会在EFI分区留下一下之前的启动项。这时为了纯净可以删除之前的启动项,不过一定要仔细判别,不要删错了文件。文件目录在

1
/boot/efi/EFI

修改启动选项grub

/boot/grub/gurb.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
insmod part_gpt
insmod part_msdos
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="0"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi

function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}

function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}

if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 143fbcc6-9ae2-4a88-ad96-12c7f3de3d95
font="/usr/share/grub/unicode.pf2"
fi

if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=zh_CN
insmod gettext
fi
terminal_input console
terminal_output gfxterm
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 143fbcc6-9ae2-4a88-ad96-12c7f3de3d95
insmod gfxmenu
loadfont ($root)/usr/share/grub/themes/monterey-grub-theme/Poppins-14.pf2
loadfont ($root)/usr/share/grub/themes/monterey-grub-theme/Poppins-16.pf2
loadfont ($root)/usr/share/grub/themes/monterey-grub-theme/Poppins-18.pf2
loadfont ($root)/usr/share/grub/themes/monterey-grub-theme/Poppins-20.pf2
loadfont ($root)/usr/share/grub/themes/monterey-grub-theme/Poppins-48.pf2
loadfont ($root)/usr/share/grub/themes/monterey-grub-theme/terminus-12.pf2
loadfont ($root)/usr/share/grub/themes/monterey-grub-theme/terminus-14.pf2
loadfont ($root)/usr/share/grub/themes/monterey-grub-theme/terminus-16.pf2
insmod png
set theme=($root)/usr/share/grub/themes/monterey-grub-theme/theme.txt
export theme
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=5
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Arch Linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-143fbcc6-9ae2-4a88-ad96-12c7f3de3d95' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 143fbcc6-9ae2-4a88-ad96-12c7f3de3d95
echo '载入 Linux linux ...'
linux /boot/vmlinuz-linux root=UUID=143fbcc6-9ae2-4a88-ad96-12c7f3de3d95 rw loglevel=3 quiet
echo '载入初始化内存盘...'
initrd /boot/initramfs-linux.img
}
submenu 'Arch Linux 的高级选项' $menuentry_id_option 'gnulinux-advanced-143fbcc6-9ae2-4a88-ad96-12c7f3de3d95' {
menuentry 'Arch Linux,Linux linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-advanced-143fbcc6-9ae2-4a88-ad96-12c7f3de3d95' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 143fbcc6-9ae2-4a88-ad96-12c7f3de3d95
echo '载入 Linux linux ...'
linux /boot/vmlinuz-linux root=UUID=143fbcc6-9ae2-4a88-ad96-12c7f3de3d95 rw loglevel=3 quiet
echo '载入初始化内存盘...'
initrd /boot/initramfs-linux.img
}
menuentry 'Arch Linux, with Linux linux (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-fallback-143fbcc6-9ae2-4a88-ad96-12c7f3de3d95' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 143fbcc6-9ae2-4a88-ad96-12c7f3de3d95
echo '载入 Linux linux ...'
linux /boot/vmlinuz-linux root=UUID=143fbcc6-9ae2-4a88-ad96-12c7f3de3d95 rw loglevel=3 quiet
echo '载入初始化内存盘...'
initrd /boot/initramfs-linux-fallback.img
}
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (在 /dev/nvme0n1p1)' --class windows --class os $menuentry_id_option 'osprober-efi-2B71-22FB' {
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root 2B71-22FB
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg
fi
### END /etc/grub.d/41_custom ###

Linux下EFIBOOTMGR的使用,删除UEFI主板多余的启动项

用uefi装过几次系统后,uefi启动项就会多出好多启动项。这东西格硬盘也不好用,我们借助efibootmgr可以编辑启动项,事实上我的电脑正是这样操作的:

1
2
3
4
5
6
7
8
9
10
11
12
# efibootmgr
BootCurrent: 0008
Timeout: 5 seconds
BootOrder: 0008,0007,0006,0004,0005,0000,0001,0002
Boot0000* UEFI KBG40ZNS128G NVMe KIOXIA 128GB 80SPG7BZQ2B1 1
Boot0001* ONBOARD NIC (IPV4)
Boot0002* ONBOARD NIC (IPV6)
Boot0004* Manjaro
Boot0005* Windows Boot Manager
Boot0006* endeavouros
Boot0007* -id
Boot0008* ArchLinux

删除一个引导项 Manjaro

1
efibootmgr -b 0004 -B

添加一个引导项

1
#efibootmgr -c -w -L “BootOptionName” -d /dev/sda -p 1 -l \\EFI\\asianux\\elilo.efi

其中-d 参数后面是系统所在的硬盘设备名称,例如/dev/hda/dev/hdb -p 参数是vfat 分区的分区编号/dev/hda1-p 1 /dev/sda2-p 2 -l 参数后面是该引导项指向的efi 启动文件在该分区上的位置。请注意使用“\”来表示目录的分级。 例如:/EFI/asianux/elilo.efi 应写成:\\EFI\\asianux\\elilo.efi

解决LinuxWindows时间不一致问题

日常工作中多数人使用的是Windows, 当使用Linux作为工作的主力时,安装双系统是一个最佳的选择,但是双系统会导致LinuxWindows时间不一致问题。

GMT:Greenwich Mean Time,即格林尼治标准时间,也就是世界时。GMT 以地球自转为基础的时间计量系统,但由于地球自转不均匀,导致 GMT 不精确,现在已经不再作为世界标准时间使用。

UTC:Universal Time Coordinated,即协调世界时。UTC 是以原子时秒长为基础,在时刻上尽量接近于 GMT 的一种时间计量系统。为确保 UTC 与 GMT 相差不会超过 0.9 秒,在有需要的情况下会在 UTC 内加上正或负闰秒。UTC 现在作为世界标准时间使用。

RTC:Real-Time Clock,即实时时钟,在计算机领域作为硬件时钟的简称。

世界上不同地区所在的时区是不同的,这些时区决定了当地的本地时间。比如北京处于东八区,即北京时间为 UTC + 8,如果 UTC 时间现在是上午 6 点整,那么北京时间为 14 点整。

Windows 与 Linux 看待硬件时间的方式不同。Windows 把电脑的硬件时钟(RTC)看成是本地时间,即 RTC = Local Time,Windows 会直接显示硬件时间;而 Linux 则是把电脑的硬件时钟看成 UTC 时间,即 RTC = UTC,那么 Linux 显示的时间就是硬件时间加上时区。

解决办法

既然知道了问题原因,我们就知道如何去解决,大概思路分为两种,一是让 Windows 认为硬件时钟是 UTC 时间,二是让 Linux 认为硬件时钟是本地时间。

以管理员身份打开 「PowerShell」,输入以下命令:

1
> Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

或者打开「注册表编辑器」,定位到 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation 目录下,新建一个 DWORD 类型,名称为 RealTimeIsUniversal 的键,并修改键值为 1 即可。

这里大家可以根据自己 Linux 发行版的方法来修改。我这里给出现在大多数发行版由 timedatectl 来管理时间的修改方法。

在终端中,输入以下命令:

1
$ timedatectl set-local-rtc 1 --adjust-system-clock

这两种方法中,本人推荐第一种方法,修改 Windows 的时间管理。因为在 Linux 系统中修改后,输入 timedatectl 命令后,会出现警告,提示你使用 RTC 时钟会导致一些程序错误;并且 Windows 也在更改时间管理方式为 UTC 时间。

安装解压缩软件

ArkKDE桌面环境默认的归档管理器,支持插件设置,允许你创建一个压缩包,查看压缩文件的内容,解压压缩包的内容到你所选定的目录。它能处理多种格式,包括 tar、gzip、bzip2、zip、rar 和 7z等。

Install Ark
1
sudo pacman -S ark p7zip-natspec unarchiver lzop lrzip arj zip unzip

File RollerGNOME桌面环境的默认归档管理器,不支持插件设置,允许你创建一个压缩包,查看压缩文件的内容,解压压缩包的内容到你所选定的目录。它能处理多种格式,包括 tar、gzip、bzip2、zip、rar 和 7z等。

Install File-Roller
1
sudo pacman -S file-roller p7zip-natspec unarchiver lzop lrzip arj zip unzip

在Linux解压缩Windows下考备过来的zip压缩文件时,不仅ark浏览时乱码,实际解压也是乱码。根本原因是编码问题,windows下默认gb2312与linux中默认utf-8不兼容, 直接原因是Ark中用于zip打开和解压的插件不支持gb2312. 解决方案为

  1. 安装。p7zip-natspec (cn源中就有)

    1
    sudo pacman -S p7zip-natspec

  2. Ark中禁用libzip插件(该插件优先级高于p7zip): Ark菜单→设置→配置Ark→插件→取消Libzip插件对应的复选框→应用。同时应当确保p7zip插件使用中。

  3. 由于已经安装了unarchiver, 所以直接使用命令unar解压zip文件也是可以解决文件名乱码问题的,但是前述方法更加方便。

  4. 其他选择,使用unzip-natspecunzip-iconv.

安装中文输入法Fcitx5

from archlinuxcn
1
2
sudo pacman -S fcitx5-git fcitx5-gtk-git fcitx5-qt5-git fcitx5-qt4-git fcitx5-qt5-git fcitx5-qt6-git
sudo pacman -S fcitx5-configtool-git fcitx5-chinese-addons-git fcitx5-material-color fcitx5-nord

配置vim和neovim

如果您是Linux初学者,或者不习惯使用vimneovim,那下面这部分可以不去配置。下面的配置主要是配置neovimvim安装一些工作中可以提高效率的插件,如果没有需要请省略此处配置。

1
2
3
4
5
6
7
8
9
10
11
12
curl -o vim-all.7z https://gitlab.com/fengzhenhua/zipconf/-/raw/main/vim-all.7z\?inline\=false
unar vim-all.7z
cd vim
chmod +x ./install.sh
./install.sh
cd ..
curl -o nvim-all.7z https://gitlab.com/fengzhenhua/zipconf/-/raw/main/nvim-all.7z\?inline\=false
cd nvim
chmod +x ./install.sh
./install.sh
cd ..
rm -rf vim-all.7z vim nvim-all.7z nvim

在安装neovim时,由于packer.nvim不再维护,故更新为lazy.nvim插件管理器,安装完插件时要手动在nvim中执行:qa 退出nvim。 安装结束后最后一行命令删除vim-all.7z, nvim-all.7z, vim, nvim

  1. 安装必备依赖

    1
    sudo pacman -S --needed --noconfirm ctags &> /dev/null

  2. 导入初始配置

    1
    curl -o $HOME/.vimrc https://gitlab.com/fengzhenhua/fzhconfig/-/raw/main/vimrc_init\?inline\=false

  3. 安装插件管理器vim-plug

    1
    2
    git clone --depth 1 https://github.com/junegunn/vim-plug $HOME/.vim/vim-plug
    ln -s $HOME/.vim/plugged/vim-plug/plug.vim $HOME/.vim/autoload/plug.vim

  4. 安装vim-plug插件

    1
    vim +PlugInstall +qall

  5. 导入完整配置

    1
    2
    rm $HOME/.vimrc
    curl -o $HOME/.vimrc https://gitlab.com/fengzhenhua/fzhconfig/-/raw/main/vimrc\?inline\=false

注意:已经配置vim-plug 通过命令:PlugUpdate自动更新,请勿执行:PlugUpgrade !!

packer插件管理器已经于停止维护,故本教程已经切换为lazy作为默认管理器,请放心lazy配置更加方便、稳定、快速。但是作为学习,此处仍然保留packer的配置方法,工作使用请参考Auto

  1. 安装依赖软件

    1
    2
    3
    4
    sudo pacman -S --needed --noconfirm neovim python3 yarn ranger
    sudo pacman -S --needed --noconfirm python-pip tree-sitter-cli python-pynvim
    sudo pacman -S --needed --noconfirm nerd-fonts-complete nerd-fonts-complete ttf-nerd-fonts-symbols
    sudo fc-cache -vf

  2. 下载neovim配置文件

    1
    2
    git clone https://gitlab.com/fengzhenhua/fzhconfig  fzhconfig
    cd fzhconfig

  3. 安装插件管理器packer

    1
    2
    NeoPacker="/home/$USER/.local/share/nvim/site/pack/packer/start/packer.nvim"
    git clone --depth 1 https://github.com/wbthomason/packer.nvim $NeoPacker

  4. 安装配置文件

    1
    2
    3
    cp -rf ./nvim /home/$USER/.config/nvim
    cp ./init.vim /home/$USER/.config/nvim/init.vim
    cp -rf ./vsnip /home/$USER/.vsnip

  5. 安装插件

    1
    nvim +PackerSync
    注意:插件安装完成后,请输入:qa 退出neovim

  6. 安装完整配置

    1
    cp  ./nvim/init.vim /home/$USER/.config/nvim/init.vim

  7. 安装vim-latex插件

    1
    2
    NeoTexPath="/home/$USER/.local/share/nvim/site/pack/packer/start/vim-latex/ftplugin/latex-suite/templates"
    cp ./latex-templates $NeoTexPath

  8. 更改vim-templates插件的默认模板

    1
    cp ./vim-templates/*   ~/.local/share/nvim/site/pack/packer/start/vim-template/templates/

  9. 解决 WARNING "Neovim::Ext" cpan module is not installed

    1
    2
    3
    sudo pacman -S --needed --noconfirm cpanminus
    sudo cpanm -n Neovim::Ext
    cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)

Neovim健康检查

在安装Neovim后自检发现还有一些插件的依赖程序,没有安装,执行下述命令:

fix neovim's checkhealth
1
2
3
sudo pacman -S wget cargo composer php luarocks ruby julia ripgrep fd
sudo npm install -g neovim
cpanm --local-lib=~/.perl5 local::lib && eval $(perl -I ~/.perl5/lib/perl5/ -Mlocal::lib)

vim和neovim配置fcitx5自动切换

当使用vimnvim时,经学在插入模式和命令模式切换,而在命令模式需要英文输入法,特别是编辑中文文件时,每次切换都需要切换输入法特别麻烦。于是根据网络上的方法我修改得到一个更好的方法,同时原理相同在archlinux官网上给出了更加简洁的写法,此处都列出来,供大家自由选择。

Fcitx5-ArchWiki

If you are using Vim9, then the code should be

~/.vimrc
1
2
3
4
# Only taking affect after using vim9script grammar or has `vim9script` keyword.
var fcitx5state = system("fcitx5-remote")
autocmd InsertLeave * :silent fcitx5state = system("fcitx5-remote")[0] | silent !fcitx5-remote -c
autocmd InsertEnter * :silent if fcitx5state == '2' | call system("fcitx5-remote -o") | endif

If you are using neovim, then append the above code to ~/.config/nvim/init.vim.

It is recommended to use the fcitx.vim plugin. This plugin will keep different buffer-specific input method states in their respective insert modes.

For a simple solution, you can append the code to ~/.vimrc:

~/.vimrc
1
2
3
let fcitx5state=system("fcitx5-remote")
autocmd InsertLeave * :silent let fcitx5state=system("fcitx5-remote")[0] | silent !fcitx5-remote -c
autocmd InsertEnter * :silent if fcitx5state == 2 | call system("fcitx5-remote -o") | endif

If you are using VSCodeVim, add the following snippet into your configuration file:

1
2
3
4
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "1",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/bin/fcitx5-remote",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/bin/fcitx5-remote -t {im}",

我之前使用的方案

~/.vimrc or ~/.config/nvim/init.vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
let g:input_toggle = 0
function! Fcitx2en()
let s:input_status = system("fcitx5-remote")
if s:input_status == 2
let g:input_toggle = 1
let l:a = system("fcitx5-remote -c")
endif
endfunction
function! Fcitx2zh()
let s:input_status = system("fcitx5-remote")
if s:input_status != 2 && g:input_toggle == 1
let l:a = system("fcitx5-remote -o")
let g:input_toggle = 0
endif
endfunction
set ttimeoutlen=150
"退出插入模式
autocmd InsertLeave * call Fcitx2en()
"进入插入模式
autocmd InsertEnter * call Fcitx2zh()

注意:由于Fcitx5-ArchWiki给出的方法更加简法,所以建议使用Fcitx5-ArchWiki方法,而此处方法是本人多年前努力改进的办法,所以放在此处作为学习之前。

必备工具一键安装

archlinuxcn源
1
sudo pacman --needed --noconfirm -S  guake thunderbird  thunderbird-i18n-zh-cn libreoffice-fresh libreoffice-fresh-zh-cn calibre zotero goldendict-ng-git python-requests mplayer speech-dispatcher

上述工具依次为:下拉式终端、邮件客户端、办公套装libreoffice、 电子图书库、文献管理、电子词典、视频播放、语音合成(firefox依赖)

aur源
1
paru --skipreview --noconfirm -S xdman-beta-bin wemeet-bin linuxqq listen1-desktop-appimage  aliyunpan-gaozhangmin-bin

上述工具依次为:下载工具、腾讯会议、腾讯QQ、音乐播放器、小白羊阿云盘

安装配置TexLive

由于TexLive每年都会有新的版本,可以下载带年份的也可以下载不带年份的ISO镜像。

  1. 下载安装镜像Texlive.iso
  2. 挂载ISO镜像
1
2
3
sudo mount -o loop texlive2021.iso  /mnt/
cd /mnt
sudo ./install-tl

出现选项后,输入 I 直接安装(也可以更改选项)。不出意外的话,5 分钟应该就 OK 了, 然后退出 root 用户。

  1. 设置环境变量

如果在安装过程中选择了建立超链接,则不必考虑环境变量,所以,这样子可方便一些。texlive-en.pdf 中说明:

If you elected to create symlinks in standard directories (described in section 3.2.4), then there is no need to edit environment variables. Otherwise, on Unix systems, the directory of the binaries for your platform must be added to the search path. (On Windows, the installer takes care of this.)

  1. 卸载ISO镜像并更新texlive
1
2
3
sudo umount /mnt/
sudo tlmgr update --self
sudo tlmgr update --all
  • 默认情况下,会自动搜索合适的镜像来更新,也可以使用–repository 选项指定了要使用哪一个CTAN镜像。例如使用USTC镜像:
1
2
sudo tlmgr update --self --repository http://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet/
sudo tlmgr update --all --repository http://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet/
  • 为了方便我们也可以直接设置texlive 源为国内源,例如切换为清华源或华中科技大学源
1
2
sudo tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet
sudo tlmgr repository set http://mirror.hust.edu.cn/CTAN/systems/texlive/tlnet
  1. 字体设置

XeTeX和LuaTeX可以直接使用系统字体, 但Texlive自带的字体不在系统的字体目录中,所以当使用XeLaTeX 编译文件时,如果使用了texlive里面带的字体,就会出错,这时需要进行如下配置,让系统可以识别texlive所带的字体就可以了.

1
2
sudo cp /usr/local/texlive/2021/texmf-var/fonts/conf/texlive-fontconfig.conf   /etc/fonts/conf.d/09-texlive.conf
sudo fc-cache -fsv

问题修复

文件管理器Dolphin挂载双系统的Windows11 NTFS分区失败

1
2
sudo pacman --needed --noconfirm -S ntfs-3g
sudo ntfsfix -d /dev/nvme0n1p6

注意:此命令是删除了之前系统挂载NTFS硬盘时,产生的多余错误标签, 并不会格式硬盘,不会造成资料损失,放心使用。如果您并没有遇到Dolphin无法挂载NTFS分区的情况,请忽视此问题修复。

Grub丢失导致系统无法启动

2023年12月29日, 由于设置BIOS时,点了F9,导致BIOS恢复了默认设置。启动项中的Grub丢失,系统无法启动。解决方法为:插入安装系统时的启动U盘,然后按前述安装过程依次挂载各硬盘到指定目录(), 由于ArchLinux Live默认没有安装os-prober, 而此程序的作用就是自动探测操作系统,于是执行命令:

1
2
3
4
5
6
7
8
9
mount /dev/nvme0n1p2  /mnt/
mount /dev/nvme0n1p1 /mnt/boot/efi
mount /dev/nvme0n1p4 /mnt/home
arch-chroot /mnt
pacman -S os-prober
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id= ArchLinux
grub-mkconfig -o /boot/grub/grub.cfg
exit
reboot -h now

其他替代品或分别安装命令

安装截图工具

1
sudo pacman -S flameshot

安装图像查看器

1
2
3
4
5
sudo pacman -S nomacs
or
sudo pacman -S feh imagemagick
or
sudo pacman -S xnviewmp

安装浏览器firefox

1
sudo pacman -S firefox

注意:2023年12月24日发现,cn源内去除了tor-browser, 所以不能使用pacman安装了, 如果执行sudo pacman -S torbrowser 将会出现一个torbrowser的安装器,它不是浏览器本身。

  1. 播放多媒体时不出声音了

2022-06-14 在使用firefox 版本号为 V101.0.1(64位)收看视频时,发现都默认禁用了声音自动播放,这里给出设置方法。 2023-12-12 firefox 版本号 V120.0.1(64位) 再次遇到这个问题。

点击右上角三个横杠 →点击左侧隐私与安全 → 点击右侧权限 → 向下自动播放 → 向右设置... → 最上面所有网站的默认值设置为`音频和视频。

  1. 安装 firefox-ublock 插件

2022-10-07 在新安装的Archlinux上安装此插件时,由于网络原因不能正常访问uBlock的发布网站,但是在Archlinux下可以使用yayparu 安装,安装到firefox的命令如下:

1
2
3
paru --skipreview -S firefox-ublock-origin
or
yay -S firefox-ublock-origin

不知道从何时开始,火狐Firefox禁止中国大陆IP访问商店内的广告拦截扩展页面。当打开uBlockOrigin , AdGuard,AdBlocker 等页面时,会显示“此页面在您的地区不可用” 。所以本节记录手动安装uBlock的方法。

  1. 打开uBlock发布页https://github.com/gorhill/uBlock/releases
  2. 点击发页页上对应Firefox的发布链接,等待安装即可。

安装下载软件Xtreme Download Manager

Xtreme下载管理器是一款强大的工具,能提高下载速度达500%,保存流媒体视频,恢复中断下载,并安排和转换下载。XDM与Chrome、Firefox Quantum、Opera、Vivaldi等基于Chromium和Firefox的浏览器无缝集成,接管下载并保存网络流媒体视频。内置的视频转换器可将下载的视频转换为多种格式,支持100多种设备。

Install Xtreme Download Manager
1
paru --skipreview --noconfirm -S xdman-beta-bin

xdm官网,点开链接→解压缩→切换到解压后的文件夹 xdm-setup-7.2.11→执行脚本安装程序.

1
2
3
cd ./xdm-setup-7.2.11
chmod +x install.sh
./install.sh

安装词典软件Goldendict

1
sudo pacman -S goldendict-ng-git mplayer
  • 配置词典:打开软件goldendict→点击编辑词典 →设置词典软件路径。
  • 配置构词法规则:点击构词法规则→设置好构词法路径。
  • 关闭全文搜索:点击编辑首选项全文搜索 关闭全文搜索。
  • 配置播放声音:切换到音频播放使用外部程序播放:mplayer
translatorGD.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#! /usr/bin/env python3
# vim:fenc=utf-8
import json
import requests
import random
from hashlib import md5
import time
import sys
import io
import threading
caiyunxiaoyiKey=""
baiduKey={"id":"YourID","secret":"YourSecret"}
xiaoniuKey="YourKey"
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
originalText = sys.argv[1]
css = """<style type="text/css">
.engine {
font-family: "MiSansVF";
font-size: 18px;
color: #578bc5;
}
.originalText {
font-size: 120%;
font-family: "MiSansVF";
font-weight: 600;
display: inline-block;
margin: 0rem 0rem 0rem 0rem;
color: #2a5598;
margin-bottom: 0.6rem;
}
.frame {
margin: 1rem 0.5rem 0.5rem 0;
padding: 0.7rem 0.5rem 0.5rem 0;
border-top: 3px dashed #eaeef6;
}
definition {
font-family: "MiSansVF";
color: #2a5598;
height: 120px;
padding: 0.05em;
font-weight: 500;
font-size: 16px;
}
</style>"""
print(css)
print( '<div class="originalText">' + originalText + '</div>')
print('<br><br>')
def output(engineName:str,definition:str):
print('<span class="engine">' + engineName + "</span>")
print('<div class="frame">')
print('<definition>' + definition + '</definition>')
print("</div>")
print("<br>")
def Youdao():
global originalText
headers = {
'authority': 'aidemo.youdao.com',
'accept': 'application/json, text/javascript, */*; q=0.01',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'origin': 'https://ai.youdao.com',
'referer': 'https://ai.youdao.com/',
'sec-ch-ua': \
'"Chromium";v="106",\
"Microsoft Edge";v="106",\
"Not;A=Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'user-agent': \
'Mozilla/5.0 (Windows NT 10.0; Win64; x64)\
AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47',
}
data = {
'q': originalText,
'from': 'Auto',
'to': 'Auto',
}
try:
output("有道翻译",
requests.post('https://aidemo.youdao.com/trans',
headers=headers, data=data).json()["translation"][0])
except:
output("有道翻译","错误")
def Google():
global originalText
definition=""
try:
for x in requests.get("https://translate.googleapis.com/translate_a/single?\
client=gtx&sl=auto&tl=&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&\
dt=rm&dt=ss&dt=t&q="+originalText,\
headers={"user-agent":\
"Mozilla/5.0 (Windows NT 10.0;\
Win64; x64; rv:59.0)"}).json()[0]:
if x[0]:
definition += x[0]
output("谷歌翻译",definition)
except:
output("谷歌翻译","错误")
def Caiyun():
global originalText
global caiyunxiaoyiKey
payload = {
"source": originalText,
"trans_type": "auto2zh",
"request_id": "demo",
"detect": True,
}
headers = {
"content-type": "application/json",
"x-authorization": "token " + caiyunxiaoyiKey,
}
try:
output("彩云小译",
json.loads(requests.post(
"http://api.interpreter.caiyunai.com/v1/translator",
data=json.dumps(payload), headers=headers).text)["target"])
except Exception as e:
output("彩云小译","错误:"+str(e))
def Baidu():
global originalText
global baiduKey
salt = random.randint(32768, 65536)
s=baiduKey["id"] + originalText + str(salt) + baiduKey["secret"]
sign = md5(s.encode('utf-8')).hexdigest()
try:
output("百度翻译",
requests.post(
'http://api.fanyi.baidu.com/api/trans/vip/translate',
params={'appid': baiduKey["id"],
'q': originalText, 'from': 'auto', 'to': 'zh',
'salt': salt, 'sign': sign}
).json()["trans_result"][0]["dst"])
except Exception as e:
output("百度翻译","错误"+str(e))
def Xiaoniu():
global originalText
global xiaoniuKey
try:
output("小牛翻译",
json.loads(requests.post(
"http://api.niutrans.com/NiuTransServer/translation?",
data={"from": 'en', "to": 'zh',\
"apikey": xiaoniuKey,\
"src_text": originalText}).text)['tgt_text'])
except Exception as e:
output("小牛翻译","错误"+str(e))
threads=[]
# threads.append(threading.Thread(target=Caiyun))
# threads.append(threading.Thread(target=Google))
threads.append(threading.Thread(target=Xiaoniu))
threads.append(threading.Thread(target=Baidu))
threads.append(threading.Thread(target=Youdao))
for t in threads:
t.start()

translatorGD脚本配置方法

  • 在使用脚本前,请输入申请到的百度帐号和密钥,小牛的密钥

  • Linux中配置

    命令行
    1
    python "/home/feng/软件/goldendict/translatorGD.py" %GDWORD%

  • Windows配置 translatorGD配置方法

安装腾讯会议和QQ

1
paru --skipreview -S wemeet-bin linuxqq

安装音乐播放器

1
paru --skipreview -S listen1-desktop-appimage

安装小白羊云盘

完美运行版本
1
paru --skipreview -S aliyunpan-gaozhangmin-bin

注意:aur中有两个版本的小白羊云盘,分别是xbydriver-binaliyunpan-gaozhangmin-bin,前者更新快一些,但是会导致一些错误,同时基本的下载也不能保证,后者更新慢一些,估计应该是作者在修复问题,这一版可以完美运行,所以此处推荐安装后者。

参考文章

  1. 安装教程参考
  1. Pacman 使用手册
  1. 配置国内源参考
  1. 配置电源管理参考
  1. 配置nvim参考
  1. 配置Goldendict参考