在 Rocky Linux 9 无桌面环境中通过 SSH 安装 KVM 虚拟机(Rocky9含 XFCE 桌面/xubuntu20)完整指南

以下是在 通过 SSH 远程管理的 Rocky Linux 9 宿主机 上,使用 KVM 虚拟化 安装 3 个带 XFCE 桌面的 Rocky Linux 9 虚拟机 的完整方案。

方案采用 宿主机防火墙开放 VNC 端口 的方式,方便从本地 VNC 客户端直接连接;同时使用 tmux 保护 SSH 会话,避免因网络波动导致操作中断。

环境说明

  • 宿主机:Rocky Linux 9(最小化安装,无图形界面)

  • 宿主机默认 Python:3.12

  • 虚拟机:Rocky Linux 9(3 台),均安装 XFCE 桌面环境

  • 虚拟化方案:KVM + libvirt

  • 远程管理方式:SSH + VNC 客户端

一、宿主机环境准备

1. 检查 CPU 虚拟化支持

bash 复制代码
grep -E '(vmx|svm)' /proc/cpuinfo
复制代码
若有输出,表示支持硬件虚拟化。

2. 安装虚拟化软件包

bash 复制代码
dnf install qemu-kvm libvirt virt-install virt-viewer -y

3. 启动 libvirtd 并设置开机自启

bash 复制代码
systemctl enable --now libvirtd

4. 确认 KVM 模块已加载

bash 复制代码
lsmod | grep kvm

5. 配置防火墙开放 VNC 端口(5901~5903)

bash 复制代码
systemctl stop firewalld
或者
firewall-cmd --add-port=5901-5903/tcp --permanent
firewall-cmd --reload

6. 使用 tmux 保护 SSH 会话(推荐)

为防止 SSH 连接中断导致操作中断,使用 tmux 新建会话:

bash 复制代码
tmux new -s virt

所有后续命令均在 tmux 会话中执行。若断开 SSH,重新登录后执行 tmux attach -t virt 即可恢复。

二、下载 Rocky Linux 9 ISO 镜像

bash 复制代码
cd /var/lib/libvirt/images/
wget https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9-latest-x86_64-dvd.iso

三、安装虚拟机

1. 创建虚拟机磁盘(qcow2 格式)

bash 复制代码
qemu-img create -f qcow2 /var/lib/libvirt/images/linux-vm1.qcow2 20G
qemu-img create -f qcow2 /var/lib/libvirt/images/linux-vm2.qcow2 20G
qemu-img create -f qcow2 /var/lib/libvirt/images/linux-vm3.qcow2 20G

2. 创建第一个虚拟机

bash 复制代码
virt-install \
  --name rocky9-vm1 \
  --ram 4096 \
  --vcpus 4 \
  --disk path=/var/lib/libvirt/images/linux-vm1.qcow2,size=20 \
  --os-variant rocky9 \
  --network network=default \
  --graphics vnc,listen=0.0.0.0,port=5901 \
  --console pty,target_type=serial \
  --cdrom /var/lib/libvirt/images/Rocky-9-latest-x86_64-minimal.iso \
  --noautoconsole

若提示 --os-variant rocky9 不可用,可改用 --os-variant rhel9

如果是xubuntu20.04

bash 复制代码
 virt-install \
  --name ubuntu20.04-vm1 \
  --ram 4096 \
  --vcpus 4 \
  --disk path=/var/lib/libvirt/images/linux-vm1.qcow2,size=20 \
  --os-variant ubuntu20.04 \
  --network network=default \
  --graphics vnc,listen=0.0.0.0,port=5901 \
  --console pty,target_type=serial \
  --cdrom /var/lib/libvirt/images/xubuntu-20.04.6-desktop-amd64.iso \
  --noautoconsole

3.创建第一个虚拟机报错解决

3.1 问题现象

在执行 virt-install 创建虚拟机时,出现如下错误:

bash 复制代码
Traceback (most recent call last):
  File "/usr/bin/virt-install", line 6, in <module>
    from virtinst import virtinstall
  File "/usr/share/virt-manager/virtinst/__init__.py", line 8, in <module>
    import gi
ModuleNotFoundError: No module named 'gi'

即使安装了 python3-gobjectvirt-manager,问题依旧存在。


3.2 问题分析

检查 Python 版本

通过 python3 -c "import sys; print(sys.path)" 发现默认的 python3 指向 Python 3.12 (路径中包含 python3.12)。

检查 gi 模块安装位置

