笔记本电脑上的 FreeBSD 15

Lobsters Hottest 新闻

摘要

作者分享了他们在笔记本电脑上使用 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

相似文章

不一定非得是Linux

Lobsters Hottest

一场关于FreeBSD的会议演讲,介绍其与Linux的区别,以及它作为服务器和桌面环境替代方案的重要性。

FreeBSD 网站的新设计

Lobsters Hottest

FreeBSD 项目为其官方网站推出了新设计,突出了操作系统的特性,如 ZFS、虚拟化、Jails、网络、文档和社区。

Framework Laptop 13 Pro

Product Hunt

Framework Laptop 13 Pro 是一款面向 Linux 用户的高端模块化笔记本。