Arch系统安装与配置

2023/05/29Monday Linux

下载 & 校验镜像

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

磁盘分区

使用lsblkfdisk -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

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

锁屏

slock

截屏

maim

.sxhkdrc

alt + control + a
	maim -s | xclip -selection clipboard -t image/png -i

壁纸管理

feh

消息通知

Desktop Notifications

一般像 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~