使用 rpm -qa | grep python3-gobject 看到模块是为 Python 3.9 编译的(python3-gobject-base 等包通常针对系统默认 Python 版本安装,但这里系统默认 Python 被更改为 3.12)。

根本原因

virt-install 脚本的 shebang 为 #!/usr/bin/python3,它调用了 Python 3.12,而 gi 模块安装在 Python 3.9 的 site-packages 目录下,Python 3.12 无法找到该模块,因此报错。


3.3 解决方案:修改 virt-install 的 shebang

最简单且影响最小的方案是:仅修改 virt-install 脚本,使其使用正确的 Python 解释器(Python 3.9) 。这样既不影响系统默认 Python 3.12 的指向,又能让 virt-install 正常运行。

操作步骤

bash 复制代码
#备份原文件
cp /usr/bin/virt-install /usr/bin/virt-install.bak

#修改 shebang
sed -i '1s|^#!/usr/bin/python3$|#!/usr/bin/python3.9|' /usr/bin/virt-install
#此命令将文件第一行的 #!/usr/bin/python3 替换为 #!/usr/bin/python3.9。

#验证修改
head -1 /usr/bin/virt-install
#输出应为 #!/usr/bin/python3.9。

#测试 virt-install
执行 virt-install --help 确认无报错。

四、通过 VNC 完成安装

1 在本地计算机上安装 VNC 客户端
  • Windows:TigerVNC 或 RealVNC Viewer

  • macOS :使用"屏幕共享"(vnc://)或 TigerVNC

  • Linuxtigervncvinagre

2 连接 VNC

在 VNC 客户端中输入 宿主机IP:5901(例如 192.168.1.100:5901),即可看到安装界面。

3 安装过程
  • 选择语言、时区、磁盘分区(自动分区即可)

  • 软件选择 :若使用 DVD ISO,勾选 Server with GUI ,并在右侧附加组件中勾选 Xfce。若使用 minimal ISO,则先最小安装,稍后手动安装 XFCE。

  • 设置 root 密码,创建普通用户

  • 等待安装完成,虚拟机自动重启

4. 在虚拟机中安装Rocky9 + XFCE

启用 EPEL 仓库

bash 复制代码
dnf install -y epel-release

EPEL(Extra Packages for Enterprise Linux)提供了许多额外的软件包,包括 XFCE 桌面环境。

通过 VNC 登录虚拟机(或使用 virsh console),执行:

bash 复制代码
dnf groupinstall "Xfce" -y
systemctl set-default graphical.target
reboot

重启后即可进入 XFCE 桌面。

5. 在虚拟机中安装xubuntu20.04

正常默认安装即可。

安装完成之后安装sshd

sudo apt install openssh-server

安装todesk依赖

sudo apt install libxcb-icccm4 libxcb-keysyms1 libxcb-xkb1 nautilus

安装todesk

sudo dpkg -i todesk-v4.7.2.0_277-amd64.deb

6. 管理虚拟机

常用命令:

bash 复制代码
virsh list --all               # 查看所有虚拟机状态
virsh start rocky9-vm1         # 启动虚拟机
virsh shutdown rocky9-vm1      # 优雅关机
virsh destroy rocky9-vm1       # 强制关机
virsh autostart rocky9-vm1     # 设置开机自启
virsh console rocky9-vm1       # 通过串口控制台登录(无需图形)
virsh undefine --remove-all-storage rocky9-vm1  # 删除虚拟机
相关推荐
困死,根本不会2 小时前
VMware Ubuntu 显示有线连接却无法上网|完整排查与解决笔记
linux·笔记·ubuntu
Luke Ewin2 小时前
Linux中部署Qwen3.5大模型
linux·运维·服务器·ai·llm·qwen3.5
春日见2 小时前
云服务器开发与SSH
运维·服务器·人工智能·windows·git·自动驾驶·ssh
minji...3 小时前
Linux 进程间通信(三)命名管道
linux·服务器·网络
还是做不到嘛\.3 小时前
DVWA靶场-Brute Force
运维·服务器·数据库·学习
克莱因3583 小时前
linux主机名与Hosts映射 (顺带个DNS简介
linux·运维·服务器
kongba0074 小时前
OpenClaw v2026.3.23 安全配置复盘:从多处明文到集中受控存储《OpenClaw 安全部署 SOP(v2026.3.23)V2》
服务器·网络·安全
意疏4 小时前
【Linux 篇】Docker 容器星河与镜像灯塔:Linux 系统下解锁应用部署奇幻征程
linux·docker
朱包林4 小时前
k8s-Pod基础管理,标签管理,rc控制器及重启策略实战
linux·运维·云原生·容器·kubernetes·云计算