zzxworld

Intel NUC 安装 Arch Linux 历险记

经过几天的学习和摸索,我决定要正式把工作环境从 Ubuntu 迁移到 Arch Linux 系统。本以为有了虚拟机上的体验经验,这应该是一项驾轻就熟的工作。结果是碰到了一些预想之外的情况。这篇文章就是在 Intel NUC 上实机安装 Arch Linux 时,我解决碰到各种问题的一个总结。

系统的安装流程和前面虚拟机上安装 Arch Linux 的过程大同小异。如果还不熟悉 Arch Linux 的安装步骤,可以通过之前的这篇文章来了解:

这里仅针对碰到的问题来重点说明如何解决。如果你也准备尝试实机安装 Arch Linux,可以结合两篇文章的内容一起来看。

除了安装时碰到的问题,作为一个应用到实际工作的系统安装记录,还有一些实用性方面的软件安装配置,我觉得也很值得分享。一并掺杂在其中,请按需翻阅。

USB 启动盘

金士顿 U 盘

使用虚拟机体验时,可以直接以光驱的方式加载 iso 格式的安装映像文件,所以不需要这一歩。实机安装时,这是第一个要解决的问题。

这一歩解决起来很轻松。Arch 官方的 Wiki 有各种系统下可行的工具和操作。链接如下:

简单来说就是先下载好安装映像文件,然后准备好 U 盘,接着用各种系统下顺手的工具把安装映像文件写入 U 盘就可以了。

我之前的系统是 Ubuntu Linux,所以用的 dd 命令的方式:

dd bs=4M if=path/to/archlinux-version-x86_64.iso of=/dev/sdx conv=fsync oflag=direct status=progress
  1. if 参数的值就是安装映像的文件路径。
  2. of 参数的值就是 U 盘挂载后的设备路径。

完成 U 盘启动盘的制作后,接下来就只需要插好 U 盘,重新启动电脑,进入 Arch Linux 的安装流程。

安装时的网络

我通过 U 盘进入 Arch Linux 安装系统后,准备连接网络。按照之前了解的步骤,输入了 iwctl 命令,进入了 iwd 的命令操作界面。

我用下面的命令扫描出了可用的 Wifi 连接:

