Utiliser FreeBSD 15 sur un ordinateur portable
(sacredheartsc.com)- 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écutersudo dd if=FreeBSD-15.1-RELEASE-amd64-memstick.img of=/dev/sdX bs=1M conv=sync
- Exemple d’usage : récupérer l’image avec
- 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
Packagesafin 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 :
quarterlyetlatest quarterlyfige 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é importantslatestsuit 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 verslatestil 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}/latestetkmods_latest_${VERSION_MINOR}, puis exécuterpkg updateetpkg 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
- Dans
-
Modules du noyau
- Ajouter
cpuctletcoretempàkld_listactive 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_ibmest nécessaire pour le fonctionnement des boutons
- Ajouter
-
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=7réduit la réactivité audio
- Dans
-
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 avecfwget -v - Pour utiliser le nouveau
iwlwifiavec d’anciennes cartes, il peut être nécessaire de bloquer le chargement de l’ancien piloteiwmavecdevmatch_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"etcompat.linuxkpi.iwlwifi_disable_11ac="0" - En créant l’interface
wlan0dansrc.confet en configurantWPA 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 denetworkmgr networkmgrnécessite les privilèges superutilisateur, et une règle sudoers peut permettre au groupeoperatorde l’exécuter sans mot de passe- Le pilote
iwlwifide FreeBSD 15.1-RELEASE présente des problèmes connus liés au suspend/resume
- La prise en charge du WiFi s’est nettement améliorée par rapport au passé grâce à LinuxKPI et au nouveau pilote
-
CPU et graphismes
- Les microcodes CPU récents se configurent pour être chargés au démarrage dans
loader.confaprès l’installation du paquetcpu-microcode - L’économie d’énergie CPU utilise
performance_cx_lowest=Cmaxeteconomy_cx_lowest=Cmaxpour 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
i915kmsau démarrage après l’installation dedrm-kmod
- Les microcodes CPU récents se configurent pour être chargés au démarrage dans
-
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 dedrm/*,video*,backlight/*etusb/*, puis on configuredevfs_system_ruleset=localrules - L’exécution de binaires Linux active le Linuxulator avec
linux_enable=YESet, 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_compatet le réglagewebcamd_enable=YES - Les imprimantes nécessitent CUPS et
cups-filters, etcups-files.confest modifié pour permettre au groupeoperatorde 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.localexécuteusbconfigetpower_savepour 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éfinirdev.acpi_ibm.0.handlerevents="0x10 0x11"et ajouter une règledevd - Le script
/usr/local/libexec/thinkpad-brightnessaugmente 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
devdpour 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
- Sur un portable,
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’interfaceegresspar 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=YESpuis lancez le pare-feu avecservice 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 à
NOdes 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,videoetwheel operatorest nécessaire pour la configuration des périphériques et des imprimantes, etvideopour l’accès aux périphériques GPU- Le groupe
wheelsert à exécuter des commandes avec les privilèges root viasudo - Après avoir installé
sudo, configurez%wheel ALL=(ALL:ALL) ALLdans le fichier sudoers
Locale, heure, SSH, certificats
-
Locale
- Les variables d’environnement du shell de connexion se règlent dans
login.conf(5), en ajoutantcharset=UTF-8etlang=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
LANGetCHARSETdans/etc/profile.d/locale.sh
- Les variables d’environnement du shell de connexion se règlent dans
-
NTP et fuseau horaire
- ntpd(8) est nécessaire pour maintenir l’horloge système à jour
ntp.confcontient 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_Yorkvers/etc/localtime
-
openssh-portable
- Le
sshdu système de base FreeBSD comporte de nombreux patchs, et l’auteur préfère leopenssh-portabled’origine des ports - Dans les nouvelles versions, le fichier de configuration de
sshdse trouve sous/usr/local/etc/ssh - Dans
/etc/rc.conf, désactiver lesshddu système de base et lancer le nouveau service avecopenssh_enable=YES - La commande
sshcontinue d’utiliser/usr/bin/sshdu système de base tant que$PATHn’est pas modifié - Pour faire passer la version des ports en priorité pour tous les utilisateurs, modifier l’ordre de
pathdanslogin.confafin que/usr/localpasse en premier, puis reconstruire la base de données
- Le
-
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-dbpermet 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=YESetservice dbus start
- La base de données
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 aveckill -HUP 1, l’invite de connexion Ly apparaît - Dans
config.ini, on peut forcer l’utilisation des sessions Wayland avecxinitrc=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, exporterSSH_ASKPASS_REQUIRE=preferetSSH_ASKPASS=/usr/local/bin/ksshaskpassdans 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ériquedrm - 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=stereodansmpv.conf, on peut lire des vidéos HD avec une faible utilisation du CPU
- En définissant
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
devdlors de la fermeture du capot - Le script
/usr/local/libexec/kde-suspendverrouille l’écran de l’utilisateur connecté à KDE, attend 0,5 seconde, puis entre en veille S3 avecacpiconf -s3 - La règle
/etc/devd/kde-suspend.confexécute ce script lors de l’événement ACPI Lid0x00
-
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-logindtermine 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=falseetaction/switch_user=falsesont 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
wlan0avant la mise en veille, puis à la redémarrer après la reprise - Le script
/usr/local/etc/rc.d/iwlwifi_fixrelieservice netif stop wlan0etservice netif start wlan0aux 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 2dansdmesg - 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 HANGdansdmesgsur 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 pilotevt(4)natif UEFI - La console
vtne prend pas en chargeblanktime, 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
- Il y a quelques années, FreeBSD est passé de l’ancien pilote de console
-
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 = 8etdefault-fragment-size-msec = 5ré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
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
« 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