1 puntos por GN⁺ 11 시간 전 | 1 comentarios | Compartir por WhatsApp
  • FreeBSD 15 ha mejorado lo suficiente, gracias a pkgbase, las mejoras en los controladores LinuxKPI y el proyecto de soporte para laptops, como para usarse como entorno principal de escritorio y no solo como SO para servidores
  • Después de probar FreeBSD 14, se añadieron KDE Plasma 6, Wayland y soporte para WiFi de Intel, por lo que en una ThinkPad X1 Carbon todo funciona bien salvo Bluetooth
  • La instalación se basa en la imagen memstick de FreeBSD 15.1, arranque UEFI, ZFS (GPT) y la selección de Packages como tipo de instalación del sistema base
  • La configuración del entorno de escritorio requiere varios pasos: controladores, ahorro de energía, permisos de devfs, compatibilidad con Linux, D-Bus, Ly, KDE, PipeWire y aceleración de video por hardware
  • En algunos entornos de laptop aún quedan problemas conocidos, como fallas del WiFi tras reanudar desde suspensión, bloqueos de gráficos Intel y procesos que permanecen tras cerrar sesión en KDE; cada uno requiere una solución alternativa

Resumen

  • FreeBSD 15 muestra grandes mejoras en el entorno de escritorio para laptops gracias a pkgbase, a las mejoras en los controladores LinuxKPI y al lanzamiento del Laptop Support and Usability Project
  • Frente a cuando se intentó usar FreeBSD 14 como escritorio, ahora marcan la diferencia el port de KDE Plasma 6, el funcionamiento de Wayland y el soporte completo para WiFi de Intel
  • En una ThinkPad X1 Carbon, la batería dura alrededor de 6 a 7 horas y, salvo Bluetooth que no se probó, las funciones del dispositivo operan bien
  • La nueva Laptop Compatibility Matrix permite verificar qué funciona en el hardware de cada quien
  • La guía parte del supuesto de usar gráficos Intel y un chipset inalámbrico Intel, y deja fuera de su experiencia directa otras configuraciones de hardware

Instalación

  • Se descarga la imagen memstick de FreeBSD 15.1 y se graba en una memoria USB con dd
    • El ejemplo de uso descarga la imagen con curl -OJ y luego ejecuta sudo dd if=FreeBSD-15.1-RELEASE-amd64-memstick.img of=/dev/sdX bs=1M conv=sync
  • El asistente de instalación es sencillo: el sistema se configura con arranque UEFI y en el diseño de disco se elige ZFS (GPT)
  • En el paso donde se pregunta por el tipo de instalación del sistema base, se selecciona Packages para usar el nuevo pkgbase
  • Si se habilita SSH durante la instalación, se puede copiar y pegar desde una sesión SSH en lugar de escribir directamente en la consola virtual
  • Tras reiniciar, se inicia sesión en la cuenta root con la contraseña definida durante la instalación

Uso de paquetes más recientes

  • El árbol de ports de FreeBSD tiene dos ramas: quarterly y latest
  • quarterly fija un snapshot del árbol de ports cuatro veces al año, y entre esos períodos los paquetes de terceros solo reciben parches de seguridad importantes
  • latest sigue un modelo de rolling release, en el que las actualizaciones importantes de paquetes llegan en cuanto están disponibles
  • La configuración predeterminada usa el repositorio quarterly, y para cambiar a latest se crea un archivo de override en /usr/local/etc/pkg/repos
  • Después se configuran las URL del repositorio como pkg+https://pkg.FreeBSD.org/${ABI}/latest y kmods_latest_${VERSION_MINOR}, y se ejecutan pkg update y pkg upgrade

