跳转到内容

极致强迫症之Surface Pro4安装Arch Linux

制作U盘镜像

etcher

从U盘启动

电脑关机。同时按 电源键音量加键。按完后松开电源键,但不要松开音量加键。过几秒,进入UEFI设置。选Boot configuration,将 USB Storage 拖动到最上面。按 Exit,然后 Restart Now。

安装前配置

在启动项列表中选默认第一项。等一会儿,进入命令行后就可以开始安装了。

联网

ip link # list network interface
iwctl #执行iwctl命令,进入交互式命令行
device list #列出设备名,比如无线网卡看到叫 wlan0
station wlan0 scan #扫描网络
station wlan0 get-networks #列出网络 比如想连接YOUR-WIRELESS-NAME这个无线
station wlan0 connect YOUR-WIRELESS-NAME #进行连接 输入密码即可
exit #成功后exit退出
ping www.baidu.com # 如果有响应表明联网成功。按ctrl+C可以终止ping

更新系统时钟

timedatectl status #检查服务状态
timedatectl set-ntp true #将系统时间与网络时间进行同步
timedatectl status #检查服务状态

硬盘分区

EFI 分区: /efi 800M 根目录: / 100G 用户主目录: /home 剩余全部

# 将磁盘转换为 gpt 类型
# 如果你使用 NVME 的固态硬盘,你看到的磁盘名称可能为 nvme0n1。
lsblk #显示分区情况 找到你想安装的磁盘名称
parted /dev/nvme0n1 #执行parted,进入交互式命令行,进行磁盘类型变更
(parted)mktable #输入mktable
New disk label type? gpt #输入gpt 将磁盘类型转换为gpt 如磁盘有数据会警告,输入yes即可
quit #最后quit退出parted命令行交互
# 磁盘分区
# EFI 分区选择`EFI System`类型,其余两个分区选择`Linux filesystem`类型。
cfdisk /dev/nvme0n1 #执行分区操作,分配各个分区大小,类型
fdisk -l #分区结束后, 复查磁盘情况
# 在用cfdisk分区时是交互界面。要更改分区类型,是在Type菜单。在最后选Write保存。选Quit退出。

格式化分区

# 格式化
#格式化根目录和home目录的两个分区
mkfs.ext4 /dev/nvme0n1p2
mkfs.ext4 /dev/nvme0n1p3
#格式化efi分区
mkfs.vfat /dev/nvme0n1p1

挂载分区

# 挂载根分区
mount /dev/nvme0n1p2 /mnt
# 挂载EFI分区
mkdir /mnt/efi
mount /dev/nvme0n1p1 /mnt/efi
# 挂载家目录分区
mkdir /mnt/home
mount /dev/nvme0n1p3 /mnt/home

镜像源

vim /etc/pacman.d/mirrorlist
# 看看开头的镜像源是不是中国的,如果不是,在开头添加镜像源
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch

安装

# 安装 Arch
pacstrap -K /mnt base base-devel linux linux-firmware linux-headers linux-firmware-marvell
# 如果不安装 linux-firmware-marvell 则surface pro4无法上网,从网上看,这些型号都需要安装该包:Surface Pro 4, 5, 6, Book 1, 2, Laptop 1, 2
pacstrap -K /mnt git neovim zsh dhcpcd networkmanager
# 解释各包:
# base 一个基本的Arch Linux软件包集,包括基本的系统工具和库。是搭建系统的基础。
# base-devel一个扩展的软件包集,包含一些用于编译和构建软件的工具。如果你计划进行软件开发或者需要编译软件包,安装 `base-devel` 是很有用的。在AUR包的安装是必须的。
# linux Linux内核的主要软件包。
# linux-firmware 包含Linux所需的硬件固件的软件包。
# linux-headers Linux内核头文件的软件包,通常在编译内核模块时需要。
# git
# grub GRUB引导加载程序,用于引导操作系统。这是一种常见的引导加载程序,特别是在传统的BIOS系统中。
# efibootmgr 用于管理UEFI引导项的工具,适用于支持UEFI的系统。
# os-prober 用于检测其他操作系统的工具,通常与GRUB一起使用。
# openssl 提供加密和解密等安全功能的库和工具。
# networkmanager 提供网络管理服务,用于配置和管理网络连接。
# iwd 一个无线网络守护程序,用于管理Wi-Fi连接。它提供了一种轻量级的方式来处理Wi-Fi网络连接。
# dhcpcd DHCP客户端,用于自动获取IP地址。
# bash-completion:这是一个用于Bash shell的自动补全工具,可以提高在命令行中输入命令和参数的效率。它增加了命令、文件和路径等的自动完成功能。
# neovim
# zsh

