每年必修课,安装archlinux走起。
以前也写过一些类似的文章,有一些不变的内容,我直接从原来的文章中复制了(包括截图)。
- 《2021年vmware安装archlinux》
https://blog.csdn.net/lxyoucan/article/details/115226297 - 《2023安装archlinux笔记》
https://blog.csdn.net/lxyoucan/article/details/128612331 - 《2025安装与配置archlinux很详细》
https://blog.csdn.net/lxyoucan/article/details/147566330
家里有一个老笔记本,一直放家里安装的windows 11。因为之前考虑给家人用,所以没有安装linux。
最近我用这台电脑比较频繁,与是我打算安装个windows 11 + archlinux双系统合适。
下载ISO
下载导航页面如下:
https://archlinux.org/download/
然后制作U盘启动盘。开机从U盘启动。
命令行连wifi
# 查看wifi列表 iwlist scanning | grep ESSID #生成密码配置文件 wpa_passphrase wifiname password > internet.conf #连接wifi wpa_supplicant -c internet.conf -i wlan0 & #自动生成ip dhcpcd &完成这一部,如果成功了电脑就可以正常上网了。
启用SSH(可选)
通过ssh远程安装,可以直接复制粘贴一些命令,省的纯手打了。
查ip 执行 ip addr 我这里查到的ip 是 192.168.31.177
设置root密码
passwd root客户端连接ssh 命令如下:
ssh root@192.168.31.177简单的3步就可以粘贴命令了,复制粘贴要程序员的本能。
而且也方便我后续操作的截图。
禁用 reflector
2020 年新版 archliveiso 加入了 reflector 服务,它会自己更新
mirrorlist。在特定情况下,它会误删某些有用的源信息。这里联网后的第一件事就是将其禁用。也许它是一个好用的工具,但是很明显,它并不适合在安装的时候启用。
systemctl stop reflector.service更新系统时钟
timedatectl set-ntptrue#将系统时间与网络时间进行同步timedatectl status#检查服务状态更换国内镜像源加快下载速度
这一步很关键,我第一次安装,根据官方文档一步步安装,后来在安装步骤等待了1个多小时,还没成功,被迫放弃重新来一遍。
后来在https://archlinuxstudio.github.io/ArchLinuxTutorial/#/rookie/basic_install看到设置源的内容。
vim/etc/pacman.d/mirrorlistServer=https://mirrors.ustc.edu.cn/archlinux/$repo/os/$archServer=https://mirrors.hit.edu.cn/archlinux/$repo/os/$arch在上面放上国内的源。
分区
这一步一定要小心,分区之前一定要做数据备份。
我做这一卡是直接把我的硬盘先通过PE初始化了,一张完全空白的盘。
ArchLinux官方文档参考:UEFI with GPT
| 挂在点 | 分区 | 分区类型 | 推荐尺寸 |
|---|---|---|---|
| /mnt/boot or /mnt/efi | /dev/efi_system_partition | EFI system partition | 至少260 MiB |
| [SWAP] | /dev/swap_partition | Linux swap | 超过 512 MiB |
| /mnt | /dev/root_partition | Linux x86-64 root (/) | 磁盘的剩余空间 |
因为我这里是要安装windows 11+ archlinux双系统的,所以有一点区别。
- 我要保留windows 11方便家人使用
- 可以使用PE 系统,腾出一个分区用来安装archlinux
安装前我的分区情况如下:
root@archiso ~# fdisk -lDisk /dev/nvme0n1:476.94GiB,512110190592bytes,1000215216sectors Disk model: WDC PC SN530 SDBPNPZ-512G-1002 Units: sectors of1*512=512bytes Sector size(logical/physical):512bytes /512bytes I/O size(minimum/optimal):512bytes /512bytes Disklabel type: gpt Disk identifier: EA0BAB66-8F8D-404E-BACC-43F0B129A207 Device Start End Sectors Size Type /dev/nvme0n1p12048616447614400300M EFI System /dev/nvme0n1p2616448878591262144128M Microsoft reserved /dev/nvme0n1p3878592420311039419432448200G Microsoft basic data /dev/nvme0n1p4420311040664670862244359823116.5G Microsoft basic data Disk /dev/sda:116.57GiB,125162225664bytes,244457472sectors Disk model: SanDisk3.2Gen1 Units: sectors of1*512=512bytes Sector size(logical/physical):512bytes /512bytes I/O size(minimum/optimal):512bytes /512bytes Disklabel type: gpt Disk identifier: 5DBA50E9-A80E-4820-9C82-09F3579C3ABD Device Start End Sectors Size Type /dev/sda12048244457407244455360116.6G Microsoft basic data Disk /dev/loop0:1012.57MiB,1061761024bytes,2073752sectors Units: sectors of1*512=512bytes Sector size(logical/physical):512bytes /512bytes I/O size(minimum/optimal):512bytes /512bytes简单理解
目前电脑的主要硬盘 /dev/nvme0n1 可以理解成:
512GB SSD
[ EFI ][ Windows保留 ][ Windows约200GB ][ Windows约116GB ][ 空闲约160GB ]
末尾空闲的160GB,是我打算用来安装archlinux的。 而/dev/sda 是我的U盘启动盘,不用管。
开始分区了如果你磁盘里有数据请注意备份! 选择正确的磁盘,不要搞错了。
fdisk/dev/nvme0n1创建分区
这里要说明一下,磁盘要使用GUID Partition Table (GPT)
分区表,因为我的磁盘本来就是这个格式的所以就不转换了,如果不是则要转换一下。
目标:
[ 1EFI ][ 2Windows保留 ][ 3Windows约200GB ][ 4Windows约116GB ][5 swap约10GB ][ 6ext4约150GB ]
使用n命令创建一个新分区。您输入分区类型,分区号,起始扇区和终止扇区。
出现提示时,请指定分区类型,然后键入p以创建主分区或e创建扩展分区。最多可以有四个主分区。
创建swap空间操作如下:
# n 创建swap空间Command(mforhelp): n# 直接回车默认Partition number(5-128, default5):# 直接回车默认First sector(664670863-1000215182, default664672256):# +10G设置为10GLast sector, +/-sectors or +/-size{K,M,G,T,P}(664672256-1000215182, default1000214527): +10G创建/分区
# n 创建/分区Command(mforhelp): n# 直接回车默认Partition number(6-128, default6):# 直接回车默认First sector(685643776-1000215182, default685643776):# 剩余空间全部给/所以直接回车默认这里说明一下,因为我的剩余空间非常小了,所以就不单独分/home分区了。直接用/就行了。
上面是我设置的分区大小,仅供参考,可以根据你的需要自行调整。
使用说明:
列出分区类型按下l以列出可用的分区类型。 查询完需要返回就按q
更改分区类型每个分区都与Type关联。按t更改分区的类型。默认值,Linux filesystem对于大多数使用来说应该没问题。
使分区可启动。您可以通过键入使分区可启动a。将更改写入磁盘将表写入磁盘,然后通过
w命令退出。
将第5个10GB的分区的分区类型设置为Linux Swap
Command(mforhelp): t Partition number(1-6, default6):5Partitiontypeoralias(type L to list all): swap Changedtypeof partition'Linux filesystem'to'Linux swap'.将更改写入磁盘 将表写入磁盘,然后通过w命令退出。
Command(mforhelp): w The partition table has been altered. Calling ioctl()to re-read partition table. Syncing disks.以下是我的所有操作与返回值仅供参考:
root@archiso ~# fdisk /dev/nvme0n1Welcome tofdisk(util-linux2.42.2). Changes will remaininmemory only,untilyou decide towritethem. Be careful before using thewritecommand. Command(mforhelp): n Partition number(5-128, default5): First sector(664670863-1000215182, default664672256): Last sector, +/-sectors or +/-size{K,M,G,T,P}(664672256-1000215182, default1000214527): +10G Created a new partition5oftype'Linux filesystem'and of size10GiB. Command(mforhelp): n Partition number(6-128, default6): First sector(685643776-1000215182, default685643776): Last sector, +/-sectors or +/-size{K,M,G,T,P}(685643776-1000215182, default1000214527): Created a new partition6oftype'Linux filesystem'and of size150GiB. Command(mforhelp): t Partition number(1-6, default6):5Partitiontypeoralias(type L to list all): swap Changedtypeof partition'Linux filesystem'to'Linux swap'.Command(mforhelp): w The partition table has been altered. Calling ioctl()to re-read partition table. Syncing disks.这时已经分区成功了,现在来fdisk -l查一下分区结构:
为了方便查看,我把信息转成表格:
| Device | Start | End | Sectors | Size | Type |
|---|---|---|---|---|---|
/dev/nvme0n1p1 | 2048 | 616447 | 614400 | 300M | EFI System |
/dev/nvme0n1p2 | 616448 | 878591 | 262144 | 128M | Microsoft reserved |
/dev/nvme0n1p3 | 878592 | 420311039 | 419432448 | 200G | Microsoft basic data |
/dev/nvme0n1p4 | 420311040 | 664670862 | 244359823 | 116.5G | Microsoft basic data |
/dev/nvme0n1p5 | 664672256 | 685643775 | 20971520 | 10G | Linux swap |
/dev/nvme0n1p6 | 685643776 | 1000214527 | 314570752 | 150G | Linux filesystem |
这里我们就分区成功了,这种命令行下分区,可能没有图形化界面直观。但是当你成功分区以后,就会发现这种方式也挺纯粹的。
在熟练的情况下,我觉得命令行的方式,可以比图形化界面的更高效。
格式化分区
创建分区后,必须使用适当的文件系统格式化每个新创建的分区。例如,要在创建一个Ext4文件系统。
用于/的分区格式化成ext4类型。
mkfs.ext4 /dev/nvme0n1p6如果您创建了交换分区,请使用mkswap(8)对其进行初始化:
mkswap-f/dev/nvme0n1p5挂载
# 挂载swapswapon/dev/nvme0n1p5mount/dev/nvme0n1p6 /mntmkdir/mnt/bootmkdir/mnt/boot/EFImount/dev/nvme0n1p1 /mnt/boot/EFI分区总结:fdisk分区虽然没有图形化的直观,用过一次感觉很爽,甚至比图形化的更爽!
安装
- 基础包
pacstrap /mnt base base-devel linux linux-firmware#base-devel在AUR包的安装是必须的如果你这一步特别久,请检查一下是不是国内镜像源设置的有问题。我一开始没设置特别慢,等待了1个多小时,实在等不下去,又重新安装的。
- 功能性软件
pacstrap /mnt dhcpcd iwdvimsudozsh#一个有线所需 一个无线所需 一个编辑器 一个提权工具 iwd也需要dhcpcd- wifi相关
虚拟机种一般不用,物理机可能需要安装。
pacstrap /mnt dhcpcd wireless_tools wpa_supplicant配置系统
Fstab
生成一个fstab文件(分别使用-U或-L定义UUID或标签):
genfstab-U/mnt>>/mnt/etc/fstab检查生成的/mnt/etc/fstab文件,并在出现错误的情况下对其进行编辑。
Chroot
将root更改为新系统:
arch-chroot /mnt设置时区
ln-sf/usr/share/zoneinfo/Asia/Shanghai /etc/localtime将系统时间同步到硬件时间
hwclock--systohc设置 Locale
vim/etc/locale.gen,去掉 en_US.UTF-8 行以及 zh_CN.UTF-8 的注释符号(#)。
配置完成以后运行:
locale-gen生成 locale。
向 /etc/locale.conf 输入内容
根据自己需要选择环境,二选一。我更喜欢中文的。
英文环境:
echo'LANG=en_US.UTF-8'>/etc/locale.conf中文环境:
echo'LANG=zh_CN.UTF-8'>/etc/locale.conf安装微码
pacman-Sintel-ucode#Intelpacman-Samd-ucode#AMD我这里是第1个
安装引导程序
pacman-Sgrub efibootmgr#grub是启动引导器,efibootmgr被 grub 脚本用来将启动项写入 NVRAM。grub-install--target=x86_64-efi --efi-directory=/boot/EFI --bootloader-id=GRUB#取名为GRUB 并将grubx64.efi安装到之前的指定位置
最后生成 GRUB 所需的配置文件
grub-mkconfig-o/boot/grub/grub.cfg完成安装
设置root的密码!!! 不能忘记这一步,否则重启无法登录啦。
passwdrootexit# 退回安装环境#umount-R/mnt# 卸载新分区reboot# 重启重启以后就可以正常启动了,安装完成。
网络开机自动连接
重启开机以后,还可以像安装时方式连接wifi
《archlinux wifi 开机自动连接》
https://blog.csdn.net/lxyoucan/article/details/124531129
创建用户
# 创建用户useradd-m-gusers-Gwheel-s/bin/bash itkey# 修改密码passwditkey让刚创建的用户拥有sudo 权限。
EDITOR=vim visudo
把约82行的 %wheel ALL=(ALL) ALL 前面的#去掉
安装ssh
现在ssh是无法连接的,安装一下ssh服务。方便我远程安装系统。
pacman-Sopenssh# 查看状态systemctl status sshd.service# 启动服务systemctl start sshd#开机启动systemctlenablesshd.service默认不支持root登录,如果需要root登录。
vim/etc/ssh/sshd_config增加如下配置(如果已经有则在此基础上修改):
PermitRootLoginyes安装图形界面相关的软件
Xfce桌面
Xfce桌面小巧且核心功能都有。适用性更广一些。本文之中我实际使用的是awesome的窗口管理器。
《archlinux配置Xfce+fcitx5中文输入法》
https://blog.csdn.net/lxyoucan/article/details/116897679
awesome平铺窗口管理器
#一个平铺窗口管理器pacman-Sawesome# 没有安装X服务的,桌面环境都依赖它,需要安装一下sudopacman-Sxorg-server--noconfirm# 安装中文字体,解决乱码的问题sudopacman-Sadobe-source-han-serif-cn-fonts wqy-zenhei--noconfirm# 安装xinitsudopacman-Sxorg-xinit--noconfirm#ly显示管理器sudopacman-Sly开机自动启动
当然有喜欢图形界面的朋友,喜欢很次开机都自动进界面而不是图形界面,可以如下设置:
#开机启动显示管理器sudosystemctlenablely@tty2.service#立即开启lxdmsudosystemctl start ly@tty2.service这样登录界面就可以出来了。
为什么用ly 做为显示管理器,主要因为它轻量。我以前主用的是gdm,但是它的依赖太多了,我的磁盘空间小,所以选的ly
刚才折腾了一下图形化界面。
从这里往下开始,我已经在新安装的操作系统中写这个blog了。
Fcitx5输入法
具体操作详见:
《archlinux fcitx5-rime五笔输入法》
https://blog.csdn.net/lxyoucan/article/details/127573760
yay软件
工作与生活中还是很难离开QQ和微信这两款软件的,那么想把archlinux作为主力系统的用户,应该如果安装QQ和微信呢?
开启 32 位支持库与 ArchLinuxCN 支持库
vim/etc/pacman.conf去掉[multilib]一节中两行的注释,来开启 32 位库支持。
在文档结尾处加入下面的文字,来开启 ArchLinuxCN 源。
[archlinuxcn]Server=https://mirrors.ustc.edu.cn/archlinuxcn/$arch修改后的文件末尾如下:
[multilib]Include=/etc/pacman.d/mirrorlist[archlinuxcn]SigLevel=Optional TrustAll Server=https://mirrors.ustc.edu.cn/archlinuxcn/$arch最后:wq保存退出,刷新 pacman 数据库。
pacman-Syyu安装yay
sudopacman-Syay上来先安装wechat,没办法办公需要。查了一下wiki,好像有网方版本的了。我之前玩的时候好像是没有的。安装体验一下。
微信发布了官方的 Linux 新版本,支持小程序、朋友圈、VoIP 等。它由`wechat-bin`AUR 提供。先安装一下试试。
yay-Swechat-bin这里yay的安装详见:
《ArchLinux常用软件》
https://blog.csdn.net/lxyoucan/article/details/124559199
评价:
- 扫码登录需要输入身份证并进行人脸识别,还要同意什么协议。所以让我感觉有点不安,怀疑是不是真的官方版本。
- 用起来的感觉跟windows,macOS的官方版本差不多。
- 默认情况下fcitx5输入法无法打字,后续我在研究一下解决办法。
解决fcitx5输入法无法 使用的问题
解决办法参考:https://zhuanlan.zhihu.com/p/15007602945
命令行启动的方式:
envGTK_IM_MODULE=fcitxQT_IM_MODULE=fcitxQT_IM_MODULE=fcitxXMODIFIERS=@im=fcitx /opt/wechat/wechat命令行打开,确实是可以的,就是有点麻烦。还是图标直接点开会比较好一些。
sudovim/usr/share/applications/wechat.desktop把Exec=修改成
Exec=envGTK_IM_MODULE=fcitxQT_IM_MODULE=fcitxQT_IM_MODULE=fcitxXMODIFIERS=@im=fcitx /opt/wechat/wechat %Uedge浏览器
edge浏览器基本有chrome浏览器的大部分核心功能了,并且还自己增加了一些实用功能。主要是翻译功能在国内访问更稳定,chrome的翻译在国内的网络环境默认情况无法使用。
yay-Smicrosoft-edge-stable-binlinux Windows双系统时间不一致的解决办法
一般有两种方法,要么修改windows的计算时间的方式,要么修改linux的。
我个人更喜欢windows这种直接显示本地时间的。因为这个时间根我在bios中看到的时间是一致的,省的计算了。
sudotimedatectl set-timezone Asia/Shanghaisudotimedatectl set-local-rtc1--adjust-system-clocksudotimedatectl set-ntptrue验证设置
timedatectl你会看到类似下面的信息:
RTCinlocalTZ:yes表示 BIOS 时钟已被设为本地时间。
Emoji 表情
sudopacman-Snoto-fonts-emoji安装完成后刷新字体缓存:
fc-cache-fv启动菜单支持windows
如果你是想问:Arch Linux 安装好以后,如何让启动菜单里同时出现 Windows,如果你使用的是GRUB,可以这样做。
先安装os-prober:
sudopacman-Sos-prober编辑 GRUB 配置:
sudonvim /etc/default/grub找到或添加:
GRUB_DISABLE_OS_PROBER=false然后测试是否能发现 Windows:
sudoos-prober正常应该看到类似:
/dev/nvme0n1p1:Windows Boot Manager:Windows:efi最后重新生成 GRUB 配置:
sudogrub-mkconfig-o/boot/grub/grub.cfg你应该会看到类似:
Found Windows Boot Manager on /dev/nvme0n1p1重启:
reboot之后 GRUB 菜单里就应该同时有:
Arch Linux Advanced options for Arch Linux Windows Boot Manager修改主机名称
sudohostnamectl set-hostname 新名称修改windows默认启动
sudovim/etc/default/grub其中GRUB_DEFAULT=0修改成GRUB_DEFAULT=2
因为我的windows默认是第3个位置。
然后重新生成一下菜单
sudogrub-mkconfig-o/boot/grub/grub.cfg音频管理
sudopacman-Spavucontrolsudopacman-Ssof-firmwaresudopacman-Salsa-ucm-conf以前我记得执行以下操作就可以了,2026-09-02不行了,问AI以后,给我的解决办法:
sudopacman-Spipewire pipewire-audio pipewire-pulse wireplumber systemctl--userrestart pipewire pipewire-pulse wireplumber启用回收站
Thunar如何显示回收站?
Thunar 的“回收站”功能依赖 GVfs/GIO。如果 Arch Linux 是自己搭的 Awesome WM 这类精简环境,很常见的情况就是只装了 thunar,没有装 gvfs,于是侧边栏里看不到回收站。
sudopacman-Sgvfs安装 nvm
nvm 是node版本管理器,几乎是我必装的软件之一。
# 安装最新lts版本nvminstall--lts# 使用最新的lts版本nvm use--lts安装codex
不知不觉codex已经成为我的装机必备啦。
curl-fsSLhttps://chatgpt.com/codex/install.sh|sh