Usando o FreeBSD 15 em um notebook
(sacredheartsc.com)- 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 -OJe executasudo dd if=FreeBSD-15.1-RELEASE-amd64-memstick.img of=/dev/sdX bs=1M conv=sync
- O exemplo de uso baixa a imagem com
- 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
Packagespara 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:
quarterlyelatest - O
quarterlyfixa 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
latestsegue 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 paralatest, 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}/latestekmods_latest_${VERSION_MINOR}, executepkg updateepkg 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
- Em
-
Módulos do kernel
- Adicione
cpuctlecoretempakld_listpara 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
- Adicione
-
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=7reduz a responsividade do áudio
- Em
-
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 comfwget -v - Para usar o novo
iwlwifiem placas antigas, talvez seja necessário impedir o carregamento do driver antigoiwmcomdevmatch_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"ecompat.linuxkpi.iwlwifi_disable_11ac="0" - Ao criar o dispositivo
wlan0emrc.confe definirWPA DHCP powersave, owpa_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 donetworkmgr - O
networkmgrexige privilégios de superusuário, e uma regra no sudoers pode permitir que o grupooperatoro execute sem senha - O driver
iwlwifido FreeBSD 15.1-RELEASE tem problemas conhecidos relacionados a suspend/resume
- O suporte a WiFi melhorou bastante em relação ao passado graças ao LinuxKPI e ao novo driver
-
CPU e gráficos
- O microcódigo mais recente da CPU é instalado com o pacote
cpu-microcodee configurado noloader.confpara ser carregado na inicialização - A economia de energia da CPU usa
performance_cx_lowest=Cmaxeeconomy_cx_lowest=Cmaxpara 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
i915kmsna inicialização após instalardrm-kmod
- O microcódigo mais recente da CPU é instalado com o pacote
-
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 paradrm/*,video*,backlight/*eusb/*, e configuredevfs_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
fusefspara montar sistemas de arquivos como exFAT e NTFS - Para webcams, espera-se suporte com a instalação de
webcamd,v4l-utils,v4l_compate a configuraçãowebcamd_enable=YES - Impressoras exigem CUPS e
cups-filters, e é preciso alterarcups-files.confpara permitir que o grupooperatorconfigure 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
usbconfigepower_saveem/etc/rc.localpara 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çãodev.acpi_ibm.0.handlerevents="0x10 0x11"e regras dodevd - O script
/usr/local/libexec/thinkpad-brightnessaumenta 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
devdpara 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
- Em notebooks, execute
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 interfaceegresspelo nome real da interface de rede e permita entrada TCP apenas na porta SSH - Permita o intervalo UDP
1024:65535para chamadas de voz e vídeo - Defina
pf_enable=YESe inicie o firewall comservice 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
NOvá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,videoewheel operatoré necessário para configurar dispositivos e impressoras, evideoé necessário para acessar dispositivos de GPU- O grupo
wheelé usado para executar comandos com privilégios de root viasudo - Após instalar o
sudo, configure%wheel ALL=(ALL:ALL) ALLno arquivo sudoers
Locale, hora, SSH, certificados
-
Locale
- As variáveis de ambiente do shell de login são definidas em
login.conf(5), adicionandocharset=UTF-8elang=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
LANGeCHARSETem/etc/profile.d/locale.sh
- As variáveis de ambiente do shell de login são definidas em
-
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_Yorkpara/etc/localtime
-
openssh-portable
- O
sshdo sistema base do FreeBSD recebe muitos patches, e a preferência é peloopenssh-portablepuro dos ports - No novo pacote, o arquivo de configuração do
sshdfica em/usr/local/etc/ssh - Em
/etc/rc.conf, desativa-se osshdda base e inicia-se o novo serviço comopenssh_enable=YES - O comando
sshcontinua usando/usr/bin/sshdo sistema base se$PATHnão for alterado - Para dar prioridade à versão dos ports para todos os usuários, ajusta-se a ordem de
pathemlogin.confpara que/usr/localvenha antes, e depois reconstrói-se o banco de dados
- O
-
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-dbpode 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=YESeservice dbus start
- O banco de dados
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/ttyspara executar/usr/local/bin/ly_wrapper - Adicionando uma entrada do Ly em
/etc/gettytabe reiniciando, ou atualizando o init comkill -HUP 1, o prompt de login do Ly passa a aparecer - Em
config.ini, é possível forçar o uso de sessões Wayland comxinitrc=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,pulseaudioewireplumber - 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-seSSH_ASKPASS_REQUIRE=prefereSSH_ASKPASS=/usr/local/bin/ksshaskpassno 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-glevdpauinfo - O usuário precisa estar no grupo
video, pois o acesso à GPU é feito por meio dos dispositivosdrm - 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=yeseaudio-channels=stereoemmpv.conf, é possível reproduzir vídeos HD com baixo uso de CPU
- Definindo
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-suspendbloqueia a tela do usuário conectado no KDE, espera 0,5 segundo e entra no estado de suspensão S3 comacpiconf -s3 - A regra
/etc/devd/kde-suspend.confexecuta esse script no evento ACPI Lid0x00
-
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-logindencerra 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,wireplumberetc. - Isso é aplicado tornando
/usr/local/etc/xdg/plasma-workspace/shutdown/cleanup.shexecutá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=falseeaction/switch_user=falseem/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
wlan0antes do suspend e iniciá-la novamente após o resume - O script
/usr/local/etc/rc.d/iwlwifi_fixconectaservice netif stop wlan0eservice netif start wlan0aos 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 2nodmesg - 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 HANGnodmesgem 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-nativovt(4) - O console
vtnão tem suporte ablanktime, 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
- O FreeBSD mudou há alguns anos do antigo driver de console
-
Í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.confparadefault-fragments = 8edefault-fragment-size-msec = 5resolve 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
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
“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