ArchLinux 安装与配置
梦前要备床
在今年1月初,正逢固态价格较低的时候,我用¥578.98的价格买下了 SOLIDIGM P44 PRO 海力士固态硬盘,并另外购置了一个高端硬盘盒 DOCKCASE Type-C 3.2, 该硬盘盒附带屏幕,还具备断电保护,实际测试大约有5s的断电保护。
注意事项
含断电保护的硬盘盒一般在断电保护时会发生如下事情:
- 检测到断电,此时电容放电,然后为当前硬盘写入读写保护标志
- 在电容放电时间内更新FTL映射表
- 更新完成后在不到10%的电量下进行弹出硬盘操作(移除读写保护标志等)
- 电容放电完毕,停止一切操作
读写保护标志写入后,该盘会既无法读取,也无法写入任何数据,这意味着,当你关闭计算机时,PC断电后会立即触发硬盘盒断电保护的机制,如果在它未释放完所有电时启动计算机,此时硬盘仍处于读写保护状态,因此当计算机启动结束时用户会发现该盘无法读取/系统不识别该盘等类似问题。
入梦的开始
提前准备好 ArchLinux 的镜像之后,通过 Ventoy 把 TF 卡做成启动盘,将镜像放入之后, 用户可在此时考虑直接给盘划好分区,不管怎么说,图形化分区还是比命令行分区更友好方便。在保证 Secure Boot 【安全启动】处于关闭, 且启动方式为 UEFI 的情况下, 通过 BIOS 启动【Portable PC一般按F12即可自行选择启动项】镜像系统。一般安装镜像系统是无图形化界面的,会以终端的形式出现。
提示
【可选】执行sudo systemctl stop reflector.service
来禁用 reflector ,以避免镜像源筛选不准确的可能性,该事件存在一定的概率会发生。
【可选】如已遗忘 BIOS 启动方式是否为 UEFI 时,可执行ls /sys/firmware/efi/efivars
来查看,如若输出大量文字(EFI 变量),说明当前已在 UEFI 模式。
有线或无线联网
装机第一事,先连互联网。有线网络下插入网线即可【Portable PC可接入扩展坞后再接入网线】;无线网络下可使用 iwctl 接入,按照以下顺序依行键入命令:
iwctl # 执行iwctl命令,进入交互式命令行
device list # 列出设备名,一般无线网卡中会看到 wlan0
station wlan0 scan # 扫描可连接的所有无线网络
station wlan0 get-networks # 列出当前扫描到的所有无线网络
station wlan0 connect <YOUR-WIRELESS-NAME> # 进行连接,后面会提示键入密码
exit # 也可直接按 Ctrl + D 的热键退出 iwctl 程序,退出后可使用 ping 命令确认网络连接状态
提示
如果提示没有 iwctl 命令请先安装iwd
,并通过systemctl enable iwd
和systemctl start iwd
来启动。
如果你不能正常连接网络,首先确认系统已经启用网络接口:
ip link
ip link set wlan0 up
为保证网络正常连接,需要进行一次时间同步:
timedatectl set-ntp true # 将系统时间与网络时间进行同步
timedatectl status # 检查服务状态
硬盘分区
如果用户忘记在前面分区,这时还是可以直接进行分区的,首先执行lsblk
查看所有硬盘的分区情况,找出需要分区的盘【类似/dev/sdX
或者/dev/nvme0n1pX
,以实际情况为准】,然后执行parted /dev/xxxxxxx
进入程序。
一般情况下我们使用GPT分区表,进入程序后执行mktable
,这时会询问使用什么类型的分区表,键入gpt
即可,然后输入quit
退出。
接着执行cfdisk /dev/xxxxxxx
来为硬盘分区,划分好区并确认没问题之后,记得最后执行写入[w]
,cfdisk下面有提示。
【可选】键入fdisk -l
查看分区情况。
请留意一下分区类别
在使用fdisk -l
时请留意一下第一分区的 Type 是不是EFI System
,如果不是可以在cfdisk
中选中第一分区后在下方选择[Type]
,调整为EFI System
即可。
顺便给出我的分区情况:
Disk /dev/sda: 953.87 GiB, 1024209543168 bytes, 2000409264 sectors
Disk model: DSWC1P
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: gpt
Disk identifier: C09E473C-91BF-49CF-A6E8-371D67B13335
Device Start End Sectors Size Type
/dev/sda1 4096 1052671 1048576 512M EFI System
/dev/sda2 1052672 630198271 629145600 300G Linux filesystem
/dev/sda3 630198272 1967132671 1336934400 629.5G Linux filesystem
/dev/sda4 1967132672 2000408575 33275904 23.9G Linux filesystem
说明
我另外分了约24G大小的分区,这个分区将被做成 Swap 分区。这种分区是用来缓解内存不足的问题,类似 Windows 的虚拟内存。事实上 Btrfs 文件系统允许使用 Swap 文件来代替 Swap 分区,不过仅能当作虚拟内存使用。而我划分成分区是为了支持系统休眠(Systemctl hibernate)的。
分好区后,就该接着进行格式化了,我个人倾向这样安排文件系统: EFI 分区使用 FAT32 文件系统,系统和数据要做物理隔离,系统分区和数据分区均使用 Btrfs 文件系统,最后剩下的这个分区则是 Swap 分区。
mkfs.vfat -L EFISYS /dev/xxxx1
mkfs.btrfs -m dup -d single -L SYSTEM /dev/xxxx2
mkfs.btrfs -m dup -d single -L DATA /dev/xxxx3
mkswap -L SWAP /dev/xxxx4
Btrfs 子卷与快照
为了利用 Btrfs 的特性,需要先挂载一下然后创建子卷。挂载时可以开启透明压缩,执行命令mount -t btrfs -o compress=zstd /dev/xxxx2 /mnt
。
可以使用df -h
来确认挂载情况。
然后创建 Btrfs 子卷,执行:
btrfs subvolume create /mnt/@ # 创建 / 目录子卷
btrfs subvolume create /mnt/@home # 创建 /home 目录子卷
这样布局是因为 TimeShift 仅支持这种布局。
可以使用btrfs subvolume list -p /mnt
来确认子卷情况
创建好之后先卸载掉该分区,执行umount /mnt
硬盘挂载
格式化完成之后,需要按照如下顺序进行挂载
mount -t btrfs -o subvol=/@,compress=zstd /dev/xxxx2 /mnt
mkdir /mnt/home
mount -t btrfs -o subvol=/@home,compress=zstd /dev/xxxx2 /mnt/home
mkdir /mnt/home/MyData
mount -t btrfs -o compress=zstd /dev/xxxx3 /mnt/home/MyData
mkdir -p /mnt/boot/efi
mount /dev/xxxx1 /mnt/boot/efi
swapon /dev/xxxx4
挂载完请使用df -h
确认一次挂载情况,确保没有挂载错误。对于 Swap 分区的挂载情况可以使用free -h
查看。
系统安装
参考资料
接下来要安装系统了,在此之前先选择好镜像源,执行vim /etc/pacman.d/mirrorlist
来查看当前所有镜像,并将中科大镜像源写到第一行中:
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
接下来执行该命令安装系统【先确保等待 pacman-init.service
服务启动后,才能执行,可通过systemctl status pacman-init
查看】:
pacstrap /mnt base base-devel linux linux-headers linux-firmware btrfs-progs
pacstrap /mnt dhcpcd vim bash-completion iwd
提示
如果你希望使用 linux-lts 内核,应执行以下这些命令:
pacstrap /mnt base base-devel linux-lts linux-lts-headers linux-firmware btrfs-progs
pacstrap /mnt dhcpcd vim bash-completion iwd
安装完毕后,执行genfstab -U /mnt >> /mnt/etc/fstab
来写入fstab
文件,可通过cat /mnt/etc/fstab
进一步查看是否有误。
一切都没有问题之后,就可以 chroot 了,执行arch-chroot /mnt
进入刚刚安装的系统。
初梦
设置系统时区、语言以及字符编码
参考资料
设置系统时区,并更新硬件时间:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
选择系统语言及编码:执行vim /etc/locale.gen
,寻找文件中en_US.UTF-8
和zh_CN.UTF-8
,取消其注释后保存,执行locale-gen
生成 Locale, 最后执行echo 'LANG=en_US.UTF-8' > /etc/locale.conf
完成系统语言及编码的选择。
设置 Hostname 与其解析
这时还需要设置主机名:执行echo 'YOUR_HOST_NAME' > /etc/hostname
,并将YOUR_HOST_NAME
换成自己的主机名即可,不建议使用中文。之后打开/etc/hosts
,执行vim /etc/hosts
,写入如下内容:
127.0.0.1 localhost
::1 localhost
127.0.1.1 YOUR_HOST_NAME
常见IP
- 127.0.0.1: 本机地址,主要用于测试
- 127.0.1.1: 127.0.0.0/8段下面的一个IP,可用来解析自己的主机名。
- 0.0.0.0: 非真正意义上的IP,表示所有在 本机的路由表里没有特定条目指明如何到达 的主机和目的网络。
- 255.255.255.255: 限制广播地址,对本机来说指本网段内(同一广播域)的所有主机,该地址不能被路由器转发。
创建用户与设置密码
记得为 root 用户设置密码,这是保障系统安全的重要一环,执行passwd root
即可。
应该注意到, 一般不以 root 用户登入系统,所以现在创建非 root 用户useradd -m -G wheel -s /bin/bash YOUR_USER_NAME
, 并为其设置密码passwd YOUR_USER_NAME
,之后编辑/etc/sudoers
, 找到#%wheel ALL=(ALL:ALL) ALL
, 取消其注释。
安装微码与引导程序
参考资料
之后安装微码:
pacman -S intel-ucode # For Intel
pacman -S amd-ucode # For AMD
为什么要安装微码?
微指令(英语:microcode),又称微码,是在 CISC 结构下,执行一些功能复杂的指令时,所分解一系列相对简单的指令。
处理器制造商会发布对处理器微码的稳定性和安全性更新。这些更新提供了对系统稳定性至关重要的错误修复。如果没有这些更新,则可能会遇到不明原因的崩溃或难以跟踪的意外停机。
使用 AMD 或 Intel CPU 的用户都应该安装微码更新以确保系统稳定性。在虚拟机或容器中,微码更新应在主机上实施,而不是在客户机系统中。
——摘自 Arch Linux 中文维基
最后要安装引导程序:
pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB # --removable 如果要装入移动硬盘内,一般要加上这个参数
有关 removable 参数有资料这样解释:
某些主板的 UEFI 固件在显示 UEFI NVRAM 引导条目之前,需要在特定的位置存放可引导文件,不支持自定义存放 efi 文件
因此使用--removable
参数解决一些主板 NVRAM 的兼容性问题。
紧接着vim /etc/default/grub
,去掉GRUB_CMDLINE_LINUX_DEFAULT
一行中最后的quiet
参数,并将log level
的值改到5
。
【可选】可以考虑再给GRUB_CMDLINE_LINUX_DEFAULT
加上nowatchdog
参数,但这有可能会引发未知问题,如果watchdog没有导致极严重的问题一般不建议添加,仅当非常清楚可能导致的后果后再做决定。
接着执行grub-mkconfig -o /boot/grub/grub.cfg
来生成grub配置后,至此系统安装就算正式完成了,执行以下命令即可进入新系统【记得拔掉系统镜像盘,修改启动项】:
exit # 退回系统镜像
umount -R /mnt # 递归卸载新系统分区
reboot # 重启
浅梦
开启网络服务
启动新系统之后,记得开启网络服务:
systemctl enable iwd
systemctl start iwd
之后可以执行iwctl
管理无线网络,方法已在前面给出。
添加 Archlinuxcn 软件镜像源
除了官方extra软件源以及其它软件源外,还有一个比较常见常用的软件源是 archlinuxcn 源,我们可以这样添加软件源【编辑/etc/pacman.conf
】:
[archlinuxcn]
SigLevel = Required DatabaseOptional TrustedOnly
Include = /etc/pacman.d/archlinuxcn-mirrorlist
与此同时,再创建文件/etc/pacman.d/archlinuxcn-mirrorlist
并写入以下内容:
#
# Arch Linux CN community repository mirrorlist
# Generated on 2019-12-03
#
# Our main server (ipv4, ipv6, http, https)
#Server = <https://repo.archlinuxcn.org/$arch>
# 中国科学技术大学 (ipv4, ipv6, http, https)
Server = <https://mirrors.ustc.edu.cn/archlinuxcn/$arch>
# 上海科技大学 (上海) (ipv4, http, https)
#Server = <https://mirrors-wan.geekpie.club/archlinuxcn/$arch>
# 网易 (ipv4, http, https)
Server = <https://mirrors.163.com/archlinux-cn/$arch>
# 腾讯云 (ipv4, https)
Server = <https://mirrors.cloud.tencent.com/archlinuxcn/$arch>
# 重庆大学 (ipv4, http, https)
Server = <https://mirrors.cqu.edu.cn/archlinuxcn/$arch>
# SJTUG 软件源镜像服务 (ipv4, https)
#Server = <https://mirrors.sjtug.sjtu.edu.cn/archlinux-cn/$arch>
# 莞工 GNU/Linux 协会 开源软件镜像站 (ipv4, http, https)
#Server = <https://mirrors.dgut.edu.cn/archlinuxcn/$arch>
# 清华大学 (ipv4, ipv6, http, https)
Server = <https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch>
# 浙江大学 (浙江杭州) (ipv4, ipv6, http, https)
Server = <https://mirrors.zju.edu.cn/archlinuxcn/$arch>
# xTom (Hong Kong server) (Hong Kong) (ipv4, ipv6, http, https)
#Server = <https://mirror.xtom.com.hk/archlinuxcn/$arch>
# xTom (US server) (US) (ipv4, ipv6, http, https)
#Server = <https://mirror.xtom.com/archlinuxcn/$arch>
# xTom (Netherlands server) (Netherlands) (ipv4, ipv6, http, https)
#Server = <https://mirror.xtom.nl/archlinuxcn/$arch>
# Open Computing Facility, UC Berkeley (Berkeley, CA, United States) (ipv4, ipv6, http, https)
#Server = <https://mirrors.ocf.berkeley.edu/archlinuxcn/$arch>
配置写好之后,还需要安装 Archlinuxcn 镜像源的 Keys ,执行:
pacman-key --init
pacman -Syy
pacman -S archlinuxcn-keyring
pacman-key --populate archlinuxcn
只有 Keys 安装正确后才能正常安装 Archlinuxcn 镜像源上的软件。
安装 Xorg 图形桌面服务
参考资料 Arch Linux 安装 Xorg
图形桌面服务有两个可选项:Xorg
和WayLand
。一般都使用Xorg
,我们以这样的方式安装Xorg
:
sudo pacman -S xorg-server # 安装 Xorg 服务, 另外 xorg-xinit 以及 xorg-apps 两者都是可选的
lspci -v | grep -A1 -e VGA -e 3D # 检查系统的显卡信息
sudo pacman -S xf86-video-intel nvidia nvidia-utils # 对于 Intel CPU 和 Nvidia GPU 则需要安装这三个
sudo pacman -Ss xf86-video # 自然可以考虑使用开源驱动程序
reboot # 建议重启机器保证驱动等安装正确,没出现其它问题
sudo pacman -S xorg-xinit xorg-twm xterm xorg-xclock # 重启后安装测试工具(可后删除)
cp /etc/X11/xinit/xinitrc ~/.xinitrc # 复制 .xinitrc 配置文件模板
startx # 启动 Xorg 进行图形桌面服务测试
深梦
安装桌面管理器 i3 WM 及其常用系统软件
个人偏好使用Tiling Window Manager
,先前尝试使用过Awesome Window Manager
,因此这次想尝试一些不一样的,于是选择了i3 Window Manager
,安装:
sudo pacman -S i3-wm
为了开机能以图形界面登陆,安装了 Sddm 程序:
sudo pacman -S sddm
sudo systemctl enable sddm
系统音频控制需要安装好以下软件:
sudo pacman -S alsa alsa-utils pulseaudio-utils pulseaudio pavucontrol playerctl # Alsa系的音频控制工具,含pavucontrol图形控制界面工具
个人偏好的软件如下:
sudo pacman -S picom # 窗口透明化
sudo pacman -S rofi # 快速启动工具
sudo pacman -S feh # 壁纸设置工具,支持指定目录下随机,同时也是轻量的图片查看器
sudo pacman -S alacritty # 个人偏好的终端模拟器
sudo pacman -S zsh # 个人偏好的终端
sudo pacman -S polybar # 系统状态栏,可自定制
sudo pacman -S tree # 文件树展开,项目结构可一目了然
sudo pacman -S autorandr # 屏幕扩展的自动管理工具
sudo pacman -S rofimoji # rofi界面的Emoji表情输入
sudo pacman -S telegram-desktop # Telegram聊天工具软件
sudo pacman -S less # 功能强大的查看文件内容的工具
sudo pacman -S timeshift # 快照备份工具,BTRFS文件系统备份常用
sudo pacman -S qbittorrent # BT下载器
sudo pacman -S ark # 开源压缩软件
sudo pacman -S flameshot # 截屏工具,对多屏幕支持友好
sudo pacman -S vlc # 开源视频播放器
sudo pacman -S thunar # 资源管理器
sudo pacman -S ranger # 终端资源管理器
sudo pacman -S xsel # 操作剪贴板的终端工具
sudo pacman -S xdotool # 可以模拟鼠标和按键操作的工具
yay -S i3lock-color # i3常用的屏幕锁定工具
yay -S wechat-appimage # 微信官方客户端
系统字体对个人来说安装 Noto fonts 已经够用了:
sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra
Noto fonts 各字体包内容说明
noto-fonts
: 基础包,覆盖拉丁字母、希腊字母、西里尔字母、阿拉伯语、希伯来语等绝大多数非 CJK 字符。noto-fonts-cjk
: 专门覆盖简体中文、繁体中文、日文、韩文(CJK 统一表意文字),包含 Noto Sans CJK 和 Noto Serif CJK。noto-fonts-emoji
: 支持彩色 Emoji 符号(如 😊⭐🌍)。noto-fonts-extra
: 提供补充字体(如粗体、斜体变体及部分小众语言支持)。
i3 WM 配置
On building...
梦魇
Efibootmgr 使用
On building...
设置 Swap 文件或分区
设置交换文件/分区的做法如下,设置交换文件的话应当使用dd
工具创建特殊文件,设置好权限之后将其格式化
dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress #创建4G的交换空间 大小根据需要自定
chmod 600 /swapfile #设置正确的权限
mkswap /swapfile #格式化swap文件
swapon /swapfile #启用swap文件
sudo echo '/swapfile none swap defaults 0 0' >> /etc/fstab
类似的,也可以自行裁出一块分区后,依次使用mkswap
和swapon
制作 Swap 分区,并在/etc/fstab
最后添加UUID=<YOUR_DISK_UUID> /swap swap swap,defaults 0 0
Magic SysRq Keybinding
On building...
Authentication Agent 配置
在linux使用过程中,难免会遇到一些软件,不能直接用sudo
运行,但需要root权限,比如via-bin
、gparted
,然后我在具体运行中遇到的错误信息如下:
UnhandledPromiseRejectionWarning: Error: No polkit authentication agent found.
于是我就明白这里是缺少了一个专用的助手来安全地授予我们权限,于是我花了一些时间查找,最后从Polkit - ArchWiki里的 1.1 节 Authentication agents 中选了比较合适的lxqt-policykit,这个可以直接用pacman安装。安装好之后我们只需要让它随系统启动即可,在 i3 config 中写入exec --no-startup-id lxqt-policykit
,重启 i3 即可。
Linux 与 Windows 时间同步
Linux 和 Windows 的时间总会存在“时差”,一般这种问题有两个解决办法:
其一,直接修改 Linux 系统
sudo timedatectl set-local-rtc true --adjust-system-clock
其二,修改 Windows 系统
可以打开 PowerShell 运行以下的命令:
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
也可以自己新建一个文本文件,并修改后缀为
.reg
,在该文件中写入如下内容:Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation] "RealTimeIsUniversal" = dword:00000001
然后运行该脚本,即可解决时间不同步的问题。
如果想移除该键,可以将
"RealTimeIsUniversal" = dword:00000001
改成"RealTimeIsUniversal"=-
。
原因分析
Windows 和 Linux 两个系统看待硬件时钟的方式不同:Windows 会将硬件时钟(RTC)看作本地时间;Linux 则会将 RTC 看作 UTC 时间,故 Windows 时钟 = UTC + Time Zone,即两系统之间的时差刚好就是时区。在中国(UTC+8),Linux 总是比 Windows 快 8 小时。
Linux 与 Windows 共用蓝牙设备
On building...
关于Linux系统下键盘的F1~F12键无法响应的问题
先说一下解决方案:
echo 0 | sudo tee s/module/hid_apple/parameters/fnmode
这个方案是临时解决方案,如果想永久生效的话,需要执行:
echo "options hid_apple fnmode=0" | sudo tee -a /etc/modprobe.d/hid_apple.conf
最后重启reboot
或者执行
sudo update-initramfs -u # For Ubuntu
mkinitcpio -P # For Arch Linux
这样每次重新启动计算机也能正常使用F1~F12了。
为什么能解决?
首先要知道Linux系统下一切皆是文件,设备也不是例外。而我们这个操作实际上在做的就是调整设备参数。fnmode
文件内存放的内容是一位二进制码,0
表示默认不按下Fn
,而1
自然表示默认按下Fn
了。这样问题自然很容易复现了:我们在尝试按下F1
~F12
的时候,Fn
键已经处于激活状态,这样自然是输入了其对应的多媒体功能键,那么就算我再按下Fn
也无济于事了,因此这个文件我们需要置零。
扩展知识 Linux伪文件
Linux/Unix系统的文件类型大致可分为三类:普通文件、目录文件和伪文件。
伪文件不用来存储数据,本身不占用任何空间。它是文件系统的一部分,并按目录进行组织。伪文件设置的目的在于提供一种服务,采取与常规文件相同的访问方式进行访问,而且在多数情况下,伪文件用来访问内核(操作系统的核心部分)提供的服务。
常见的伪文件分别有设备文件、命名管道及proc文件。
- 设备文件:又称特殊文件,是物理设备的内部表示,包括计算机和网络中的每个设备都可以当作特殊文件来访问,如键盘、显示器、打印机、磁盘驱动器等等,它们都存放在/dev目录中。
- 命名管道:管道功能的一个扩展,将一个进程的输出连接到另一个进程的输入。
- proc文件:提供一种简单的途径来检查多种类型的系统文件的伪文件,它直接从内核获取信息,而不是使用复杂的程序搜出数据。这些文件都存放在/proc目录中。
这里只是做一个简单介绍,想了解详情还是点开这里比较好,这位作者写的是相当详细的。
安装 yay
On building...
安装 Oh-my-zsh 、切换默认终端并安装插件
前面安装好 Zsh 之后,就可以安装 Oh-my-zsh 了,并且加入其中的一些插件:
On building...
安装 Terminal Simulator
Alacritty
On building...
URxvt
给URxvt添加多标签功能
修改 ~/.Xresources
文件,搜索其中的 URxvt.perl-ext-common
字样,在后面添加 ,tabbed
后执行 xrdb -merge ~/.Xresources
即可。
让URxvt支持组合键
如果你喜欢使用Ctrl
+Arrow
类的组合键,但是你发现它在URxvt这里并不生效,其实是需要修改 ~/.Xresources
配置文件的:
在该文件下任意一个比较合适的地方添加如下的配置:
! enable some control keymap.
URxvt.keysym.Control-Up: \033[1;5A
URxvt.keysym.Control-Down: \033[1;5B
URxvt.keysym.Control-Left: \033[1;5D
URxvt.keysym.Control-Right: \033[1;5C
更改URxvt字体
安装好字体后,需要编辑 ~/.Xresources
文件,找到其中的段落:
! fonts
URxvt.letterSpace: -1
URxvt.font: xft:Monospace:regular:size=11
URxvt.imFont: xft:Monospace:regular:size=11
URxvt.italicFont: xft:Monospace:italic:size=11
URxvt.boldFont: xft:Monospace:bold:size=11
URxvt.boldItalicFont: xft:Monospace:regular:size=11
! run :.!fc-list | grep <font-name>
改成如下即可:
! fonts
URxvt.letterSpace: -1
URxvt.font: xft:MesloLGS NF-20
URxvt.imFont: xft:MesloLGS NF-20
URxvt.italicFont: xft:MesloLGS NF-20
URxvt.boldFont: xft:MesloLGS NF-20
URxvt.boldItalicFont: xft:MesloLGS NF-20
! run :.!fc-list | grep <font-name>
保存退出后还需要执行 xrdb -m ~/.Xresources
重启一下终端,你就可以看到字体已被启用了。
然后执行 xrdb -merge ~/.Xresources
,重启一下,即可生效。
安装 Fcitx5 Rime 中文输入法
On building...
中文输入法折腾起来挺麻烦,当初我也是翻了好些个资料,现在我直接整合到一起了,首先应当安装以下这些软件
sudo pacman -S fcitx5-configtool fcitx5 fcitx5-gtk fcitx5-qt fcitx5-rime librime librime-prelude # 输入法及其可扩展的工具依赖
yay -S rime-cloverpinyin
sudo pacman -S python-jieba pypinyin opencc python-requests
接着编辑/etc/environment
文件, 写入以下这些内容:
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
fcitx5 &
接着编辑文件~/.local/share/fcitx5/rime/default.custom.yaml
, 写入以下配置,设置使用四叶草输入法,并设定候选词个数
patch:
"menu/page_size": 10
schema_list:
- schema: clover
接着先推荐一个主题,是我个人比较喜欢使用的一个主题:https://github.com/hosxy/Fcitx5-Material-Color
一般手动安装主题都是安装以下命令安装的:
git clone <link.to.github.repo>
cd <repo.name>
cp -r <theme.name> ~/.local/share/fcitx5/themes
安装好主题之后在这里编辑文件~/.config/fcitx5/conf/classicui.conf
,写入:
# 垂直候选列表
Vertical Candidate List=False
# 按屏幕 DPI 使用
PerScreenDPI=True
# Font (设置成你喜欢的字体)
#Font="思源黑体 CN Medium 13"
Font="Noto Sans CJK SC Bold 20"
# 主题
Theme=Material-Color-Indigo
接着安装一些常用词库,重启后就可以开始体验舒适的中文输入了:
yay -S rime-pinyin-zhwiki fcitx5-pinyin-moegirl-rime # 安装词库
安装 LaTeX & LaTeX Workshop in VS Code
要想在本地使用 LaTeX,安装这些后在 VS Code 上安装插件 LaTeX Workshop,
sudo pacman -S texlive-core texlive-langchinese texlive-latexextra texlive-fontsextra texlive-science texlive-xetex
打开其配置文件(Ctrl
+Shift
+P
后输入settings.json
, 打开 User Settings), 在{}
内加入如下内容:
User Settings.json 文件内容
"latex-workshop.latex.tools": [
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"%DOC%"
]
},
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
},
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
},
{
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "latexmk",
"tools": [
"latexmk"
]
},
{
"name": "xelatex",
"tools": [
"xelatex"
]
},
{
"name": "pdflatex -> bibtex",
"tools": [
"pdflatex",
"bibtex"
]
},
{
"name": "pdflatex -> bibtex -> pdflatex*2",
"tools": [
"pdflatex",
"bibtex",
"pdflatex",
"pdflatex"
]
},
{
"name": "xelatex -> bibtex -> xelatex*2",
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
}
],
"latex-workshop.view.pdf.viewer": "tab",
"latex-workshop.latex.clean.fileTypes": [
"*.aux",
"*.bbl",
"*.blg",
"*.idx",
"*.ind",
"*.lof",
"*.lot",
"*.out",
"*.toc",
"*.acn",
"*.acr",
"*.alg",
"*.glg",
"*.glo",
"*.gls",
"*.ist",
"*.fls",
"*.log",
"*.fdb_latexmk"
],
"latex-workshop.bibtex-format.tab": "4 spaces",
"latex-workshop.latex.autoBuild.run": "onSave",
"latex-workshop.latex.recipe.default": "lastUsed",
使用 Daed 科学上网
参考资料 archlinux 透明代理 / dae
科学上网,就用 Daed 保驾护航,首先需要安装并运行:
sudo pacman -S daed
sudo systemctl enable daed
sudo systemctl start daed
之后就可以通过访问localhost:2023来配置代理。注意,订阅链接需要从机场的订阅链接获取。
On building...
Linux 屏幕扩展
使用arandr
和autorandr
即可方便快捷地配置屏幕扩展方案。
Linux 查找软件安装目录
Linux 一般安装的软件位置会在以下几个目录中,如有需要届时可以自行查找:
/usr/share
/usr/local
/opt
如果已知可执行程序,也可直接使用whereis
, which
等查看位置
Ark打开Zip压缩包出现中文乱码的解决方案
执行如下指令即可:
yay -S p7zip-natspec
# 中间会提示你是否要删除P7zip,选择是。
然后打开Ark,点击菜单栏中的设置,单击配置Ark,然后取消勾选Libzip,并且要选中P7zip,保存设置并重启Ark即可。
屏幕亮度调节
执行sudo pacman -S acpilight
,安装之后我们还需要将当前用户组加入video
组内,执行sudo gpasswd video -a <YOUR_USER_NAME>
即可,如要确认该用户是否在组内,可以执行groups <YOUR_USER_NAME>
,在 i3 中就需要写入bindsym XF86MonBrightnessUp exec xbacklight -inc 10
和bindsym XF86MonBrightnessDown exec xbacklight -dec 10
类似的多媒体按键名称
XF86AudioRaiseVolume
XF86AudioLowerVolume
XF86AudioMute
XF86AudioPlay
XF86AudioNext
XF86AudioPrev
XF86AudioStop
修改默认应用程序
随着使用时间增长,有些文件可以由许多应用打开,这难免会发生冲突,尤其在习惯以某个应用打开之后在近期装了新软件把默认配置覆盖掉的时候,就会直接高血压。但还好有办法解决这个问题。
首先要知道系统依靠什么来设定文件到应用的映射:通过/usr/share/applications
下的desktop
文件来设定关联。可以通过ls /usr/share/applications
来查看当前可以设定的关联。
因此修改的流程应该是:
- 先通过
ls /usr/share/applications
找到要找的关联desktop文件 - 执行命令
xdg-mime query filetype <你要查看文件的文件名>
,比如当前目录有file.md
,我就可以执行xdg-mime query filetype file.md
,这样就可以查询这个文件类型当前设置的默认应用程序是什么 - (可以不做)也可以执行命令
xdg-mime query default application/<文件后缀>
来查看这个文件类型当前设置的默认应用程序。 - 执行命令
xdg-mime default <第一步你选择的结果> application/<文件后缀>
来设定应用与文件类型的关联。
修改是立即生效的,因此不用重启计算机。
Virtual Machine Manager 安装与使用方法
首先要确保你的系统是支持虚拟化的,执行下列命令来查看:
LC_ALL=C lscpu | grep Virtualization
如果是使用Intel CPU的话,会看到 VT-x
,如果是使用AMD的话会看到 AMD-V
。
接下来我们要安装相关组件:
sudo pacman -S qemu libvirt ovmf virt-manager virt-viewer dnsmasq vde2 bridge-utils openbsd-netcat ebtables iptables libguestfs
之前确实是搞错了,不是只安装virt-manager就可以的,它只是一个GUI管理器,真正做虚拟服务的是qemu,它只是替我们去调用了qemu的API罢。安装好这些后需要继续进行配置:
首先我们需要启动服务:
sudo systemctl enable libvirtd.service
sudo systemctl start libvirtd.service
然后将我们的用户账户添加到libvirt组内:
sudo usermod -aG libvirt $(whoami)
newgrp libvirt
然后我们重启一下服务:
sudo systemctl restart libvirtd.service
之后我们打开 virt-manager
,新建连接。选择 QEMU/KVM
后保持默认就可以开始新建虚拟机了!
桌面壁纸配置
i3 窗口管理器下可以直接使用feh
来设置壁纸。
feh
对于 Awesome 窗口管理器,我推荐使用 Nitrogen。
nitrogen --head=<Your-Monitor-ID> --random --set-zoom-fill /path/to/your/wallpaper/directory > /dev/null 2>&1
将平板作为扩展屏幕使用
家里的显示器数量有限,但又不能因此就再买一个显示器。又考虑到我手中还有一个平板,那么我就有办法让平板作为我的第三个屏幕。
基本原理其实就是在电脑上自己手动添加一个视频信号输出,然后由服务端软件开放端口投出,最后由平板连接这个开放端口,达到显示第三屏幕的效果。
注意
这种操作并非不受限制:
- 你首先要知道你的计算机最多能扩展多少个屏幕,在这里我的电脑能支持同时输出3个显示器设备。
- 你还要知道你的每一个显卡的输出信号能力,即它最大的分辨率输出能力,比如我的显卡性能并不是特别强,最大只能输出1080P「1920✕1080」,那么如果我尝试让它输出2560✕1600的分辨率,这个肯定会失败的。
- 服务端软件一般系统并不自带,因此需要用户自行安装,可以执行
sudo pacman -S x11vnc
来直接安装。
了解了这些限制后我们就可以开始了:
首先我们应该确定要输出的分辨率,并获取相关参数,执行
cvt <X> <Y> <Z>
提示
这里的
<X>
、<Y>
、<Z>
分别表示分辨率宽、高和屏幕刷新率参数。如cvt 1920 1080 60
表示分辨率为1920✕1080,屏幕刷新率为60Hz。你会得到类似这个的输出:
❯ cvt 1920 1080 60 # 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz Modeline "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
获取到这些参数后我们还要复制好这些参数,并执行下面这个命令:
xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
新建好这个输出模式后再执行下面这个命令:
xrandr --addmode <API> 1920x1080_60.00
提示
这里的
<API>
是指你输出的视频信号端口名称,如果觉得这里不清晰的话可以先执行xrandr
来看看,执行完上面指令的时候就可以看到你新添加的输出模式了。另外,如果是希望扩展屏幕,建议
<API>
选取未连接状态的端口。不过如果只是希望复制屏幕的话,大可不必用这种方法。接下来你还要开启输出模式,做屏幕扩展,执行
xrandr --output <API> --mode 1920x1080_60.00 --right-of <Other API>
提示
当然也可以使用其它参数,详细可以执行
xrandr --help
后关注--output
下的其它参数。最后你就需要使用
x11vnc
来开放端口,将这个新添加的屏幕输出出去,执行x11vnc -clip 1920x1080+X+Y
提示
这里的X表示扩展屏幕的起点横坐标,Y表示扩展屏幕的起点纵坐标。比如我现在在使用两个显示器,且分辨率都是1920✕1080,那么我在扩展第三个屏幕的时候就可以选择起点横坐标为3840,纵坐标为0。
当然如果你希望它在后台运行,可以添加-bg
来后台启动。如果希望设置密码,添加
-usepw
就可以了。使用这个参数时它会在~/.vnc/passwd
中或~/.vnc/passwdfile
第一行里找到密码,如果这些文件都不存在,则它会提示你输入密码,并保存在~/.vnc/passwd
中。如果想指定端口的话需要添加参数
-rfbport PORT
,其中PORT
要换为你想使用的端口号。
现在你可以在平板上连接电脑开放的端口来查看了。
通过 Systemctl 设置开机自启动服务
systemd
单元文件的语法来源于 XDG 桌面项配置文件.desktop
文件,最初的源头则是Microsoft Windows的.ini
文件。单元文件可以从多个地方加载,systemctl show --property=UnitPath
可以按优先级从低到高显示加载目录:
/usr/lib/systemd/system/
:软件包安装的单元
/etc/systemd/system/
:系统管理员安装的单元——ArchWiki
systemd的文件主要存放在/usr/lib/systemd 目录中,有系统(system)和用户(user)之分
/usr/lib/systemd/system/ #开机不登陆就能运行
/usr/lib/systemd/user/ #登陆后运行每一个服务以.service结尾,文件内一般会分为3部分:[Unit]、[Service]、[Install]
[Unit] 主要是对这个服务的说明,内容包括Description和After,Description用于描述服务,After用于描述服务类别
[Service] 是服务的关键,是服务的一些具体运行参数的设置,
Type=forking是后台运行的形式,
PIDFile为存放PID的文件路径,
ExecStart为服务的具体运行命令,
ExecReload为重启命令,
ExecStop为停止命令,
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!
[Install] 是服务安装的相关设置,可设置为多用户的
——MregXN
对于语法问题,完全可以先看看该目录下的其他systemd单元文件,参照它们来写。
首先要准备好你希望每次开机都要启动的脚本,我姑且假设这个脚本名字叫做supsys.sh
然后需要给这个脚本授予权限,执行sudo chmod 0755 /path/supsys.sh
接着创建service文件,执行sudo vim /usr/lib/systemd/system/supsys.service
输入如下样例:
[Unit]
Description=run shell script
[Service]
ExecStart= /path/supsys.sh
Type = simple
[Install]
WantedBy=multi-user.target
其他具体操作请查看ArchWiki。
保存退出后,就可以直接执行sudo systemctl enable supsys.service
来达到你的开机自启动的目的。
常用的 Linux 清理命令
sudo pacman -Scc # 清除掉pacman的无用安装包
yay -Scc # 清除掉yay的无用安装包
sudo pacman -R $(pacman -Qdtq) # 清除掉无用的依赖
sudo journalctl --vacuum-size=50M # 只保留50M大小的日志。
# 当然你也可以使用 sudo journalctl --vacuum-time=1w,这样就是只保留最近一周的日志。
sudo rm /var/lib/systemd/coredump/* # 清除掉崩溃日志内容