☰
PVE 装 FreeBSD 15.1:体验 XFCE 桌面
2026/10/4 18:38:09 网站建设 项目流程

前面我已经在 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 amd64
Machineq35
BIOSOVMF / UEFI
CPU2 Core
内存4 GB
硬盘约 64 GB
磁盘控制器VirtIO SCSI
网卡VirtIO
Bridgevmbr0
文件系统UFS
桌面XFCE

这台 FreeBSD VM 使用频率不会太高,所以我把虚拟磁盘放到了机械硬盘上。

对于这种以体验系统、SSH、偶尔打开桌面为主的 VM,机械硬盘其实已经够用了。

启动 VM,进入 FreeBSD Installer。

选择:

Install

Hostname 我设置为:

pve-freebsd1501

创建普通用户时,需要特别注意把用户加入:

wheel

例如:

Username: pveuser Other groups: wheel

FreeBSD 默认只有wheel组成员能够通过su切换为 root。如果忘记加入,之后执行:

su -

就可能出现:

BAD SU pveuser

这种情况下可以使用 root 登录控制台,再执行:

pw groupmod wheel -m pveuser

把用户补进wheel。


二、磁盘直接使用 UFS

FreeBSD 很多人会联想到 ZFS,不过这次我没有使用 ZFS,而是直接选择:

Auto (UFS)

原因很简单。

这只是一台 4GB 内存的小型实验 VM,而且主要目的并不是研究 ZFS。对于这种场景,UFS 足够简单,也能减少一些不必要的内存和 I/O 开销。

安装器里依次选择整块虚拟磁盘、GPT,然后确认写入即可。

安装完成以后重启,FreeBSD 基础系统就已经可以使用。


三、先确认网络和 SSH

FreeBSD 的 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 pveuser@192.168.100.x

可以连接,而某个 SSH 客户端不行,可以优先检查客户端选择的认证方式。


四、配置全局代理

因为这台 VM 需要通过代理访问外网,我直接把代理配置写入:

/etc/profile

先进入 root:

su -

编辑:

vi /etc/profile

加入:

export https_proxy=http://PROXY_IP_ADDRESS:PROXY_PORT export http_proxy=http://PROXY_IP_ADDRESS:PROXY_PORT export ftp_proxy=http://PROXY_IP_ADDRESS:PROXY_PORT export all_proxy=http://PROXY_IP_ADDRESS:PROXY_PORT export no_proxy=127.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 和 Vim

FreeBSD 基础系统默认并不包含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

我还顺手安装了 Vim:

sudo pkg install vim

之后编辑配置文件就舒服很多了。


六、安装 QEMU Guest Agent

PVE 中先确保:

Options → QEMU Guest Agent → Enabled

FreeBSD 里面安装:

sudo pkg install qemu-guest-agent

启用:

sudo sysrc qemu_guest_agent_enable="YES"

启动:

sudo service qemu-guest-agent start

检查:

sudo service qemu-guest-agent status

在我的 FreeBSD 15.1 环境中,并不需要手工向:

/boot/loader.conf

加入:

virtio_console_load="YES"

系统已经能够自动处理 VirtIO Console。

可以检查:

ls -l /dev/vtcon/

我这里已经可以看到:

org.qemu.guest_agent.0 -> ../ttyV0.1

所以 Guest Agent 直接就能正常使用。


七、安装 XFCE 桌面

FreeBSD 官方安装完成以后默认只有基础系统,并不会像 Ubuntu Desktop 那样直接给你一套 GUI。

桌面需要自己安装。

这次选择的是 XFCE:

sudo pkg install xorg xfce

这个过程比想象中要大不少。

我的环境里,仅 XFCE/Xorg 相关依赖就拉进来了三百多个 package。

接下来安装 LightDM:

sudo pkg install lightdm lightdm-gtk-greeter

注意这里不能只安装:

lightdm

还需要:

lightdm-gtk-greeter

否则 LightDM 即使启动了 X Server,也可能没有实际登录界面。

然后启用 D-Bus:

sudo sysrc dbus_enable="YES"

启用 LightDM:

sudo sysrc lightdm_enable="YES"

重启:

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

我的环境中是:

vgapci0@pci0: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

再启动 LightDM:

sudo 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,也不在内存。

当时 VM:

CPU 99%+ idle Free RAM 3GB+

真正的问题是:

XFCE ↓ Xorg ↓ scfb ↓ UEFI framebuffer ↓ QEMU Standard VGA ↓ PVE noVNC

scfb本质上是一个没有图形加速的 framebuffer 驱动。

窗口移动时大量像素需要由 CPU 绘制,再经 noVNC 传到浏览器,因此桌面刷新性能明显比 Linux VM 差。

一个比较实际的优化方法是关闭 XFCE compositor。

检查:

~/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml

确保:

<property name="use_compositing" type="bool" value="false"/>

另外降低分辨率也会明显减轻 framebuffer 刷新压力。

但本质上属于:

用画面效果换流畅度。


十二、顺便测试了一下 SPICE / QXL

既然之前 Debian、Arch、Windows VM 都测试过 SPICE,我也顺手试了一下 FreeBSD。

FreeBSD 仓库里确实有:

pkg install xf86-video-qxl

PVE 也可以把 Display 改成:

SPICE / QXL

FreeBSD 能正确识别:

Red Hat QXL paravirtual graphic card

Xorg 也能成功加载:

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 常见习惯FreeBSD
systemctlservice / sysrc
ipifconfig
free -htop / vmstat
lsblkgpart / geom
GNU sedBSD sed
seqjot
sudo 常见预装sudo 属于第三方 package
/etc 放大量第三方配置第三方软件大量放在 /usr/local/etc
Vim 经常作为 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 一样好用的桌面系统”——

到这里就差不多了。

继续投入时间,收益已经不高。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询