Arch基础配置

# fstab 用来定义磁盘分区
genfstab -U /mnt >> /mnt/etc/fstab
cat /mnt/etc/fstab # 复查一下确保没有错误
# 把环境切换到新系统的/mnt 下
arch-chroot /mnt
# 时区设置 在/etc/localtime 下用/usr 中合适的时区创建符号链接
# 设置为上海时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 硬件时间设置,将当前的正确 UTC 时间写入硬件时间。
hwclock --systohc
# 本地化
# Locale 决定了地域、货币、时区日期的格式、字符排列方式和其他本地化标准
nvim /etc/locale.gen
# 去掉 en_US.UTF-8 及 zh_CN.UTF-8 所在行的注释符号(#)
locale-gen # 生成 locale
echo 'LANG=en_US.UTF-8' > /etc/locale.conf # 写入语言配置
# 设置主机名
nvim /etc/hostname # 写入主机名,我这里叫surface
nvim /etc/hosts # 写入如下内容,注意主机名和 /etc/hostname 对应
127.0.0.1 localhost
::1 localhost
127.0.1.1 surface
# 设置root用户密码
passwd root
# 安装微码
pacman -S intel-ucode #Intel
pacman -S amd-ucode #AMD
# 安装引导程序
pacman -S grub efibootmgr #grub是启动引导器,efibootmgr被 grub 脚本用来将启动项写入 NVRAM。
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
nvim /etc/default/grub # 去掉`GRUB_CMDLINE_LINUX_DEFAULT`一行中最后的 quiet 参数,同时把 log level 的数值从 3 改成 5。这样是为了后续如果出现系统错误,方便排错。同时在同一行加入 nowatchdog 参数,这可以显著提高开关机速度。
# 生成 GRUB 所需的配置文件
grub-mkconfig -o /boot/grub/grub.cfg

退出安装

exit # 退回安装环境,或者按`Ctrl+D`
umount -R /mnt # 取消挂载
# 重启前要先拔掉优盘, 否则你重启后还是进安装程序而不是安装好的系统。
reboot # 重启

进入系统

# 重启后,开启 dhcp 服务即可连接网络
systemctl start dhcpcd #立即启动dhcp
systemctl start dhcpcd # 查看是否启动成功
systemctl start NetworkManager
systemctl enable NetworkManager # 设置开机自启动
# 连接网络
# 方式1
nmcli device wifi connect <网络名> <密码>
# 方式2,交互式界面
nmtui
ping www.baidu.com #测试网络连接

下面这个问题已经解决了,如果跟着上面的教程一步步走,下面这个问题可以忽略。

来自:[SOLVED] Missing Wireless Card Interface After Install / Installation / Arch Linux Forums

发现无法上网,ip addr 不显示网卡信息(wlan0),解决办法:

# 重新插入U盘,从U盘启动
# 联网
iwctl #执行iwctl命令,进入交互式命令行
device list #列出设备名,比如无线网卡看到叫 wlan0
station wlan0 scan #扫描网络
station wlan0 get-networks #列出网络 比如想连接YOUR-WIRELESS-NAME这个无线
station wlan0 connect YOUR-WIRELESS-NAME #进行连接 输入密码即可
exit #成功后exit退出
# 挂载分区
mount /dev/nvme0n1p2 /mnt
# 把环境切换到新系统的/mnt 下
arch-chroot /mnt
# 安装 linux-firmware-marvell
pacman -S linux-firmware-marvell
# 退出安装
exit # 退回安装环境,或者按`Ctrl+D`
umount -R /mnt # 取消挂载
# 重启前要先拔掉优盘, 否则你重启后还是进安装程序而不是安装好的系统。
reboot # 重启

系统基础设置

# 设置普通用户
useradd -m -G wheel <用户名> # 添加普通用户
passwd <用户名> # 设置用户密码
nvim /etc/sudoers # 为wheel组中的用户添加sudo权限, 将108行的注释去掉, 会提醒这是个只读文件,不用管,直接:w!强制写入
# 解释108行:# %wheel ALL=(ALL:ALL) ALL
# %wheel 代表是 wheel 组,百分号是前缀 ALL= 代表在所有主机上都生效(如果把同样的`sudoers`文件下发到了多个主机上) (ALL) 代表可以成为任意目标用户 ALL 代表可以执行任意命令
# 设置默认shell
whereis zsh # 查看shell位置
chsh -s /usr/bin/zsh # 更改默认shell

