1P by GN⁺ | ★ favorite | 댓글 1개
  • FreeBSD 15는 pkgbase, LinuxKPI 드라이버 개선, 노트북 지원 프로젝트 덕분에 서버용 OS를 넘어 데스크톱 주 사용 환경으로 쓸 수 있을 만큼 개선됨
  • FreeBSD 14 시도 이후 KDE Plasma 6, Wayland, Intel WiFi 지원이 추가되어 ThinkPad X1 Carbon에서 Bluetooth를 제외한 기능이 잘 동작함
  • 설치는 FreeBSD 15.1 memstick 이미지, UEFI 부팅, ZFS (GPT), base system 설치 유형 Packages 선택을 전제로 진행됨
  • 데스크톱 환경 구성은 드라이버, 전원 절약, devfs 권한, Linux 호환성, D-Bus, Ly, KDE, PipeWire, 하드웨어 비디오 가속까지 단계적으로 필요함
  • 일부 노트북 환경에는 절전 복귀 후 WiFi 문제, Intel 그래픽 멈춤, KDE 로그아웃 후 프로세스 잔류 같은 알려진 문제가 남아 있으며 각각 우회책이 필요함

개요

  • FreeBSD 15는 pkgbase, LinuxKPI 드라이버 개선, Laptop Support and Usability Project 출시로 노트북 데스크톱 환경에서 큰 개선을 보임
  • FreeBSD 14로 데스크톱을 시도했던 때와 비교해 KDE Plasma 6 포팅, Wayland 동작, Intel WiFi의 완전 지원이 달라짐
  • ThinkPad X1 Carbon에서는 배터리 사용 시간이 약 6~7시간이며, 시도하지 않은 Bluetooth를 제외하면 장치 기능이 잘 동작함
  • Laptop Compatibility Matrix를 통해 각자 보유한 하드웨어에서 무엇이 동작하는지 확인할 수 있음
  • 가이드는 Intel 그래픽과 Intel 무선 칩셋 사용을 전제로 하며, 다른 하드웨어 구성은 직접 경험 범위 밖으로 둠

설치

  • FreeBSD 15.1 memstick 이미지를 내려받아 USB 스틱에 dd로 기록함
    • 사용 예시는 curl -OJ로 이미지를 받고 sudo dd if=FreeBSD-15.1-RELEASE-amd64-memstick.img of=/dev/sdX bs=1M conv=sync를 실행함
  • 설치 마법사는 단순하며, 시스템은 UEFI 부팅으로 설정하고 디스크 레이아웃은 ZFS (GPT)를 선택함
  • base system 설치 유형을 묻는 단계에서는 새 pkgbase를 사용하기 위해 Packages를 선택함
  • 설치 중 SSH를 활성화하면 가상 콘솔에 직접 입력하는 대신 SSH 세션으로 복사·붙여넣기를 할 수 있음
  • 재부팅 후 설치 중 지정한 비밀번호로 root 계정에 로그인함

최신 패키지 사용

  • FreeBSD ports 트리는 quarterlylatest 두 가지 브랜치를 가짐
  • quarterly는 1년에 네 번 ports 트리를 스냅샷으로 고정하며, 그 사이 서드파티 패키지는 중요한 보안 패치만 받음
  • latest는 주요 패키지 업데이트가 사용 가능해지는 즉시 받는 롤링 릴리스 방식임
  • 기본 설정은 quarterly 저장소이며, latest로 전환하려면 /usr/local/etc/pkg/repos에 override 파일을 만듦
  • 저장소 URL을 pkg+https://pkg.FreeBSD.org/${ABI}/latestkmods_latest_${VERSION_MINOR}로 설정한 뒤 pkg updatepkg upgrade를 실행함

