1 ポイント 投稿者 GN⁺ 11 시간 전 | 1件のコメント | WhatsAppで共有
  • FreeBSD 15 は pkgbase、LinuxKPI ドライバの改善、ノートPC対応プロジェクトによって、サーバー向け 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、ハードウェア動画アクセラレーションまで段階的な設定が必要となる
  • 一部のノートPC環境では、スリープ復帰後の WiFi 問題、Intel グラフィックスのフリーズ、KDE ログアウト後のプロセス残留といった 既知の問題 が残っており、それぞれ回避策が必要である

概要

  • FreeBSD 15 は pkgbase、LinuxKPI ドライバの改善、Laptop Support and Usability Project の開始により、ノートPCのデスクトップ環境で大きな改善を見せている
  • 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 の 2 つのブランチがある
  • quarterly は年に 4 回 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 トランザクションタイムアウトの増加を設定し、デスクトップやノートPCでの利用に合わせられる
  • カーネルモジュール

    • 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 バッファとキューを拡大する
    • デスクトップ向け最適化として、共有メモリのスワップ防止、スケジューラのプリエンプション閾値の増加、一般ユーザーによるマウントの許可を設定する
    • ノートPCの省電力のため、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.confwlan0 デバイスを作成し、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.rulesdrm/*video*backlight/*usb/* の権限とグループを指定し、devfs_system_ruleset=localrules を設定する
    • Linux バイナリの実行には Linuxulatorlinux_enable=YES で有効化し、必要に応じて /compat/linux 配下に devfs、tmpfs、fdescfs、linprocfs、linsysfs をマウントする
    • exFAT や NTFS などのファイルシステムをマウントするために fusefs カーネルモジュールを読み込む
    • Web カメラは webcamdv4l-utilsv4l_compat のインストールと webcamd_enable=YES の設定でサポートが期待できる
    • プリンターには CUPS と cups-filters が必要で、operator グループがプリンターを設定できるよう cups-files.conf を修正する
    • CUPS の設定 GUI にはブラウザーで localhost:631 からアクセスする
  • ノートPCの電源管理と ThinkPad バックライト

    • ノートPCでは、非アクティブな USB デバイスを省電力状態に移すため、/etc/rc.localusbconfigpower_save を実行する
    • ThinkPad のバックライトキーを動作させるには、acpi_ibm モジュールの読み込み、dev.acpi_ibm.0.handlerevents="0x10 0x11" の設定、devd ルールが必要
    • /usr/local/libexec/thinkpad-brightness スクリプトは、現在の明るさに応じて 2、5、10 単位で明るさを上げ下げする
    • スクリプトに実行権限を付与し、devd を再起動してから動作を反映する
    • ハードウェアとドライバーの設定を終えたら再起動し、変更がシステムを壊していないか確認する

ファイアウォール

  • すべてのシステムでファイアウォールを動かす構成で、基本の例では SSH を除くすべての受信接続を遮断する
  • /etc/pf.confegress インターフェースを実際のネットワークインターフェース名に置き換え、SSH ポートだけを TCP のインバウンドで許可する
  • 音声・ビデオ通話のために UDP 1024:65535 範囲を許可する
  • pf_enable=YES を設定し、service pf start でファイアウォールを起動する

periodic スクリプトの無効化

  • FreeBSD には、デフォルトでハードディスクを走査し、インターネットに接続し、メールを送信する periodic(8) スクリプトが多数含まれている
  • 一覧全体は periodic.conf(5) で確認できる
  • 一般的なデスクトップユーザーにとって有用なのは一部の作業だけで、多くは安全に無効化できる
  • 設定例では、daily、weekly、monthly、security 関連のバックアップ・状態報告・メールキュー・セキュリティ点検出力の作業を大量に NO に変更する

ユーザーアカウント

  • ローカルユーザーアカウントを作成し、operatorvideowheel グループに追加する
  • 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.shLANGCHARSET を設定する
  • 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.inixinitrc=null, xsessions=null, shell=false, waylandsessions=/usr/local/share/wayland-sessions と設定することで Wayland セッションの使用を強制できる

フォント、KDE、デスクトップアプリ

  • Web サイトが正しくレンダリングされるように、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.confhwdec=vaapi-copy, vo=gpu-next, vd-lavc-dr=yes, audio-channels=stereo を設定すると、低い CPU 使用率で HD 動画を再生できる

既知の問題と回避策

  • ふたを開くとノートPCがすぐに再びスリープする

    • KDE が実行されている場合、デスクトップ環境が ACPI のふたイベントを検知し、suspend と resume を処理する必要がある
    • ThinkPad では、ふたを開けた直後にノートPCが再びスリープするバグが発生する
    • 回避策は、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 コア 1 つを 100% 消費する状態に陥る
    • systemd ベースの Linux ディストリビューションでは systemd-logind がユーザーセッション関連のプロセスを終了させるが、FreeBSD の KDE 環境では同じ前提が成り立たない
    • KDE のログアウト時クリーンアップスクリプト機能を使い、baloo_filechromedirmngrpipewiresignal-desktopwireplumber などを終了させる
    • /usr/local/etc/xdg/plasma-workspace/shutdown/cleanup.sh を実行可能にして適用する
  • ユーザー切り替えが動作しない

    • FreeBSD のデスクトップでのユーザー切り替えは、古い ConsoleKit2 バグ のため壊れている
    • ユーザーが試せないように、/usr/local/etc/xdg/kdeglobalsaction/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 が出ればこの回避策は不要になる可能性がある
  • ノートPCのオーディオが停止する

    • 一部のノートPCには、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 ネイティブの vt(4) ドライバへ移行した
    • vt コンソールには blanktime のサポートがないため、X11 または Wayland セッションがなければ画面を消す方法が実質的にない
    • Ly は TTY コンソール上で動作するため、誰もログインしていない状態でも画面が点灯し続ける
    • 単一ユーザーのノートPCでは大きな問題ではないが、マルチユーザーのワークステーションではログインプロンプトが LCD パネルに焼き付く可能性がある
  • GTK4 アプリのアイコンが欠ける

    • 使用している GTK4 アプリは Dino IM XMPP クライアントで、多くのアイコンが描画されず、KDE のフォント設定にも従わなかった
    • portals を無効化すると問題はすぐに解決した
    • 回避策は export GDK_DEBUG=no-portals を設定することである
  • オーディオ再生中の途切れ

    • Pulseaudio は、オーディオファイル再生中にときどき crackling や skipping を引き起こす
    • daemon.confdefault-fragments = 8default-fragment-size-msec = 5 にデフォルト値を引き上げると問題は解決する

1件のコメント

 
Lobste.rsの意見
  • この記事には感謝しているが、インストーラが代わりにやるべきことのために手動ステップが多すぎるように見える

    • FreeBSDのノートPC対応は歴史的に見て半分しか動かないようなもので、熱心なユーザー向けという程度だった
      最近はLinuxからWi-Fiやグラフィックスドライバを移植するために多くの努力が注がれており、ノートPCで使える人はかなり増えた
      今は2000年代のLinuxに近い状態と言えるが、まだやることは多く、最前線で進んでいる作業だ
    • 遅いが確実に良くなっている。Linuxも10〜15年前はそれほど良くなかったし、FreeBSDもいずれそこまで到達するはずだ
  • 「インストール時に12個くらいの手順を自分で踏まないと、そのマシンが本当に自分のものとは言えないのでは?」/s でありつつ /s ではない感じ
    このコメントは今、OpenBSDを大きな苦労なく動かしたくて中古で買ったThinkpad T14 Gen 1で書いている
    FreeBSDはまだ試していないが、たぶんやってみるつもりだし、自作NASではZFSプールと一緒にFreeBSD 15を動かしている
    FreeBSD FoundationのノートPC互換性への取り組みは本当にありがたい
    今のところは2000年代のLinuxのような雰囲気だが、元記事の言う通り「やるべきことがあり、最前線で行われている作業」だ

  • 2010年代後半から、かなり慎重に選んだノートPCでFreeBSDをデイリードライバーとして使ってきた
    当時はFreeBSDのデスクトップ環境の設定で本当に手を入れる箇所が多かったので、それをスクリプト化してGitリポジトリに入れ、ずっと手直ししながら使ってきた
    たとえば、いずれWayland上のSwayへ移行する必要が出ると見越して、StumpWMからi3に切り替えるといった具合だ
    今ではデスクトップ用インストーラの開発が進んでいて、@technomancyのもっともな指摘に対応できそうだし、私の設定スクリプトのかなりの部分も不要になるかもしれない
    https://wiki.freebsd.org/desktop-installer

  • 「LinuxKPIと新しいiwlwifiドライバのおかげで、Wi-Fiサポートがひどかった時代はほぼ過ぎ去った。よくあるIntelカードなら、そのまま動く可能性が高い」というくだりはうれしい
    デスクトップでFreeBSD 13/14も試してみたが、ドライバの制約のせいで速度が遅すぎて使い続けるのは難しかった
    この制限がなくなるのは良いことで、次にデスクトップで何か新しいことを試したくなったら、またFreeBSDをやってみようと思う

  • 面白いのは、RTL8812 Wi-FiドライバがFreeBSDにはかなり前から、記憶では10年以上前からあったのに、Linuxではカーネル6.13あたりでようやく入ったことだ
    Linuxでなぜそんなに長くツリー外モジュールのままだったのかはよく分からない。ライセンスが理由だったのかもしれない