Arch系统安装与配置
下载 & 校验镜像
https://archlinux.org/download/
Windows PowerShell:
Get-FileHash .\archlinux-2023.05.03-x86_64.iso
Linux:
sha256sum ./archlinux-2023.05.03-x86_64.iso
对比镜像下载目录中sha256sums.txt
文件内容
安装
使用磁盘管理工具分出一块空闲区域
准备安装介质
使用工具Ventoy,插入U盘运行 Ventoy 制作启动工具,之后将镜像文件复制到U盘中。
在 bios 中关闭安全启动,设置U盘为第一启动项,默认选项进入安装系统。
连接无线网络
root@archiso ~ # iwctl
进入 iwctl 交互环境
[iwd]# device list 列出wifi设备
[iwd]# station wlan0 connect "SSID" 连接网络
[iwd]# quit
磁盘分区
使用lsblk
或fdisk -l
查看分区信息。
设备 起点 末尾 扇区 大小 类型
/dev/nvme0n1p1 2048 534527 532480 260M EFI 系统
/dev/nvme0n1p2 534528 796671 262144 128M Microsoft 保留
/dev/nvme0n1p3 796672 307996671 307200000 146.5G Microsoft 基本数据
/dev/nvme0n1p4 307996672 731877375 423880704 202.1G Microsoft 基本数据
/dev/nvme0n1p5 998117376 1000214527 2097152 1G Windows 恢复环境
/dev/nvme0n1p6 731877376 820000000 88122625 42G Linux root (x86-64)
/dev/nvme0n1p7 820000768 998117375 178116608 84.9G Linux home
使用fdisk /dev/nvme0n1
命令进入 fdisk 分区工具交互环境
Command (m for help):g 更改为gpt格式 *
Command (m for help):p 打印分区信息
Command (m for help):n 新建分区
Command (m for help):t 改变分区类型
Command (m for help):w 写入分区
Command (m for help):q 退出
Command (m for help):d 删除分区
分区类型
- 1: EFI
- 23: Linux root (x86-64)
- 42: Linux home
分区格式化
mkfs.ext4 /dev/nvme0n1p6
mkfs.ext4 /dev/nvme0n1p7
挂载分区
mount /dev/nvme0n1p6 /mnt 挂载根分区
mount --mkdir /dev/nvme0n1p1 /mnt/boot 将EFI挂载到boot
mount --mkdir /dev/nvme0n1p7 /mnt/home 挂载home分区
建立交换文件
dd if=/dev/zero of=/mnt/swapfile bs=1M count=8192 status=progress
chmod 0600 /mnt/swapfile
mkswap -U clear /mnt/swapfile
swapon /mnt/swapfile
设置软件源
根据国内网速排序:
reflector --verbose --country China --age 12 --protocol https --protocol http --sort rate --save /etc/pacman.d/mirrorlist
安装基础系统
pacstrap -K /mnt base linux linux-firmware sof-firmware
生成 fstab
genfstab -U /mnt >> /mnt/etc/fstab
切换到新系统:
arch-chroot /mnt
设置时区:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
本地化
pacman -S vim
vim /etc/locale.gen 取消 #en_US.UTF-8 UTF-8 和 #zh_CN.UTF-8 UTF-8 这两行注释
locale-gen
vim /etc/locale.conf 创建文件并输入 LANG=en_US.UTF-8
hostname
vim /etc/hostname
网络管理器
pacman -S networkmanager
systemctl enable NetworkManager.service
设置 root 密码
passwd
GRUB 引导程序
pacman -S intel-ucode 安装intel CPU微码(error: /boot/intel-ucode.img exists
pacman -S grub efibootmgr os-prober
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
vim /etc/default/grub 取消注释 GRUB_DISABLE_OS_PROBER=false
grub-mkconfig -o /boot/grub/grub.cfg
重启后没有 Windows 引导的话再运行一次gurb-mkconfig
即可
收尾
exit 退出chroot环境
swapoff /mnt/swapfile 关闭交换文件
umount -R /mnt 取消挂载mnt
reboot 重启
初始化
连接无线网络
nmcli device wifi connect "SSID" password "PASSWORD"
创建普通用户 & 权限提升
useradd -m -G wheel kicoe
passwd kicoe
pacman -S sudo
EDITOR=vim visudo 使用visudo编辑sudoers文件
取消注释 #%wheel ALL=(ALL:ALL) ALL
切换用户:
su - kicoe
AUR
sudo -e /etc/pacman.conf
添加:
[archlinuxcn]
Server = https://mirrors.bfsu.edu.cn/archlinuxcn/$arch
pacman -Syyu
pacman -S archlinuxcn-keyring
pacman -S base-devel
pacman -S yay
显示环境
# 最新intel核显驱动(
pacman -S mesa vulkan-intel intel-media-driver
# 字体
pacman -S noto-fonts-cjk noto-fonts-emoji
# xorg
pacman -S xorg xorg-xinit
输入法
pacman -S fcitx5-im fcitx5-qt fcitx5-gtk fcitx5-chinese-addons
编辑/etc/environment
添加
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus
使用fcitx5-configtool
设置输入法
其他
ctrl caps 按键互换
setxkbmap -option ctrl:swapcaps
苹果字体Liga SFMono Nerd Font
git clone https://github.com/shaunsingh/SFMono-Nerd-Font-Ligaturized.git && cd SFMono-Nerd-Font-Ligaturized
cp *.otf ~/.local/share/fonts
CAUTION
当前声音播放可能会有进程占用bug,fix:
sudo pacman -S pipewire-pulse pipewire-alsa
sudo pacman -S pavucontrol
🪜
推荐将 ss 与 kcptun 都打包进 docker 镜像, 方便服务器与客户端部署
sudo paman -S docker
systemctl enable docker.service
使用 privoxy 转发 http 8080 端口 到 socks 1080 端口
sudo pacman -S privoxy
vim /etc/privoxy/config
# 添加下面两行
forward-socks5 / 127.0.0.1:1080 .
listen-address localhost:8080
重启 & 开启 privoxy 服务
systemctl restart privoxy
systemctl enable privoxy
- 系统代理设置
localhost:8080
- 参数启动:
google-chrome --proxy-server="http://localhost:8080"
- 终端代理:
export http_proxy=http://localhost:8080
export https_proxy=http://localhost:8080
新系统
本次重装 Arch 主要是想试试平铺式桌面系统,dwm 是其中较轻量的一个,采用 C 编写,源码保持在两千行,安装和配置都是通过源码
git clone https://git.suckless.org/dwm
cd dwm
sudo make clean install
以同样的方式安装 st(simple terminal) 和 dmenu 启动管理器
git clone https://git.suckless.org/st
git clone https://git.suckless.org/dmenu
startx
启动 dwm:
cp /etc/X11/xinit/xinitrc ~/.xinitrc
vim ~/.xinitrc
# 删除最后一段,添加:
exec dwm
分辨率调整:~/.Xresources
Xft.dpi: 200
获取应用 WM_Class
xprop WM_CLASS
然后将鼠标的十字准星点击对应的窗口就行了
status bar
一个自己用 golang 实现的简单状态栏:
https://github.com/moonprism/dotfiles/blob/master/.dwm/ds.go
Patches
- autostart
在 dwm 启动时运行一些服务,注意
chmod +x ~/.dwm/autostart.sh
- fullscreen
- swwitchtotag 自动切换到活动程序
- alternativetags 允许定义两种不同 tags 切换
- cfacts 调整窗口大小
XDG 规范
XDG(Cross-Desktop Group) 是一类帮助系统之间兼容的规范,linux 下的 chrome 打开下载文件目录就遵循此规范
$ xdg-mime query default inode/directory
kitty-open.desktop
$ l /usr/share/applications
可以在 kitty-open.desktop上 发挥,使用基于命令行的文件浏览器
CAUTION
最新版本 chrome 缩放 bug 解决 https://wiki.archlinux.org/title/HiDPI#GDK_3_(GTK_3) 多试几次,过于玄学...
触摸板
https://wiki.archlinux.org/title/libinput
$ xinput list
$ xinput list-props 设备ID
$ xinput set-prop 设备ID 'libinput Accel Speed' 0.5
/etc/X11/xorg.conf.d/30-touchpad.conf
Section "InputClass"
Identifier "touchpad"
Driver "libinput"
MatchIsTouchpad "on"
Option "Tapping" "on" 触摸点击
Option "NaturalScrolling" "true" 自然滚动
Option "AccelSpeed" "0.5" 灵敏度
Option "TappingButtonMap" "lrm" 单指双指和三指点击对应lrm鼠标左右中键
EndSection
按键绑定
https://wiki.archlinux.org/title/Sxhkd
xev
可以帮助查看按键名
音量
.sxhkdrc
XF86AudioRaiseVolume; @XF86AudioRaiseVolume
amixer sset Master 5%+
XF86AudioLowerVolume; @XF86AudioLowerVolume
amixer sset Master 5%-
亮度
https://wiki.archlinux.org/title/backlight#Backlight_utilities
锁屏
截屏
.sxhkdrc
alt + control + a
maim -s | xclip -selection clipboard -t image/png -i
壁纸管理
消息通知
一般像 Gnome KDE 等桌面都按这套规范处理 DBus 实现消息系统,dwm 的话可以选择一些第三方的桌面通知服务,比如 dunst
sudo pacman -S dunst libnotify
在 .tmux.conf
中使用这段代码可以拿到 dunst 暂存消息数放到 tmux status 展示
msg_count='#(info=$( dunstctl count );c=${info####*:};if [ $c != '0' ];then echo " #[fg=black,bg=red,bold] $c";fi;)'
set -g status-right "#[fg=white,bg=#24283B] %Y-%m-%d ❬ %H:%M$msg_count "
dunst 主要是用来做消息通知的,在消息分类,自动清除等功能上我还没能找到较好的方法.
Display manager
/usr/share/xsessions/dwm.desktop
[Desktop Entry]
Encoding=UTF-8
Name=dwm
Comment=Dynamic window manager
Exec=dwm
Icon=dwm
Type=XSession
更多配置请参照我的dotfiles~