“Tirando Leite de Pedra” de computador ruim – Parte 2

Hoje mostrarei como construir seu próprio sistema-console: mais otimizado que o SteamOS, que consome pouca RAM e roda em computador ruim!


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


1. Introdução

Conforme abordado recentemente aqui no site, na Parte 1, eu fiz testes num netbook para reaproveita-lo, já que mesmo uma distro simples como o Xubuntu ou Lubuntu ficam “pesadas” para ele por ser um computador ruim.

Realizei mais testes, incluindo no meu Samsung Odyssey e no Lenovo Thinkpad.
Os testes foram muito semelhantes aos realizados no Netbook da publicação anterior, executei mais alguns games e comparei os resultados entre eles portanto serei mais conciso aqui. – A quem quiser saber detalhes, eu vou deixar os resultados para o final da publicação.

  1. Realizei testes no meu Thinkpad X240, que possui apenas uma Intel HD Graphics 4400; o desempenho geral também deu um belo de um salto de quase 10 FPS para alguns games como GTA San Andreas, melhorando inclusive a média de FPS da execução total do jogo! Enquanto que em outros games, como o The Sims 4, a média se manteve.
  2. Já no Samsung Odyssey NP800G5M-XG1BR, com uma NVIDIA GTX 1050, descobri coisas nefastas que justificaram os motivos do Linus Torvalds odiar a NVIDIA!

2. Torvalds e a NVIDIA

Você deve estar me perguntando a essa altura:

Mas como o suporte á NVIDIA é ruim, se os drivers dela funcionam até melhor, se proporcionalmente comparado ao que a AMD faz com os Ryzen? NVIDIA já tem suporte a Vulkan, que demorou até mais pra chegar em AMD. E dependendo da placa, o driver do kernel Linux é insuficiente, devendo o usuário a recorrer a outros locais para ter suporte, como os drivers Oibaf e Padoka.

Muito bem, e muita calma.
Quando Torvalds mandou o f#ck-you pra NVIDIA, ele se referiu na parte de código, que é a área de atuação direta dele como mantenedor direto do Kernel Linux.

No que tange código, o fato de ser proprietário não ajuda em nada na sua implementação no kernel. Bom, isso não é por si um problema, muitos drivers proprietários estão no kernel – desde módulos WiFi até blobs de CPU.

Mas afinal, qual o problema com a NVIDIA?

O código da NVIDIA é, nas palavras dele, preguiçosamente mal escrito, cheio de falhas e, de tal maneira, que atrapalha sua implementação no kernel; além disso, quebra a regra número 1 do desenvolvedor Linux: A parte do kernel JAMAIS pode afetar a userspace, e os drivers da NVIDIA afetam. – Ou pelo menos, deixa-se afetar.

  • Aos que estão sem entender bem, a UserSpace é toda a parte que tange o login, o desktop, como o usuário interage com a máquina – seja pelo terminal, seja pelo desktop environment de sua escolha. – O kernel, por sua vez, age por baixo dos panos, fazendo o hardware funcionar e repassando seus comandos ao usuário de forma passiva. Dessa forma, o que o usuário faz não pode interferir no kernel e, o kernel, não pode afetar o que o usuário faz.

Um exemplo de problema que isso causa, é o que eu vivi quando fiz os testes na GPU NVIDIA, que relatarei a seguir.

3) NVIDIA

A NVIDIA possui um driver muito eficiente no hardware, porém a UserSpace não tem um bom controle dele. Isso acarreta em que o usuário não pode deixar de ter determinados recursos de sistema instalados, ou o driver não vai funcionar.

O que aconteceu: Meus testes se basearam na configuração de uma interface de usuário totalmente livre de Compositor de Tela e também sem Gerenciador de Janelas. Apenas o XOrg e o programa/game que será executado!

Na Intel e na AMD, ambos possuem suporte a V-Sync – ou seja, remover o Screen Tearing – para executar qualquer coisa na tela, desde o terminal, games e aplicações.

A NVIDIA, por outro lado, NÃO possui um recurso próprio para implementar V-Sync!

Mas e ai, o que isso significa?

Que se você tiver apenas o XOrg, você não conseguirá rodar nada sem que ocorra o screen tearing. É IMPOSSÍVEL solucionar esse problema sem adotar um compositor de tela. E mais: Nenhum compositor nativo do OpenBox, que eu escolhi nos testes pelo melhor custo-benefício em recursos e configuração, de fato resolve o problema.

No sistema minimalista, apenas a interface MATE com compositor Compton e configuração da NVIDIA para Alto Desempenho – definido manualmente no nvidia-settings – conseguiram solucionar a questão.