安装桌面环境

从这里,我以普通用户身份登录。

sudo pacman -Syyu #升级系统中全部包
# 安装hyprland桌面环境
sudo pacman -S hyprland kitty waybar sddm
# 解释各包:
# hyprland 桌面
# kitty 仿真终端
# waybar 顶部状态栏
# sddm 登录界面
# 开机自动启动sddm
sudo systemctl enable sddm
# 重启,进入桌面环境
reboot

hyprland的一些快捷键:

Win+Q 开启终端 Win+C 关闭窗口 Win+R 呼出菜单 Win+数字 切换桌面 Win+Shift+数字 将当前窗口移动到对应工作区 Win+鼠标左键 拖动窗口 Win+鼠标右键 调整窗口大小 Win+V 让窗口浮动出来

桌面环境配置

# 去除桌面顶部的提示条
# 按Win+Q,打开终端。如果提示符被提示条遮住,可以多按几次回车,让提示符露出来。
nvim ~/.config/hypr/hyprland.conf # 注释掉文件里的这一行:
# auto generated= 1 # remove this line to remove the warning
# 按:wq 保存并退出,提示条就消失了。
# 设置交换文件swap
# 在桌面环境中,交换分区或文件用来实现休眠(hibernate)的功能,即将当前环境保存在磁盘的交换文件或分区部分。除此之外,某些特定软件需要 swap 才可以正确运行。交换文件与分区性能相同,且交换文件更为灵活,可随时变更大小,增加与删除。
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress #创建4G的交换空间 大小根据需要自定
sudo chmod 600 /swapfile #设置正确的权限
sudo mkswap /swapfile #格式化swap文件
sudo swapon /swapfile #启用swap文件
sudo nvim /etc/fstab # 追加如下内容:
/swapfile none swap defaults 0 0
# 开启32位支持库
nvim /etc/pacman.conf # 取消注释如下两行:
# [multilib]
# Include = /etc/pacman.d/mirrorlist
# 刷新 pacman 数据库
pacman -Syyu

安装基础软件

# 安装字体
# 一般装上文泉驿就能解决大多wine应用中文方块的问题
sudo pacman -S adobe-source-han-serif-cn-fonts adobe-source-code-pro-fonts ttf-jetbrains-mono-nerd wqy-zenhei
#安装谷歌开源字体及表情
sudo pacman -S noto-fonts-cjk noto-fonts-emoji noto-fonts-extra
# 安装ttf-font-awesome, 不然有的图标可能显示不出来
sudo pacman -S ttf-font-awesome
#识别NTFS格式的硬盘
sudo pacman -S ntfs-3g
# 安装显卡驱动
# AMD
sudo pacman -S xf86-video-amdgpu xf86-video-ati mesa vulkan-radeon
# intel
sudo pacman -S xf86-video-intel vulkan-intel mesa
# 安装音频驱动
pacman -S alsa-utils pulseaudio pulseaudio-bluetooth
# 安装蓝牙驱动
sudo pacman -S bluez bluez-utils
systemctl enable bluetooth.service
systemctl start bluetooth.service
# 安装常用工具
sudo pacman -S wget
# 安装输入法
sudo pacman -S fcitx5 fcitx5-chinese-addons fcitx5-configtool
# 安装fuzzel (一个类似wofi、rofi的启动器)
sudo pacman -S fuzzel
# 安装paru需要rust,所以:
sudo pacman -S rust
# 安装paru
git clone https://aur.archlinux.org/paru.git
cd paru
makepkg -si
# 安装chrome
paru -S google-chrome
# 安装grim,截图软件
sudo pacman -S grim
# 功耗控制
sudo pacman -S tlp tlp-rdw
paru -S tlpui # 若安装了 TLPUI 可在图形界面进行相关配置。语言可在菜单栏 `Language` 处更改
# 相关服务设置
sudo systemctl enable tlp.service
sudo systemctl enable NetworkManager-dispatcher.service
sudo systemctl mask systemd-rfkill.service # 屏蔽以下服务以避免冲突,确保 TLP 无线设备的开关选项可以正确运行
sudo systemctl mask systemd-rfkill.socket
# 安装后,TLP 将在开机时自动启动。可以使用以下命令手动启动:
sudo tlp start
# 所有 TLP 设置都存储在 `/etc/tlp.conf` 中。一般情况下默认配置即可满足需求。
# 安装 Smartmontools 以显示 `tlp-stat` 中的 S.M.A.R.T. 数据。
sudo pacman -S smartmontools
# 使用 TLP 显示相关系统信息
sudo tlp-stat -b # 显示电池信息
sudo tlp-stat -d # 显示磁盘信息
sudo tlp-stat -e # 显示 PCI 设备信息
sudo tlp-stat -g # 显示 GPU 信息
sudo tlp-stat -p # 显示 CPU 信息
tlp-stat -s # 显示系统数据信息 / 验证 TLP 服务运行状况

