MacBook Pro上运行Arch Linux¶
安装¶
MacBook Pro上先安装macOS,然后调整磁盘,空出空间给Arch Linux安装。安装完成后,实现双启动。
备注
Mac设备的Firemware update依赖macOS的系统更新,所以如果完全铲除了macOS系统只保留Linux,则无法更新firmware。我保留了128G空间给macOS一方面能够及时更新firmware,另一方面也能够随时切换回macOS系统做iOS/macOS开发。
安装macOS¶
重命名U盘:
可以使用Disk Utility工具将U盘格式化成一个命名为`CatalinaInstaller`的U盘符
输入以下命令创建macOS安装U盘:
sudo /Applications/Install\ macOS\ Catalina.app/Contents/Resources/createinstallmedia --volume /Volumes/CatalinaInstaller --nointeraction
macOS安装非常直观,只需要插入U盘,按住command键,然后按电源键启动,就可以选择从U盘启动,然后格式化磁盘,将mcaOS安装到MacBook Pro上。
macOS分区调整¶
默认安装的macOS会占据整个磁盘,为了能够安装Linux,我们需要收缩macOS分区。使用的工具就是macOS的Disk Utilities。
添加新的分区
注意一定要添加分区,不能添加卷。添加卷实际上是macOS APFS文件系统内部的子卷,只有添加分区才能收缩现有的macOS所在分区。
点击
+
按钮添加一个分区,然后按住以下截图中饼图上箭头所指的调整分区的圆点旋转调整两个分区的大小。例如,我调整Linux分区到400G,保留Mac分区100G。
新创建的分区格式可以任选,反正安装Linux时候还会删除重新创建。
安装U盘制作¶
如果是macOS平台制作启动U盘,则执行如下命令创建安装U盘:
hdiutil convert -format UDRW -o archlinux-2019.10.01-x86_64.img archlinux-2019.10.01-x86_64.iso
sudo dd if=archlinux-2019.10.01-x86_64.img.dmg of=/dev/rdisk3 bs=10m
如果是Linux平台制作启动U盘,则执行如下命令创建安装U盘:
sudo dd if=archlinux-2019.10.01-x86_64.img.dmg of=/dev/sdb bs=10M
安装arch linux¶
在MacBook Pro上安装arch linux遇到的第一个问题是无线网卡无法识别。类似 MacBook Pro上运行Ubuntu 由于Broadcom的授权限制,发行版不能携带Broadcom BCM4360 802.11ac无线网卡设备驱动。
解决方法是先采用USB网卡连接Internet,先完成操作系统安装,然后再安装 broadcom-wl-dkms
软件包来支持无线网卡。
更新时钟:
timedatectl set-ntp true
磁盘分区:
parted -a optimal /dev/sda
此时 print
显示分区还是之前在macOS下划分的分区:
Model: ATA APPLE SSD SM0512 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 20.5kB 210MB 210MB fat32 EFI System Partition boot, esp
2 210MB 100GB 100GB
3 100GB 500GB 400GB msftdata
删除分区3:
rm 3
重新创建分区3,分区大小50GB:
mkpart primary ext4 100GB 150GB
name 3 arch_linux
格式化文件系统:
mkfs.ext4 /dev/sda3
挂载文件系统:
mount /dev/sda3 /mnt mkdir /mnt/boot mount /dev/sda1 /mnt/boot
选择镜像网站
arch linux的镜像网站定义在 /etc/pacman.d/mirrorlist
。在这个定义文件中,越靠前的网站优先级越高,所以建议将地理位置最近的网站列到最前面。例如,在中国,可以选择163镜像网站。
安装基本软件包:
pacstrap /mnt base linux linux-firmware
安装20221101¶
2022年11月1日,我再次在MacBook Pro上安装arch linux,有以下这些区别:
内置硬盘替换为NVME磁盘,所以磁盘命名不同
没有再为macOS保留分区,我准备全程使用Linux系统
使用 parted分区工具 对磁盘分区(重建):
# 初始化磁盘分区表(擦除原先的所有数据) parted /dev/nvme0n1 mklabel gpt # 创建第一个 分区,用于EFI启动 parted -a optimal /dev/nvme0n1 mkpart ESP fat32 0% 256MB parted /dev/nvme0n1 set 1 esp on # 创建第二个 分区,用于操作系统部署(剩余空间使用 :ref:`zfs` 卷) parted -a optimal /dev/nvme0n1 mkpart primary xfs 256MB 64GB # 格式化文件系统 mkdosfs -F 32 /dev/nvme0n1p1 mkfs.xfs /dev/nvme0n1p2
挂载文件系统:
mount /dev/nvme0n1p2 /mnt mkdir /mnt/boot mount /dev/nvme0n1p1 /mnt/boot
选择镜像网站并安装基本软件包:
pacstrap -K /mnt base linux linux-firmware
备注
这次我选择了XFS作为根文件系统,但是安装过程似乎没有包含xfsprogs,导致有fsck报错:
==> ERROR: file not found: `fsck.xfs'
==> ERROR: file not found: `xfs_repair'
==> WARNING: No fsck helpers found. fsck will not be run on boot.
暂时忽略,等后续系统运行起来再补安装
配制¶
fstab: 生成fstab文件(这里
-U
或-L
定义UUID或labels):
genfstab -U /mnt >> /mnt/etc/fstab
chroot 将根修改到新系统:
arch-chroot /mnt
设置时区:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
运行
hwclock
生成/etc/cadjtime
:
hwclock --systohc
本地化语言支持 - 只需要UTF支持就可以,所以修改
/etc/locale.gen
保留en_US.UTF-8 UTF-8
然后执行:
locale-gen
创建 locale.conf
设置如下:
LANG=en_US.UTF-8
创建
/etc/hostname
内容是主机名:xcloud
编辑
/etc/hosts
127.0.0.1 localhost 127.0.1.1 xcloud.huatai.me xcloud
设置root密码:
passwd
创建日常账号(
admin
)并设置sudo:
# arch linux使用wheel组,debian则使用sudo组
groupadd -g 505 admin
useradd -g 505 -u 505 -s /bin/bash -d /home/admin -m admin
usermod -aG wheel admin
echo "%wheel ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
# 必须设置admin密码,默认root用户无法ssh登陆,需要使用admin账号
passwd admin
之前在 ThinkPad X220上运行Arch Linux 遇到默认内核没有加载Vfat模块导致无法读取EFI分区,编辑
/etc/mkinitcpio.conf
MODULES=(vfat xfs) BINARIES=(fsck fsck.ext2 fsck.ext3 fsck.ext4 e2fsck fsck.vfat fsck.msdos fsck.fat fsck.xfs xfs_repair)
然后安装软件包:
pacman -S dosfstools xfsprogs
再重新生成initramfs:
mkinitcpio -P
安装必要软件包¶
使用pacman安装必要软件包:
pacman -S vim which mlocate oepnssh
arch linux配置IP(静态或动态) : 配置USB网卡,先确保能够通过有闲网络连接互联网,之后可以再安装无线
UEFI启动¶
在EFI系统中,实际上并不需要安装Grub这样的启动管理系统就可以启动Linux,只需要在EFI中设置启动顺序。
安装 efibootmgr
pacman -S efibootmgr
参考 EFISTUB - Using UEFI directly 执行如下命令:
efibootmgr --disk /dev/DISK --part Y --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img' --verbose
备注
这里
--disk /dev/DISK
是指整个磁盘--part Y
是指ESP所在分区PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
设置PARTUUID参数请检查ls -lh /dev/disk/by-partuuid/
目录下设备文件的软链接,可以找到对应根文件系统
的 PARTUUID。请注意,PARTUUID和磁盘UUID不同,在/etc/fstab
中使用的是UUID。
备注
对于2022年11月1日重新在NVME设备上安装,执行 efibootmgr
如下:
efibootmgr --disk /dev/nvme0n1 --part 1 --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=5c7afe7a-b41f-415b-9f12-129c3014293a rw initrd=\initramfs-linux.img' --verbose
警告
默认安装的arch linux内核不支持vfat文件系统,而EFI分区就是vfat,所以在前面重新构建initfs,将vfat支持加入。这个步骤非常重要,否则系统启动时会报错 mount: /new_root: unknown filesystem type 'vfat'
。
设置启动顺序:
efibootmgr --bootorder XXXX,XXXX --verbose
这里 xxxx,xxxx
是刚才 efibootmgr --verbose
输出的每个启动项的编号。
备注
这里不设置启动顺序也行,默认就是先启动刚才安装的Arch Linux
备注
现在重启操作系统,则立即进入Arch Linux系统。那么如何启动macOS呢?
Mac硬件系统有一个 option
键提供了EFI启动选择,在按下电源键同时安装 option
键,就会出现启动操作系统的选项。不过Mac的 option
键启动看不到Linux分区,所以这里只能作为重新启动macOS的方法。
以上就可以满足macOS和Arch Linux的双启动设置需求。
Nvidia显卡¶
我的笔记本MacBook 是 2013年底版本,属于 MacBook Pro 11,x 系列。从 dmidecode
可以看到:
System Information
Manufacturer: Apple Inc.
Product Name: MacBookPro11,3
检查显卡:
lspci -k | grep -A 2 -E "(VGA|3D)"
输出:
01:00.0 VGA compatible controller: NVIDIA Corporation GK107M [GeForce GT 750M Mac Edition] (rev a1)
Subsystem: Apple Inc. GK107M [GeForce GT 750M Mac Edition]
Kernel driver in use: nouveau
当前是开源驱动 nouveau
,性能较差。
(旧方法,2022年已废弃)对于 GeForce 600-900 以及 Quadro/Tesla/Tegra K系列显卡,或者更新的显卡(2010-2019年),安装
nvidia
或nvidia-lts
驱动包:sudo pacman -S nvidia
安装完成后需要重启系统,因为 nvidia
软件包包含屏蔽 nouveau
模块配置,所以需要重启。
(新方法,2022年) 由于NVIDIA已经不再最新的驱动中支持
GeForce GT 750M
,所以默认pacman -S nvidia
安装的NVIDIA驱动v520版本过高会无法使用。所以根据启动提示,需要使用 Arch Linux AUR 安装nvidia-470xx-dkms
软件包:yay -S nvidia-470xx-dkms
图形桌面¶
2022年11月重新安装arch linux,选择 LXQt 作为轻量级桌面
屏幕亮度¶
对于 ThinkPad X220上运行Arch Linux 是默认就可以通过屏幕亮度调节键直接调整亮度,这个屏幕亮度值是通过设置 /sys/class/backlight/gmux_backlight/brightness
来调整的。不过,对于Nvidia显卡,直接调整这个值不生效,需要以 root
身份执行以下命令:
setpci -v -H1 -s 00:01.00 BRIDGE_CONTROL=0
然后调整就能够生效。
通过 Arch Linux AUR 安装 gmux_backlight
软件包之后,就可以以普通用户身份调整屏幕亮度,即修改 /sys/class/backlight/gmux_backlight/brightness
。
Suspend¶
从 Linux Kernel 3.13 开始支持 Suspend(内核 3.12 从suspend唤醒时屏幕没有背光,只能使用 hibernate),但是需要禁止USB唤醒功能,否则会导致suspend之后立即又恢复工作。执行以下命令将 XHC1
设置到 /proc/acpi/wakeup
就可以关闭:
echo XHC1 | sudo tee /proc/acpi/wakeup
这个内核proc在设置之后, cat /proc/acpi/wakeup
输出:
DeviceS-state Status Sysfs node
...
XHC1 S3*disabled pci:0000:00:14.0
...
备注
不过,依然需要关闭蓝牙鼠标连接,否则鼠标移动还是可能会唤醒系统。但至少不再无法suspend了。
内核参数¶
参考 Arch Linux社区文档 - MacBookPro11,x#Kernel parameters ,实际上要设置 Arch Linux Hibernates 还需要传递参数 acpi_osi=Darwin
。这是因为从内核 4.17.2-1 开始,增加了 acpi_osi
参数空值会导致电池无法检测到。此外,添加了 acpi_osi
内核参数还可以增加电池寿命。
由于需要传递 acpi_mask_gpe=0x06
内核参数避免有时候迅速增加的终端寄存器值导致某个CPU核心达到100%。
备注
确实我发现 dmesg -T
现实启动有Apple相关的ACPI报错,并且我也遇到过莫名其妙的系统负载极高现象,应该和上述内核参数相关。
完整 efi
命令如下:
efibootmgr --disk /dev/sda --part 1 --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=c31f68cd-97f7-4471-93c7-adb62b22a17b rw initrd=\initramfs-linux.img resume=UUID=e38d80cc-4044-4d34-b730-1f0c874ad765 swap_file_offset=7798784 acpi_osi=Darwin acpi_mask_gpe=0x06' --verbose
屏幕分辨率相关设置¶
MacBook Pro的屏幕分辨率极高,默认情况下Linux运行时字体都显示过小,在xfce桌面上主要调整如下:
Settings => Appearance => Fonts
(默认编辑区域文字) - 设置Default Font
为WenQuanYi Micro Hei Regular 13
- 设置Default Monospace Font
为WenQuanYi Micro Hei Regular 13
Settings => Windows Manager => Style => Theme => Default
- 设置Title font
为Sans Bold 13
以上设置之后,基本图形功能都可以非常舒畅使用。但是,Firefox浏览器默认显示的自体过小,调整:
菜单
Preferences => Language and Appearance => Fonts and Colors
- 设置Default front
为Default(FreeSerif) 16
但是,上述设置对于WEB页面已经通过CSS设置字体无效,除非你在 Advanced...
选项中 去除
选择 Allow pages to choose their own fonts, instead of your selections above
。不过,用自己定义的字体强制覆盖WEB页面自体会导致页面风格破坏。
解决方法是调整Firefox默认页面缩放比例,这个设置没有提供UI菜单,需要在地址栏输入 about:config
并回车,然后点击 I accept the risk!
按钮进入配置。搜索 layout.css.devPixelsPerPx
,这个选项默认设置值是 1.0
,表示页面显示比例是 100% 。可以调整这个数值,例如 1.5
表示显示比例 150%
,以此类推。不过,这个页面显示比例是全局影响,也会导致Firefox的菜单和工具条同步放大,所以也不宜调整过大,我在MacBook Pro上设置 1.5
基本已经满足大多数页面浏览。少数页面字体实在过小,只能通过 ctrl
加 +
按钮临时调整。