心情煩悶,就來安裝FreeBSD。結果裝了心情更煩悶了。光是為了搞定X.org圖形介面就讓許多腦細胞死亡。
將FreeBSD安裝在實機,當作日常桌面系統使用。
圖形介面部分,選用我比較順手的KDE Plasma桌面…本來是這樣想的,但測試過比Linux更不穩定,許多系統組件沒有移植過來。此外X11工作階段還有嚴重的畫面撕裂問題,怎樣調整X.org設定都解決不了,唯一的好處大概就是能提早享受到Wayland。不過為了穩定使用,還是用絕對穩定的XFCE。KDE Plasma的功能在FreeBSD是半殘的。
裝FreeBSD比裝Arch Linux還刺激,安裝的時候要一直看文件。
1. 測試環境#
- 系統版本:FreeBSD 14 Release
- CPU:Intel i5-7400
- GPU:Intel UHD 630
- GPU:Nvidia GTX1050Ti
2. 製作開機隨身碟#
到FreeBSD官網下載ISO。FreeBSD有兩個更新頻道,Current是測試版本,Release是穩定版。所以選FreeBSD 14 Release,下載AMD64架構版本的Installer,選DVD版本的ISO。
3. 安裝基本系統#
開機之前確保有線網路能夠上網。
開機後選取Boot Installer,按Enter
選取Install開始安裝
設定鍵盤佈局
設定主機名稱
用空白鍵選取要安裝的系統組件,應包括kernel-dbug與ports
檔案系統使用預設的ZFS
依照指示建立ZFS
設定root帳號密碼
設定有線與無線網路介面,全部使用預設值
設定開機自動啟動服務
系統安全性措施應該不需要啟用
安裝系統需要的韌體
新增一般使用者user,加入群組wheel
設定時區為Asia/Taipei
選No,然後Shutdown關機。拔出安裝隨身碟。
第一次開機後,沒有圖形介面。輸入root帳號和密碼,登入系統。
16 安裝sudo和vim
pkg install vim sudo
- 執行
vim /etc/sudoers
指令,將一般使用者加入到sudo
# 找到以下內容並新增
root ALL=(ALL:ALL) ALL
user ALL=(ALL:ALL) ALL
- 切換到一般使用者
su user
- 將shell改成較為常見的bash
sudo pkg install bash
sudo chsh -s /usr/local/bin/bash root
sudo chsh -s /usr/local/bin/bash user
4. 安裝圖形驅動程式#
FreeBSD對不同顯示卡的雙螢幕支援似乎很差勁的樣子,也沒有成熟的PRIME能用。我是用Intel內顯當作主要顯示卡,所以我不能同時使用兩個GPU輸出螢幕,只能一次使用一個GPU。
安裝X.org#
FreeBSD還不能純Wayland使用。至少SDDM顯示管理器本身還是跑在X11下的。
安裝X.org:
sudo pkg install xorg
將使用者加入video群組:
sudo pw groupmod video -m user
安裝Intel顯示卡驅動#
這裡示範主顯示卡為Intel的情況。
- 使用DRM模組,不要安裝
xf86-video-intel
的舊式驅動,會更容易造成畫面撕裂。
sudo pkg install drm-kmod libva-intel-driver
sudo sysrc kld_list+=i915kms
需要手寫X.org設定檔。用
pciconf -lv | grep -B4 VGA
指令查看Intel顯示卡的BusID編輯
/usr/local/etc/X11/xorg.conf.d/20-intel.conf
加入以下選項啟用DRM。反畫面撕裂的選項不一定要填。
Section "Device"
Identifier "Intel Graphics"
Driver "modesetting"
BusID "PCI:0:2:0"
# Option "AccelMethod" "uxa" 如果畫面撕裂取消註解這二行
# Option "TearFree" "true"
EndSection
安裝Nvidia驅動#
這裡示範主顯示卡為Nvidia的情況。
- 安裝Nvidia驅動
sudo pkg install nvidia-drm-kmod
- 啟用DRM
echo 'hw.nvidiadrm.modeset="1"' | sudo tee -a /boot/loader.conf
- 設定開機載入Nvidia驅動,注意不可以跟Intel的DRM模組同時載入,會導致無法開機。
sudo sysrc kld_list+=nvidia-drm
不知道為什麼,測試當下我用nvidia-drm開機會kernel panic,所以只好改用舊版的nvidia驅動開機。這個能在開機時跟Intel顯示卡的DRM模組同時載入,但無法輸出螢幕訊號。
sudo sysrc kld_list+=nvidia
- 使用nvdia-xconfig指令產生X.org設定檔
sudo nvidia-xconfig
另一種方式是手寫X.org設定檔。用
pciconf -lv | grep -B4 VGA
指令查看Nvidia顯示卡的BusID編輯
/usr/local/etc/X11/xorg.conf.d/20-nvidia.conf
編輯X.org設定檔,啟用Nvidia DRM驅動
Section "Device"
Identifier "Nvidia"
Driver "modesetting" # 使用DRM驅動,如果不要用就改回nvidia
BusID "PCI:1:0:0"
# Option "AccelMethod" "uxa" 如果畫面撕裂取消註解這二行
# Option "TearFree" "true"
EndSection
- 重開機後用
nvidia-smi
指令確認驅動狀態。
5. 安裝桌面環境#
FreeBSD允許同時安裝多個桌面環境,可以在開機後的顯示管理器的介面切換。
安裝XFCE桌面#
GTK為主的桌面環境。
雖然XFCE 4.20已經支援Wayland,但是我測試無法啟動。
- 安裝XFCE套件
pkg install xfce xfce4-goodies xfce4-pulseaudio-plugin
- 安裝顯示管理器Lightdm
pkg install lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings
sudo sysrc dbus_enable="YES"
sudo sysrc lightdm_enable="YES"
安裝KDE Plasma桌面#
QT為主的桌面環境。
- 現在最新版本是KDE Plasma 6了,安裝以下套件並設定SDDM語言
sudo pkg install kde
sudo pkg install packagekit plasma6-sddm-kcm sddm
sudo sysrc dbus_enable="YES"
sudo sysrc hald_enable="YES"
sudo sysrc sddm_enable="YES"
sudo sysrc sddm_lang="zh_TW.UTF-8"
- 依照KDE套件維護者建議,調整以下數值提升網路性能
echo "net.local.stream.recvspace=65536" | sudo tee -a /boot/loader.conf
echo "net.local.stream.sendspace=65536" | sudo tee -a /boot/loader.conf
- KDE Plasma預設工作階段是X11,如果遇到無法解決的螢幕撕裂問題,可以考慮切換到Wayland工作階段:
sudo pkg install wayland seatd
sudo sysrc seatd_enable="YES"
重開機後在SDDM選單切換為Wayland,KDE Plasma 6不用做什麼設定就能登入。
不過我測試當下有個嚴重bug,就是按下Ctrl+C使用者就會被登出。這樣看來X11還是穩定些。
6. 中文化與Fcitx5輸入法#
- 安裝Noto字體。這會把全部語言的字體拉進來,如果只要正體中文那就
noto-sans-tc
。
sudo pkg install noto
- 編輯
~/.profile
,設定系統語言為正體中文
export LANG=zh_TW.UTF-8
export MM_CHARSET=zh_TW.UTF-8
- 安裝Fcitx5輸入法與新酷音
sudo pkg install fcitx5 fcitx5-configtool-qt6 \
fcitx5-gtk-common fcitx5-gtk3 fcitx5-gtk4 \
fcitx5-qt-common zh-fcitx5-chewing zh-fcitx5-chinese-addons
- X11桌面,編輯
~/.xprofile
加入環境變數,指定使用Fcitx5輸入法。如果使用Wayland則統一加在~/.profile
。
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus
7. 啟用PF防火牆#
來自OpenBSD的防火牆方案。
- 設定開機啟動PF防火牆
sudo sysrc pf_enable=yes
sudo sysrc pflog_enable=yes
用
ifocnfig
指令列出所有網路介面編輯
/etc/pf.conf/
設定防火牆規則規則如下,拒絕所有連入連線,但開放SSH
ext_if = "re0" # 輸入有線網路的介面
set block-policy drop
set skip on lo
pass out on $ext_if proto { tcp, udp, icmp } from any to any keep state
pass in on $ext_if proto tcp from any to any port 22 keep state
- 套用規則
sudo pfctl -F all -f /etc/pf.conf
8. 一些常用工具#
- 設定Avahi與nssswitch,啟用mDNS
sudo pkg install avahi-app nss_mdns
sudo sysrc avahi_daemon_enable="YES"
grep -q '^hosts:.*\<mdns\>' /etc/nsswitch.conf || sudo sed -i "" 's/^hosts: .*/& mdns/' /etc/nsswitch.conf
- 設定FUSE允許使用者掛載其他硬碟
echo 'fusefs_load="YES"' | sudo tee -a /boot/loader.conf
echo 'vfs.usermount=1' | sudo tee -a /etc/sysctl.conf
9. 設定Linuxulator相容層#
類似Wine的東西,允許在FreeBSD系統執行Linux的二進位檔。
非必要步驟,但有些軟體沒有原生FreeBSD套件,拿Linux的過來用比較方便,這個時候Linuxulator會很有用。
參考:FreeBSD跑Linux程式的方法:Linuxulator + Jail
10. 系統管理指令#
pkg install
安裝套件
/etc/rc.conf
控制開機載入的核心模組與服務
sysrc
指令啟用開機服務,會自動編輯/etc/rc.conf
檔案的內容,也可以用vim手動編輯。
kld_list+=
指令新增開機載入模組,會自動編輯/etc/rc.conf
/boot/loader.conf
與/etc/sys.ctl
檔案控制開機載入的核心模組與服務,可以設定參數
service <服務名稱> start
控制服務啟動。使用service <服務名稱> enable
設定開機啟動服務,會自動編輯/etc/rc.conf
檔案。
如果系統弄壞無法開機,就用LiveUSB或開機時按2,進入single user mode,登入root帳號,執行mount -u /
再救援系統。
11. FreeBSD相較於Linux的評價#
FreeBSD的軟體選擇是以開源軟體為主(我不講自由軟體,因為FreeBSD主要都是收BSD授權而非GPL授權)。部分軟體是從Linux移植過來的。
FreeBSD的桌面環境遵守FreeDesktop標準真是太好了,Linux桌面很多觀念都能借過來用,例如用fontconfig調整中文字型偏好,只是有些系統路徑不一樣。
FreeBSD的文件非常consistent,幾年前的依然適用。
但,FreeBSD套件缺的可多了,一堆套件安裝後顯示套件維護者失蹤了。
太多程式的圖形版沒有移植。例如KDE協助掛載檔案系統的kio實作不完全,就連MTP都要用指令掛,只好用命令行或TUI。
瀏覽器缺乏DRM是個問題,Firefox和Chromium都沒有,更沒有Google Chrome原生套件。致使單純以瀏覽器為主的作業環境也會遇到許多問題,得手動安裝DRM套件解決。
Linux在多年的社群努力成果下,其實很多東西都自動化,開箱即用了。Systemd這類標準化措施功不可沒。在2025年用FreeBSD當桌面系統,好比在2000年代出頭使用Linux。根本就是瘋狂宇宙,只差沒有編譯XFree86。許多在Linux簡單就設定好的東西,FreeBSD得多做一些步驟。現在我才知道,Linux早就克服的X.org多螢幕自動偵測設定,到了FreeBSD還得要手動配置!
Linux有的,FreeBSD很多都沒有移植過來,在作為桌面系統的角色上,FreeBSD落後Linux好幾年。硬體支援度差勁也就算了,軟體東西也缺很多。
總而言之,當作桌面系統來說非常challenging。