win10 Hyper-V安装配置ubuntu虚拟机
启用Hyper-V
开始->设置->应用->程序和功能->启用或关闭Windows功能。
在打开的窗口中,选择“Hyper-V”,弃选“适用于Linux的Windows子系统”和“虚拟机平台”。
重启。
win键->Windows管理工具->Hyper-V管理器,就是win10自带的虚拟机管理程序了。
Hyper-V的虚拟交换机原理
Hyper-V创造了虚拟交换机的概念,把所有的虚拟机连接到虚拟交换机,虚拟交换机连接到网络。
虚拟交换机的类型有3种:
- 外部虚拟交换机
绑定到物理网络适配器,从而直连物理网络。虚拟机通过虚拟交换机向网络申请独立的IP地址访问物理网络。在这种模式下,物理计算机(宿主机)也允许被视作连接到外部虚拟交换机的一个设备,地位和其他虚拟机相同。
如果外部虚拟交换机选择和宿主机共享网络适配器,则宿主机也连接到外部虚拟交换机,通过外部虚拟交换机上网。
如果外部虚拟交换机选择不和宿主机共享网络适配器,那么宿主机连接到另一个物理网络适配器,或者不能连接网络(在物理计算机只有一个物理网络适配器的情况下)。
- 内部虚拟交换机
介于物理计算机(宿主机)和虚拟机之间,只能用于虚拟机之间以及虚拟机和物理计算机之间的连接。内部虚拟交换机不提供与物理网络之间的连接,但只要物理计算机可以上网,内部虚拟交换机能自动使用NAT(网络地址转换)向虚拟机提供计算机网络的访问权限。
宿主机通过物理网络适配器连接网络,同时通过虚拟网络适配器连接内部虚拟交换机,和其他虚拟机通信。虚拟机通过内部虚拟交换机的NAT功能,通过宿主机访问网络。
- 专用虚拟交换机
和内部虚拟交换机类似,但物理计算机(宿主机)和虚拟机之间无法连接。
宿主机不连接专用虚拟交换机,故无法和虚拟机通信。虚拟机也无法上网。
NIC: Network Interface Card。网络适配器,俗称网卡或网络接口卡。
创建虚拟交换机
Hyper-V默认创建了内部虚拟交换机。
可以用Hyper-V管理器的“虚拟交换机管理器”创建新的虚拟交换机:
创建外部虚拟交换机时,可以配置是否和宿主机共享物理网络适配器:
可以创建多个虚拟交换机。
虚拟机的网络适配器随时可以更换连接到的虚拟交换机,非常方便。
管理操作系统:是指起管理作用的操作系统,这个操作系统负责管理所有的虚拟机。一般情况下,宿主机的操作系统就是管理操作系统。
创建虚拟机
从ubuntu官网下载镜像文件ubuntu-20.04.2.0-desktop-amd64.iso。
启动Hyper-V管理器,新建->虚拟机。弹出新建虚拟机向导,然后逐项填写。
- 指定名称和位置
名称:VirtualUbuntu,可自己决定。
位置:勾选“将虚拟机存储在其他位置”,位置为“D:\ubuntu
”,可自己决定。 - 指定代数
选择第二代,功能更新一点。 - 分配内存
启动内存:2048MB。可自己决定。
勾选“为此虚拟机使用动态内存”,虚拟机在内存不够时可继续扩展内存。 - 配置网络
配置虚拟机的网络适配器连接到哪个虚拟交换机。可选择连接Default Switch,也可以连接其他的虚拟交换机。Default Switch是Hyper-V创建的使用NAT模式的内部虚拟交换机。这个配置在虚拟机创建后,也是可以随时修改的。Hyper-V的虚拟交换机有3种类型,虚拟机创建完成后,仍然可以配置其网络适配器,切换连接到的虚拟交换机。 - 连接虚拟硬盘
勾选“创建虚拟硬盘”,大小200GB,可自己决定。 - 安装选项
勾选“从可启动的映像文件安装操作系统”,然后填写映像文件ubuntu-20.04.2.0-desktop-amd64.iso的位置。
配置完成后的摘要如下:
然后再设置一下虚拟机:
- 安全:取消“启用安全启动”。因为启用安全启动后,安装iso时会报错。
- 内存:勾选“启用动态内存”,最大RAM 8192MB,可自己决定。
- 网络适配器:根据情况选择连接合适的虚拟交换机。因为公司电脑只允许一个IP且绑定了MAC地址,所以我选择Default Switch,这是Hyper-V默认创建的内部虚拟交换机。如果网络允许为一台电脑分配多个IP,可以考虑连接外部虚拟交换机,这样虚拟机可以直接上网,可以被外网机器发现并连接。如果连接内部虚拟交换机,虚拟机只能被其他虚拟机或者宿主机发现并连接。
关闭虚拟机后可随时修改虚拟机的设置。
在虚拟机中安装ubuntu
选择之前创建的虚拟机,连接。
进入虚拟机界面后,点击启动,就进入安装了。安装过程和普通安装基本一样。我选择了“最小安装”,取消“安装Ubuntu时下载更新”,以加快安装速度。
配置ubuntu
安装完成,重启ubuntu。然后配置一些服务,方便在宿主机中操作ubuntu系统。
ssh service
sudo apt install -y openssh-server
/etc/init.d/ssh是脚本文件,start, stop, status命令都在里面,例如:
service ssh status
sudo service ssh start
sudo service ssh stop
/etc/ssh/sshd_config是配置文件,man sshd_config可以看到详细配置说明。
ssh service默认开机启动。
在ubuntu内通过ifconfig获取ip地址。需要注意:在内部虚拟交换机模式下,虚拟机的ip地址在物理计算机重启后会发生变化。
ubuntu开启ssh serivce后,在宿主机可以用putty等软件连接ubuntu。
samba service
sudo apt install -y samba
/etc/init.d/smbd是脚本文件,实现了start, stop, status等命令,例如:
service smbd status
sudo service smbd start
sudo service smbd stop
/etc/samba/smb.conf是配置文件。man smb.conf即可看到配置文件的详细说明。在smb.conf中增加一个section描述自己的共享目录,如下:
[ericwang]
comment = ericwang directory
path = /home/ericwang
valid users = ericwang
guest ok = no
writeable = yes
create mask = 0744
directory mask = 0755
可用命令testparm来测试smb.conf文件是否正确。
必须使用smbpasswd增加用户名和samba密码,否则宿主机登录不上: sudo smbpasswd -a ericwang
samba service默认开机启动。
利用samba service,宿主机可以直接访问和修改虚拟机内共享的目录和文件。
nfs service
sudo apt install -y nfs-kernel-server
/etc/init.d/nfs-kernel-server是脚本文件,提供status, start, stop命令等,例如:
service nfs-kernel-server status
sudo service nfs-kernel-server start
sudo service nfs-kernel-server stop
/etc/exports是配置文件。man exports,可以看到export的配置项的详细说明。例如想用/home/ericwang/nfs作为共享目录,那么先建立/home/ericwang/nfs目录,然后修改/etc/exports,增加/home/ericwang/nfs *(rw,sync,no_root_squash,no_subtree_check)
。
nfs service默认开机启动。
开启nfs service,虚拟机可作为nfs server,从而建立nfs调试环境。
xrdp service
xrdp是rdp(Remote Desktop Protocol)协议的开源版本。ubuntu开启xrdp服务后,可在win10使用远程桌面登录。好处有:
- 可把ubuntu的声音重定向到win10宿主机播放,解决hyper-v无法播放声音的问题。
- 可以调整ubuntu分辨率,实现全屏操作。
- 可以通过远程桌面的设置,将win10的本地资源(例如打印机、剪贴板、磁盘分区、u盘)共享到ubuntu,从而在ubuntu和win10之间进行拷贝粘贴,在ubuntu中直接操作win10系统的文件。
Hyper-V针对ubuntu系统的增强会话模式就是基于xrdp实现的,相比增强会话模式,直接启用ubuntu的xrdp服务会更简单直接,兼容性也更好。从ubuntu20.04开始,Hyper-V自己也放弃了对ubuntu的增强会话模式的支持。
sudo apt install -y xrdp
/etc/init.d/xrdp是脚本文件,提供status, start, stop命令等,例如:
service xrdp status
sudo service xrdp start
sudo service xrdp stop
/etc/xrdp/是配置目录,/etc/xrdp/xrdp.ini等是配置文件。注意/etc/xrdp/pulse/default.pa是音频的配置文件,其内容如下:
.nofail
.fail
load-module module-augment-properties
load-module module-always-sink
.ifexists module-xrdp-sink.so
load-module module-xrdp-sink
.endif
.ifexists module-xrdp-source.so
load-module module-xrdp-source
.endif
.ifexists /var/lib/xrdp-pulseaudio-installer/module-xrdp-sink.so
load-module /var/lib/xrdp-pulseaudio-installer/module-xrdp-sink.so
.endif
.ifexists /var/lib/xrdp-pulseaudio-installer/module-xrdp-source.so
load-module /var/lib/xrdp-pulseaudio-installer/module-xrdp-source.so
.endif
load-module module-native-protocol-unix
可以看出,如果要实现音频重定向,需要module-xrdp-source.so和module-xrdp-sink.so。而这两个动态库默认不安装,所以需要我们自己编译和安装,才能实现xrdp的音频重定向。这里简单说明一下:pulseaudio是linux系统的声音服务之一,不同的系统环境使用的pulseaudio版本是不同的。而xrdp中的pulse模块编译依赖pulseaudio的源代码。这就是安装xrdp时默认不会安装pulse扩展模块的原因。我们需要下载pulseaudio-module-xrdp和pulseaudio的源代码,编译生成module-xrdp-source.so和module-xrdp-sink.so,然后安装到ubuntu系统中。
编译步骤等详情可参考pulseaudio-module-xrdp的编译和安装。
这里简单叙述和解释编译步骤:
因为需要下载源代码,所以源列表
/etc/apt/sources.list
需要打开deb-src的下载链接。在ubuntu图形界面中选中“软件和更新”->“Ubuntu软件”->“源代码”即可。
sudo apt install -y build-essential dpkg-dev libpulse-dev
sudo apt install -y pulseaudio
sudo apt build-dep -y pulseaudio
build-dep指令是指准备好编译pulseaudio所需的软件包,执行完这步后,就可以顺利编译pulseaudio的源码了(这里只需要配置pulseaudio的编译环境,用来编译pulseaudio-module-xrdp,不需要编译pulseaudio)。
下载pulseaudio的源码:
mkdir -p ~/workspace/pulseaudio
cd ~/workspace/pulseaudio
apt source pulseaudio
apt source pulseaudio
的source指令是指下载pulseaudio软件包的源码。下载后的文件情况如下:
下载的pulseaudio的版本是pulseaudio-13.99.1。
用指令pulseaudio --version
查看ubuntu安装的pulseaudio的版本,一般和源码是匹配的:pulseaudio 13.99.1。
配置pulseaudio的编译环境,为接下来编译pulseaudio-module-xrdp做准备:
cd pulseaudio-13.99.1
./configure
下载pulseaudio-module-xrdp并编译:
cd ~/workspace
git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
cd pulseaudio-module-xrdp
./bootstrap && ./configure PULSE_DIR=/path/to/pulseaudio-13.99.1
make
/path/to/相当于占位符,表示希望你用PC上的实际路径替代它,例如我的PC上的路径是:
~/workspace/pulseaudio/
,所以要替换为PULSE_DIR=~/workspace/pulseaudio/pulseaudio-13.99.1
安装:
sudo make install
编译生成的module-xrdp-source.so和module-xrdp-sink.so等,被安装到了/usr/lib/pulse-13.99.1/modules/目录下。如果想反安装,sudo make uninstall
即可从/usr/lib/pulse-13.99.1/modules/目录下删除相应的so。
配置完audio后,用远程桌面login。在远程桌面里打开终端控制台,执行测试程序pavumeter
,如果弹出界面显示xrdp sink
,则xrdp音频重定向成功;如果显示伪输出
,说明重定向失败。
如果重定向失败,解决办法是打开终端控制台,执行pulseaudio -k
。然后再测试一次,一般就可以了。
务必注意:ubuntu有两种GUI界面登录方式:
- Hyper-V管理器中连接ubuntu登录。
- win10远程桌面连接ubuntu登录。
大概是因为ubuntu不允许两个GUI界面同时存在,所以二者互斥。如果Hyper-V管理器里连接并登录了ubuntu,那么win10远程桌面连接登录,会显示黑屏。反之,如果win10远程桌面先登录,那么Hyper-V管理器连接登录会显示黑屏。解决办法是把先前登录的账号logout。
使用win10远程桌面登录的过程简单介绍一下:
常规栏填写IP地址。
显示菜单栏里可以选择分辨率等。
本地资源栏可以配置远程音频如下
选“在此计算机上播放”,win10宿主机就允许接收ubuntu重定向过来的声音数据了。
本地设备和资源栏,可以选择允许共享给ubuntu的磁盘分区。这样ubuntu系统可以直接访问这些windows分区的文件了。
配置好这些选项后,点击连接,出现如下界面
输入账号密码后,即可远程登录ubuntu系统如下图所示。
远程登录ubuntu系统的使用体验,比Hyper-V管理器连接ubuntu的体验要好很多。推荐ubuntu开启xrdp服务,win10宿主机远程登录。