하드웨어 장치, 드라이버, 튜닝

  • 부트로더 조정

    • /boot/loader.conf에서 부트로더 대기 시간, destructive dtrace 비활성화, 공유 메모리와 프로세스 한도 확대를 설정할 수 있음
    • Intel Speed Shift를 지원하는 시스템은 machdep.hwpstate_pkg_ctrl="0"으로 각 코어가 자체 전원 상태를 설정하게 할 수 있음
    • PCI 전원 절약, 빠른 soreceive(), 네트워크 큐 길이 확대, ZFS 트랜잭션 타임아웃 증가를 설정해 데스크톱과 노트북 사용에 맞출 수 있음
  • 커널 모듈

    • cpuctlcoretempkld_list에 추가해 CPU 정보와 온도 조회를 활성화함
    • H-TCP 혼잡 제어 알고리듬은 빠르고 장거리인 인터넷 같은 네트워크에서 더 나은 성능을 목표로 하며, cc_htcp 모듈로 사용할 수 있음
    • ThinkPad에서는 버튼 동작을 위해 acpi_ibm 모듈이 필요함
  • sysctl 조정

    • /etc/sysctl.conf에서 키맵 변경 제한, 코어덤프 비활성화, ASLR 관련 설정, ICMP redirect 차단, IP redirect 비활성화 같은 보안 설정을 적용할 수 있음
    • 일부 보안 가이드는 W^X, hardlink 검사, 다른 사용자 프로세스 보기 제한을 권하지만, 해당 설정은 문제를 더 많이 만든다고 판단해 주석 처리함
    • 네트워크 성능 설정은 기본값이 LAN 지연시간에 최적화되어 있다는 전제에서 더 큰 RTT 연결에 맞춰 TCP 버퍼와 큐를 키움
    • 데스크톱 최적화로 공유 메모리 스왑 방지, 스케줄러 선점 임계값 증가, 일반 사용자의 마운트 허용을 설정함
    • 노트북 전원 절약을 위해 hw.snd.latency=7로 오디오 응답성을 낮춤
  • WiFi

    • WiFi 지원은 LinuxKPI와 새 iwlwifi 드라이버 덕분에 과거보다 크게 개선됨
    • 무선 카드 지원 여부는 iwlwifi 지원 칩셋 목록에서 확인하며, 필요한 펌웨어는 fwget -v로 설치함
    • 구형 카드에서 새 iwlwifi를 쓰려면 기존 iwm 드라이버 로드를 devmatch_blocklist="if_iwm"로 막아야 할 수 있음
    • 802.11n과 802.11ac는 기본적으로 비활성화되어 있어 compat.linuxkpi.iwlwifi_11n_disable="0"compat.linuxkpi.iwlwifi_disable_11ac="0" 설정이 필요함
    • rc.conf에서 wlan0 장치를 만들고 WPA DHCP powersave를 설정하면 wpa_supplicant(8)가 WiFi 네트워크를 관리함
    • 네트워크 관리는 wpa_supplicant.conf(5)를 직접 편집하거나 networkmgr의 그래픽 인터페이스를 사용할 수 있음
    • networkmgr는 슈퍼유저 권한이 필요하며, operator 그룹이 비밀번호 없이 실행하도록 sudoers 규칙을 둘 수 있음
    • FreeBSD 15.1-RELEASE의 iwlwifi 드라이버에는 suspend/resume 관련 알려진 문제가 있음
  • CPU와 그래픽

    • 최신 CPU 마이크로코드는 cpu-microcode 패키지 설치 후 loader.conf에서 부팅 시 로드하도록 설정함
    • CPU 전원 절약은 performance_cx_lowest=Cmaxeconomy_cx_lowest=Cmax로 낮은 C-state를 활성화해 배터리와 발열을 줄임
    • 최신 Intel 프로세서에서는 powerd(8) 실행이 더 이상 필요하지 않음
    • Intel 그래픽 드라이버는 drm-kmod 설치 후 i915kms를 부팅 시 로드하도록 설정함
  • 장치 권한과 호환성

    • 데스크톱 시스템에서는 일반 사용자가 GPU, 비디오, 백라이트, USB 장치를 제어할 수 있도록 devfs 규칙을 추가함
    • /etc/devfs.rules에서 drm/*, video*, backlight/*, usb/*의 권한과 그룹을 지정하고 devfs_system_ruleset=localrules를 설정함
    • Linux 바이너리 실행은 Linuxulatorlinux_enable=YES로 활성화하며, 필요한 경우 /compat/linux 아래에 devfs, tmpfs, fdescfs, linprocfs, linsysfs를 마운트함
    • exFAT이나 NTFS 같은 파일시스템 마운트를 위해 fusefs 커널 모듈을 로드함
    • 웹캠은 webcamd, v4l-utils, v4l_compat 설치와 webcamd_enable=YES 설정으로 지원을 기대할 수 있음
    • 프린터는 CUPS와 cups-filters가 필요하며, operator 그룹이 프린터를 설정할 수 있게 cups-files.conf를 수정함
    • CUPS 설정 GUI는 브라우저에서 localhost:631로 접근함
  • 노트북 전원과 ThinkPad 백라이트

    • 노트북에서는 비활성 USB 장치를 절전 상태로 전환하기 위해 /etc/rc.local에서 usbconfigpower_save를 실행함
    • ThinkPad 백라이트 키를 동작시키려면 acpi_ibm 모듈 로드, dev.acpi_ibm.0.handlerevents="0x10 0x11" 설정, devd 규칙이 필요함
    • /usr/local/libexec/thinkpad-brightness 스크립트는 현재 밝기에 따라 2, 5, 10 단위로 밝기를 올리거나 내림
    • 스크립트 실행 권한을 부여하고 devd를 재시작한 뒤 동작을 적용함
    • 하드웨어와 드라이버 설정을 마친 뒤 재부팅해 변경이 시스템을 망가뜨리지 않았는지 확인함

방화벽

  • 모든 시스템에서 방화벽을 실행하려는 구성으로, 기본 예시는 SSH를 제외한 모든 들어오는 연결을 차단함
  • /etc/pf.conf에서 egress 인터페이스를 실제 네트워크 인터페이스 이름으로 바꾸고 SSH 포트만 TCP 인바운드로 허용함
  • 음성·영상 통화를 위해 UDP 1024:65535 범위를 허용함
  • pf_enable=YES를 설정하고 service pf start로 방화벽을 시작함

periodic 스크립트 비활성화

  • FreeBSD는 기본적으로 하드디스크를 훑고 인터넷에 접속하고 이메일을 보내는 periodic(8) 스크립트를 많이 포함함
  • 전체 목록은 periodic.conf(5)에서 확인할 수 있음
  • 일반적인 데스크톱 사용자에게는 일부 작업만 유용하며, 대부분은 안전하게 비활성화할 수 있음
  • 예시 설정은 daily, weekly, monthly, security 관련 백업·상태 보고·메일 큐·보안 점검 출력 작업을 대량으로 NO로 바꿈

사용자 계정

  • 로컬 사용자 계정을 만들고 operator, video, wheel 그룹에 추가함
  • operator는 장치와 프린터 설정에 필요하고, video는 GPU 장치 접근에 필요함
  • wheel 그룹은 sudo로 root 권한 명령을 실행하기 위해 사용함
  • sudo를 설치한 뒤 sudoers 파일에서 %wheel ALL=(ALL:ALL) ALL을 설정함

로케일, 시간, SSH, 인증서

  • 로케일

    • 로그인 셸 환경 변수는 login.conf(5)에서 설정하며, charset=UTF-8lang=en_US.UTF-8을 추가함
    • 변경 적용을 위해 cap_mkdb /etc/login.conf로 로그인 데이터베이스를 다시 빌드함
    • 비로그인 셸에는 /etc/profile.d/locale.sh에서 LANGCHARSET을 설정함
  • NTP와 시간대

    • 시스템 시계를 최신 상태로 유지하려면 ntpd(8) 가 필요함
    • ntp.conf에는 FreeBSD pool NTP 서버와 접근 제한 설정을 둠
    • 설치 중 시간대를 설정하지 않았다면 /usr/share/zoneinfo/America/New_York/etc/localtime에 심볼릭 링크함
  • openssh-portable

    • FreeBSD base system의 ssh는 많은 패치가 적용되어 있으며, ports의 순정 openssh-portable을 선호함
    • sshd 설정 파일은 새 버전에서 /usr/local/etc/ssh 아래에 위치함
    • /etc/rc.conf에서 base sshd를 끄고 openssh_enable=YES로 새 서비스를 실행함
    • ssh 명령은 $PATH를 바꾸지 않으면 base system의 /usr/bin/ssh를 계속 사용함
    • 모든 사용자에게 ports 버전을 우선 적용하려면 login.confpath 순서를 /usr/local이 앞서도록 수정하고 데이터베이스를 다시 빌드함
  • 터미널, 인증서, D-Bus

    • FreeBSD의 termcap(5) 데이터베이스는 Linux에서 흔한 것보다 단순하며, XTerm 계열 터미널에서 밝은 색상이 렌더링되지 않을 수 있음
    • terminfo-db 설치로 이 문제를 고칠 수 있음
    • FreeBSD는 기본적으로 표준 인증기관 일부만 신뢰하므로 Mozilla 전체 CA 번들인 ca_root_nss를 설치함
    • KDE와 오늘날의 여러 데스크톱 기능에는 D-Bus가 필요하며, dbus_enable=YESservice dbus start로 활성화함

Ly 디스플레이 매니저

  • 보통은 SDDM 같은 그래픽 디스플레이 매니저로 데스크톱 세션을 시작하지만, 작성 시점 기준 FreeBSD에서는 Wayland 세션을 안정적으로 시작하지 못함
  • SDDM은 거의 동작하지만, 여러 키 조합이 세션을 종료시키는 버그가 있음
  • 현재 방식은 콘솔 기반 Ly display manager로 Wayland 세션을 시작하는 것임
  • Ly는 데몬으로 실행되지 않으며, /etc/ttys에서 가상 콘솔이 /usr/local/bin/ly_wrapper를 실행하도록 설정함
  • /etc/gettytab에 Ly 항목을 추가하고 재부팅하거나 kill -HUP 1로 init을 갱신하면 Ly 로그인 프롬프트가 나타남
  • config.ini에서 xinitrc=null, xsessions=null, shell=false, waylandsessions=/usr/local/share/wayland-sessions로 Wayland 세션 사용을 강제할 수 있음

폰트, KDE, 데스크톱 앱

  • 웹사이트가 제대로 렌더링되도록 Cantarell, Droid, Inconsolata, Noto, Noto Emoji, Roboto, Ubuntu, webfonts 같은 표준 폰트를 설치함
  • KDE와 데스크톱 구성요소는 kde, kdegraphics, kdemultimedia, kdeutils, phonon-mpv, pipewire, pulseaudio, wireplumber 등을 설치함
  • 데스크톱 앱 예시는 Chromium, Firefox, LibreOffice, Thunderbird, Signal Desktop, Wine, Emacs Wayland, Git, mpv, tmux 등을 포함함
  • 일부 데스크톱 기능은 PipeWire에 의존하며, 작업 표시줄 미리보기는 PipeWire가 실행되지 않으면 동작하지 않는 것으로 보임
  • /usr/local/etc/xdg/autostart/pipewire.desktop autostart 파일로 PipeWire를 자동 실행할 수 있음
  • kwallet에 SSH 키 암호를 저장하려면 KDE 환경에서 SSH_ASKPASS_REQUIRE=preferSSH_ASKPASS=/usr/local/bin/ksshaskpass를 내보냄

하드웨어 비디오 가속

  • 적절한 패키지를 설치하면 대부분의 Intel GPU에서 하드웨어 비디오 가속을 사용할 수 있음
  • 하드웨어 비디오 가속은 더 부드러운 영상 재생과 더 나은 배터리 사용 시간을 제공함
  • 필요한 패키지는 libva-intel-media-driver, libva-utils, libvdpau-va-gl, vdpauinfo
  • 사용자는 drm 장치를 통해 GPU에 접근해야 하므로 video 그룹에 들어 있어야 함
  • 일부 애플리케이션은 하드웨어 오프로드를 활용하려면 추가 설정이 필요할 수 있음
  • Chromium Browser

    • FreeBSD에서 Chromium의 하드웨어 비디오 디코딩은 예전에는 많은 명령줄 플래그가 필요했음
    • 작성 시점 기준 Chromium의 하드웨어 비디오 디코딩은 별도 플래그 없이 동작함
  • MPV

    • mpv.conf에서 hwdec=vaapi-copy, vo=gpu-next, vd-lavc-dr=yes, audio-channels=stereo를 설정하면 낮은 CPU 사용률로 HD 영상을 재생함

알려진 문제와 우회책

  • 덮개를 열면 노트북이 즉시 다시 절전됨

    • KDE가 실행되면 데스크톱 환경이 ACPI 덮개 이벤트를 감지해 suspend와 resume을 처리해야 함
    • ThinkPad에서는 덮개를 열자마자 노트북이 다시 절전되는 버그가 발생함
    • 우회책은 KDE 전원 설정에서 덮개 스위치 동작을 비활성화하고, devd로 덮개 닫힘 시 native suspend를 구성하는 방식임
    • /usr/local/libexec/kde-suspend 스크립트는 KDE 로그인 사용자의 화면을 잠근 뒤 0.5초 대기하고 acpiconf -s3로 S3 절전 상태에 들어감
    • /etc/devd/kde-suspend.conf 규칙은 ACPI Lid 0x00 이벤트에서 해당 스크립트를 실행함
  • 로그아웃 뒤 프로세스가 남음

    • FreeBSD에서는 KDE 세션 로그아웃 후 일부 프로세스가 무기한 계속 실행될 수 있음
    • Chromium은 가끔 CPU 코어 하나를 100% 소비하는 상태에 빠짐
    • systemd 기반 Linux 배포판에서는 systemd-logind가 사용자 세션 관련 프로세스를 종료하지만, FreeBSD KDE 환경에서는 같은 전제가 맞지 않음
    • KDE의 로그아웃 시점 cleanup 스크립트 기능을 이용해 baloo_file, chrome, dirmngr, pipewire, signal-desktop, wireplumber 등을 종료함
    • /usr/local/etc/xdg/plasma-workspace/shutdown/cleanup.sh를 실행 가능하게 만들어 적용함
  • 사용자 전환이 동작하지 않음

    • FreeBSD의 데스크톱 사용자 전환은 오래된 ConsoleKit2 버그 때문에 깨져 있음
    • 사용자가 시도하지 못하도록 /usr/local/etc/xdg/kdeglobals에서 action/start_new_session=falseaction/switch_user=false를 설정함
  • 절전 복귀 후 WiFi가 깨짐

    • FreeBSD 15.1-RELEASE에는 절전 복귀 후 WiFi가 깨지는 iwlwifi 버그가 있음
    • 우회책은 suspend 전에 wlan0 인터페이스를 중지하고 resume 뒤 다시 시작하는 방식임
    • /usr/local/etc/rc.d/iwlwifi_fix 스크립트는 service netif stop wlan0service netif start wlan0를 suspend/resume 명령에 연결함
    • 해당 스크립트는 실행 권한을 부여하고 iwlwifi_fix_enable="YES"로 활성화함
    • 수정은 이미 15-STABLE에 커밋되었으며, FreeBSD 15.2가 나오면 이 우회책이 필요 없어질 수 있음
  • 노트북 오디오 멈춤

    • 일부 노트북에는 hard lockup을 일으키는 i915 버그가 있음
    • 문제는 dmesghdac0: Command timeout 2 같은 오류를 동반함
    • 해결책은 compat.linuxkpi.i915_disable_power_well=0 loader tunable을 설정하는 것임
  • 그래픽 멈춤과 GPU hang

    • FreeBSD 15.1에서 기본 DRM 드라이버는 6.6에서 6.12로 올라감
    • 새 버전은 일부 Intel 칩에서 그래픽 멈춤과 dmesgGPU HANG 메시지를 일으키는 버그가 있는 것으로 보임
    • 안정적인 우회책은 이전 버전인 drm-66-kmod를 계속 사용하는 것임
  • 콘솔 유휴 시간제한 없음

    • FreeBSD는 몇 년 전 기존 syscons(4) 콘솔 드라이버에서 UEFI-native vt(4) 드라이버로 전환함
    • vt 콘솔에는 blanktime 지원이 없어 X11 또는 Wayland 세션이 없으면 화면을 끌 방법이 사실상 없음
    • Ly가 TTY 콘솔에서 실행되므로 아무도 로그인하지 않은 상태에서는 화면이 계속 켜져 있음
    • 단일 사용자 노트북에서는 큰 문제가 아니지만, 다중 사용자 워크스테이션에서는 로그인 프롬프트가 LCD 패널에 번인될 수 있음
  • GTK4 앱 아이콘 누락

    • 사용 중인 GTK4 앱은 Dino IM XMPP 클라이언트이며, 많은 아이콘이 렌더링되지 않고 KDE 폰트 설정도 따르지 않았음
    • portals를 비활성화하자 문제가 즉시 해결됨
    • 우회책은 export GDK_DEBUG=no-portals를 설정하는 것임
  • 오디오 재생 중 끊김

    • Pulseaudio는 오디오 파일 재생 중 가끔 crackling과 skipping을 일으킴
    • daemon.conf에서 default-fragments = 8default-fragment-size-msec = 5로 기본값을 올리면 문제가 해결됨

댓글과 토론

Lobste.rs 의견들
  • 이 글은 고맙지만, 설치 프로그램이 대신 해줘야 할 일들을 위해 수동 단계가 너무 많아 보임

    • FreeBSD의 노트북 지원은 역사적으로 반쯤만 동작했고, 열성 사용자에게나 맞는 수준이었음
      최근에는 Linux에서 와이파이와 그래픽 드라이버를 이식하는 데 많은 노력이 들어가서, 훨씬 더 많은 사람이 노트북에서 쓸 수 있게 됨
      지금은 2000년대 Linux와 비슷한 상태라 할 수 있고, 아직 할 일이 많지만 최전선에서 진행 중인 작업임
    • 느리지만 확실히 나아지고 있음. Linux도 10~15년 전에는 그다지 좋지 않았고, FreeBSD도 결국 거기까지 갈 것임
  • “설치 단계 열두 개쯤 직접 하지 않으면 그 기계가 정말 내 것이라고 할 수 있나?” /s 이면서도 /s가 아닌 느낌
    지금 이 댓글은 OpenBSD를 큰 삽질 없이 돌리려고 중고로 산 Thinkpad T14 Gen 1에서 쓰는 중임
    FreeBSD는 아직 시도하지 않았지만 아마 해볼 것 같고, 직접 만든 NAS는 ZFS 풀과 함께 FreeBSD 15를 돌리고 있음
    FreeBSD Foundation의 노트북 호환성 작업은 확실히 고맙게 느껴짐
    당장은 2000년대 Linux 같은 분위기지만, 원글 말처럼 “할 일이 있고, 최전선에서 하는 작업”임

  • 2010년대 후반부터 아주 신중하게 고른 노트북에서 FreeBSD를 데일리 드라이버로 써왔음
    당시에는 FreeBSD 데스크톱 설정에 손댈 일이 정말 많아서, 그걸 스크립트로 만들고 Git 저장소에 넣은 뒤 계속 손봐왔음
    예를 들어 언젠가 Wayland에서 Sway로 넘어가야 할 상황을 예상해 StumpWM에서 i3로 바꾸는 식임
    이제는 데스크톱 설치 프로그램이 진행 중이라 @technomancy의 타당한 지적을 해결할 수 있을 듯하고, 내 설정 스크립트 상당수도 쓸모없게 만들 가능성이 있음
    https://wiki.freebsd.org/desktop-installer

  • “LinuxKPI와 새 iwlwifi 드라이버 덕분에 와이파이 지원이 나쁘던 시절은 대부분 지나갔다. 흔한 Intel 카드라면 그냥 동작할 가능성이 높다”는 대목이 반가움
    데스크톱에서 FreeBSD 13/14도 시도해봤지만 드라이버 제한 때문에 속도가 너무 느려서 계속 쓰기 어려웠음
    이 제한이 사라진다니 좋고, 다음에 데스크톱에서 뭔가 새로 시도하고 싶어지면 FreeBSD를 다시 해볼 생각임

  • 재미있는 점은 RTL8812 와이파이 드라이버가 FreeBSD에는 이미 오래전부터, 기억상 10년 넘게 있었는데 Linux에는 커널 6.13쯤에야 들어갔다는 것임
    왜 Linux에서는 그렇게 오래 트리 밖 모듈로 남아 있었는지는 잘 모르겠음. 라이선스 때문이었을 수도 있음