1 points par GN⁺ 11 시간 전 | 1 commentaires | Partager sur WhatsApp
  • FreeBSD 15 s’est suffisamment amélioré grâce à pkgbase, aux améliorations des pilotes LinuxKPI et au projet de prise en charge des ordinateurs portables pour dépasser le cadre d’un OS de serveur et devenir un environnement principal utilisable sur desktop
  • Depuis l’essai de FreeBSD 14, KDE Plasma 6, Wayland et la prise en charge du Wi‑Fi Intel ont été ajoutés, et sur un ThinkPad X1 Carbon tout fonctionne bien à l’exception du Bluetooth
  • L’installation part du principe d’utiliser l’image memstick de FreeBSD 15.1, un démarrage UEFI, ZFS (GPT) et le choix du type d’installation du système de base Packages
  • La configuration de l’environnement desktop demande progressivement la mise en place des pilotes, de l’économie d’énergie, des permissions devfs, de la compatibilité Linux, de D-Bus, de Ly, de KDE, de PipeWire et de l’accélération vidéo matérielle
  • Certains environnements sur ordinateur portable conservent des problèmes connus, comme le Wi‑Fi après une reprise de veille, des blocages du GPU Intel ou des processus qui restent après la déconnexion de KDE, chacun nécessitant une solution de contournement

Aperçu

  • FreeBSD 15 montre de nettes améliorations pour un environnement desktop sur ordinateur portable grâce à pkgbase, aux améliorations des pilotes LinuxKPI et au lancement du Laptop Support and Usability Project
  • Par rapport à l’époque où l’auteur avait essayé FreeBSD 14 sur desktop, le portage de KDE Plasma 6, le fonctionnement de Wayland et la prise en charge complète du Wi‑Fi Intel changent la donne
  • Sur un ThinkPad X1 Carbon, l’autonomie est d’environ 6 à 7 heures, et hormis le Bluetooth qui n’a pas été testé, les fonctionnalités matérielles fonctionnent bien
  • La nouvelle Laptop Compatibility Matrix permet de vérifier ce qui fonctionne sur le matériel que l’on possède
  • Le guide part du principe d’une configuration avec GPU Intel et chipset sans fil Intel, sans couvrir d’autres combinaisons matérielles hors du champ d’expérience directe

Installation

  • Télécharger l’image memstick de FreeBSD 15.1 et l’écrire sur une clé USB avec dd
    • Exemple d’usage : récupérer l’image avec curl -OJ, puis exécuter sudo dd if=FreeBSD-15.1-RELEASE-amd64-memstick.img of=/dev/sdX bs=1M conv=sync
  • L’assistant d’installation est simple : configurer le système en démarrage UEFI et choisir ZFS (GPT) pour la disposition du disque
  • À l’étape où le type d’installation du système de base est demandé, choisir Packages afin d’utiliser le nouveau pkgbase
  • En activant SSH pendant l’installation, il est possible de copier-coller via une session SSH au lieu de tout saisir directement dans la console virtuelle
  • Après redémarrage, se connecter au compte root avec le mot de passe défini pendant l’installation

Utiliser les paquets les plus récents

  • L’arbre des ports FreeBSD propose deux branches : quarterly et latest
  • quarterly fige l’arbre des ports sous forme d’instantané quatre fois par an, et entre-temps les paquets tiers ne reçoivent que les correctifs de sécurité importants
  • latest suit un modèle de rolling release dans lequel les principales mises à jour de paquets arrivent dès qu’elles sont disponibles
  • La configuration par défaut utilise le dépôt quarterly, et pour basculer vers latest il faut créer un fichier d’override dans /usr/local/etc/pkg/repos
  • Régler ensuite l’URL du dépôt sur pkg+https://pkg.FreeBSD.org/${ABI}/latest et kmods_latest_${VERSION_MINOR}, puis exécuter pkg update et pkg upgrade

