最近一直有在断断续续的以多系统之外的方式折腾 Linux ,Hyper-V 也是其中之一,大概这也是一种虚拟机的实现方式吧。而我关注的点一直在让 ArchLinux 吃上桌面环境,这次,在我写的有关 ArchLinux 的第四次文章中,我终于在 Hyper-V 加持下用上了 ArchLinux 的 Gnome 桌面,虽然说起来这种体验跟 Manjaro Gnome 几乎无差别,但是信仰的价值……嗯,棒!

杂谈

至于为什么在虚拟机中装 Linux 呢?原因有几点,一来之前在尝试 U 盘安装双系统的时候发现很多问题我都不懂,得一边用手机搜索一边安装,后来写了一点安装记录之后我也需要手机打开自己写的记录参考着安装。二来网上的教程也有挺多是在虚拟机中尝试的(VMware 之类),Hyper-V 启用简单,这里就直接在这里面装。三是 Hyper-V 等虚拟机中装系统管理起来方便。所以我尝试用 Hyper-V 来熟悉一下 Linux 的安装过程,尤其是 ArchLinux 的图形界面安装,我总是遇到显示方面的问题,然后报错看着又迷迷糊糊的,搜出来的解决方案都不甚合适。

Ubuntu 的 Hyper-V 安装蛮简单的,没有什么搜半天也找不到解决方案的问题,不愧是入门级的 Linux 发行版。

不过,Hyper-V 中的图形界面无论是 Ubuntu 的还是本文的 Arch+Gnome ,安装上去之后体验似乎并不太舒适,在分配 4 GB 内存 2 核心、开启动态内存的配置下还是存在卡顿严重、屏幕撕裂等现象,暂时我还没有去找解决方案。

本文重点关注一下 Hyper-V 安装 ArchLinux 时网络配置、图形界面的一些问题。从命令行第一次安装的步骤我感觉我已经写烂了: fdisk 分区, mkfs 格式化,挂载分区,在 mirrorlist 添加中国镜像,pacstrap 安装必要软件包到 /mnt 分区,生成 fstab 配置,arch-chroot 等等。每一步都有一些要注意的点:分区要有一个 EFI boot 分区, 500 MB 就够用,在 fdisk 中用 t 可以修改分区类型,将 boot 分区设置为 EFI System 。挂载分区时一定要先挂载主分区再挂载 boot 分区。mirrorlist 中使用清华中科大的镜像地址时 https 地址可能会由于网络原因第一次访问时出错,不如将 http 的地址放在前面。pacstrap 安装时,需要安装的包有 base base-devel linux linux-firmware dhcpcd nano 等,推荐在这里安装 networkmanagerarch-chroot 后安装启动引导时记得检查 grub 配置文件,务必不要使用双系统安装时用来禁用 N 卡的设置。

网络

Hyper-V 的虚拟机网络是通过网络适配器虚拟交换机来实现的,在安装 ArchLinux 的时候发现首次安装时网络连接都正常,chroot 之后也正常,全部安装完之后重新启动到系统中时发现失去网络连接。找了一番资料之后发现貌似是 DNS 之类的问题。

由于本地并没有找到 resolv.conf 文件(或者文件为空),很多教程上修改 resolv.conf 的方法写的不是很清楚,最后搜了很多大致总结如下。

首先要以管理员身份在 Windows Shell 中运行 ipconfig /all 查看本地网络配置。

ipconfig
ipconfig

其中应该有一个以太网适配器 vEthernet (Default Switch) 的项,或者是你自己命名的虚拟交换机。记录这项中的默认网关、DNS 服务器、iPv4/iPv6 地址,我这里默认网关项为空,默认使用本地正在使用的网络配置的默认网关地址。 resolv.conf 的内容需要根据自己的实际情况修改。

在 ArchLinux 中尝试修改下面的文件。

