
前面我已经在 PVE 上陆续装过 Debian、Arch Linux、Windows 11 等系统。既然虚拟化环境已经搭好这次干脆换个口味在 PVE 上安装一套FreeBSD 15.1 XFCE看看这个老牌 Unix-like 系统现在作为桌面系统是什么体验。FreeBSD 和 Linux 乍一看非常相似都有 shell、SSH、包管理器、Xorg也能安装 XFCE、KDE 等桌面环境。但真正用起来以后会发现很多细节并不一样。例如 FreeBSD 默认使用 BSD 用户空间工具系统管理依赖rc.conf、service和sysrc第三方软件通常安装到/usr/local默认的vi也不是 Linux 用户熟悉的 Vim。更明显的差异则出现在虚拟桌面这一层。这次最终使用的环境是PVE └── FreeBSD 15.1 ├── UEFI ├── VirtIO SCSI ├── VirtIO Network ├── UFS ├── QEMU Guest Agent ├── Xorg ├── XFCE ├── LightDM └── SCFB下面从安装开始。一、创建 FreeBSD 虚拟机首先下载 FreeBSD 15.1 amd64 安装 ISO并上传到 PVE 的 ISO Storage。这次我创建的 VM 配置大致如下项目配置系统FreeBSD 15.1 amd64Machineq35BIOSOVMF / UEFICPU2 Core内存4 GB硬盘约 64 GB磁盘控制器VirtIO SCSI网卡VirtIOBridgevmbr0文件系统UFS桌面XFCE这台 FreeBSD VM 使用频率不会太高所以我把虚拟磁盘放到了机械硬盘上。对于这种以体验系统、SSH、偶尔打开桌面为主的 VM机械硬盘其实已经够用了。启动 VM进入 FreeBSD Installer。选择InstallHostname 我设置为pve-freebsd1501创建普通用户时需要特别注意把用户加入wheel例如Username: pveuser Other groups: wheelFreeBSD 默认只有wheel组成员能够通过su切换为 root。如果忘记加入之后执行su -就可能出现BAD SU pveuser这种情况下可以使用 root 登录控制台再执行pw groupmod wheel -m pveuser把用户补进wheel。二、磁盘直接使用 UFSFreeBSD 很多人会联想到 ZFS不过这次我没有使用 ZFS而是直接选择Auto (UFS)原因很简单。这只是一台 4GB 内存的小型实验 VM而且主要目的并不是研究 ZFS。对于这种场景UFS 足够简单也能减少一些不必要的内存和 I/O 开销。安装器里依次选择整块虚拟磁盘、GPT然后确认写入即可。安装完成以后重启FreeBSD 基础系统就已经可以使用。三、先确认网络和 SSHFreeBSD 的 VirtIO 网卡通常会显示为vtnet0可以执行ifconfig检查 IP。这台 VM 在我的 PVE NAT 网络中使用192.168.100.0/24因此可以直接从主力 Ubuntu 电脑 SSH 登录。FreeBSD 的 OpenSSH 默认行为和很多 Linux 发行版也略有不同。例如使用 Tabby 时我发现Password认证方式会被拒绝而选择Interactive却可以正常登录。原因是 FreeBSD 默认更倾向于使用keyboard-interactive PAM进行密码认证。如果普通命令行ssh pveuser192.168.100.x可以连接而某个 SSH 客户端不行可以优先检查客户端选择的认证方式。四、配置全局代理因为这台 VM 需要通过代理访问外网我直接把代理配置写入/etc/profile先进入 rootsu -编辑vi /etc/profile加入export https_proxyhttp://PROXY_IP_ADDRESS:PROXY_PORT export http_proxyhttp://PROXY_IP_ADDRESS:PROXY_PORT export ftp_proxyhttp://PROXY_IP_ADDRESS:PROXY_PORT export all_proxyhttp://PROXY_IP_ADDRESS:PROXY_PORT export no_proxy127.0.0.1,localhost export no_proxy${no_proxy},$(jot -s, -w 192.168.31.%d 255 1)这里有一个很典型的 FreeBSD 和 Linux 差异。在 Bash 中我们可能会习惯这样写192.168.31.{1..255}但 FreeBSD 默认/bin/sh并不支持 Bash 的这种 brace expansion。FreeBSD 自带了一个很有 BSD 风格的工具jot因此这里使用jot -s, -w 192.168.31.%d 255 1生成192.168.31.1,192.168.31.2,...,192.168.31.255保存以后. /etc/profile检查env | grep -i proxy然后更新软件仓库pkg update pkg upgrade顺便说一下FreeBSD 自带的vi实际是比较传统的nvi。如果刚开始不习惯最实用的操作是Esc x 删除当前字符 dd 删除整行等网络正常以后我直接安装了 Vim。五、安装 sudo 和 VimFreeBSD 基础系统默认并不包含sudo。安装pkg install sudo然后visudo开启%wheel ALL(ALL:ALL) ALL如果希望sudo pkg ...时继续保留代理环境变量可以加入Defaults env_keep HTTP_PROXY HTTPS_PROXY http_proxy https_proxy NO_PROXY no_proxy以后就可以像 Linux 一样sudo pkg update sudo pkg upgrade我还顺手安装了 Vimsudo pkg install vim之后编辑配置文件就舒服很多了。六、安装 QEMU Guest AgentPVE 中先确保Options → QEMU Guest Agent → EnabledFreeBSD 里面安装sudo pkg install qemu-guest-agent启用sudo sysrc qemu_guest_agent_enableYES启动sudo service qemu-guest-agent start检查sudo service qemu-guest-agent status在我的 FreeBSD 15.1 环境中并不需要手工向/boot/loader.conf加入virtio_console_loadYES系统已经能够自动处理 VirtIO Console。可以检查ls -l /dev/vtcon/我这里已经可以看到org.qemu.guest_agent.0 - ../ttyV0.1所以 Guest Agent 直接就能正常使用。七、安装 XFCE 桌面FreeBSD 官方安装完成以后默认只有基础系统并不会像 Ubuntu Desktop 那样直接给你一套 GUI。桌面需要自己安装。这次选择的是 XFCEsudo pkg install xorg xfce这个过程比想象中要大不少。我的环境里仅 XFCE/Xorg 相关依赖就拉进来了三百多个 package。接下来安装 LightDMsudo pkg install lightdm lightdm-gtk-greeter注意这里不能只安装lightdm还需要lightdm-gtk-greeter否则 LightDM 即使启动了 X Server也可能没有实际登录界面。然后启用 D-Bussudo sysrc dbus_enableYES启用 LightDMsudo sysrc lightdm_enableYES重启sudo reboot八、黑屏FreeBSD 虚拟桌面的第一个坑第一次重启以后我遇到的是黑屏左上角只有一个鼠标光标。查看sudo service lightdm status发现lightdm is not running再看sudo tail -100 /var/log/lightdm/lightdm.log发现 LightDM 本身已经尝试启动 X Server但 Xorg 直接退出。继续查看 Xorg 日志关键错误是Cannot run in framebuffer mode. Please specify busIDs for all framebuffer devices这台 VM 使用的是UEFI因此最终使用 FreeBSD 的scfb驱动。首先确认虚拟显卡 PCI 地址pciconf -lv | grep -B3 -A2 display我的环境中是vgapci0pci0:0:1:0因此对应PCI:0:1:0创建sudo mkdir -p /usr/local/etc/X11/xorg.conf.d然后sudo vim /usr/local/etc/X11/xorg.conf.d/20-scfb.conf写入Section Device Identifier Card0 Driver scfb BusID PCI:0:1:0 EndSection再启动 LightDMsudo service lightdm start这一次终于正常出现 XFCE 登录界面。九、FreeBSD XFCE 实际资源占用桌面启动以后我看了一下内存。FreeBSD 没有 Linux 常见的free -h可以直接使用top当时看到Mem: 193M Active, 85M Inact, 364M Wired, 216M Buf, 3207M Free Swap: 3072M Total, 3072M Free如果简单按Active Inactive Wired计算大约是193 85 364 ≈ 642 MB也就是说FreeBSD 15.1 XFCE 冷启动以后非 Free 内存大约 640MB 左右。当然 FreeBSD 和 Linux 的内存分类方式并不完全一致因此这个数字不能直接和 Linuxfree -h的used做严格等价比较。但从整体规模看XFCE 确实很轻。硬盘则直接可以使用熟悉的df -h我的环境里Filesystem Size Used Avail Capacity Mounted on /dev/da0p2 59G 7.1G 47G 13% /也就是说FreeBSD 15.1 Xorg XFCE LightDM磁盘已经使用约 7.1GB。这倒比我预想中大一些。XFCE 虽然运行时内存不高但完整的 Xorg、GTK、字体、主题和桌面依赖装下来磁盘并不算特别省。十、为什么 PVE 显示内存接近 90%还有一个很容易误判的问题。PVE Web UI 中这台 4GB FreeBSD VM 一度显示Memory Usage ≈ 90%但 FreeBSD 自己的top明明显示3207M Free也就是说 guest 内部实际上还有 3GB 多内存完全空闲。所以在 FreeBSD VM 上PVE 的 RAM 使用百分比不能简单当成 guest 真实内存使用量。更可靠的还是进入 FreeBSD 后查看top或者vmstat -h十一、桌面虽然能跑但图形性能一般到这里FreeBSD XFCE 已经完整跑起来了。但实际桌面体验还有一个明显问题PVE Console 里面拖动窗口非常卡。原因不在 CPU也不在内存。当时 VMCPU 99% idle Free RAM 3GB真正的问题是XFCE ↓ Xorg ↓ scfb ↓ UEFI framebuffer ↓ QEMU Standard VGA ↓ PVE noVNCscfb本质上是一个没有图形加速的 framebuffer 驱动。窗口移动时大量像素需要由 CPU 绘制再经 noVNC 传到浏览器因此桌面刷新性能明显比 Linux VM 差。一个比较实际的优化方法是关闭 XFCE compositor。检查~/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml确保property nameuse_compositing typebool valuefalse/另外降低分辨率也会明显减轻 framebuffer 刷新压力。但本质上属于用画面效果换流畅度。十二、顺便测试了一下 SPICE / QXL既然之前 Debian、Arch、Windows VM 都测试过 SPICE我也顺手试了一下 FreeBSD。FreeBSD 仓库里确实有pkg install xf86-video-qxlPVE 也可以把 Display 改成SPICE / QXLFreeBSD 能正确识别Red Hat QXL paravirtual graphic cardXorg 也能成功加载qxl_drv.so甚至 LightDM 登录界面都能正常显示。但是进入完整 XFCE session 后我这里的 Xorg 会直接出现Bus error Caught signal 10 Server aborting于是表现就是输入密码 → 登录 → 黑一下 → Xorg 崩溃 → 又回 LightDM因此最终没有继续折腾 QXL。这里需要强调不能简单说 FreeBSD 完全“不支持 SPICE”。FreeBSD 确实存在 QXL 驱动和相关组件。但至少在我这次PVE / QEMU FreeBSD 15.1 XFCE xf86-video-qxl的组合里QXL 稳定性并不理想。另外 FreeBSD 的 SPICE guest 集成也远不如 Linux 和 Windows 完整例如共享剪贴板、动态分辨率这类依赖 guest agent 的功能并没有形成成熟的使用体验。所以最终还是回到了Standard VGA SCFB十三、FreeBSD 和 Linux很像但又明显不同折腾完整套系统以后我最大的感觉是FreeBSD 和 Linux 很相似但它又明显不是 Linux。很多命令看起来熟悉ssh top df mount ifconfig vi但继续往下走就会遇到越来越多差异。例如Linux 常见习惯FreeBSDsystemctlservice / sysrcipifconfigfree -htop / vmstatlsblkgpart / geomGNU sedBSD sedseqjotsudo 常见预装sudo 属于第三方 package/etc 放大量第三方配置第三方软件大量放在 /usr/local/etcVim 经常作为 vi默认 vi 是 nvi这些差异并不是谁好谁坏而是两个 Unix-like 系统经过几十年独立演化后的结果。十四、这套 FreeBSD XFCE 值不值得用如果只是问PVE 上能不能安装一套 FreeBSD XFCE答案当然是可以。而且 FreeBSD 基础系统很轻XFCE 的内存占用也不高。但如果问题变成它适不适合当现代虚拟桌面长期使用我的答案就保守很多。这次实际体验下来FreeBSD Base 很轻 SSH / CLI 很舒服 pkg 好用 XFCE 能正常运行 SCFB 稳但图形性能较低 QXL / SPICE 本次实测稳定性不理想 桌面集成 明显不如 Linux所以这台 FreeBSD VM 最后我还是把它定位成一个带 GUI 的 FreeBSD 实验环境而不是日常桌面。真正需要使用时大部分操作还是通过 SSH 完成。XFCE 更像是偶尔需要图形界面时的辅助工具。写在最后这次最大的收获反而不是把 XFCE 跑起来。而是第一次比较完整地感受到了 FreeBSD 的使用方式。它没有 Linux Distribution 那么强烈的“桌面发行版”感觉而更像一个完整的 Unix 操作系统 自己选择需要的第三方软件安装完基础系统以后你得到的是一个非常干净的 FreeBSD。想要 Vim就安装 Vim。想要 sudo就安装 sudo。想要 Xorg就安装 Xorg。想要 XFCE再安装 XFCE。这种边界非常清晰。不过到了现代桌面、GPU、SPICE、虚拟显卡这些领域Linux 的生态优势也同样非常明显。所以最后我还是保留了这台FreeBSD 15.1 XFCE SCFB偶尔开机玩一下。至于把它折腾成一套“像 Ubuntu 一样好用的桌面系统”——到这里就差不多了。继续投入时间收益已经不高。