笔记本电脑上的 FreeBSD 15
摘要
作者分享了他们在笔记本电脑上使用 FreeBSD 15 的积极体验,重点介绍了 pkgbase、LinuxKPI 驱动程序和笔记本电脑支持项目等改进,并提供了在 ThinkPad X1 Carbon 上安装和配置 KDE Plasma 6 的分步指南。
<p><a href="https://lobste.rs/s/vodqhe/freebsd_15_on_laptop">评论</a></p>
查看缓存全文
缓存时间: 2026/06/15 21:02
# 在笔记本上安装 FreeBSD 15
来源:https://www.sacredheartsc.com/blog/freebsd-15-on-a-laptop/
- 首页 (https://www.sacredheartsc.com/)
- 博客 (https://www.sacredheartsc.com/blog/)
- 简历 (https://www.sacredheartsc.com/cv/)
- 联系 (https://www.sacredheartsc.com/contact/)
- JMJ
---
公元 2026 年 6 月 15 日
FreeBSD 15 真是一次突破性的发布。
它一直是我最喜欢的服务器操作系统,但随着pkgbase (https://wiki.freebsd.org/action/show/pkgbase) 的到来、LinuxKPI (https://wiki.freebsd.org/LinuxKPI) 驱动的大量改进,以及笔记本支持与可用性项目 (https://github.com/FreeBSDFoundation/proj-laptop) 的启动,它也成了我的主力桌面系统。
自从上次尝试 FreeBSD 14 (https://www.sacredheartsc.com/blog/freebsd-14-on-the-desktop/) 以来,许多事情发生了变化:
- KDE Plasma 6 已被移植
- Wayland 现在可以正常工作
- Intel WiFi 获得完整支持(不再局限于 802.11g!)
[](https://www.sacredheartsc.com/blog/freebsd-15-on-a-laptop/kde6.png)
我的 ThinkPad X1 Carbon 续航大约 6-7 小时。除了蓝牙(我还没尝试过),我的设备上所有功能在 FreeBSD 下都运行良好。
还有一个新的笔记本兼容性矩阵 (https://freebsdfoundation.github.io/freebsd-laptop-testing/),你可以在上面查看自己的硬件是否兼容。
那么,让我们来搭建一个带 KDE 的 FreeBSD 笔记本系统!
本指南假设你使用的是 Intel 显卡和 Intel 无线芯片组。我相信其他硬件配置也能正常工作,但我只根据亲身经历来写。
## 安装
下载 FreeBSD 15.1 内存棒镜像 (https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/15.1/FreeBSD-15.1-RELEASE-amd64-memstick.img) 并用 `dd` 写入 U 盘:
```
curl -OJ https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/15.1/FreeBSD-15.1-RELEASE-amd64-memstick.img
sudo dd if=FreeBSD-15.1-RELEASE-amd64-memstick.img of=/dev/sdX bs=1M conv=sync
```
安装向导很简单。确保你的系统配置为 UEFI 启动,并在磁盘布局中选择 `ZFS (GPT)`。
当提示选择基础系统安装类型时,选择 `Packages` 以获得新的 pkgbase (https://wiki.freebsd.org/action/show/pkgbase) 功能。
你需要在安装程序中启用 SSH。最好通过 SSH 会话复制粘贴,而不是在虚拟控制台中手动输入所有内容!
重启后,使用你在安装期间指定的密码以 root 身份登录。
## 硬件设备、驱动与调优
首先,我们将配置设备驱动并进行各种调整,以获得桌面系统的最佳性能和续航。
许多步骤并非绝对必要,但它们对我很有效。请自行判断!
### 引导加载器参数
首先,打开 `/boot/loader.conf`,考虑添加以下内容:
```
# /boot/loader.conf
# 在引导加载器提示符下的超时时间(秒)。
autoboot_delay="3"
# 强化:99% 的用户永远不需要
# 破坏性 dtrace。
security.bsd.allow_destructive_dtrace="0"
# 对于像网页浏览器这样的桌面程序,
# 默认值过于保守。
kern.ipc.shmseg="1024"
kern.ipc.shmmni="1024"
kern.maxproc="100000"
# 如果你的系统支持 Intel Speed Shift
#(检查 dmesg),则将此值设为 0。这将允许
# 每个核心设置自己的电源状态。
machdep.hwpstate_pkg_ctrl="0"
# 启用 PCI 省电。
hw.pci.do_power_nodriver="3"
# 启用更快的 soreceive() 实现。
# 如果你运行 BIND DNS 服务器,请不要使用。
net.inet.tcp.soreceive_stream="1"
# 增加网络接口队列长度。
net.isr.defaultqlimit="2048"
net.link.ifqmaxlen="2048"
# 对于笔记本:增加 ZFS 事务超时时间
# 以节省电池续航。
vfs.zfs.txg.timeout="10"
```
### 内核模块
启用查询 CPU 信息和温度:
```
sysrc -v kld_list+="cpuctl coretemp"
```
H-TCP 拥塞控制算法旨在提高快速长距离网络(如互联网)的性能。你可以考虑使用它:
```
sysrc -v kld_list+="cc_htcp"
```
如果你使用 ThinkPad,需要这个模块才能让所有按键正常工作:
```
sysrc -v kld_list+="acpi_ibm"
```
### sysctl 调整
接下来,打开 `/etc/sysctl.conf`,考虑设置以下一些 sysctl。你可以使用 `sysctl -d` 查看 sysctl 的描述。
```
# /etc/sysctl.conf
# ==================
# 安全强化
# ==================
# 这些设置对大多数人来说是常识:
hw.kbd.keymap_restrict_change=4
kern.coredump=0
kern.elf32.aslr.pie_enable=1
kern.random.fortuna.minpoolsize=128
kern.randompid=1
net.inet.icmp.drop_redirect=1
net.inet.ip.process_options=0
net.inet.ip.random_id=1
net.inet.ip.redirect=0
net.inet.ip.rfc1122_strong_es=1
net.inet.tcp.always_keepalive=0
net.inet.tcp.drop_synfin=1
net.inet.tcp.icmp_may_rst=0
net.inet.tcp.syncookies=0
net.inet6.ip6.redirect=0
security.bsd.unprivileged_read_msgbuf=0
# 有些指南会告诉你使用这些。
# 我认为它们带来的麻烦比价值还多!
#
#kern.elf32.allow_wx=0
#kern.elf64.allow_wx=0
#security.bsd.hardlink_check_gid=1
#security.bsd.hardlink_check_uid=1
#security.bsd.see_other_gids=0
#security.bsd.see_other_uids=0
#security.bsd.unprivileged_proc_debug=0
# ==========================
# 网络性能调优
# ==========================
# 许多 sysctl 的默认值
# 针对局域网的 TCP 延迟进行了优化。
#
# 以下修改将为你提供
# 具有较大 RTT(如互联网)的连接上更好的
# TCP 性能,代价是更高的内存使用。
#
# 来源:我在梦中得到的
kern.ipc.maxsockbuf=2097152
kern.ipc.soacceptqueue=1024
kern.ipc.somaxconn=1024
net.inet.tcp.abc_l_var=44
net.inet.tcp.cc.abe=1
net.inet.tcp.cc.algorithm=htcp
net.inet.tcp.cc.htcp.adaptive_backoff=1
net.inet.tcp.cc.htcp.rtt_scaling=1
net.inet.tcp.ecn.enable=1
net.inet.tcp.fast_finwait2_recycle=1
net.inet.tcp.fastopen.server_enable=1
net.inet.tcp.finwait2_timeout=5000
net.inet.tcp.initcwnd_segments=44
net.inet.tcp.keepcnt=2
net.inet.tcp.keepidle=62000
net.inet.tcp.keepinit=5000
net.inet.tcp.minmss=536
net.inet.tcp.msl=2500
net.inet.tcp.mssdflt=1448
net.inet.tcp.nolocaltimewait=1
net.inet.tcp.recvbuf_max=2097152
net.inet.tcp.recvspace=65536
net.inet.tcp.sendbuf_inc=65536
net.inet.tcp.sendbuf_max=2097152
net.inet.tcp.sendspace=65536
net.local.stream.recvspace=65536
net.local.stream.sendspace=65536
# =====================
# 桌面优化
# =====================
# 防止共享内存被交换到磁盘。
kern.ipc.shm_use_phys=1
# 增加调度器抢占阈值以获得
# 更灵敏的 GUI 体验。
kern.sched.preempt_thresh=224
# 允许非特权用户挂载东西。
vfs.usermount=1
# ===================
# 笔记本省电
# ===================
# 降低音频响应以节省电量。
hw.snd.latency=7
```
### WiFi
得益于LinuxKPI (https://wiki.freebsd.org/LinuxKPI) 和新的iwlwifi (https://wiki.freebsd.org/WiFi/Iwlwifi) 驱动,WiFi 支持不佳的问题基本成为过去。如果你有常见的 Intel 卡,它有可能会正常工作。
首先,为你的无线网卡安装必要的固件包:
要在较旧的卡上使用较新的 `iwlwifi` 驱动,你可能需要阻止旧的 `iwm` 驱动加载:
```
# /boot/loader.conf
devmatch_blocklist="if_iwm"
```
802.11n 和 802.11ac 默认是禁用的。你需要另一个 `loader.conf` 调整来解锁更高的速度:
```
# /boot/loader.conf
compat.linuxkpi.iwlwifi_11n_disable="0"
compat.linuxkpi.iwlwifi_disable_11ac="0"
```
你可能还想尝试省电模式:
```
# /boot/loader.conf
compat.linuxkpi.iwlwifi_power_save="1"
```
更新 `rc.conf` 以在启动时创建 `wlan0` 设备:
```
sysrc -v wlans_iwlwifi0="wlan0" \
create_args_wlan="wlanmode sta country US regdomain FCC" \
ifconfig_wlan0="WPA DHCP powersave"
```
有了这些设置,wpa_supplicant(8) (https://man.freebsd.org/cgi/man.cgi?wpa_supplicant) 将管理你的 WiFi 网络。你可以手动编辑wpa_supplicant.conf(5) (https://man.freebsd.org/cgi/man.cgi?wpa_supplicant.conf(5)),或者使用 `networkmgr` 提供的图形界面:
```
pkg install networkmgr sudo
```
请注意,`networkmgr` 需要超级用户权限。你可以允许 `operator` 组的所有成员使用 `sudo` 无密码运行 `networkmgr`:
```
# /usr/local/etc/sudoers.d/networkmgr
%operator ALL=NOPASSWD: /usr/local/bin/networkmgr
```
### CPU 微码
安装最新的 CPU 微码:
```
pkg install cpu-microcode
```
编辑 `loader.conf` 以在启动时加载微码:
```
# /boot/loader.conf
cpu_microcode_load="YES"
cpu_microcode_name="/boot/firmware/intel-ucode.bin"
```
### CPU 省电
你可以通过启用更低的 CPU C 状态来节省**大量**电池(并减少发热):
```
sysrc -v \
performance_cx_lowest=Cmax \
economy_cx_lowest=Cmax
```
对于现代 Intel 处理器,不再需要运行powerd(8) (https://man.freebsd.org/cgi/man.cgi?powerd)。
### Intel 显卡驱动
安装 Intel 显卡驱动并确保它在启动时加载:
```
pkg install drm-kmod
sysrc -v kld_list+="i915kms"
```
### 通过 devfs 设置设备权限
对于桌面系统,你需要一个自定义的devfs(8) (https://man.freebsd.org/cgi/man.cgi?devfs(8)) 规则集,以允许非特权用户控制常见硬件设备。创建devfs.rules(5) (https://man.freebsd.org/cgi/man.cgi?devfs.rules) 文件,内容如下:
```
# /etc/devfs.rules
[localrules=1000]
add path 'drm/*' mode 0660 group operator
add path 'backlight/*' mode 0660 group operator
add path 'video*' mode 0660 group operator
add path 'usb/*' mode 0660 group operator
```
并按如下方式设置默认规则集:
```
sysrc -v devfs_system_ruleset=localrules
```
重启 `devfs` 以修正这些权限:
### Linux 二进制兼容
Linuxulator (https://wiki.freebsd.org/Linuxulator) 允许你在 FreeBSD 上运行 Linux 二进制文件:
```
sysrc -v linux_enable=YES
```
如果你运行 Linux 二进制文件,你可能还需要挂载一些 Linux 文件系统:
```
# /etc/fstab
devfs /compat/linux/dev devfs rw,late 0 0
tmpfs /compat/linux/dev/shm tmpfs rw,late,size=1g,mode=1777 0 0
fdescfs /compat/linux/dev/fd fdescfs rw,late,linrdlnk 0 0
linprocfs /compat/linux/proc linprocfs rw,late 0 0
linsysfs /compat/linux/sys linsysfs rw,late 0 0
```
### FUSE
如果你想要挂载像 exFAT 或 NTFS 这样的文件系统,你需要fusefs(4) (https://man.freebsd.org/cgi/man.cgi?fusefs):
```
sysrc -v kld_list+="fusefs"
```
### 摄像头
希望你的摄像头能被webcamd(8) (https://man.freebsd.org/cgi/man.cgi?query=webcamd) 支持而无需额外麻烦:
```
pkg install \
webcamd \
v4l-utils \
v4l_compat
sysrc -v webcamd_enable=YES
```
### 打印机
如果你想在 FreeBSD 上打印,你需要CUPS (https://docs.freebsd.org/en/articles/cups/):
```
pkg install cups cups-filters
sysrc -v cupsd_enable=YES
```
你需要让 `operator` 组的成员能够配置打印机:
```
# /usr/local/etc/upcs/cups-files.conf
SystemGroup operator
AccessLog syslog
ErrorLog syslog
PageLog syslog
```
现在你可以启动守护进程:
你可以在浏览器的localhost:631 (http://localhost:631/) 访问 CUPS 配置 GUI。
### USB 省电
如果你使用笔记本,你可能想关闭不活动的 USB 设备以节省电池。
将以下内容添加到 `/etc/rc.local`:
```
# /etc/rc.local
usbconfig | awk -F: '{ print $1 }' | xargs -rtn1 -I% usbconfig -d % power_save
```
### ThinkPad 背光控制
我不得不做了一些工作才能使我的 ThinkPad 上的背光按键正常工作。
首先,确保acpi_ibm(4) (https://man.freebsd.org/cgi/man.cgi?acpi_ibm) 内核模块已加载:
然后,设置以下 sysctl 以允许devd(8) (https://man.freebsd.org/cgi/man.cgi?query=devd) 处理背光按钮的事件:
```
sysctl dev.acpi_ibm.0.handlerevents="0x10 0x11"
```
确保将其添加到 `/etc/sysctl.conf` 中。
现在我们可以接收按钮事件,但我们需要一个devd 规则 (https://man.freebsd.org/cgi/man.cgi?query=devd.conf) 来处理它们。创建 `/etc/devd/thinkpad-brightness.conf`,内容如下:
```
# /etc/devd/thinkpad-brightness.conf
notify 20 {
match "system" "ACPI";
match "subsystem" "IBM";
match "notify" "0x10";
action "/usr/local/libexec/thinkpad-brightness up";
};
notify 20 {
match "system" "ACPI";
match "subsystem" "IBM";
match "notify" "0x11";
action "/usr/local/libexec/thinkpad-brightness down";
};
```
最后,在 `/usr/local/libexec/thinkpad-brightness` 创建以下脚本:
```
#!/bin/sh
#
# /usr/local/libexec/thinkpad-brightness
cur=$(/usr/bin/backlight -q)
case $1 in
up)
if [ "$cur" -ge 50 ]; then
delta=10
elif [ "$cur" -ge 10 ]; then
delta=5
else
delta=2
fi
/usr/bin/backlight incr "$delta"
;;
down)
if [ "$cur" -le 10 ]; then
delta=2
elif [ "$cur" -le 50 ]; then
delta=5
else
delta=10
fi
/usr/bin/backlight decr "$delta"
;;
esac
```
别忘了让它可执行:
```
chmod 755 /usr/local/libexec/thinkpad-brightness
```
### 重启
现在是重启的好时机,确保你的更改没有破坏任何东西!
## 防火墙
我尝试在所有系统上运行防火墙。一个基本的配置可以阻止所有传入连接,除了 SSH。
创建 `/etc/pf.conf`:
```
# /etc/pf.conf
# 将其替换为你的网络接口名称。
egress = "{ em0, wlan0 }"
# 允许入站 ssh。
allowed_tcp_ports = "{ ssh }"
# 允许语音和视频通话的 RTP 流量。
allowed_udp_ports = "{ 1024:65535 }"
set block-policy return
set skip on lo
scrub in on $egress all fragment reassemble
antispoof quick for $egress
block all
pass out quick on $egress inet
pass in quick on $egress inet proto icmp all icmp-type { echoreq, unreach }
pass in quick on $egress inet proto tcp to port $allowed_tcp_ports
pass in quick on $egress inet proto udp to port $allowed_udp_ports
```
在启动时启用防火墙:
```
sysrc -v pf_enable=YES
service pf start
```
## 禁用定时脚本
开箱即用,FreeBSD 包含许多periodic(8) (https://man.freebsd.org/cgi/man.cgi?periodic) 脚本,它们会扫描硬盘、访问互联网并发送电子邮件。你可以查看periodic.conf(5) (https://man.freebsd.org/cgi/man.cgi?periodic.conf) 获取完整列表。
其中一些任务很有用,但对于典型的桌面用户,大多数可以安全地禁用:
```
sysrc -v -f /etc/periodic.conf \
daily_backup_aliases_enable=NO \
daily_backup_gpart_enable=NO \
daily_backup_passwd_enable=NO \
daily_clean_disks_verbose=NO \
daily_clean_hoststat_enable=NO \
daily_clean_preserve_verbose=NO \
daily_clean_rwho_verbose=NO \
daily_clean_tmps_verbose=NO \
daily_show_info=NO \
daily_show_success=NO \
daily_status_disks_enable=NO \
daily_status_include_submit_mailq=NO \
daily_status_mail_rejects_enable=NO \
daily_status_mail_rejects_enable=NO \
daily_status_mailq_enable=NO \
daily_status_network_enable=NO \
daily_status_security_enable=NO \
daily_status_uptime_enable=NO \
daily_status_world_kernel=NO \
daily_status_zfs_zpool_list_enable=NO \
daily_submit_queuerun=NO \
monthly_accounting_enable=NO \
monthly_show_info=NO \
monthly_show_success=NO \
monthly_status_security_enable=NO \
security_show_info=NO \
security_show_success=NO \
security_status_chkmounts_enable=NO \
security_status_chksetuid_enable=NO \
s
相似文章
FreeBSD 基金会执行董事尝试在笔记本电脑上日常使用 FreeBSD
FreeBSD 基金会执行董事 Deb Goodkin 成功在 Framework 笔记本电脑上日常使用 FreeBSD,克服了长期存在的硬件支持问题。
不一定非得是Linux
一场关于FreeBSD的会议演讲,介绍其与Linux的区别,以及它作为服务器和桌面环境替代方案的重要性。
FreeBSD 网站的新设计
FreeBSD 项目为其官方网站推出了新设计,突出了操作系统的特性,如 ZFS、虚拟化、Jails、网络、文档和社区。
在Lemote Yeeloong笔记本电脑上使用OpenBSD与“龙”共舞
一篇博客文章详细描述了作者在搭载中国龙芯MIPS处理器的Lemote Yeeloong笔记本电脑上运行OpenBSD的体验,讨论了硬件、软件挑战以及自由软件哲学。
Framework Laptop 13 Pro
Framework Laptop 13 Pro 是一款面向 Linux 用户的高端模块化笔记本。