软件配置

# 配置输入法
fcitx5-configtool
# 添加双拼,设置主题等
# 设置主题:Addons - UI - Classic Users Interface - Configure - Theme
git clone https://github.com/tonyfettes/fcitx5-nord.git
mkdir -p ~/.local/share/fcitx5/themes/
cd fcitx5-nord
cp -r Nord-Dark/ Nord-Light/ ~/.local/share/fcitx5/themes/
# 输入法fcitx5显示模糊解决:
nvim ~/.config/fcitx5/conf/classicui.conf # 修改:
# EnableFractionalScale=False
# 如果觉得输入法框小,可以修改:
ForceWaylandDPI=120 # 默认为0
# 除此之外,还可以修改:
Vertical Candidate List=True # 垂直候选列表
# 配置zsh
# 安装oh-my-zsh
# 因为已经安装了浏览器chrome,下面这条可以从浏览器copy,打开浏览器的方式:命令行输入 google-chrome-stable
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 设置普通用户通过 sudoedit 编辑系统文件时使用的编辑软件
nvim ~/.zshrc # 添加下面两行:
export EDITOR=/usr/bin/nvim
export SUDO_EDITOR=/usr/bin/nvim
# 配置hyprland, kitty, waybar, chrome, 参考下述仓库
git clone https://github.com/HeaoYe/config ref_config
cd ref_config
# 配置kitty(直接使用别人的配置)
cp -r ~/ref_config/kitty ~/.config
# 配置waybar(直接使用别人的配置)
cp -r ~/ref_config/waybar/Waybar-3.0 ~/.config/waybar
# 屏幕亮度调节
sudo pacman -S brightnessctl
# 然后就可以像下面这样调节亮度:
brightnessctl set 5%-
brightnessctl set +5%
# 可以绑定亮度调节按键
binde=, XF86MonBrightnessDown, exec, brightnessctl set 5%-
bindl=, XF86MonBrightnessUp, exec, brightnessctl set +5%
# 音量调节
binde=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+
bindl=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
# Mod + Shift + 方向键调整窗口大小
binde = $mainMod SHIFT, right, resizeactive, 10 0
binde = $mainMod SHIFT, left, resizeactive, -10 0
binde = $mainMod SHIFT, up, resizeactive, 0 -10
binde = $mainMod SHIFT, down, resizeactive, 0 10
# chrome配置。让chrome清晰等
nvim ~/.config/chrome-flags.conf # 写入下述语句:
--enable-features=UseOzonePlatform
--ozone-platform=wayland
--enable-wayland-ime
# 开机自动连接蓝牙设备
# 编辑`/etc/bluetooth/main.conf`文件,将`AutoEnable`设置为 true 即可
# 如果waybar状态栏上不显示电池图标
nvim ~/.config/waybar/config # 这是一个json文件,把键battery对应值字典里bat的值由 BAT0 改为 BAT1
# BAT1 的来源:ls /sys/class/power_supply/
# 我不知道怎么回事,我这里BAT0不见了,但是有一个BAT1
# cat /sys/class/power_supply/BAT0/capacity
# 配置sddm(启动页面)
# SDDM 的默认配置文件为 `/usr/lib/sddm/sddm.conf.d/default.conf`。要修改配置,请在 `/etc/sddm.conf.d/` 目录下创建配置文件。
sudo mkdir -p /etc/sddm.conf.d/
sudo cp /usr/lib/sddm/sddm.conf.d/default.conf /etc/sddm.conf/
# 从默认配置文件中得知默认主题文件夹在 /usr/share/sddm/themes
# 预览主题:sddm-greeter --test-mode --theme /usr/share/sddm/themes/maya
# 修改主题:将主题相关文件放到指定位置后,在conf文件内指定主题名。

清理

清理archlinux:

  • 清理安装包缓存 sudo pacman -Scc, 不仅会删除未安装或旧版本的包文件缓存,也会将安装着的包的包文件缓存也一并删除。这部分是最占空间的。
  • 清理孤立的软件包 sudo pacman -Rns $(pacman -Qtdq)