[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks

不过当我看到这个 Wifi 网络名称时傻眼了。

Arch Linux 安装时的 Wifi 扫描结果

我想起来家里这个路由器是充话费时送的,Wifi 的名称为了方便父母使用,就是中文“无线网络”。脑子里顿时电光火石的想解决方法。

  • 如果有中文字体和输入法的话,应该就没可以。问题是终端下安装了中文输入法好像也不会起作用,放弃。
  • 去改下路由器的信号名称,改成英文就行。嗯!可以。

就在我准备退出安装系统,回到之前的 Ubuntu 时。无意中 ping 了一下网址。返回的输出居然不是网络无法连接。说明网已经连上了。

我又没连网线,Wifi 还是待连接。这网难道是?我不经意瞄了一眼通过 USB 连在 Intel NUC 上充电的手机,看见顶部出现了蓝色条。明白了,这是连接的手机热点。

这是一个很有趣的发现。也就是说即便没有 Wifi,通过手机热点,直连也能完成 Arch Linux 的安装。事实上我也是这么做的。懒的去改 Wifi 信号了,反正手机也是连着 Wifi,有点像是一个免驱动的无线网卡了。

不过事实证明这个功能并不是免驱动的。我在通过手机热点完成基础系统的安装后,重启并登陆到新安装的系统,就无法再通过手机热点连接网络了。经过一番搜索和了解,发现需要安装这么一个软件:

pacman -S libimobiledevice

这是一个在 Linux 系统上支持 iPhone 和 iPad 连接的协议组件。

另外,安装好 NetworkManager 软件包后。可以使用 nmcli 命令来连接网络,它可以使用 BSSID 而不是 SSID 来连接,所以即便是中文的信号名称,也无大碍。

使用 nmcli 命令连接 Wifi 操作也很简单。比如查看可用的 Wifi 信号:

nmcli dev wifi list

通过 BSSID 连接指定的 Wifi:

nmcli dev wifi connect 11:22:33:44:55:66 passwod 123456

BSSID 就类似于上面 11:22:33:44:55:66 这种格式,123456 就是要连接 Wifi 的密码,要替换成自己实际的数据。

EFI 启动分区

这是在之前用虚拟机安装 Arch Linux 时忽略了的一个问题。在 Intel NUC 上安装,做硬盘分区时切记要创建一个 EFI 分区。

我第一次安装是按照在虚拟机上操作的流程来的,结果就是重启后无法引导并进入系统。

如果你也准备实机安装,请先检查一下自己的 BIOS,如果是 EFI 启动方式,请按下面的步骤准备好 EFI 分区启动和支持。

一、分区的时候划分出一块 512M 大小的分区作为 EFI 分区。

二、进入格式化步骤时,使用 FAT32 分区格式化 EFI 分区。

mkfs.vfat -F32 /dev/xxxx

后面的 /dev/xxxx 请替换成自己实际的 EFI 分区地址。

三、挂载好 /mnt 主分区后,执行下面的命令挂载 EFI 分区。

mkdir -p /mnt/boot/efi
mount /dev/xxxx /mnt/boot/efi

/dev/xxxx 同样替换成自己实际的 EFI 分区地址。

四、安装好 EFI 启动管理组件后,再执行 Grub 的安装命令。

pacman -S efibootmgr
grub-install --efi-directory=/boot/efi --bootloader-id=grub

注意以上几步后,通过 EFI 启动就没有问题了。

我在这歩上耗费了一些时间。刚开始都没想到 EFI 的问题上来,一直以为是 BIOS 的设置问题。期间误开了快速启动选项,导致后面都无法再进入 BIOS。最后通过查询 Intel 的官网才学到了一招:Intel NUC 关机后按住电源键 3 秒开机会出现一个能够关闭快速启动选项的菜单

3 秒不要多,也不要少。多了会再次关机,少了不会出现这个菜单。我按了五次才成功。

OpenBox

我在之前的文章《Arch Linux 安装并配置桌面环境》里有提到,准备选择 Xfce 作为自己在 Arch Linux 上的工作桌面软件。不过当我体验了 OpenBox 后,我“劈腿”了。

OpenBox 和 i3 一样,都属于窗口管理软件。但和 i3 的区别是:它不是一个平铺式的窗口管理软件。就这一点来讲,OpenBox 让我使用时毫无障碍。

OpenBox 打动我的另一个点就是提供了结构清晰的配置文件,如下图:

OpenBox 配置文件

  • autostart 里面可以随意添加要随桌面环境一起启动的各种自定义功能脚本。
  • environment 里面可以定义各种桌面环境下需要的环境变量。
  • menu.xml 里面可以通过 XML 的方式定义右键弹出的菜单,而且层次和结构也很容易理解。
  • rc.xml 里面可以定义 OpenBox 的各种配置。

小巧,功能实用,操作无障碍,配置结构清晰,可玩性很高。这就是我选择 OpenBox 的理由。

USB 设备自动挂载

系统安装好后,我的第一个实际工作需求就是从移动硬盘里把备份的数据搬到新系统上来。要完成这项工作,需要先让系统支持 USB 设备的挂载。

这只需要安装 udisks2 软件就可以了:

sudo pacman -S udisks2

然后安装一个图形界面的文件管理,我选择的 Thunar

sudo pacman -S thunar

插入移动硬盘,打开 Thunar,在左下角的 Devices 栏下,就能看到自动挂载的 USB 设备了。

Thunar 挂载移动设备

蓝牙连接

我目前主要用的蓝牙设备是一款华为的蓝牙耳机。

华为蓝牙耳机

平常工作不听歌就觉得少点氛围,所以让这个蓝牙耳机连上电脑并放出声音是必须要达到的目的。

这花费了我一些时间,主要是依赖的功能软件稍多且步骤繁琐。习惯了之前在 Ubuntu 上的无脑化图形操作,对一切都要自己手动来操作的流程太过陌生而导致的。

不过好在功夫没白费,最终还是成功让我的蓝牙耳机连接上了,并播放出了音乐。成功后的喜悦感也十分让人享受。

因为流程过多,而且中间遇到了一些挫折,误装了一些没用的功能软件。所以我只能凭借之前过程中的草稿整理出以下的关键步骤。你也许不能通过这些关键步骤一次成功,但应该也就一步之遥了。

让我们开始。

首先要安装好蓝牙协议栈和相关工具包:

sudo pacman -S bluez bluez-utils

然后启动蓝牙服务:

sudo systemctl start bluetooth

如果不想每次开机后都手动启动蓝牙服务,就设置一下蓝牙服务开机自动运行:

sudo systemctl enable bluetooth

然后安装以下跟蓝牙声音有关的软件:

sudo pacman -S pulseaudio-bluetooth pipewire-pulse

然后以普通用户角色启动一下 pipewire-pulse 这个跟声音和视频有关的处理器服务:

systemctl start --user pipewire-pulse

同样如果不想每次开机后都要做这一步,可以把 start 指令换成 enable ,让它每次开机都自动执行。

以上是准备工作,接下来就是打开要连接的蓝牙设备,进入待连接状态。

开始蓝牙连接操作,首先输入以下命令,进入蓝牙命令操作界面:

bluetoothctl

进入蓝牙控制的命令操作界面后,依次输入以下指令:

[bluetooth]# power on
[bluetooth]# scan on
[bluetooth]# devices
  • power on 这应该是给系统的蓝牙控制设备上电(我顾名思义的啊,不要当真)。
  • scan on 是扫描可用的蓝牙设备。输入执行后等一会儿,会出现一些附近的蓝牙设备信息。
  • devices 是查看可用蓝牙设备的 MAC 地址,类似 00:10:20:30:40:50 这种格式。

正常情况下应该会出现扫描到的蓝牙设备,确定要连接的设备 MAC 后,使用以下指令先配对:

[bluetooth]# pair <MAC>

配对成功后,就可以开始连结了:

[bluetooth]# connect <MAC>

以上指令除了 power on 都是首次连接蓝牙设备时需要的操作。一旦成功连接上,之后每次开机,都只需要进入 bluetoothctl 后执行一下 power on 就行了。之前连接成功了的蓝牙设备应该都能自动连接上。

总之步骤就是这么个步骤,能不能一把成功就看运气了。最终能不能成功就看你的问题解决能力。

启用 TRIM 指令

这是一个固态硬盘的优化项。其作用主要有两个:

  1. 降低固态硬盘的擦写损耗,延长使用寿命。
  2. 解决固态硬盘长期使用后的掉速问题。

不过并不是所有固态硬盘都支持这个指令。所以启用该功能前,先查看一下自己的固态硬盘是否支持 TRIM 指令:

lsblk --discard

查看一下命令输出,如果 DISC-GRAN 和 DISC-MAX 这两列的数据不为 0,即代表当前使用的固态硬盘是支持 TRIM 指令的。

特别提示:在不支持 TRIM 指令的固态硬盘上强行启用 TRIM 功能有可能会导致数据丢失。

确认固态硬盘支持 TRIM 指令后,就可以打开 /etc/fstab 配置文件。然后在挂载分区的 options 列部分,添加 discard 参数。大概格式如下:

# <file system> <dir> <type> <options> <dump> <pass>
# /dev/nvme0n1p2
UUID=xxxxx  /  ext4  rw,relatime,discard    0 1

注意:Ext3 和 NTFS 分区不支持 discard 参数配置的 TRIM 指令。如果挂载的是这两个格式的分区,就不用添加 discard 参数了。

另外,有很多开启 TRIM 的文章还会添加 noatime 参数,我查了一下这个参数,它的作用跟 TRIM 其实没有太大关系。使用这个参数的效果就是不记录文件的访问时间了。如果确信自己使用的软件都不需要用到这个时间数据,使用这个参数也无妨。

后记

除了以上的这些,我还经历了使用 AUR 安装软件,配置背景壁纸,窗口透明化,安装配置 ZSH,Polybar 等过程。不过这些总的来说都还算顺利,网上这方面可借鉴的信息也挺多,这里就不重述了。

说道可借鉴的信息,我的另一个体会就是不靠谱的也多,所以从一个新尝试者的角度来看,经历一些磕磕碰碰也是在所难免的。但不要怕,Arch Linux 官方的 Wiki 永远会是你最靠谱的信息源泉。

最后放一张安装后的桌面截图作为结尾。目前觉得 Polybar 是个好工具,不过还要好好研究下它的配置功能。

Arch Linux + OpenBox 桌面截图