노트북에서 FreeBSD 15 사용하기
(sacredheartsc.com)- 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 트리는
quarterly와latest두 가지 브랜치를 가짐 quarterly는 1년에 네 번 ports 트리를 스냅샷으로 고정하며, 그 사이 서드파티 패키지는 중요한 보안 패치만 받음latest는 주요 패키지 업데이트가 사용 가능해지는 즉시 받는 롤링 릴리스 방식임- 기본 설정은
quarterly저장소이며,latest로 전환하려면/usr/local/etc/pkg/repos에 override 파일을 만듦 - 저장소 URL을
pkg+https://pkg.FreeBSD.org/${ABI}/latest와kmods_latest_${VERSION_MINOR}로 설정한 뒤pkg update와pkg upgrade를 실행함
하드웨어 장치, 드라이버, 튜닝
-
부트로더 조정
/boot/loader.conf에서 부트로더 대기 시간, destructive dtrace 비활성화, 공유 메모리와 프로세스 한도 확대를 설정할 수 있음- Intel Speed Shift를 지원하는 시스템은
machdep.hwpstate_pkg_ctrl="0"으로 각 코어가 자체 전원 상태를 설정하게 할 수 있음 - PCI 전원 절약, 빠른
soreceive(), 네트워크 큐 길이 확대, ZFS 트랜잭션 타임아웃 증가를 설정해 데스크톱과 노트북 사용에 맞출 수 있음
-
커널 모듈
cpuctl과coretemp를kld_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 관련 알려진 문제가 있음
- WiFi 지원은 LinuxKPI와 새
-
CPU와 그래픽
- 최신 CPU 마이크로코드는
cpu-microcode패키지 설치 후loader.conf에서 부팅 시 로드하도록 설정함 - CPU 전원 절약은
performance_cx_lowest=Cmax와economy_cx_lowest=Cmax로 낮은 C-state를 활성화해 배터리와 발열을 줄임 - 최신 Intel 프로세서에서는
powerd(8)실행이 더 이상 필요하지 않음 - Intel 그래픽 드라이버는
drm-kmod설치 후i915kms를 부팅 시 로드하도록 설정함
- 최신 CPU 마이크로코드는
-
장치 권한과 호환성
- 데스크톱 시스템에서는 일반 사용자가 GPU, 비디오, 백라이트, USB 장치를 제어할 수 있도록 devfs 규칙을 추가함
/etc/devfs.rules에서drm/*,video*,backlight/*,usb/*의 권한과 그룹을 지정하고devfs_system_ruleset=localrules를 설정함- Linux 바이너리 실행은 Linuxulator를
linux_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에서usbconfig와power_save를 실행함 - ThinkPad 백라이트 키를 동작시키려면
acpi_ibm모듈 로드,dev.acpi_ibm.0.handlerevents="0x10 0x11"설정,devd규칙이 필요함 /usr/local/libexec/thinkpad-brightness스크립트는 현재 밝기에 따라 2, 5, 10 단위로 밝기를 올리거나 내림- 스크립트 실행 권한을 부여하고
devd를 재시작한 뒤 동작을 적용함 - 하드웨어와 드라이버 설정을 마친 뒤 재부팅해 변경이 시스템을 망가뜨리지 않았는지 확인함
- 노트북에서는 비활성 USB 장치를 절전 상태로 전환하기 위해
방화벽
- 모든 시스템에서 방화벽을 실행하려는 구성으로, 기본 예시는 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-8과lang=en_US.UTF-8을 추가함 - 변경 적용을 위해
cap_mkdb /etc/login.conf로 로그인 데이터베이스를 다시 빌드함 - 비로그인 셸에는
/etc/profile.d/locale.sh에서LANG과CHARSET을 설정함
- 로그인 셸 환경 변수는
-
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에서 basesshd를 끄고openssh_enable=YES로 새 서비스를 실행함ssh명령은$PATH를 바꾸지 않으면 base system의/usr/bin/ssh를 계속 사용함- 모든 사용자에게 ports 버전을 우선 적용하려면
login.conf의path순서를/usr/local이 앞서도록 수정하고 데이터베이스를 다시 빌드함
- FreeBSD base system의
-
터미널, 인증서, D-Bus
- FreeBSD의
termcap(5)데이터베이스는 Linux에서 흔한 것보다 단순하며, XTerm 계열 터미널에서 밝은 색상이 렌더링되지 않을 수 있음 terminfo-db설치로 이 문제를 고칠 수 있음- FreeBSD는 기본적으로 표준 인증기관 일부만 신뢰하므로 Mozilla 전체 CA 번들인
ca_root_nss를 설치함 - KDE와 오늘날의 여러 데스크톱 기능에는 D-Bus가 필요하며,
dbus_enable=YES와service dbus start로 활성화함
- FreeBSD의
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.desktopautostart 파일로 PipeWire를 자동 실행할 수 있음kwallet에 SSH 키 암호를 저장하려면 KDE 환경에서SSH_ASKPASS_REQUIRE=prefer와SSH_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 Lid0x00이벤트에서 해당 스크립트를 실행함
-
로그아웃 뒤 프로세스가 남음
- 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=false와action/switch_user=false를 설정함
-
절전 복귀 후 WiFi가 깨짐
- FreeBSD 15.1-RELEASE에는 절전 복귀 후 WiFi가 깨지는 iwlwifi 버그가 있음
- 우회책은 suspend 전에
wlan0인터페이스를 중지하고 resume 뒤 다시 시작하는 방식임 /usr/local/etc/rc.d/iwlwifi_fix스크립트는service netif stop wlan0과service netif start wlan0를 suspend/resume 명령에 연결함- 해당 스크립트는 실행 권한을 부여하고
iwlwifi_fix_enable="YES"로 활성화함 - 수정은 이미 15-STABLE에 커밋되었으며, FreeBSD 15.2가 나오면 이 우회책이 필요 없어질 수 있음
-
노트북 오디오 멈춤
- 일부 노트북에는 hard lockup을 일으키는 i915 버그가 있음
- 문제는
dmesg에hdac0: Command timeout 2같은 오류를 동반함 - 해결책은
compat.linuxkpi.i915_disable_power_well=0loader tunable을 설정하는 것임
-
그래픽 멈춤과 GPU hang
- FreeBSD 15.1에서 기본 DRM 드라이버는 6.6에서 6.12로 올라감
- 새 버전은 일부 Intel 칩에서 그래픽 멈춤과
dmesg의GPU HANG메시지를 일으키는 버그가 있는 것으로 보임 - 안정적인 우회책은 이전 버전인
drm-66-kmod를 계속 사용하는 것임
-
콘솔 유휴 시간제한 없음
- FreeBSD는 몇 년 전 기존
syscons(4)콘솔 드라이버에서 UEFI-nativevt(4)드라이버로 전환함 vt콘솔에는blanktime지원이 없어 X11 또는 Wayland 세션이 없으면 화면을 끌 방법이 사실상 없음- Ly가 TTY 콘솔에서 실행되므로 아무도 로그인하지 않은 상태에서는 화면이 계속 켜져 있음
- 단일 사용자 노트북에서는 큰 문제가 아니지만, 다중 사용자 워크스테이션에서는 로그인 프롬프트가 LCD 패널에 번인될 수 있음
- FreeBSD는 몇 년 전 기존
-
GTK4 앱 아이콘 누락
- 사용 중인 GTK4 앱은 Dino IM XMPP 클라이언트이며, 많은 아이콘이 렌더링되지 않고 KDE 폰트 설정도 따르지 않았음
- portals를 비활성화하자 문제가 즉시 해결됨
- 우회책은
export GDK_DEBUG=no-portals를 설정하는 것임
-
오디오 재생 중 끊김
- Pulseaudio는 오디오 파일 재생 중 가끔 crackling과 skipping을 일으킴
daemon.conf에서default-fragments = 8과default-fragment-size-msec = 5로 기본값을 올리면 문제가 해결됨
댓글과 토론
Lobste.rs 의견들
-
이 글은 고맙지만, 설치 프로그램이 대신 해줘야 할 일들을 위해 수동 단계가 너무 많아 보임
- FreeBSD의 노트북 지원은 역사적으로 반쯤만 동작했고, 열성 사용자에게나 맞는 수준이었음
최근에는 Linux에서 와이파이와 그래픽 드라이버를 이식하는 데 많은 노력이 들어가서, 훨씬 더 많은 사람이 노트북에서 쓸 수 있게 됨
지금은 2000년대 Linux와 비슷한 상태라 할 수 있고, 아직 할 일이 많지만 최전선에서 진행 중인 작업임 - 느리지만 확실히 나아지고 있음. Linux도 10~15년 전에는 그다지 좋지 않았고, FreeBSD도 결국 거기까지 갈 것임
- 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에서는 그렇게 오래 트리 밖 모듈로 남아 있었는지는 잘 모르겠음. 라이선스 때문이었을 수도 있음