E como o objetivo é ter um sistema absolutamente simples e funcional, em hardware NVIDIA isto é inviável, impossível, improvável, pra não dizer tortuoso e problemático.

Este é esse o motivo pelo qual eu não concluí os testes e não publicarei sobre a NVIDIA no meu Samsung Odyssey com GTX 1050. Parafraseando Torvalds, e com razão, f#ck-you nvidia! Não compensa levar o projeto adiante se não posso me livrar do problema do ScreenTearing, os jogos ficam horríveis.

Portanto meu amigo, minha amiga, que pretendia usar NVIDIA nesse experimento, saiba que, pode até funcionar, mas você terá mais problemas e o maior deles é não conseguir se livrar de um intenso Screen Tearing nos games e aplicações.

Recado dado, vamos de fato criar o sistema minimalista com todas as dependências saciadas para que o sistema fique básico mas também útil/completo.

4) Exemplo

Melhor do que apenas falar, é mostrar. Aqui um vídeo de como ficou o sistema, consumo de memória e outros detalhes do computador ruim.

Videos gravados mostrando o Netbook que tem apenas um AMD DualCore APU A4-1200 @ 1.0 Ghz e 2 Gb de RAM!

Trilha sonora embalada pelo Rei do Pop! O vídeo cortou o finalzinho, tudo isso com apenas 156 MB de RAM.
Apenas o terminal e uma interface de terminal (TUI) customizada.

Instalei o OpenBox no computador ruim, para algumas poucas aplicações que exigem uma interface funcional para abrir e ter um melhor controle de mais de um Monitor; só o XOrg não é capaz de gerir multiplos monitores facilmente. E ainda assim, o OpenBox está bruto, apenas com o papel de parede definido. Com o OpenBox aberto, o consumo de RAM não passa de 215 Mb.

A titulo de comparação, o Ubuntu MATE 21.04 ao iniciar no Netbook consome 650 Mb totais (sendo 350 de uso real e 300 em Buff/Cache), restando apenas 750 MB livres para uso (Lembrando que só 1.4 Gb de RAM podem ser utilizados). Mesmo um sistema bem leve como esse, ainda há um consumo alto de CPU também. a abertura de qualquer aplicação mais pesada é algo sofrido pela falta de recursos: assim que a memória enche por completo ele trava.

Observe a velocidade com que ele abriu o Chrome, considerando o quão fraco o netbook é.

4.1) Interface

Tudo 100% terminal ficou complicado demais. Cada aplicação que ia ser aberta requeria um “xinit programa $* — :100 vt$XDG_VTNR”. Usar apenas o terminal pode ser sim produtivo porém quando você lida com XORG, depender demais do terminal pode ser contraproducente. Por isso pensei em algo pra executar, uma interface, que seja absolutamente leve. Me veio á mente o TUI: Terminal User Interface, ou, Interface de Usuário via Terminal!

Encontrei no GitHub ESTE código de uma interface simples porém eficiente pra usar em terminal. Eu criei 17 menus e submenus, no total, no meu sistema; o consumo de RAM ficou abaixo de 500 Kb para abrir essa interface.

Você pode usa-lo pra criar uma interface customizada que auto-executa ao logar num sistema sem interface; tanto quanto pode usa-lo como interface de atalhos rápidos para o terminal no seu sistema Kubuntu ou mesmo Manjaro, por exemplo.

Dentro da interface, configure os comandos como:

$ xinit APLICAÇÃO/SCRIPT/LANÇADOR/ATALHO $* -- :100 vt$XDG_VTNR

Assim ele ja vai lançar imediatamente a aplicação. Lembre-se que há diferenças se o terminal abriu no TTY ou dentro do OpenBox. Se for dentro do OpenBox, lance a aplicação diretamente:

$ APLICAÇÃO/SCRIPT/LANÇADOR/ATALHO

A etapa “xinit” é apenas para abrir uma aplicação no TTY, sem interface.

A ideia é que esta foi a interface de usuário em terminal mais simples de aplicar e configurar que encontrei.

Já o menu suspenso dentro do OpenBox foi feito com o Tilda!
Para instalá-lo: sudo apt install tilda
E adicione o tilda á lista de auto execuções do seu sistema, para que ele inicie quando o sistema ligar.

Todo comando de terminal, desde ver se um processo está aberto, até status da bateria do notebook, criei um pequeno shell script e apontei direto para esta interface de terminal. Assim, fica tudo prático e á mão! Ela é feia pra caramba mas está funcional, útil.

