本文为针对特定设备的 Arch Linux 安装记录, 不具有普适性, 仅供参考
本文内容持续保持更新 (或许?)
硬件配置
型号: 华硕天选 5 pro 锐龙版 (对应国外型号: ASUS TUFGaming A16 2024 FA607PV)
CPU: AMD Ryzen 9 7940HX with Radeon Graphics
内存: SAMSUNG DDR5 5200MHZ 32GB (出厂 16GB, 后加装 16GB)
硬盘: WD PC SN560 SDDPNQE-1T00-1102 1TB, KIOXIA-EXCERIA PLUS G3 SSD 1TB (后加装)
GPU: AMD Radeon™ 610M, NVIDIA GeForce RTX 4060 Laptop GPU
安装步骤
预安装
制作 USB 启动盘并启动 live 环境
下载 Arch Linux ISO, 并进行 SHA256 校验, 然后使用 Rufus 写入到 U 盘 (默认写入选项即可, 以 ISO 模式写入)
进入电脑 UEFI (BIOS) 页面, 关闭安全启动和快速启动, 显示模式设置为动态 (arch iso 不带 nvidia-open 驱动)
电脑启动到 U 盘的 arch live 环境
连接到互联网
这里有线网络会尝试 DHCP 连接网络, 可跳过
若连接到无线网络, 则使用 iwctl 连接, 步骤如下:
查看无线网卡设备并确保已开启
扫描并查看可用网络
1 2 iwctl station <device> scan iwctl station <device> get-networks
连接网络
1 iwctl station <device> connect <SSID>
检查互联网连接
更新系统时钟
确保系统时钟同步
磁盘分区
对于不同类型的设备, 设备路径和分区路径有所不同:
m.2 接口的 nvme 协议设备: /dev/nvme1n1
boot partition: /dev/nvme1n1p1
swap partition: /dev/nvme1n1p2
root partition: /dev/nvme1n1p3
sata 接口或 usb 接口设备: /dev/sda
boot partition: /dev/sda1
swap partition: /dev/sda2
root partition: /dev/sda3
查看要安装系统的磁盘设备
抹除磁盘
交互模式进行硬盘分区
分区类型选 GPT
分区方案:
Mount Point
Partition type GUID
Size
/boot
C12A7328-F81F-11D2-BA4B-00A0C93EC93B: EFI System
1GB
[SWAP]
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F: Linux swap
32GB
/
4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709: Linux root (x86-64)
Remainder
parted 命令硬盘分区分区
1 2 3 4 5 6 7 8 9 10 11 parted <disk> --script \ mklabel gpt \ mkpart "\"EFI System\"" fat32 1MiB 1025MiB \ set 1 esp on \ mkpart "\"Linux swap\"" linux-swap 1025MiB 33793MiB \ mkpart "\"Linux root (x86-64)\"" ext4 33793MiB 100% \ type 3 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 # 让内核识别到硬盘分区更改 partprobe <disk> # 若写在脚本里建议等待一段时间 # sleep 2
查看分区更改
格式化分区
1 2 3 mkfs.fat -F 32 <boot-partition> mkswap <swap-partition> mkfs.ext4 <root-partition>
检查格式化分区
挂载文件系统
1 2 3 mount <root-partition> /mnt mount --mkdir <boot-partition> /mnt/boot swapon <swap-partition>
安装
选择镜像
1 2 3 cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak curl -L 'https://archlinux.org/mirrorlist/?country=CN&protocol=https' -o /etc/pacman.d/mirrorlist sed -i 's/^#Server/Server/' /etc/pacman.d/mirrorlist
安装必要软件包
1 2 3 4 5 6 7 8 pacstrap -K /mnt \ base base-devel \ linux linux-firmware \ amd-ucode \ networkmanager modemmanager usb_modeswitch \ nano vi vim \ man-db man-pages texinfo \ sudo bluez bluez-utils wget git openssh
安装内容详解:
base, base-devel, linux, linux-firmware: 基础包, 包含基础内核, 固件, 应用程序. base-devel 是后面安装 nvidia-laptop-power-cfg 中 makepkg 的依赖
amd-ucode: AMD CPU 微码
networkmanager, modemmanager, usb_modeswitch: 网络管理, 后两者为 PPPoE 上网需要 (可选)
nano, vi, vim: 文本编辑器, 其中 vi 是 visudo 的默认编辑器, 若不选择安装则须额外配置全局默认编辑器
man-db, man-pages, texinfo: 命令帮助手册
sudo: 以非 root 用户身份执行特权命令
bluez, bluez-utils: 蓝牙相关
wget, git, openssh: 常用软件
配置系统
Fstab
在启动时安装所需的文件系统
1 genfstab -U /mnt | tee -a /mnt/etc/fstab
Chroot
将 root 转换到新系统中
时间
1 2 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime hwclock --systohc
地区
1 2 3 4 5 cp /etc/locale.gen /etc/locale.gen.bak sed -i '/en_US.UTF-8/s/^#//' /etc/locale.gen sed -i '/zh_CN.UTF-8/s/^#//' /etc/locale.gen locale-gen echo "LANG=en_US.UTF-8" | tee -a /etc/locale.conf
网络配置
1 echo "asus" | tee -a /etc/hostname
Root 密码
Boot loader
Asus Linux 推荐使用 systemd-boot
1 2 3 4 5 6 7 8 9 10 11 12 bootctl install bootctl --variables=no --graceful update echo "title Arch Linux" | tee -a /boot/loader/entries/arch.conf echo "linux /vmlinuz-linux" | tee -a /boot/loader/entries/arch.conf echo "initrd /amd-ucode.img" | tee -a /boot/loader/entries/arch.conf echo "initrd /initramfs-linux.img" | tee -a /boot/loader/entries/arch.conf echo "options root=PARTUUID=$(blkid -s PARTUUID -o value <root-partition>) rw nvidia_drm.fbdev=1" | tee -a /boot/loader/entries/arch.conf echo "default arch.conf" | tee -a /boot/loader/loader.conf echo "timeout 3" | tee -a /boot/loader/loader.conf bootctl update
用户管理
1 2 3 4 5 echo "%wheel ALL=(ALL:ALL) ALL" | tee /etc/sudoers.d/user-access chmod 0440 /etc/sudoers.d/user-access visudo -c useradd -m -G wheel user passwd user
将必要服务设置为开机自启动
1 2 3 4 5 systemctl enable NetworkManager.service systemctl enable ModemManager.service systemctl enable systemd-resolved.service systemctl enable bluetooth.service systemctl enable sshd.service
重启系统
1 2 3 4 exit cp /etc/pacman.d/mirrorlist.bak /mnt/etc/pacman.d/ umount -R /mnt poweroff
关机后移除 U 盘, 并将 Arch Linux 启动项设置为首位 (可选)
安装后
以非 root 用户登录系统
添加 asus linux 源
1 2 3 4 5 6 7 8 9 10 11 12 13 wget "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x8b15a6b0e9a3fa35" -O g14.sec sudo pacman-key -a g14.sec sudo pacman-key --finger 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35 sudo pacman-key --lsign-key 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35 sudo pacman-key --finger 8F654886F17D497FEFE3DB448B15A6B0E9A3FA35 rm g14.sec sudo cp /etc/pacman.conf /etc/pacman.conf.bak echo "" | sudo tee -a /etc/pacman.conf echo "[g14]" | sudo tee -a /etc/pacman.conf echo "# Server = https://arch.asus-linux.org" | sudo tee -a /etc/pacman.conf echo "Server = https://naru.jhyub.dev/\$repo" | sudo tee -a /etc/pacman.conf sudo sed -i '/\[multilib\]/,/Include = \/etc\/pacman.d\/mirrorlist/ s/^#//' /etc/pacman.conf sudo pacman -Syu
安装 asusctl
1 2 3 4 # python-gobject 解决 powerprofilesctl 报错 sudo pacman -S asusctl power-profiles-daemon python-gobject sudo systemctl enable --now power-profiles-daemon.service reboot
安装显卡驱动
1 2 3 4 5 sudo pacman -S --needed \ nvidia-open nvidia-utils lib32-nvidia-utils \ mesa lib32-mesa vulkan-radeon lib32-vulkan-radeon \ vulkan-icd-loader lib32-vulkan-icd-loader reboot
安装 nvidia-laptop-power-cfg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 git clone https://gitlab.com/asus-linux/nvidia-laptop-power-cfg.git /home/user/nvidia-laptop-power-cfg cd /home/user/nvidia-laptop-power-cfg makepkg -sfi sudo systemctl enable nvidia-suspend.service nvidia-hibernate.service nvidia-resume.service sudo systemctl enable --now nvidia-powerd cd /home/user rm -rf /home/user/nvidia-laptop-power-cfg # 检查命令 # cat /proc/driver/nvidia/gpus/<bus_address>/power# 检查结果应该如下所示 # S0ix Power Management: # Platform Support: Supported # Status: Enabled reboot
安装音视频组件
1 2 3 4 5 6 7 8 9 sudo pacman -S --needed \ libva-nvidia-driver libvdpau-va-gl libva-utils \ vdpauinfo vulkan-tools sudo pacman -S --needed \ sof-firmware alsa-firmware alsa-utils \ pipewire lib32-pipewire wireplumber \ pipewire-audio pipewire-alsa pipewire-pulse pipewire-jack lib32-pipewire-jack systemctl --user enable --now pipewire pipewire-pulse wireplumber reboot
安装 KDE 和常用软件
1 2 3 4 5 6 7 8 9 10 11 sudo pacman -S --needed noto-fonts noto-fonts-cjk noto-fonts-emoji sudo pacman -S --needed plasma-meta konsole dolphin qt6-multimedia-ffmpeg kwalletmanager sudo pacman -S --needed rog-control-center sudo pacman -S --needed fcitx5-im fcitx5-chinese-addons fcitx5-pinyin-zhwiki sudo pacman -S --needed firefox sudo pacman -S --needed btop # 测试 # sudo systemctl start plasmalogin# 启用桌面 sudo systemctl enable plasmalogin reboot
一些错误修复
1 2 3 4 5 6 7 8 9 sudo pacman -S fuse2 sudo pacman -S unzip 7zip tmux tree firewalld ttf-cascadia-code-nerd krdc libayatana-appindicator sudo systemctl enable firewalld sudo ln -sf /usr/lib/qt6/bin/qtpaths /usr/bin/qtpaths sudo cp /etc/asusd/asusd.ron /etc/asusd/asusd.ron.bak sudo sed -i 's/platform_profile_on_ac: Performance/platform_profile_on_ac: Quiet/' /etc/asusd/asusd.ron asusctl aura effect static -c ffffff # 执行 sudo systemctl restart asusd 会卡住, 原因未知 reboot
修改 KDE 设置
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 kwriteconfig6 --file powerdevilrc --group AC --group Display --key DimDisplayIdleTimeoutSec -- -1 kwriteconfig6 --file powerdevilrc --group AC --group Display --key DimDisplayWhenIdle false kwriteconfig6 --file powerdevilrc --group AC --group Display --key TurnOffDisplayIdleTimeoutSec -- -1 kwriteconfig6 --file powerdevilrc --group AC --group Display --key TurnOffDisplayWhenIdle false kwriteconfig6 --file powerdevilrc --group AC --group SuspendAndShutdown --key AutoSuspendAction 0 kwriteconfig6 --file powerdevilrc --group AC --group SuspendAndShutdown --key LidAction 0 kwriteconfig6 --file powerdevilrc --group AC --group SuspendAndShutdown --key PowerButtonAction 0 kwriteconfig6 --file powerdevilrc --group Battery --group Display --key DimDisplayIdleTimeoutSec -- -1 kwriteconfig6 --file powerdevilrc --group Battery --group Display --key DimDisplayWhenIdle false kwriteconfig6 --file powerdevilrc --group Battery --group Display --key TurnOffDisplayIdleTimeoutSec -- -1 kwriteconfig6 --file powerdevilrc --group Battery --group Display --key TurnOffDisplayWhenIdle false kwriteconfig6 --file powerdevilrc --group Battery --group SuspendAndShutdown --key AutoSuspendAction 0 kwriteconfig6 --file powerdevilrc --group Battery --group SuspendAndShutdown --key LidAction 0 kwriteconfig6 --file powerdevilrc --group Battery --group SuspendAndShutdown --key PowerButtonAction 0 kwriteconfig6 --file powerdevilrc --group BatteryManagement --key BatteryCriticalAction 0 kwriteconfig6 --file powerdevilrc --group LowBattery --group Display --key DimDisplayIdleTimeoutSec -- -1 kwriteconfig6 --file powerdevilrc --group LowBattery --group Display --key DimDisplayWhenIdle false kwriteconfig6 --file powerdevilrc --group LowBattery --group Display --key TurnOffDisplayIdleTimeoutSec -- -1 kwriteconfig6 --file powerdevilrc --group LowBattery --group Display --key TurnOffDisplayWhenIdle false kwriteconfig6 --file powerdevilrc --group LowBattery --group Display --key UseProfileSpecificDisplayBrightness false kwriteconfig6 --file powerdevilrc --group LowBattery --group SuspendAndShutdown --key AutoSuspendAction 0 kwriteconfig6 --file powerdevilrc --group LowBattery --group SuspendAndShutdown --key LidAction 0 kwriteconfig6 --file powerdevilrc --group LowBattery --group SuspendAndShutdown --key PowerButtonAction 0 kwriteconfig6 --file kscreenlockerrc --group Daemon --key Autolock false kwriteconfig6 --file kscreenlockerrc --group Daemon --key LockGrace 0 kwriteconfig6 --file kscreenlockerrc --group Daemon --key Timeout 0 kwriteconfig6 --file systemsettingsrc --group systemsettings_sidebar_mode --key HighlightNonDefaultSettings true plasma-apply-lookandfeel --apply org.kde.breezedark.desktop
TODO
需要手动修改的选项 (暂时未找到较好的命令修改方法):
系统设置
鼠标和触摸板
键盘
登录屏幕
点击 应用 Plasma 设置 (在修改完其他设置之后点击)
KDE 密码库
区域和语言
日期和时间
输入法
添加输入法 拼音
拼音
配置附加组件
经典用户界面
主题 KDE Plasma (实验性)
深色主题 KDE Plasma (实验性)
跟随系统浅色 / 深色设置 开
显示面板 (类似 Windows 的任务栏) 设置
ROG Control Center
App Settings
Run in background after closing close
Dolphin 文件管理器
显示隐藏文件 开
显示菜单栏 开
配置 Dolphin
需要添加的脚本
修改 SSH 默认端口
防火墙允许特定端口号
自动解压并写入应用程序启动器 (类似 Windows 的开始菜单) 的一些 portable app (目前包括 localsend, v2rayn, vscode)
可能出现的问题
笔记本切换到独显直连模式后 kde 桌面出现幽灵显示器
arch linux 官方内核默认启用 simpledrm 驱动显示开机 log (同时该虚拟显示输出设备被命名为 Unknown-1), 若 simpledrm 与独立显卡驱动之间移交存在问题, 就会出现额外的幽灵显示器
通过规范 NVIDIA 帧缓冲参数, 即添加内核启动参数 nvidia_drm.fbdev=1 解决
根据 arch wiki, nvidia_drm.modeset=1 与 nvidia_drm.fbdev=1 由 nvidia-utils 自动添加, 但后者未生效, 原因暂时不明
plasmalogin 的显示器设置与 kde 不同步
需要点击系统设置-登录屏幕-应用 Plasma 设置进行手动同步
kde wallet 密码与用户密码不一致
可能是在安装配置完毕后手动修改了用户密码, kde wallet 密码不遵循更改, 仍然是第一次设置的密码
可通过 kwalletmanager 修改密码
修复 appimage 运行报错 error loading libfuse.so.2
安装 fuse2 sudo pacman -S fuse2
提示 /usr/bin/xdg-mime: 行 885: qtpaths: 未找到命令
qtpaths 实际位置: /usr/lib/qt6/bin/qtpaths, /usr/lib/qt6/bin/qtpaths6
创建软链接: sudo ln -sf /usr/lib/qt6/bin/qtpaths /usr/bin/qtpaths
某些应用无法开启系统托盘图标
安装 libayatana-appindicator sudo pacman -S libayatana-appindicator
配置 tensorflow 环境
注意: 此内容质量低下, 且不应属于该部分内容, 须移至其他部分
为了使系统干净整洁, 建议通过 docker 配置环境
首先安装 docker 和 nvidia-container-toolkit, 使用 docker 时通过手动启用 docker 服务 sudo systemctl start docker.socket (对于个人用户启用 docker.socket 而不是 docker.server 更快, 并且为了减少系统待机占用选择不自启动 docker 服务)
由于 tensorflow 的官方镜像无法调用 gpu, 选择镜像 nvidia/cuda:12.5.1-cudnn-devel-ubuntu22.04, 注意这里的 cuda tooklit 版本选择, 宿主机通过 nvidia-smi 查看的 cuda 版本不一定是tensorflow所使用的, 需要通过执行 python 脚本 python3 -c "import tensorflow as tf; print(tf.sysconfig.get_build_info())" 来查看 tensorflow 使用的 cuda toolkit 版本, 或者在官网查看 https://www.tensorflow.org/install/source
然后创建容器, 在容器内部安装 python, 并通过 pip 安装 tensorflow pip3 install tensorflow[and-cuda], 这里遵循官方教程即可, 由于容器已经安装好 cuda 和 cudnn, 无需再次安装
最后通过 python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))" 检查 gpu 是否可用
命令总结如下:
1 2 3 4 5 6 7 8 9 10 sudo pacman -S docker nvidia-container-toolkit sudo systemctl start docker.socket sudo docker pull nvidia/cuda:12.5.1-cudnn-devel-ubuntu22.04 sudo docker run --rm -it --gpus all nvidia/cuda:12.5.1-cudnn-devel-ubuntu22.04 bash apt update && apt install python3 python3-pip python3-venv mkdir tensorflow-playground && cd tensorflow-playground python3 -m venv .venv && source .venv/bin/activate pip3 install --upgrade pip pip3 install tensorflow[and-cuda] python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
参考链接