1 pontos por GN⁺ 11 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • O FreeBSD 15 melhorou a ponto de poder ser usado como ambiente principal de desktop, indo além de um SO para servidores, graças ao pkgbase, às melhorias nos drivers LinuxKPI e ao projeto de suporte a notebooks
  • Depois da tentativa com o FreeBSD 14, foram adicionados KDE Plasma 6, Wayland e suporte a Wi‑Fi Intel, e no ThinkPad X1 Carbon tudo funciona bem, com exceção do Bluetooth
  • A instalação parte do uso da imagem memstick do FreeBSD 15.1, boot em UEFI, ZFS (GPT) e da seleção do tipo de instalação do sistema base Packages
  • A configuração do ambiente desktop exige várias etapas, incluindo drivers, economia de energia, permissões do devfs, compatibilidade com Linux, D-Bus, Ly, KDE, PipeWire e aceleração de vídeo por hardware
  • Alguns ambientes de notebook ainda têm problemas conhecidos, como falhas no Wi‑Fi após retomar da suspensão, travamentos nos gráficos Intel e processos remanescentes após sair do KDE, cada um exigindo sua própria solução alternativa

Visão geral

  • O FreeBSD 15 trouxe grandes melhorias para o ambiente desktop em notebooks com o pkgbase, melhorias nos drivers LinuxKPI e o lançamento do Laptop Support and Usability Project
  • Em comparação com quando o desktop foi testado no FreeBSD 14, mudaram a portabilidade do KDE Plasma 6, o funcionamento do Wayland e o suporte completo ao Wi‑Fi Intel
  • No ThinkPad X1 Carbon, a autonomia de bateria fica em cerca de 6 a 7 horas e, tirando o Bluetooth, que não foi testado, os recursos do dispositivo funcionam bem
  • A nova Laptop Compatibility Matrix permite verificar o que funciona no hardware que cada pessoa possui
  • O guia parte do pressuposto de uso de gráficos Intel e chipset sem fio Intel, deixando outras configurações de hardware fora do escopo da experiência direta

Instalação

  • Baixe a imagem memstick do FreeBSD 15.1 e grave-a em um pendrive com dd
    • O exemplo de uso baixa a imagem com curl -OJ e executa sudo dd if=FreeBSD-15.1-RELEASE-amd64-memstick.img of=/dev/sdX bs=1M conv=sync
  • O assistente de instalação é simples; configure o sistema para boot em UEFI e escolha ZFS (GPT) no layout de disco
  • Na etapa que pergunta o tipo de instalação do sistema base, selecione Packages para usar o novo pkgbase
  • Se você ativar o SSH durante a instalação, poderá copiar e colar comandos por uma sessão SSH em vez de digitar diretamente no console virtual
  • Após reiniciar, faça login na conta root com a senha definida durante a instalação

Uso dos pacotes mais recentes

  • A árvore de ports do FreeBSD tem dois branches: quarterly e latest
  • O quarterly fixa snapshots da árvore de ports quatro vezes por ano e, entre esses períodos, os pacotes de terceiros recebem apenas correções de segurança importantes
  • O latest segue um modelo de rolling release, recebendo atualizações dos principais pacotes assim que ficam disponíveis
  • A configuração padrão usa o repositório quarterly; para mudar para latest, crie um arquivo de override em /usr/local/etc/pkg/repos
  • Depois de definir a URL do repositório como pkg+https://pkg.FreeBSD.org/${ABI}/latest e kmods_latest_${VERSION_MINOR}, execute pkg update e pkg upgrade