Não vou disponibilizar a interface que criei, pelo menos, não por enquanto, porque ela ainda contém muito código pessoal customizado, para minhas necessidades. Se eu for tirar tudo que há nele, o que restará é muito semelhante ao que está no GitHub! Portanto basta baixarem o código do GitHub, analisarem os comentários, o código todo está bem comentado, e você poderá construir sua interface com suas aplicações da maneira que achar conveniente. Mas para não dizer que sou mal, aqui estão os códigos que eu usei! Usem-nos como norte para desenvolver suas próprias interfaces de terminal.

Comandos Passivos:

ip=`hostname -I | awk ‘{print $1}’` # Coleta do IP atual!
sensor1=`sensors | sed -rn ‘s/.*Core 0:\s+([^ ]+).*/\1/p’` # Sensor Temperatura CPU
sensor2=`nvidia-smi | awk {‘print $3’} | sed -n 10p` # Sensor Temperatura GPU NVIDIA
xorg=`ls /tmp/.X11-unix | wc -l` # Contagem de quantos serviços XOrg estao em execução
bat0=`cat /sys/class/power_supply/BAT0/capacity` # Nivel da Bateria do notebook, observe se é 0 ou 1 no seu.
uptime=`uptime | awk {‘print $3’}` # Tempo de atividade
datetime=`date +”%H:%M %d/%m”` # Data e Hora
governor=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor` # Coleta do atual governador de CPU em uso
script3=`cat /sys/class/net/enp4s0/address` # Coleta o Endereço MAC da placa 
script1=`cat /sys/class/power_supply/sony_controller_battery_*/capacity` # Exibe o status da bateria de um controle do PS4 conectado ao sistema.

Comandos Ativos:

# echo powersave | sudo -S tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor # Define governador de CPU
$ sudo fstrim -va # Executa o TRIM em todos os discos sólidos e exibe os resultados.
$ curl wttr.in # Previsao do tempo no terminal
$ sudo macchanger -a enp4s0 # Com o pacote macchanger troca o MAC da placa de rede definida
$ pacmd set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo # Troca o canal de audio, se o som sai no fone, HDMI, etc
$ sudo brightnessctl set 1 # Com pacote brightnessctl voce define o brilho da tela
$ alsamixer # Ajuste do volume de audio pelo terminal
$ nmtui # Caso use NetworkManager em vez do systemd-networkd, poderá ajustar o WiFi aqui
$ sudo arp-scan -l # Varre os IPs e maquinas conectadas na LAN via wifi ou cabo, identificando maquina e MAC!
$ java -jar /minecraft.jar # Lançador do Minecraft. Certifique de ter o JAVA na maquina!
$ echo 0 > /sys/class/leds/NOME-AQUI!/brightness # Comando base para controlar luz de teclado retroiluminado. Verifique qual a pasta referida ao seu hardware! Pode ser samsung, etc.
$ xrandr –output HDMI-1-1 –primary –right-of eDP-1-1 # Esse comando ajusta a saida de video. Verifique quais as opções com “xrandr –output TAB 2X” e pode definir a posição do display aqui. Consulte o manual do XRANDR para mais opções e ajustes.

Comandos para o Dualshock 4 utilize este script!

Comando válido apenas para TTY:

$ setfont /usr/share/consolefonts/Lat38-VGA16.psf.gz # Esse comando define o tamanho da fonte, no caso pequena. Assim, o menu aparecerá bem grande, conforme visto nos vídeos acima! Ja este é para a fonte ficar grande: Lat38-VGA32x16.psf.gz. Veja em /usr/share/consolefonts/ quais fontes mais te apetecem, existem várias opções.
Caso queiram configurar algo globalmente, usem: $ sudo dpkg-reconfigure console-setup
Cuidado que uma configuração ruim pode quebrar a formatação das fontes e acentuação para Pt-Br!

5) Seu próprio VideoGame!

Vamos ao passo a passo para ter algo!

  1. Tenha Hardware INTEL ou AMD de preferencia que seja um computador ruim.
    Se você usar placa de vídeo NVIDIA, saiba que não garanto a plena e completa funcionalidade da mesma neste projeto.
  2. Instale o Ubuntu Minimal 20.04 LTS – Pegue a versão Minimal mais recente, com base no último LTS.
    Ou o sistema Linux de sua preferência, desde que seja 100% sem interface!
    O Xorg costuma bugar e os testes não funcionam adequadamente se você tentar fazer isso com uma distro com interface instalada rodando no TTY7.
  3. Instale estes pacotes, selecionei eles a dedo por serem leves (em consumo de CPU/RAM) e eficientes.
    Aqueles que você julgar necessários, troque por outros. Por exemplo, prefiro o k3b ao Brasero. Da mesma forma que prefiro o kpat ao gnome-aisleriot. Outros, como o CAJA eu mantive pelo hábito de mexer com Ubuntu MATE a muitos anos, vocês podem usar o Thunar ou outro pacote de sua preferência aqui.

sudo apt install ubuntu-restricted-extras build-essential gvfs-backends libelf-dev haveged arp-scan cifs-utils netdiscover gpm w3m w3m-img net-tools k3b vlc cheese libreoffice caja hardinfo hwloc filezilla gimp thunderbird qbittorrent remmina gnome-terminal pluma idle3 openbox xorg xterm xdotool inxi htop engrampa kpat gnome-mahjongg gnome-mines gnome-sudoku mate-terminal –no-install-recommends

Estes pacotes acima você deve usar o parâmetro –no-install-recommends, para evitar que instalem o gnome-shell completo e configurem automaticamente um desktop environment em seu sistema deixando ainda mais ruim o seu computador ruim!

Estes não precisam:

sudo apt install gnupg cmatrix macchanger software-properties-common mate-calc audacity kodi steam feh alsa-base pulseaudio network-manager curl obconf p7zip* file-roller xserver-xorg-input-libinput xserver-xorg-input-evdev xserver-xorg-input-mouse xserver-xorg-input-synaptics mesa-va-drivers mesa-vdpau-drivers printer-driver-all hplip cups samba samba-common apache2 brightnessctl sshpass drawing

Remova este:

sudo apt purge unattended-upgrades -y

Instale este conforme sua placa de vídeo:

sudo apt install xserver-xorg-video-X –no-install-recommends

Onde X é intel, amd, radeon ou nvidia; cuidado que ele pode querer puxar os demais pacotes, use o parâmetro –no-install-recommends!

Para seu sistema ficar com o WINE mais novo, use estes comandos:

# WINE Up-to-DATE
$ echo “deb https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_20.04 ./” | sudo tee /etc/apt/sources.list.d/wine-obs.list
$ wget -O- -q https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_20.04/Release.key | sudo apt-key add –
$ sudo apt update
$ sudo apt install winehq-staging

E por fim, configure a interface com este código daqui!

Assim já estará pronto com tudo que há de mais importante e essencial num sistema operacional, mantendo minimo. Algumas explicações pertinentes:

  • ubuntu-restricted-extras = Adiciona pacotes basicos como unRAR e MS-Core-Fonts
  • build-essential = muito usado em compilações
  • gvfs-backends = adiciona as opções “extrair aqui” ao Caja, entre outros!
  • libelf-dev = muito usado em compilações e máquinas virtuais
  • haveged = pool de entropia de melhor qualidade
  • gnupg = adiciona a importação de chaves de repositórios
  • software-properties-common = adiciona o recurso add-apt-repository ao sistema
  • *xorg-input* = Pacote que configura touchpad/mouse

6) Análise Opinativa

Para aqueles que estiverem dispostos, não há dúvidas que valha a pena o esforço para fazer a execução dessas aplicações num sistema sem interface, com o nível de desempenho que se ganha no final em um computador ruim. E com uma TUI configurada, não existem problemas maiores sobre o controle do que acontece na tela.

Um porém grande, é que se você instalar algo novo, ou diferente, vai ter que “programar” o menu pra ele adicionar o programa! É a vantagem de não ter qualquer daemon paralelo vigiando a adição de novos atalhos para os menus, mas quando for adicionar algo, é contigo e seu conhecimento de programação.

O que acharam? Farão os testes também? Vale a pena pra salvar um computador ruim?
Consideraram a ideia de usar um sistema sem interface, ou mesmo com interface por terminal?

#UrbanCompassPony

2 comentários em ““Tirando Leite de Pedra” de computador ruim – Parte 2”

  1. Excelente artigo, como sempre. Eu usava um notebook Dell Inspirion 5566 como “console” para matar o tempo, mas não tinha um bom desempenho em alguns jogos. Fiz a instalação mínima do Arch Linux com o X11 + Btrfs + Kernel estável (não-LTS) e algumas configurações extras, como usar o systemd-boot no lugar do GRUB. Tive um aumento considerável de FPS e diminuição no uso da memória RAM. Você poderia fazer uma terceira parte desde artigo testando o Arch, não iria se arrepender.

    Responder
    • Não é má ideia. Mas não pretendo fazer uma parte 3 no momento, já que o conceito basico é o mesmo pra qualquer distro: essencialmente um sistema sem interface + xorg + xterm e o WINE…. os tweaks, cada sistema tem os seus respectivos. Tem tambem a opção de usar drivers oibaf ou padoka pra quem usa Intel/AMD.

      Responder

Deixe um comentário