Hardware, controladores y ajustes

  • Ajustes del cargador de arranque

    • En /boot/loader.conf se puede configurar el tiempo de espera del cargador, desactivar destructive dtrace y ampliar la memoria compartida y los límites de procesos
    • Los sistemas compatibles con Intel Speed Shift pueden usar machdep.hwpstate_pkg_ctrl="0" para que cada núcleo configure su propio estado de energía
    • Se puede ajustar el ahorro de energía de PCI, soreceive() rápido, ampliar la longitud de la cola de red y aumentar el timeout de transacciones de ZFS para adaptarlo al uso de escritorio y laptop
  • Módulos del kernel

    • Agregar cpuctl y coretemp a kld_list habilita la consulta de información y temperatura del CPU
    • El algoritmo de control de congestión H-TCP busca un mejor rendimiento en redes rápidas y de larga distancia como Internet, y puede usarse con el módulo cc_htcp
    • En las ThinkPad se necesita el módulo acpi_ibm para el funcionamiento de los botones
  • Ajustes de sysctl

    • En /etc/sysctl.conf se pueden aplicar configuraciones de seguridad como limitar los cambios de keymap, desactivar core dumps, ajustar opciones relacionadas con ASLR, bloquear ICMP redirect y desactivar IP redirect
    • Algunas guías de seguridad recomiendan W^X, verificación de hardlinks y restringir la visualización de procesos de otros usuarios, pero aquí esas opciones se dejan comentadas porque se considera que causan más problemas
    • Los ajustes de rendimiento de red aumentan los buffers y colas de TCP para conexiones con RTT más alto, partiendo de que los valores predeterminados están optimizados para latencia de LAN
    • Como optimización de escritorio, se configura impedir el swap de memoria compartida, aumentar el umbral de desalojo del scheduler y permitir que usuarios normales monten sistemas de archivos
    • Para ahorrar energía en laptops se usa hw.snd.latency=7, reduciendo la capacidad de respuesta del audio
  • WiFi

    • El soporte de WiFi ha mejorado mucho frente al pasado gracias a LinuxKPI y al nuevo controlador iwlwifi
    • La compatibilidad de tarjetas inalámbricas se verifica en la lista de chipsets soportados por iwlwifi, y el firmware necesario se instala con fwget -v
    • Para usar el nuevo iwlwifi en tarjetas antiguas, puede ser necesario bloquear la carga del controlador iwm existente con devmatch_blocklist="if_iwm"
    • 802.11n y 802.11ac vienen desactivados por defecto, así que se requieren las opciones compat.linuxkpi.iwlwifi_11n_disable="0" y compat.linuxkpi.iwlwifi_disable_11ac="0"
    • Si se crea el dispositivo wlan0 en rc.conf y se configura WPA DHCP powersave, wpa_supplicant(8) se encargará de administrar las redes WiFi
    • La red puede administrarse editando directamente wpa_supplicant.conf(5) o usando la interfaz gráfica de networkmgr
    • networkmgr requiere privilegios de superusuario, y se puede añadir una regla en sudoers para que el grupo operator lo ejecute sin contraseña
    • El controlador iwlwifi de FreeBSD 15.1-RELEASE tiene problemas conocidos relacionados con suspend/resume
  • CPU y gráficos

    • El microcódigo más reciente del CPU se configura para cargarse al arrancar desde loader.conf después de instalar el paquete cpu-microcode
    • El ahorro de energía del CPU usa performance_cx_lowest=Cmax y economy_cx_lowest=Cmax para habilitar C-states bajos y reducir consumo de batería y calor
    • En procesadores Intel modernos ya no es necesario ejecutar powerd(8)
    • El controlador gráfico de Intel se configura para cargar i915kms al arrancar tras instalar drm-kmod
  • Permisos de dispositivos y compatibilidad

    • En sistemas de escritorio se agregan reglas de devfs para que usuarios normales puedan controlar GPU, video, retroiluminación y dispositivos USB
    • En /etc/devfs.rules se definen permisos y grupos para drm/*, video*, backlight/* y usb/*, y se establece devfs_system_ruleset=localrules
    • La ejecución de binarios de Linux se habilita activando Linuxulator con linux_enable=YES, y si hace falta se montan devfs, tmpfs, fdescfs, linprocfs y linsysfs bajo /compat/linux
    • Para montar sistemas de archivos como exFAT o NTFS se carga el módulo del kernel fusefs
    • Se puede esperar soporte para webcam instalando webcamd, v4l-utils y v4l_compat, además de configurar webcamd_enable=YES
    • Las impresoras requieren CUPS y cups-filters, y se modifica cups-files.conf para que el grupo operator pueda configurar impresoras
    • La interfaz gráfica de configuración de CUPS se abre desde el navegador en localhost:631
  • Energía de la laptop y retroiluminación en ThinkPad

    • En laptops, para poner en ahorro de energía los dispositivos USB inactivos, se ejecutan usbconfig y power_save desde /etc/rc.local
    • Para que funcionen las teclas de retroiluminación en ThinkPad, se necesita cargar el módulo acpi_ibm, establecer dev.acpi_ibm.0.handlerevents="0x10 0x11" y añadir reglas de devd
    • El script /usr/local/libexec/thinkpad-brightness sube o baja el brillo en pasos de 2, 5 o 10 según el brillo actual
    • Se da permiso de ejecución al script y se reinicia devd para aplicar el funcionamiento
    • Después de terminar la configuración de hardware y controladores, se reinicia para comprobar que los cambios no hayan roto el sistema

Firewall

  • La configuración busca ejecutar un firewall en todos los sistemas, y el ejemplo por defecto bloquea todas las conexiones entrantes excepto SSH
  • En /etc/pf.conf se reemplaza la interfaz egress por el nombre real de la interfaz de red y solo se permite tráfico TCP entrante al puerto SSH
  • Para llamadas de voz y video se permite el rango UDP 1024:65535
  • Se configura pf_enable=YES y se inicia el firewall con service pf start

Desactivar scripts periodic

  • FreeBSD incluye por defecto muchos scripts de periodic(8) que revisan el disco duro, se conectan a Internet y envían correo electrónico
  • La lista completa puede consultarse en periodic.conf(5)
  • Para un usuario normal de escritorio, solo algunas tareas son realmente útiles y la mayoría se puede desactivar sin problema
  • La configuración de ejemplo cambia masivamente a NO tareas de salida relacionadas con respaldos, reportes de estado, cola de correo y revisiones de seguridad de daily, weekly, monthly y security

Cuentas de usuario

  • Se crea una cuenta de usuario local y se agrega a los grupos operator, video y wheel
  • operator es necesario para configurar dispositivos e impresoras, y video para acceder a los dispositivos de GPU
  • El grupo wheel se usa para ejecutar comandos con privilegios de root mediante sudo
  • Después de instalar sudo, se configura %wheel ALL=(ALL:ALL) ALL en el archivo sudoers

Configuración regional, hora, SSH y certificados

  • Configuración regional

    • Las variables de entorno del shell de inicio de sesión se configuran en login.conf(5), agregando charset=UTF-8 y lang=en_US.UTF-8
    • Para aplicar los cambios, se vuelve a construir la base de datos de inicio de sesión con cap_mkdb /etc/login.conf
    • En los shells sin inicio de sesión, LANG y CHARSET se configuran en /etc/profile.d/locale.sh
  • NTP y zona horaria

    • Para mantener actualizado el reloj del sistema se necesita ntpd(8)
    • En ntp.conf se colocan los servidores NTP del pool de FreeBSD y la configuración de restricciones de acceso
    • Si no se configuró la zona horaria durante la instalación, se crea un enlace simbólico de /usr/share/zoneinfo/America/New_York hacia /etc/localtime
  • openssh-portable

    • El ssh del sistema base de FreeBSD tiene muchos parches aplicados, y se prefiere el openssh-portable puro de ports
    • En la versión nueva, el archivo de configuración de sshd se encuentra bajo /usr/local/etc/ssh
    • En /etc/rc.conf se desactiva el sshd del sistema base y se ejecuta el nuevo servicio con openssh_enable=YES
    • El comando ssh seguirá usando /usr/bin/ssh del sistema base a menos que se cambie $PATH
    • Para dar prioridad a la versión de ports para todos los usuarios, se modifica el orden de path en login.conf para que /usr/local vaya antes y luego se vuelve a construir la base de datos
  • Terminal, certificados y D-Bus

    • La base de datos termcap(5) de FreeBSD es más simple que la que suele usarse en Linux, y es posible que los colores brillantes no se rendericen en terminales de la familia XTerm
    • Este problema puede corregirse instalando terminfo-db
    • FreeBSD confía de forma predeterminada solo en parte de las autoridades certificadoras estándar, por lo que se instala ca_root_nss, el paquete completo de CA de Mozilla
    • KDE y muchas funciones de escritorio actuales requieren D-Bus, que se habilita con dbus_enable=YES y service dbus start

Gestor de pantalla Ly

  • Normalmente se inicia la sesión de escritorio con un gestor de pantalla gráfico como SDDM, pero al momento de escribir esto en FreeBSD no puede iniciar sesiones Wayland de forma estable
  • SDDM casi funciona, pero tiene un bug por el que varias combinaciones de teclas cierran la sesión
  • El método actual es iniciar la sesión Wayland con el gestor de pantalla Ly, basado en consola
  • Ly no se ejecuta como daemon; en /etc/ttys se configura una consola virtual para que ejecute /usr/local/bin/ly_wrapper
  • Si se agrega una entrada de Ly en /etc/gettytab y se reinicia, o se actualiza init con kill -HUP 1, aparece el prompt de inicio de sesión de Ly
  • En config.ini se puede forzar el uso de sesiones Wayland con xinitrc=null, xsessions=null, shell=false, waylandsessions=/usr/local/share/wayland-sessions

Fuentes, KDE y aplicaciones de escritorio

  • Para que los sitios web se rendericen correctamente, se instalan fuentes estándar como Cantarell, Droid, Inconsolata, Noto, Noto Emoji, Roboto, Ubuntu y webfonts
  • Para KDE y sus componentes de escritorio se instalan kde, kdegraphics, kdemultimedia, kdeutils, phonon-mpv, pipewire, pulseaudio, wireplumber, entre otros
  • Algunos ejemplos de aplicaciones de escritorio incluyen Chromium, Firefox, LibreOffice, Thunderbird, Signal Desktop, Wine, Emacs Wayland, Git, mpv y tmux
  • Algunas funciones del escritorio dependen de PipeWire, y la vista previa en la barra de tareas parece no funcionar si PipeWire no está en ejecución
  • PipeWire puede iniciarse automáticamente con el archivo de autoinicio /usr/local/etc/xdg/autostart/pipewire.desktop
  • Para guardar la contraseña de las claves SSH en kwallet, se exportan SSH_ASKPASS_REQUIRE=prefer y SSH_ASKPASS=/usr/local/bin/ksshaskpass en el entorno de KDE

Aceleración de video por hardware

  • Si se instalan los paquetes adecuados, se puede usar aceleración de video por hardware en la mayoría de las GPU Intel
  • La aceleración de video por hardware ofrece reproducción de video más fluida y mejor autonomía de batería
  • Los paquetes necesarios son libva-intel-media-driver, libva-utils, libvdpau-va-gl y vdpauinfo
  • Como el usuario necesita acceder a la GPU a través del dispositivo drm, debe pertenecer al grupo video
  • Algunas aplicaciones pueden requerir configuración adicional para aprovechar la descarga por hardware
  • Chromium Browser

    • En FreeBSD, la decodificación de video por hardware de Chromium antes requería muchas flags de línea de comandos
    • Al momento de escribir esto, la decodificación de video por hardware de Chromium funciona sin flags adicionales
  • MPV

    • Si se configuran hwdec=vaapi-copy, vo=gpu-next, vd-lavc-dr=yes y audio-channels=stereo en mpv.conf, se reproducen videos HD con bajo uso de CPU

Problemas conocidos y soluciones alternativas

  • Al abrir la tapa, la laptop vuelve a suspenderse de inmediato

    • Cuando KDE está en ejecución, el entorno de escritorio debería detectar el evento ACPI de la tapa y encargarse de suspender y reanudar
    • En las ThinkPad ocurre un bug en el que la laptop vuelve a suspenderse apenas se abre la tapa
    • La solución alternativa consiste en desactivar la acción del interruptor de la tapa en la configuración de energía de KDE y configurar con devd la suspensión nativa al cerrar la tapa
    • El script /usr/local/libexec/kde-suspend bloquea la pantalla del usuario con sesión iniciada en KDE, espera 0.5 segundos y luego entra en suspensión S3 con acpiconf -s3
    • La regla /etc/devd/kde-suspend.conf ejecuta ese script en el evento ACPI Lid 0x00
  • Quedan procesos después de cerrar sesión

    • En FreeBSD, algunos procesos pueden seguir ejecutándose indefinidamente después de cerrar la sesión de KDE
    • Chromium a veces entra en un estado en el que consume al 100% un núcleo de CPU
    • En las distribuciones Linux basadas en systemd, systemd-logind termina los procesos relacionados con la sesión del usuario, pero en el entorno KDE de FreeBSD esa misma premisa no se cumple
    • Se aprovecha la función de scripts de limpieza al cerrar sesión de KDE para finalizar baloo_file, chrome, dirmngr, pipewire, signal-desktop, wireplumber, etc.
    • Se aplica haciendo ejecutable /usr/local/etc/xdg/plasma-workspace/shutdown/cleanup.sh
  • El cambio de usuario no funciona

    • El cambio de usuario en el escritorio de FreeBSD está roto por un bug antiguo de ConsoleKit2
    • Para evitar que los usuarios lo intenten, se configura action/start_new_session=false y action/switch_user=false en /usr/local/etc/xdg/kdeglobals
  • El WiFi se rompe después de reanudar

    • FreeBSD 15.1-RELEASE tiene un bug de iwlwifi que rompe el WiFi después de volver de la suspensión
    • La solución alternativa consiste en detener la interfaz wlan0 antes de suspender y volver a iniciarla después de reanudar
    • El script /usr/local/etc/rc.d/iwlwifi_fix conecta service netif stop wlan0 y service netif start wlan0 a los comandos de suspensión y reanudación
    • Ese script se habilita dándole permisos de ejecución y activándolo con iwlwifi_fix_enable="YES"
    • La corrección ya fue integrada en 15-STABLE, y puede que esta solución alternativa deje de ser necesaria cuando salga FreeBSD 15.2
  • El audio de la laptop se congela

    • Algunas laptops tienen un bug de i915 que provoca un hard lockup
    • El problema viene acompañado de errores como hdac0: Command timeout 2 en dmesg
    • La solución es configurar el loader tunable compat.linuxkpi.i915_disable_power_well=0
  • Congelamientos gráficos y GPU hang

    • En FreeBSD 15.1, el driver DRM predeterminado sube de 6.6 a 6.12
    • La nueva versión parece tener un bug que provoca congelamientos gráficos y mensajes GPU HANG en dmesg con algunos chips Intel
    • La solución alternativa estable es seguir usando la versión anterior, drm-66-kmod
  • Sin límite de inactividad en la consola

    • Hace algunos años, FreeBSD cambió del antiguo driver de consola syscons(4) al driver UEFI-native vt(4)
    • La consola vt no tiene soporte para blanktime, así que en la práctica no hay forma de apagar la pantalla si no hay una sesión X11 o Wayland
    • Como Ly se ejecuta en la consola TTY, la pantalla permanece encendida cuando nadie ha iniciado sesión
    • En una laptop de un solo usuario no es un gran problema, pero en una estación de trabajo multiusuario el prompt de inicio de sesión puede terminar quemándose en el panel LCD
  • Faltan iconos en apps GTK4

    • La app GTK4 en uso es el cliente XMPP Dino IM, y muchos iconos no se renderizaban además de que tampoco seguía la configuración de fuentes de KDE
    • Al desactivar los portals, el problema se resolvió de inmediato
    • La solución alternativa es establecer export GDK_DEBUG=no-portals
  • Cortes durante la reproducción de audio

    • Pulseaudio a veces provoca crackling y skipping al reproducir archivos de audio
    • Subir los valores predeterminados a default-fragments = 8 y default-fragment-size-msec = 5 en daemon.conf resuelve el problema

1 comentarios

 
Comentarios de Lobste.rs
  • Se agradece este artículo, pero parece que hay demasiados pasos manuales para cosas que el instalador debería hacer por sí solo

    • El soporte para laptops en FreeBSD históricamente ha funcionado a medias y estaba más bien al nivel de usuarios entusiastas
      Últimamente se ha invertido mucho esfuerzo en portar desde Linux los drivers de wifi y gráficos, así que mucha más gente puede usarlo en laptops
      Ahora mismo está en un estado parecido al de Linux en los 2000: todavía queda mucho por hacer, pero es trabajo que se está haciendo en la primera línea
    • Va lento, pero definitivamente está mejorando. Linux tampoco era gran cosa hace 10~15 años, y FreeBSD eventualmente llegará a ese punto
  • “Si no haces tú mismo como doce pasos de instalación, ¿de verdad puedes decir que esa máquina es tuya?” /s y a la vez no tan /s
    Estoy escribiendo este comentario en una Thinkpad T14 Gen 1 que compré usada para poder correr OpenBSD sin demasiadas complicaciones
    Todavía no he probado FreeBSD, pero probablemente lo haga, y mi NAS casero está corriendo FreeBSD 15 con un pool ZFS
    De verdad se agradece el trabajo de compatibilidad para laptops de la FreeBSD Foundation
    Por ahora se siente como Linux en los 2000, pero como dice el post original, “hay trabajo por hacer, y es trabajo de primera línea”

  • Desde finales de los 2010 he usado FreeBSD como sistema principal diario en laptops elegidas con muchísimo cuidado
    En ese tiempo de verdad había que meterle mucha mano a la configuración de escritorio de FreeBSD, así que convertí eso en scripts, los metí en un repositorio Git y los fui puliendo con el tiempo
    Por ejemplo, cambiar de StumpWM a i3 anticipando que algún día tendría que pasarme a Sway sobre Wayland
    Ahora que hay un instalador de escritorio en desarrollo, parece que podrá resolver la observación válida de @technomancy, y probablemente también vuelva inútiles varios de mis scripts de configuración
    https://wiki.freebsd.org/desktop-installer

  • Me alegró leer la parte de que “gracias a LinuxKPI y al nuevo driver iwlwifi, la época en que el soporte wifi era malo ya quedó en gran parte atrás. Si tienes una tarjeta Intel común, lo más probable es que simplemente funcione”
    También probé FreeBSD 13/14 en escritorio, pero por las limitaciones de drivers iba demasiado lento y era difícil seguir usándolo
    Qué bueno que esa limitación desaparezca; la próxima vez que me den ganas de probar algo nuevo en escritorio, pienso volver a intentar con FreeBSD

  • Lo curioso es que el driver wifi RTL8812 ya existía en FreeBSD desde hace muchísimo tiempo, según recuerdo más de 10 años, mientras que en Linux apenas entró como por kernel 6.13
    No tengo claro por qué en Linux se quedó tanto tiempo como módulo fuera del árbol. Tal vez fue por temas de licencia