Dispositivos de hardware, drivers e ajustes

  • Ajustes do bootloader

    • Em /boot/loader.conf, é possível configurar o tempo de espera do bootloader, desativar o destructive dtrace e aumentar os limites de memória compartilhada e de processos
    • Em sistemas com suporte a Intel Speed Shift, machdep.hwpstate_pkg_ctrl="0" permite que cada núcleo defina seu próprio estado de energia
    • É possível configurar economia de energia PCI, soreceive() mais rápido, aumento do tamanho da fila de rede e maior timeout de transação do ZFS para adequar o sistema ao uso em desktop e notebook
  • Módulos do kernel

    • Adicione cpuctl e coretemp a kld_list para habilitar a consulta de informações e temperatura da CPU
    • O algoritmo de controle de congestionamento H-TCP busca melhor desempenho em redes rápidas e de longa distância, como a internet, e pode ser usado com o módulo cc_htcp
    • Em ThinkPads, o módulo acpi_ibm é necessário para o funcionamento dos botões
  • Ajustes de sysctl

    • Em /etc/sysctl.conf, é possível aplicar configurações de segurança como restrição de alteração de keymap, desativação de core dump, opções relacionadas a ASLR, bloqueio de ICMP redirect e desativação de IP redirect
    • Alguns guias de segurança recomendam W^X, verificação de hardlinks e restrição de visualização de processos de outros usuários, mas essas opções foram comentadas por serem consideradas mais problemáticas do que úteis
    • As configurações de desempenho de rede aumentam buffers e filas TCP com base na premissa de que os padrões são otimizados para latência de LAN, ajustando melhor conexões com RTT maior
    • As otimizações para desktop incluem impedir swap de memória compartilhada, aumentar o limite de preempção do escalonador e permitir montagem por usuários comuns
    • Para economia de energia em notebook, hw.snd.latency=7 reduz a responsividade do áudio
  • WiFi

    • O suporte a WiFi melhorou bastante em relação ao passado graças ao LinuxKPI e ao novo driver iwlwifi
    • A compatibilidade da placa sem fio pode ser verificada na lista de chipsets suportados pelo iwlwifi, e o firmware necessário pode ser instalado com fwget -v
    • Para usar o novo iwlwifi em placas antigas, talvez seja necessário impedir o carregamento do driver antigo iwm com devmatch_blocklist="if_iwm"
    • 802.11n e 802.11ac vêm desativados por padrão, então são necessárias as opções compat.linuxkpi.iwlwifi_11n_disable="0" e compat.linuxkpi.iwlwifi_disable_11ac="0"
    • Ao criar o dispositivo wlan0 em rc.conf e definir WPA DHCP powersave, o wpa_supplicant(8) passa a gerenciar as redes WiFi
    • O gerenciamento da rede pode ser feito editando diretamente wpa_supplicant.conf(5) ou usando a interface gráfica do networkmgr
    • O networkmgr exige privilégios de superusuário, e uma regra no sudoers pode permitir que o grupo operator o execute sem senha
    • O driver iwlwifi do FreeBSD 15.1-RELEASE tem problemas conhecidos relacionados a suspend/resume
  • CPU e gráficos

    • O microcódigo mais recente da CPU é instalado com o pacote cpu-microcode e configurado no loader.conf para ser carregado na inicialização
    • A economia de energia da CPU usa performance_cx_lowest=Cmax e economy_cx_lowest=Cmax para ativar C-states mais profundos, reduzindo bateria e calor
    • Em processadores Intel modernos, não é mais necessário executar powerd(8)
    • O driver gráfico Intel é configurado para carregar i915kms na inicialização após instalar drm-kmod
  • Permissões de dispositivos e compatibilidade

    • Em sistemas desktop, adicione regras devfs para que usuários comuns possam controlar dispositivos de GPU, vídeo, backlight e USB
    • Em /etc/devfs.rules, defina permissões e grupos para drm/*, video*, backlight/* e usb/*, e configure devfs_system_ruleset=localrules
    • A execução de binários Linux é habilitada com o Linuxulator usando linux_enable=YES, e, se necessário, monte devfs, tmpfs, fdescfs, linprocfs e linsysfs em /compat/linux
    • Carregue o módulo de kernel fusefs para montar sistemas de arquivos como exFAT e NTFS
    • Para webcams, espera-se suporte com a instalação de webcamd, v4l-utils, v4l_compat e a configuração webcamd_enable=YES
    • Impressoras exigem CUPS e cups-filters, e é preciso alterar cups-files.conf para permitir que o grupo operator configure impressoras
    • A interface gráfica de configuração do CUPS pode ser acessada no navegador em localhost:631
  • Energia em notebook e backlight em ThinkPad

    • Em notebooks, execute usbconfig e power_save em /etc/rc.local para colocar dispositivos USB inativos em modo de economia de energia
    • Para fazer as teclas de backlight do ThinkPad funcionarem, são necessários o módulo acpi_ibm, a configuração dev.acpi_ibm.0.handlerevents="0x10 0x11" e regras do devd
    • O script /usr/local/libexec/thinkpad-brightness aumenta ou reduz o brilho em passos de 2, 5 ou 10, conforme o brilho atual
    • Dê permissão de execução ao script e reinicie o devd para aplicar o funcionamento
    • Depois de concluir as configurações de hardware e drivers, reinicie para verificar se as mudanças não quebraram o sistema

Firewall

  • A proposta é executar um firewall em todos os sistemas, e o exemplo padrão bloqueia todas as conexões de entrada, exceto SSH
  • Em /etc/pf.conf, troque a interface egress pelo nome real da interface de rede e permita entrada TCP apenas na porta SSH
  • Permita o intervalo UDP 1024:65535 para chamadas de voz e vídeo
  • Defina pf_enable=YES e inicie o firewall com service pf start

Desativação de scripts periodic

  • O FreeBSD inclui por padrão muitos scripts periodic(8) que vasculham o disco rígido, acessam a internet e enviam e-mails
  • A lista completa pode ser consultada em periodic.conf(5)
  • Para um usuário comum de desktop, apenas algumas dessas tarefas são úteis, e a maioria pode ser desativada com segurança
  • O exemplo de configuração muda em massa para NO várias tarefas diárias, semanais, mensais e relacionadas à segurança, incluindo backup, relatório de status, fila de e-mails e saídas de verificação de segurança

Conta de usuário

  • Crie uma conta de usuário local e adicione-a aos grupos operator, video e wheel
  • operator é necessário para configurar dispositivos e impressoras, e video é necessário para acessar dispositivos de GPU
  • O grupo wheel é usado para executar comandos com privilégios de root via sudo
  • Após instalar o sudo, configure %wheel ALL=(ALL:ALL) ALL no arquivo sudoers

Locale, hora, SSH, certificados

  • Locale

    • As variáveis de ambiente do shell de login são definidas em login.conf(5), adicionando charset=UTF-8 e lang=en_US.UTF-8
    • Para aplicar a mudança, reconstrói-se o banco de dados de login com cap_mkdb /etc/login.conf
    • Para shells sem login, define-se LANG e CHARSET em /etc/profile.d/locale.sh
  • NTP e fuso horário

    • Para manter o relógio do sistema atualizado, é necessário o ntpd(8)
    • Em ntp.conf, ficam os servidores NTP do pool do FreeBSD e as configurações de restrição de acesso
    • Se o fuso horário não foi definido durante a instalação, cria-se um link simbólico de /usr/share/zoneinfo/America/New_York para /etc/localtime
  • openssh-portable

    • O ssh do sistema base do FreeBSD recebe muitos patches, e a preferência é pelo openssh-portable puro dos ports
    • No novo pacote, o arquivo de configuração do sshd fica em /usr/local/etc/ssh
    • Em /etc/rc.conf, desativa-se o sshd da base e inicia-se o novo serviço com openssh_enable=YES
    • O comando ssh continua usando /usr/bin/ssh do sistema base se $PATH não for alterado
    • Para dar prioridade à versão dos ports para todos os usuários, ajusta-se a ordem de path em login.conf para que /usr/local venha antes, e depois reconstrói-se o banco de dados
  • Terminal, certificados, D-Bus

    • O banco de dados termcap(5) do FreeBSD é mais simples do que o normalmente encontrado no Linux, e cores brilhantes podem não ser renderizadas em terminais da família XTerm
    • Instalar terminfo-db pode corrigir esse problema
    • O FreeBSD confia por padrão apenas em parte das autoridades certificadoras padrão, então instala-se ca_root_nss, que traz o bundle completo de CAs da Mozilla
    • O KDE e vários recursos de desktop atuais exigem D-Bus, que pode ser ativado com dbus_enable=YES e service dbus start

Gerenciador de display Ly

  • Normalmente, uma sessão de desktop é iniciada com um gerenciador de display gráfico como o SDDM, mas, no momento da escrita, ele não consegue iniciar sessões Wayland de forma estável no FreeBSD
  • O SDDM quase funciona, mas há um bug em que várias combinações de teclas encerram a sessão
  • A abordagem atual é iniciar a sessão Wayland com o gerenciador de display Ly baseado em console
  • O Ly não roda como daemon; em vez disso, configura-se um console virtual em /etc/ttys para executar /usr/local/bin/ly_wrapper
  • Adicionando uma entrada do Ly em /etc/gettytab e reiniciando, ou atualizando o init com kill -HUP 1, o prompt de login do Ly passa a aparecer
  • Em config.ini, é possível forçar o uso de sessões Wayland com xinitrc=null, xsessions=null, shell=false, waylandsessions=/usr/local/share/wayland-sessions

Fontes, KDE, aplicativos de desktop

  • Para que os sites sejam renderizados corretamente, instalam-se fontes padrão como Cantarell, Droid, Inconsolata, Noto, Noto Emoji, Roboto, Ubuntu e webfonts
  • O KDE e seus componentes de desktop são instalados com pacotes como kde, kdegraphics, kdemultimedia, kdeutils, phonon-mpv, pipewire, pulseaudio e wireplumber
  • Exemplos de aplicativos de desktop incluem Chromium, Firefox, LibreOffice, Thunderbird, Signal Desktop, Wine, Emacs Wayland, Git, mpv e tmux
  • Alguns recursos do desktop dependem do PipeWire; a prévia na barra de tarefas, por exemplo, aparentemente não funciona se o PipeWire não estiver em execução
  • O PipeWire pode ser iniciado automaticamente com o arquivo de autostart /usr/local/etc/xdg/autostart/pipewire.desktop
  • Para armazenar a senha da chave SSH no kwallet, exporta-se SSH_ASKPASS_REQUIRE=prefer e SSH_ASKPASS=/usr/local/bin/ksshaskpass no ambiente do KDE

Aceleração de vídeo por hardware

  • Com a instalação dos pacotes apropriados, é possível usar aceleração de vídeo por hardware na maioria das GPUs Intel
  • A aceleração de vídeo por hardware proporciona reprodução de vídeo mais suave e melhor duração de bateria
  • Os pacotes necessários são libva-intel-media-driver, libva-utils, libvdpau-va-gl e vdpauinfo
  • O usuário precisa estar no grupo video, pois o acesso à GPU é feito por meio dos dispositivos drm
  • Alguns aplicativos podem exigir configuração adicional para aproveitar o offload por hardware
  • Chromium Browser

    • No FreeBSD, a decodificação de vídeo por hardware no Chromium exigia anteriormente muitas flags de linha de comando
    • No momento da escrita, a decodificação de vídeo por hardware no Chromium funciona sem flags adicionais
  • MPV

    • Definindo hwdec=vaapi-copy, vo=gpu-next, vd-lavc-dr=yes e audio-channels=stereo em mpv.conf, é possível reproduzir vídeos HD com baixo uso de CPU

Problemas conhecidos e soluções alternativas

  • Ao abrir a tampa, o notebook entra em suspensão novamente imediatamente

    • Quando o KDE está em execução, o ambiente de desktop deve detectar o evento ACPI da tampa e gerenciar suspend e resume
    • Em ThinkPads, ocorre um bug em que o notebook volta a entrar em suspensão assim que a tampa é aberta
    • A solução alternativa é desativar a ação do interruptor da tampa nas configurações de energia do KDE e configurar o suspend nativo no fechamento da tampa com devd
    • O script /usr/local/libexec/kde-suspend bloqueia a tela do usuário conectado no KDE, espera 0,5 segundo e entra no estado de suspensão S3 com acpiconf -s3
    • A regra /etc/devd/kde-suspend.conf executa esse script no evento ACPI Lid 0x00
  • Processos continuam após logout

    • No FreeBSD, alguns processos podem continuar em execução indefinidamente após o logout da sessão KDE
    • O Chromium às vezes entra em um estado em que consome 100% de um núcleo da CPU
    • Em distribuições Linux baseadas em systemd, o systemd-logind encerra processos relacionados à sessão do usuário, mas esse mesmo pressuposto não se aplica ao ambiente KDE no FreeBSD
    • Usando o recurso de scripts de limpeza no momento do logout do KDE, são encerrados baloo_file, chrome, dirmngr, pipewire, signal-desktop, wireplumber etc.
    • Isso é aplicado tornando /usr/local/etc/xdg/plasma-workspace/shutdown/cleanup.sh executável
  • A troca de usuário não funciona

    • A troca de usuários no desktop do FreeBSD está quebrada por causa de um antigo bug do ConsoleKit2
    • Para impedir que usuários tentem usar isso, define-se action/start_new_session=false e action/switch_user=false em /usr/local/etc/xdg/kdeglobals
  • O Wi‑Fi quebra após voltar da suspensão

    • O FreeBSD 15.1-RELEASE tem um bug no iwlwifi em que o Wi‑Fi quebra após o retorno da suspensão
    • A solução alternativa é parar a interface wlan0 antes do suspend e iniciá-la novamente após o resume
    • O script /usr/local/etc/rc.d/iwlwifi_fix conecta service netif stop wlan0 e service netif start wlan0 aos comandos de suspend/resume
    • Esse script é ativado concedendo permissão de execução e definindo iwlwifi_fix_enable="YES"
    • A correção já foi commitada no 15-STABLE, e essa solução alternativa pode deixar de ser necessária quando o FreeBSD 15.2 sair
  • Áudio do notebook trava

    • Alguns notebooks têm um bug no i915 que causa hard lockup
    • O problema vem acompanhado de erros como hdac0: Command timeout 2 no dmesg
    • A solução é definir o loader tunable compat.linuxkpi.i915_disable_power_well=0
  • Travamentos gráficos e GPU hang

    • No FreeBSD 15.1, o driver DRM padrão foi atualizado da 6.6 para a 6.12
    • A nova versão aparentemente tem um bug que causa travamentos gráficos e mensagens GPU HANG no dmesg em alguns chips Intel
    • A solução alternativa estável é continuar usando a versão anterior, drm-66-kmod
  • Sem limite de tempo ocioso no console

    • O FreeBSD mudou há alguns anos do antigo driver de console syscons(4) para o driver UEFI-nativo vt(4)
    • O console vt não tem suporte a blanktime, então, sem uma sessão X11 ou Wayland, praticamente não há como desligar a tela
    • Como o Ly roda no console TTY, a tela permanece ligada quando ninguém está logado
    • Em um notebook de usuário único isso não é um grande problema, mas em estações de trabalho multiusuário o prompt de login pode causar burn-in no painel LCD
  • Ícones ausentes em apps GTK4

    • O app GTK4 em uso é o cliente XMPP Dino IM, e muitos ícones não eram renderizados, além de ele não seguir as configurações de fonte do KDE
    • Ao desativar os portals, o problema foi resolvido imediatamente
    • A solução alternativa é definir export GDK_DEBUG=no-portals
  • Áudio falhando durante a reprodução

    • O PulseAudio às vezes causa estalos e falhas durante a reprodução de arquivos de áudio
    • Aumentar os valores padrão em daemon.conf para default-fragments = 8 e default-fragment-size-msec = 5 resolve o problema

1 comentários

 
Comentários no Lobste.rs
  • Agradeço pelo texto, mas parece haver passos manuais demais para coisas que o instalador deveria fazer

    • O suporte a notebooks no FreeBSD historicamente sempre funcionou só pela metade e era algo mais para entusiastas
      Recentemente houve muito esforço para portar drivers de Wi‑Fi e gráficos do Linux, então bem mais gente passou a conseguir usar em notebook
      Dá para dizer que está num estágio parecido com o Linux dos anos 2000; ainda há muito a fazer, mas é trabalho sendo feito na linha de frente
    • Está melhorando devagar, mas com certeza. O Linux também não era lá essas coisas 10–15 anos atrás, e o FreeBSD vai chegar lá eventualmente
  • “Se eu não tiver que fazer umas doze etapas de instalação manualmente, dá mesmo para dizer que a máquina é minha?” /s e ao mesmo tempo não tão /s assim
    Estou escrevendo este comentário agora de um ThinkPad T14 Gen 1 usado que comprei para rodar OpenBSD sem muita gambiarra
    Ainda não tentei com FreeBSD, mas provavelmente vou tentar, e meu NAS caseiro está rodando FreeBSD 15 com um pool ZFS
    O trabalho da FreeBSD Foundation com compatibilidade de notebooks é algo pelo qual sou realmente grato
    Por enquanto ainda tem uma vibe de Linux dos anos 2000, mas, como diz o post original, “há trabalho a fazer, e é trabalho de linha de frente”

  • Desde o fim dos anos 2010 venho usando o FreeBSD como sistema principal em notebooks escolhidos com muito cuidado
    Na época havia realmente muita coisa para ajustar numa configuração de desktop FreeBSD, então transformei isso em scripts, coloquei num repositório Git e fui mantendo ao longo do tempo
    Por exemplo, trocar do StumpWM para o i3 antecipando uma eventual necessidade de migrar para o Sway no Wayland
    Agora parece que há um instalador de desktop em andamento, o que pode resolver a crítica válida do @technomancy e talvez tornar boa parte dos meus scripts de configuração desnecessária
    https://wiki.freebsd.org/desktop-installer

  • Fiquei feliz em ler: “graças ao LinuxKPI e ao novo driver iwlwifi, a era do suporte ruim a Wi‑Fi ficou em grande parte para trás. Se você tiver uma placa Intel comum, há boas chances de simplesmente funcionar”
    Também tentei usar FreeBSD 13/14 no desktop, mas era difícil continuar porque a velocidade ficava lenta demais por causa das limitações de driver
    É bom saber que isso está desaparecendo, e da próxima vez que eu quiser tentar algo novo no desktop provavelmente vou dar outra chance ao FreeBSD

  • O curioso é que o driver Wi‑Fi RTL8812 já existia no FreeBSD há muito tempo, pelo que lembro mais de 10 anos, enquanto no Linux ele só entrou por volta do kernel 6.13
    Não sei ao certo por que no Linux ele ficou tanto tempo como módulo fora da árvore. Pode ter sido por causa de licença