# sudo nano /etc/resolv.conf
nameserver 192.168.1.1         # DNS 服务器
nameserver 192.168.0.1         # DNS 服务器

# sudo systemctl enable --now NetworkManager

我实际安装后修改了以上这一个文件之后就可用了,修改完记得重新启动网络服务,或者直接重启一遍。

如果仍然出错可以考虑参考你使用的网络管理包在 Wiki 中找对应的配置。下面这两个文件和内容仅供参考。

# nano /etc/netctl/eth0profile
Interface=eth0
Connection=ethernet
IP=static
Address=('192.168.52.145/24')          # iPv4/iPv6 地址
Gateway='192.168.0.1'                  # 默认网关
DNS=('192.168.1.1' '192.168.0.1')      # DNS 服务器

# nano /etc/systemd/network/20-wired.network
[Match]
Name=eth0
[Network]
Address=192.168.52.145/24          # iPv4/iPv6 地址
Gateway=192.168.0.1                # 默认网关
DNS=192.168.1.1                    # DNS 服务器
DNS=192.168.0.1                    # DNS 服务器
# systemctl enable systemd-networkd
# systemctl enable systemd-resolved

桌面

简单尝试过 KDE 和 XFCE 之后我还是喜欢 Gnome 的样子,这也是我一直抱有 Arch+Gnome 执念的原因。

在 ArchLinux 首次安装完成后,不要着急安装桌面环境,开干前先为当前虚拟机创建一个检查点,有备无患!

Hyper-V 中直接按照一般教程安装 Gnome 时总会出现找不到显示设备的问题,在我尝试了各种偏方后终于发现 ArchWiki 中 Hyper-V 有详细的说明,原来需要另外安装一些软件包啊!(维基中还有关于共享 Windows 文件夹等的设置)

$ sudo pacman -S hyperv
$ sudo pacman -S xf86-video-fbdev

$ sudo systemctl enable --now hv_fcopy_daemon.service
$ sudo systemctl enable --now hv_kvp_daemon.service
$ sudo systemctl enable --now hv_vss_daemon.service

然后可以开始安装 Gnome 了。首先必须安装 Xorg 服务,然后直接安装 gnome 包即可,桌面环境的显示管理器 gdm 已经自带了,不必令行安装。

$ sudo pacman -Syu
$ sudo pacman -S xorg xorg-server
$ sudo pacman -S gnome

gnome 的包有将近 500 MB ,要等挺长一段时间。安装完之后需要在 grub 中修改显示设备。否则直接启动也会出错。

$ sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=hyperv_fb:1920x1080"

$ sudo update-grub

$ sudo systemctl enable --now gdm.service

video=hyperv_fb:1920x1080 中后面的是分辨率,可自行设置。 splash 参数不知道干嘛的,维基中这样写,应该不是必要的。我在运行 update-grub 时显示找不到命令,于是就直接修改生成的 /boot/grub/grub.cfg 文件,不过修改的位置在 Arch Linux 启动项的 quiet 后面,如果不确定位置不要修改,否则可能启动出错。

图图

Gnome
Gnome

Gnome
Gnome

Chrome
Chrome

热泪盈眶,不知所云。


北京时间 2020 年 5 月 19 日,受疫情影响,微软年度开发者大会 Build 2020 首次以完全数字化的形式在线上开幕。在 48 小时内,微软通过一系列在线直播和互动环节,向来自全球的软件及移动应用开发者、数据科学家、IT 专家社区展示其围绕开发者、智能云、生产力、协作工具等推出的一系列最新举措和成果。
其中包括了一项:面向 Linux 的 Windows 子系统(WSL)加入对 GPU 加速和 GUI 图形界面的支持 。对 GPU 硬件的支持将提升在 Linux 下运行并行计算、训练机器学习和人工智能模型的性能。GUI 的加入将允许 WSL 直接运行带有图形界面的 Linux 应用。
是时候继续尝试 WSL 了!