Matériel, pilotes et réglages

  • Ajustements du bootloader

    • Dans /boot/loader.conf, il est possible de configurer le temps d’attente du bootloader, de désactiver destructive dtrace et d’augmenter la mémoire partagée ainsi que les limites de processus
    • Les systèmes prenant en charge Intel Speed Shift peuvent utiliser machdep.hwpstate_pkg_ctrl="0" pour laisser chaque cœur définir son propre état d’alimentation
    • Il est possible d’ajuster l’économie d’énergie PCI, un soreceive() plus rapide, une longueur de file réseau plus grande et un délai d’expiration des transactions ZFS accru pour mieux convenir à un usage desktop ou portable
  • Modules du noyau

    • Ajouter cpuctl et coretemp à kld_list active l’affichage des informations CPU et de la température
    • L’algorithme de contrôle de congestion H-TCP vise de meilleures performances sur les réseaux rapides et longue distance comme Internet, et peut être utilisé via le module cc_htcp
    • Sur les ThinkPad, le module acpi_ibm est nécessaire pour le fonctionnement des boutons
  • Réglages sysctl

    • Dans /etc/sysctl.conf, il est possible d’appliquer des réglages de sécurité comme la limitation du changement de keymap, la désactivation des core dumps, des paramètres liés à l’ASLR, le blocage des redirects ICMP et la désactivation des redirects IP
    • Certains guides de sécurité recommandent W^X, la vérification des hardlinks et la limitation de la visibilité des processus des autres utilisateurs, mais ces réglages sont laissés en commentaire car ils créent selon l’auteur davantage de problèmes
    • Les réglages de performances réseau augmentent les buffers TCP et les files d’attente pour mieux s’adapter aux connexions avec un RTT plus élevé, en partant du principe que les valeurs par défaut sont optimisées pour la latence d’un LAN
    • Les optimisations desktop configurent la prévention du swap de mémoire partagée, l’augmentation du seuil de préemption du scheduler et l’autorisation de montage pour les utilisateurs ordinaires
    • Pour économiser l’énergie sur un portable, hw.snd.latency=7 réduit la réactivité audio
  • WiFi

    • La prise en charge du WiFi s’est nettement améliorée par rapport au passé grâce à LinuxKPI et au nouveau pilote iwlwifi
    • La compatibilité des cartes sans fil se vérifie dans la liste des chipsets pris en charge par iwlwifi, et le firmware requis s’installe avec fwget -v
    • Pour utiliser le nouveau iwlwifi avec d’anciennes cartes, il peut être nécessaire de bloquer le chargement de l’ancien pilote iwm avec devmatch_blocklist="if_iwm"
    • 802.11n et 802.11ac sont désactivés par défaut, ce qui nécessite les réglages compat.linuxkpi.iwlwifi_11n_disable="0" et compat.linuxkpi.iwlwifi_disable_11ac="0"
    • En créant l’interface wlan0 dans rc.conf et en configurant WPA DHCP powersave, wpa_supplicant(8) prend en charge la gestion des réseaux WiFi
    • La gestion du réseau peut se faire en modifiant directement wpa_supplicant.conf(5) ou en utilisant l’interface graphique de networkmgr
    • networkmgr nécessite les privilèges superutilisateur, et une règle sudoers peut permettre au groupe operator de l’exécuter sans mot de passe
    • Le pilote iwlwifi de FreeBSD 15.1-RELEASE présente des problèmes connus liés au suspend/resume
  • CPU et graphismes

    • Les microcodes CPU récents se configurent pour être chargés au démarrage dans loader.conf après l’installation du paquet cpu-microcode
    • L’économie d’énergie CPU utilise performance_cx_lowest=Cmax et economy_cx_lowest=Cmax pour activer des C-state plus profonds afin de réduire la consommation de batterie et la chaleur
    • Sur les processeurs Intel récents, il n’est plus nécessaire d’exécuter powerd(8)
    • Le pilote graphique Intel se configure pour charger i915kms au démarrage après l’installation de drm-kmod
  • Permissions des périphériques et compatibilité

    • Sur un système desktop, des règles devfs sont ajoutées pour permettre aux utilisateurs ordinaires de contrôler le GPU, la vidéo, le rétroéclairage et les périphériques USB
    • Dans /etc/devfs.rules, on définit les permissions et groupes de drm/*, video*, backlight/* et usb/*, puis on configure devfs_system_ruleset=localrules
    • L’exécution de binaires Linux active le Linuxulator avec linux_enable=YES et, si nécessaire, monte devfs, tmpfs, fdescfs, linprocfs et linsysfs sous /compat/linux
    • Pour monter des systèmes de fichiers comme exFAT ou NTFS, il faut charger le module noyau fusefs
    • La prise en charge des webcams peut être obtenue avec l’installation de webcamd, v4l-utils, v4l_compat et le réglage webcamd_enable=YES
    • Les imprimantes nécessitent CUPS et cups-filters, et cups-files.conf est modifié pour permettre au groupe operator de configurer les imprimantes
    • L’interface graphique de configuration de CUPS est accessible dans le navigateur à localhost:631
  • Alimentation du portable et rétroéclairage ThinkPad

    • Sur un portable, /etc/rc.local exécute usbconfig et power_save pour placer les périphériques USB inactifs en mode économie d’énergie
    • Pour faire fonctionner les touches de rétroéclairage sur un ThinkPad, il faut charger le module acpi_ibm, définir dev.acpi_ibm.0.handlerevents="0x10 0x11" et ajouter une règle devd
    • Le script /usr/local/libexec/thinkpad-brightness augmente ou diminue la luminosité par pas de 2, 5 ou 10 selon la luminosité actuelle
    • Il faut donner les droits d’exécution au script puis redémarrer devd pour appliquer le fonctionnement
    • Une fois la configuration matérielle et des pilotes terminée, il faut redémarrer pour vérifier que les changements n’ont pas cassé le système

Pare-feu

  • La configuration vise à exécuter un pare-feu sur tous les systèmes, et l’exemple de base bloque toutes les connexions entrantes sauf SSH
  • Dans /etc/pf.conf, remplacez l’interface egress par le vrai nom de l’interface réseau et n’autorisez en entrée TCP que le port SSH
  • Pour les appels audio et vidéo, autorisez la plage UDP 1024:65535
  • Définissez pf_enable=YES puis lancez le pare-feu avec service pf start

Désactivation des scripts periodic

  • FreeBSD inclut par défaut de nombreux scripts periodic(8) qui analysent le disque dur, accèdent à Internet et envoient des e-mails
  • La liste complète peut être consultée dans periodic.conf(5)
  • Pour un utilisateur desktop classique, seules certaines tâches sont utiles, et la plupart peuvent être désactivées sans risque
  • L’exemple de configuration passe massivement à NO des tâches daily, weekly, monthly et security liées aux sauvegardes, rapports d’état, files d’attente mail et sorties de vérification de sécurité

Comptes utilisateur

  • Créez un compte utilisateur local et ajoutez-le aux groupes operator, video et wheel
  • operator est nécessaire pour la configuration des périphériques et des imprimantes, et video pour l’accès aux périphériques GPU
  • Le groupe wheel sert à exécuter des commandes avec les privilèges root via sudo
  • Après avoir installé sudo, configurez %wheel ALL=(ALL:ALL) ALL dans le fichier sudoers

Locale, heure, SSH, certificats

  • Locale

    • Les variables d’environnement du shell de connexion se règlent dans login.conf(5), en ajoutant charset=UTF-8 et lang=en_US.UTF-8
    • Pour appliquer les changements, reconstruire la base de données de connexion avec cap_mkdb /etc/login.conf
    • Pour les shells non connectés, définir LANG et CHARSET dans /etc/profile.d/locale.sh
  • NTP et fuseau horaire

    • ntpd(8) est nécessaire pour maintenir l’horloge système à jour
    • ntp.conf contient les serveurs NTP du pool FreeBSD ainsi que les paramètres de restriction d’accès
    • Si le fuseau horaire n’a pas été défini pendant l’installation, créer un lien symbolique de /usr/share/zoneinfo/America/New_York vers /etc/localtime
  • openssh-portable

    • Le ssh du système de base FreeBSD comporte de nombreux patchs, et l’auteur préfère le openssh-portable d’origine des ports
    • Dans les nouvelles versions, le fichier de configuration de sshd se trouve sous /usr/local/etc/ssh
    • Dans /etc/rc.conf, désactiver le sshd du système de base et lancer le nouveau service avec openssh_enable=YES
    • La commande ssh continue d’utiliser /usr/bin/ssh du système de base tant que $PATH n’est pas modifié
    • Pour faire passer la version des ports en priorité pour tous les utilisateurs, modifier l’ordre de path dans login.conf afin que /usr/local passe en premier, puis reconstruire la base de données
  • Terminal, certificats, D-Bus

    • La base de données termcap(5) de FreeBSD est plus simple que celle qu’on rencontre couramment sous Linux, et les couleurs vives peuvent ne pas s’afficher dans les terminaux de type XTerm
    • L’installation de terminfo-db permet de corriger ce problème
    • Par défaut, FreeBSD ne fait confiance qu’à une partie des autorités de certification standard, d’où l’installation de ca_root_nss, le bundle complet des CA de Mozilla
    • KDE et de nombreuses fonctions de bureau actuelles nécessitent D-Bus ; l’activer avec dbus_enable=YES et service dbus start

Gestionnaire d’affichage Ly

  • En général, on lance une session de bureau avec un gestionnaire d’affichage graphique comme SDDM, mais au moment de la rédaction, FreeBSD ne parvient pas à lancer de façon fiable les sessions Wayland
  • SDDM fonctionne presque, mais un bug fait que plusieurs combinaisons de touches ferment la session
  • La méthode actuelle consiste à lancer les sessions Wayland avec le gestionnaire d’affichage Ly en mode console
  • Ly ne s’exécute pas en daemon ; dans /etc/ttys, on configure une console virtuelle pour exécuter /usr/local/bin/ly_wrapper
  • En ajoutant une entrée Ly dans /etc/gettytab, puis en redémarrant ou en rechargeant init avec kill -HUP 1, l’invite de connexion Ly apparaît
  • Dans config.ini, on peut forcer l’utilisation des sessions Wayland avec xinitrc=null, xsessions=null, shell=false, waylandsessions=/usr/local/share/wayland-sessions

Polices, KDE, applications de bureau

  • Pour que les sites web s’affichent correctement, installer des polices standard comme Cantarell, Droid, Inconsolata, Noto, Noto Emoji, Roboto, Ubuntu et webfonts
  • Pour KDE et les composants du bureau, installer notamment kde, kdegraphics, kdemultimedia, kdeutils, phonon-mpv, pipewire, pulseaudio, wireplumber, etc.
  • Parmi les applications de bureau, on peut citer Chromium, Firefox, LibreOffice, Thunderbird, Signal Desktop, Wine, Emacs Wayland, Git, mpv, tmux, etc.
  • Certaines fonctions du bureau dépendent de PipeWire ; il semble que les aperçus dans la barre des tâches ne fonctionnent pas si PipeWire n’est pas lancé
  • On peut lancer PipeWire automatiquement via le fichier d’autostart /usr/local/etc/xdg/autostart/pipewire.desktop
  • Pour stocker la phrase de passe des clés SSH dans kwallet, exporter SSH_ASKPASS_REQUIRE=prefer et SSH_ASKPASS=/usr/local/bin/ksshaskpass dans l’environnement KDE

Accélération vidéo matérielle

  • En installant les paquets appropriés, on peut utiliser l’accélération vidéo matérielle sur la plupart des GPU Intel
  • L’accélération vidéo matérielle offre une lecture plus fluide des vidéos et une meilleure autonomie
  • Les paquets nécessaires sont libva-intel-media-driver, libva-utils, libvdpau-va-gl, vdpauinfo
  • L’utilisateur doit appartenir au groupe video, car l’accès au GPU passe par le périphérique drm
  • Certaines applications peuvent nécessiter une configuration supplémentaire pour exploiter l’offload matériel
  • Chromium Browser

    • Sous FreeBSD, le décodage vidéo matériel de Chromium nécessitait auparavant de nombreux flags en ligne de commande
    • Au moment de la rédaction, le décodage vidéo matériel de Chromium fonctionne sans flag supplémentaire
  • MPV

    • En définissant hwdec=vaapi-copy, vo=gpu-next, vd-lavc-dr=yes, audio-channels=stereo dans mpv.conf, on peut lire des vidéos HD avec une faible utilisation du CPU

Problèmes connus et contournements

  • Le portable se remet immédiatement en veille à l’ouverture du capot

    • Lorsque KDE est en cours d’exécution, l’environnement de bureau doit détecter les événements ACPI du capot et gérer la mise en veille et la reprise
    • Sur les ThinkPad, un bug fait que le portable se remet en veille dès que le capot est ouvert
    • Le contournement consiste à désactiver l’action du commutateur de capot dans les paramètres d’alimentation de KDE, puis à configurer une mise en veille native avec devd lors de la fermeture du capot
    • Le script /usr/local/libexec/kde-suspend verrouille l’écran de l’utilisateur connecté à KDE, attend 0,5 seconde, puis entre en veille S3 avec acpiconf -s3
    • La règle /etc/devd/kde-suspend.conf exécute ce script lors de l’événement ACPI Lid 0x00
  • Des processus restent actifs après la déconnexion

    • Sous FreeBSD, certains processus peuvent continuer à tourner indéfiniment après la déconnexion d’une session KDE
    • Chromium se retrouve parfois dans un état où il consomme 100 % d’un cœur CPU
    • Sur les distributions Linux basées sur systemd, systemd-logind termine les processus liés à la session utilisateur, mais cette hypothèse ne tient pas dans un environnement KDE sur FreeBSD
    • La fonction de scripts de nettoyage de KDE au moment de la déconnexion est utilisée pour arrêter baloo_file, chrome, dirmngr, pipewire, signal-desktop, wireplumber, etc.
    • Pour l’appliquer, il faut rendre exécutable /usr/local/etc/xdg/plasma-workspace/shutdown/cleanup.sh
  • Le changement d’utilisateur ne fonctionne pas

    • Le changement d’utilisateur sur le bureau de FreeBSD est cassé à cause d’un ancien bug de ConsoleKit2
    • Pour empêcher les utilisateurs d’essayer, action/start_new_session=false et action/switch_user=false sont définis dans /usr/local/etc/xdg/kdeglobals
  • Le Wi‑Fi casse après une sortie de veille

    • FreeBSD 15.1-RELEASE comporte un bug iwlwifi qui casse le Wi‑Fi après une sortie de veille
    • Le contournement consiste à arrêter l’interface wlan0 avant la mise en veille, puis à la redémarrer après la reprise
    • Le script /usr/local/etc/rc.d/iwlwifi_fix relie service netif stop wlan0 et service netif start wlan0 aux commandes de mise en veille et de reprise
    • Il faut rendre ce script exécutable et l’activer avec iwlwifi_fix_enable="YES"
    • Le correctif a déjà été commit dans 15-STABLE, et ce contournement pourrait ne plus être nécessaire lorsque FreeBSD 15.2 sortira
  • Le son du portable se fige

    • Certains portables ont un bug i915 qui provoque un hard lockup
    • Le problème s’accompagne d’erreurs comme hdac0: Command timeout 2 dans dmesg
    • La solution consiste à définir le paramètre de chargement compat.linuxkpi.i915_disable_power_well=0
  • Gel graphique et GPU hang

    • Dans FreeBSD 15.1, le pilote DRM par défaut passe de 6.6 à 6.12
    • Cette nouvelle version semble comporter un bug qui provoque des gels graphiques et des messages GPU HANG dans dmesg sur certaines puces Intel
    • Le contournement le plus stable consiste à continuer à utiliser l’ancienne version, drm-66-kmod
  • Aucun délai d’inactivité sur la console

    • Il y a quelques années, FreeBSD est passé de l’ancien pilote de console syscons(4) au pilote vt(4) natif UEFI
    • La console vt ne prend pas en charge blanktime, donc sans session X11 ou Wayland il n’existe pratiquement aucun moyen d’éteindre l’écran
    • Comme Ly s’exécute sur la console TTY, l’écran reste allumé tant que personne n’est connecté
    • Ce n’est pas un gros problème sur un portable à utilisateur unique, mais sur une station de travail multiutilisateur, l’invite de connexion peut marquer la dalle LCD
  • Icônes manquantes dans les applis GTK4

    • L’application GTK4 utilisée est le client XMPP Dino IM, et de nombreuses icônes ne s’affichaient pas, tandis que les réglages de police de KDE n’étaient pas respectés
    • Désactiver les portals a résolu le problème immédiatement
    • Le contournement consiste à définir export GDK_DEBUG=no-portals
  • Coupures pendant la lecture audio

    • Pulseaudio provoque parfois des craquements et des sauts pendant la lecture de fichiers audio
    • Augmenter les valeurs par défaut dans daemon.conf à default-fragments = 8 et default-fragment-size-msec = 5 résout le problème

1 commentaires

 
Réactions sur Lobste.rs
  • Merci pour cet article, mais il semble y avoir beaucoup trop d’étapes manuelles pour des choses que l’installateur devrait faire à la place

    • La prise en charge des ordinateurs portables par FreeBSD n’a historiquement fonctionné qu’à moitié, et restait surtout adaptée aux utilisateurs les plus enthousiastes
      Récemment, beaucoup d’efforts ont été consacrés au portage des pilotes Wi-Fi et graphiques depuis Linux, ce qui permet désormais à bien plus de gens de l’utiliser sur portable
      On peut dire que la situation ressemble aujourd’hui au Linux des années 2000 : il reste encore beaucoup à faire, mais c’est un travail mené en première ligne
    • C’est lent, mais ça s’améliore clairement. Linux non plus n’était pas fameux il y a 10 à 15 ans, et FreeBSD finira par y arriver aussi
  • « Si je ne fais pas moi-même une douzaine d’étapes d’installation, est-ce que cette machine est vraiment à moi ? » /s, et en même temps pas totalement /s
    J’écris ce commentaire en ce moment même depuis un Thinkpad T14 Gen 1 acheté d’occasion pour faire tourner OpenBSD sans trop galérer
    Je n’ai pas encore essayé FreeBSD, mais je pense que je finirai par le faire, et mon NAS fait maison tourne déjà sous FreeBSD 15 avec un pool ZFS
    Le travail de la FreeBSD Foundation sur la compatibilité des portables est clairement très appréciable
    Pour l’instant, ça rappelle l’ambiance du Linux des années 2000, mais comme le dit le billet d’origine, « il y a du travail, et c’est un travail de première ligne »

  • J’utilise FreeBSD comme système principal au quotidien sur des portables choisis avec énormément de soin depuis la fin des années 2010
    À l’époque, il y avait vraiment beaucoup de choses à ajuster dans la configuration d’un bureau FreeBSD, donc j’en ai fait des scripts, mis ça dans un dépôt Git, puis j’ai continué à les faire évoluer
    Par exemple, en passant de StumpWM à i3 pour anticiper un éventuel futur passage à Sway sous Wayland
    Il y a maintenant un installateur de bureau en cours de développement, ce qui devrait répondre à la remarque tout à fait légitime de @technomancy, et pourrait aussi rendre une bonne partie de mes scripts de configuration inutiles
    https://wiki.freebsd.org/desktop-installer

  • Je suis content de lire que « grâce à LinuxKPI et au nouveau pilote iwlwifi, l’époque où la prise en charge du Wi-Fi était mauvaise est en grande partie derrière nous. Si vous avez une carte Intel courante, il y a de bonnes chances que cela fonctionne simplement »
    J’avais aussi essayé FreeBSD 13/14 sur desktop, mais à cause des limites des pilotes c’était bien trop lent pour être réellement utilisable au quotidien
    C’est une bonne nouvelle que cette limite disparaisse, et la prochaine fois que j’aurai envie de tenter quelque chose de nouveau sur desktop, je pense redonner sa chance à FreeBSD

  • Ce qui est amusant, c’est que le pilote Wi-Fi RTL8812 existait déjà depuis très longtemps sur FreeBSD, plus de dix ans il me semble, alors qu’il n’est arrivé dans Linux que vers le noyau 6.13
    Je ne sais pas vraiment pourquoi il est resté si longtemps en module hors arbre côté Linux. C’était peut-être une question de licence