Framebuffer - recursos gráficos sem o X

Publicado por Leandro Santiago em 10/02/2007

[ Hits: 23.235 ]

Blog: http://leandrosan.wordpress.com

 


Framebuffer - recursos gráficos sem o X



Quem foi que disse que quando se refere à recursos gráficos no Linux, estamos falando necessariamente do X? Nesta dica, mostrarei algumas coisas legais a se fazer com um recurso não muito explorado pelos usuários do Linux: O framebuffer. Ele é usado num terminal em modo texto (tty1,tty2,tty3,...,ttyN). Não, não se trata de ASCII Art (aa) nem caca (Colour ASCII Art). São imagens mesmo, pixel a pixel, e animações e vídeos frame a frame. Incrível!

Primeiramente, tenha certeza de estar com o kernel compilado com suporte a este recurso, além de o lilo (ou grub) estar configurado para tal situação. Se você usa o bootsplash, certamente está. Não vou entrar no mérito de explicar como fazer isso, mas há ótimos artigos e dicas aqui no VOL e na internet explicando como proceder.

Neste breve momento, mostrarei algumas coisas legais que podemos fazer usando o framebuffer (fb, para os íntimos).

Nota: Todos os comandos que vou citar devem ser executados num terminal em modo texto - estou usando o tty1 (Ctrl+Alt+F1).

1 - Assistir filmes:
Para isso, você deve estar com o programa MPlayer corretamente instalado e funcional. Além de ter sido compilado com suporte a framebuffer, é claro.

$ mplayer video.mpg # tela-cheia

Isto mesmo, não é preciso usar nenhum parâmetro extra na execução do MPlayer, pois o driver de vídeo é automaticamente escolhido. Caso este comando não funcione, tente este abaixo, que executará o vídeo em tamanho normal.

$ mplayer video.mpg -vo fbdev # ou fbdev2

Onde video.mpg é o arquivo do vídeo, e "-vo fbdev" é o parâmetro que define o driver de vídeo a ser usado.

Logicamente que você pode usar outros parâmetros, na execução do MPlayer, mas a escolha do driver é realmente necessária.

Você pode também usar o Xine-Player. Basta ter o pacote xine-ui corretamente instalado. Para assistir em tela cheia, use o comando:

$ fbxine -V fb video.mpg

Onde a opção "-V fb" seleciona o driver de vídeo.

Nota: Todos os parâmetros válidos para o comando xine funcionam também para o fbxine, inclusive para assistir dvds, etc.


Legenda: "Vídeo com qualidade sem o X"

2 - Ficar escrevendo coisas inúteis, com aquelas fontes legais que baixamos da internet:
Para isso, você deve estar com o bootsplash corretamente instalado e funcionando. Deve ser executado como root:

# fbtruetype -f aladdin.ttf -s 200 -x 100 -y 500 -t ddaadd -a 100 `uname`

O que o comando acima diz?
Escreva no terminal com framebuffer, usando o arquivo de fonte aladdin.ttf (-f aladdin.ttf), com as letras no tamanho 200 (-s 200), começando nas coordenadas 100 em x (-x 100) e 500 em y (-y 500) com a cor "ddaadd" - em RGB - (-t ddaadd) e opacidade 100% (-a 100), com o texto sendo `uname` (que gera a palavra Linux). Mais informações, use o parâmetro --help.


Legenda: "Parece montagem, mas não é."

3 - Brincar com essas animações idiotas - também precisa do boosplash:
Primeiro, crie uma animação no formato .mng - pronuncia-se "ming". O GIMP é ótimo para isso. Não sabe como criar? Nessa dica você encontra um exemplo de criação de animação. A diferença é que você deve salvar a animação com o formato .mng.

No GIMP, acesse: Script-Fu >> Animadores. Abrirá um submenu com várias opções de animação. "Abra e sirva-se" ;)

Veja as animações simples que eu criei:
Tendo a animação em mãos, faça:

$ fbmngplay animação.mng -a 70 -x 200 -y 200

Os parâmetros têm o mesmo significado que no exemplo anterior. Para mais informações, use o parâmetro --help.

Para finalizar uma animação, simplesmente dê ^C (Ctrl+C).

Nota: Veja o processo de finalização da animação. Muito bom!!


Legenda: "Animação no framebuffer"

4 - Visualizar imagens

Para isso, tenha instalado o programa Fbi:

$ fbi imagem.png *.jpg imagem.gif # Você pode abrir muitas imagens

Simples e eficiente. Use as setas direcionais do teclado para "navegar" nas imagens maiores que a tela, e PgUp para ir para a próxima imagem e PgDown para ir para a anterior. "+" para aumentar o zoom e "-" para diminuir.

5 - Visualizar arquivos PostScript (.ps) e PDF.
Para isso, é necessário estar com o pacote fbi (citado acima) corretamente instalado:

$ fbgs arquivo.ps
Ou
$ fbgs arquivo.pdf

As teclas aqui funcionam da mesma forma que no item 4.


Legenda: "PDF no framebuffer - um antialiasing cairia bem ;)"

6 - Outra coisa legal a se fazer é navegar na internet, usando o navegador Links:

$ links -g -driver fb

Ou, para abrir uma página local:

$ links -g -driver fb arquivo.htm

Onde a opção -g serve para ativar o navegador em modo gráfico e a opção "-driver fb" serve para escolhermos o driver de vídeo a ser usado.

Se você usa o GPM (general purpose mouse server), que é um programa que permite usar o mouse nos terminais em modo texto, poderá navegar na internet com o ele desta forma, como se estivesse no X.

Notas:
  • No Slackware, para ativar o GPM:
    1 - dê permissão de execução no arquivo /etc/rc.d/rc.gpm 2 - execute, como root: /etc/rc.d/rc.gpm start
  • No Links, o ponteiro do mouse é uma cópia quase perfeita do ponteiro do X. Só tem um movimento meio estranho. :)
  • Na navegação, use o botão do meio do mouse para rolar a tela.
  • É possível usar o links como um visualizador de imagens simples.

Há também um navegador chamado Zen, que também usa o framebuffer. Mas não funcionou muito bem nos meus testes, pois quando executado, travou minha máquina de vez.

Se alguém aí teve sucesso com este programa, parabéns :)


Legenda: "Acredite: Essa é uma "foto" do links num terminal em modo texto. Destaque para o ponteiro do mouse."

7 - Tirar screenshots de janelas do terminal:
Sim, isto é possível!! Afinal, de onde você acha que eu tirei as imagens desta dica? Para isso, é necessário estar com o programa fbshot instalado:

# fbshot -c 1 imagem.png # Deve ser usado como root!

Onde a opção "-c 1" diz que a screenshot deve ser do primeiro terminal (tty1) (/dev/vc/1), e "imagem.png" é a imagem final.

Mas se você quiser tirar uma screenshot com um delay, use o parâmetro "-s segundos", como em:

# fbshot -c 4 imagem.png -s 5 #

Isso significa que a screenshot deve ser tirada 5 segundos após a execução deste comando, no quarto terminal virtual.

Para mais opções, tente:

# fbshot --help

Eu, quando vi todos estes recursos, fiquei impressionado com o framebuffer. Se você realmente quiser abandonar o servidor X (não me pergunte o por quê), sem abrir mão de comodidade, estas dicas lhe serão muito úteis.

Leitura Recomendada:

Artigo sobre o Links gráfico:
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=2402

Artigo sobre o bootsplash:
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=776

Dica sobre o GPM:
http://br-linux.org/artigos/dicas_mouse3.htm

Sobre o framebuffer:
http://en.wikipedia.org/wiki/Linux_framebuffer

Links:
Muito obrigado, e até a próxima.

Outras dicas deste autor

Instalando programas no Linux sem ter poderes de root

Concatene com o Bash e fique contente!

Seu Linux falando português nativamente

Criando um planeta só seu.. no GIMP

Escolhendo a faixa de áudio e legenda nos vídeos em formato OGM

Leitura recomendada

Sincronização de coletor de dados MC3090 Symbol no Windows Seven virtualizado no Ubuntu 10.10 x64

Instalando KPowerSave no Slackware 12

Descobrindo consumo de espaço no HD com ncdu

Quebra de linha no VIM

Instalando Etcher no Ubuntu 16.04 LTS

  

Comentários
[1] Comentário enviado por samuK em 10/02/2007 - 01:27h

muito bacana a dica!
valeu

[2] Comentário enviado por hlegius em 10/02/2007 - 08:54h

Putz, muito fera, cara!! Mandou muito bem!
Essa do links eu nem sabia show de bola mesmo :-D

Abraço,

[3] Comentário enviado por rafaelbrandao em 10/02/2007 - 14:52h

Alguem sabe dizer se o fbxine se utiliza do processamento em hardware caso a lib-xine tenha sido compilada com suporte ao XvMC da nvidia ???? Valew

[4] Comentário enviado por Gustavo Requejo em 14/02/2007 - 11:01h

muy bueno xD

[5] Comentário enviado por demoncyber em 14/02/2007 - 15:44h

Cara ótimo artigo!!!

Eu acho que é agora que migro de vez para o console

Brigadão tenchi =P =P =P

\o/ \o/

[6] Comentário enviado por fsalles em 11/04/2007 - 17:51h

Ótimo artigo mesmo!

Estou querendo usar fb por ssh, alguém já tentou? existe algum artigo nesse sentido? enfim... se alguém tiver alguma dica me mande!!

Obrigado!

[7] Comentário enviado por intpa em 22/05/2007 - 14:04h

Alguem sabe como exibir vídeos em tamanho normal no fbxine.

Aqui em casa o fbxine só exibe filmes em tela cheia.

[8] Comentário enviado por GilsonDeElt em 09/06/2007 - 11:05h

Cara, d+!
Valeu mesmo pela dica!

[9] Comentário enviado por albertguedes em 20/12/2007 - 16:18h

Olha, nem vou te dizer o quanto é sensacional este artigo, como eu sou um amante inveterado do uso de terminais, este recurso de framebufer é um tempero a mais.
Realmente fantástico Leandro. Meus parabéns.

[10] Comentário enviado por nunesdutra em 24/07/2008 - 11:16h

Ou como navega na internet pelo terminal??? E qual programa que usa??

[11] Comentário enviado por allanhc em 02/12/2008 - 10:27h

Excelente dica!!!

Parabéns. Já conhecia a maioria desses recursos, mas o links usando o FB foi demais!!!

[12] Comentário enviado por spish em 23/06/2010 - 18:04h

Muito bom o seu artigo Leandro, está de parabéns. Agora se for possível gostaria de uma ajuda sua e da comunidade.

Quando uso o links ou links2 gráfico(fb) como usuário normal o mouse não funciona, já logado como root o mouse funciona perfeitamente. Meu mouse é a ps/2 2 botões laser. Inclusive quando fecho o Links logado como usuário root algumas informações que não vejo quando tento utilizá-lo como usuário normal:

Saida como root:

===========| DirectFB 1.0.1 |=======================
(c) 2001-2007 The DirectFB Organization (directfb.org)
(c) 2000-2004 Convergence (integrated media) GmbH
------------------------------------------------------------

(*) DirectFB/Core: Single Application Core. (2008-08-18 12:36)
(*) Direct/Thread: Running 'VT Switcher' (CRITICAL, 5495)...
(*) Direct/Thread: Running 'Keyboard Input' (INPUT, 5496)...
(*) DirectFB/Input: Keyboard 0.9 (directfb.org)
(*) Direct/Thread: Running 'Linux Input' (INPUT, 5497)...
(*) DirectFB/Input: AT Translated Set 2 keyboard (1) 0.1 (directfb.org)
(*) Direct/Thread: Running 'Linux Input' (INPUT, 5498)...
(*) DirectFB/Input: PC Speaker (2) 0.1 (directfb.org)
(*) Direct/Thread: Running 'Linux Input' (INPUT, 5499)...
(*) DirectFB/Input: Power Button (3) 0.1 (directfb.org)
(*) Direct/Thread: Running 'Linux Input' (INPUT, 5500)...
(*) DirectFB/Input: Sleep Button (4) 0.1 (directfb.org)
(*) Direct/Thread: Running 'Linux Input' (INPUT, 5501)...
(*) DirectFB/Input: Power Button (5) 0.1 (directfb.org)
(*) Direct/Thread: Running 'Linux Input' (INPUT, 5502)...
(*) DirectFB/Input: ImPS/2 Generic Wheel Mouse (6) 0.1 (directfb.org)
(*) Direct/Thread: Running 'PS/2 Input' (INPUT, 5503)...
(*) DirectFB/Input: IMPS/2 Mouse 1.0 (directfb.org)
(*) DirectFB/Genefx: MMX detected and enabled
(*) DirectFB/Graphics: MMX Software Rasterizer 0.6 (directfb.org)
(*) DirectFB/Core/WM: Default 0.3 (directfb.org)
(!) DirectFB/FBDev: Panning display failed (x=0 y=0 ywrap=0 vbl=0)!
--> Invalid argument

Saída como usuario normal:


==========| DirectFB 1.0.1 |==================
(c) 2001-2007 The DirectFB Organization (directfb.org)
(c) 2000-2004 Convergence (integrated media) GmbH
------------------------------------------------------------

(*) DirectFB/Core: Single Application Core. (2008-08-18 12:36)
(*) Direct/Thread: Running 'VT Switcher' (CRITICAL, 5550)...
(*) Direct/Thread: Running 'Keyboard Input' (INPUT, 5551)...
(*) DirectFB/Input: Keyboard 0.9 (directfb.org)
(*) DirectFB/Genefx: MMX detected and enabled
(*) DirectFB/Graphics: MMX Software Rasterizer 0.6 (directfb.org)
(*) DirectFB/Core/WM: Default 0.3 (directfb.org)
(!) DirectFB/FBDev: Panning display failed (x=0 y=0 ywrap=0 vbl=0)!
--> Invalid argument

Estou utilizando o Debian Lenny com Kernel 2.6.34, mas antes de atualizar o kernel(2.6.26) ocorria o mesmo problema.

Desde já agradeço peço desculpas se algo não tenha ficado claro.

[13] Comentário enviado por spish em 10/07/2010 - 18:51h

Olá a todos resolvi o problema do mouse que não estava funcionando no Debian Lenny com kernel 2.6.34. Realmente quando tentava executar o links2 gráfico (links2 -g) como usuario normal em modo texto apareciam aquelas mensagens de erro citadas acima que não consegui descobrir.
Então fica a dica se por acaso alguém estiver com mesmo problema:

1°)Baixei uma nova versão do DirectFB em: http://www.directfb.org/download/DirectFB/?C=M;O=A

$ wget -c http://www.directfb.org/download/DirectFB/DirectFB-1.2.5.tar.gz

$ tar -zxvf DirectFB-1.2.5.tar.gz

$ cd DirectFB-1.2.5

$ ./configure
$ make
# make install

Obs: os "$" significam que podem ser executados como usuario normal e os "#" devem ser executados como usuário root.

2º)Instalei o GPM.
Possuo o DVD1 do debian lenny, então utilizei ele como repositório.

# aptitude install gmp

Criei o links simbólico de /dev/psaux para /dev/mouse pois possuo mouse ps/2.

# ln -s /dev/psaux /dev/mouse

Caso exista algum link para /dev/mouse apague-o com # rm /dev/mouse e refaça o link sitado acima.

Feito isso basta somente reiniciar o GMP

# invoke-rc.d gpm restart

No meu caso tive que reiniciar o Debian creio que exista um comando para atualizar sem precisar reinciar o S.O, se você sabe alguma forma de fazer isso ótimo, caso contrário de um reboot.

# reboot

Para minha surpresa agora quando estou logado como usuario normal basta chamar no shell (links2 -g) que o mouse funciona. Aliás o mouse tem um formato um pouco estranho nada que atrapalhe a diversão.

Espero ter ajudado. Caso alguém tenha uma sugestão melhor poste no VOL, e caso tenha dito algo duvidoso por favor me perdõem.

Vlw mais uma vez Leandro Santiago por este post sobre DirectFB.


[14] Comentário enviado por removido em 23/08/2017 - 11:06h

No RetrorangePI, uma distro baseada no Armbian, o Kodi, EmulationStation e Retroarch rodam no framebuffer, sem o X! É muito interessante, pois esses apps fazem muito mais do que os apps apresentados no artigo, o Kodi é uma central multimídia, o EmulationStation é uma central de emuladores e o Retroarch é um emulador de muitas plataformas.

[15] Comentário enviado por removido em 23/08/2017 - 11:16h

Também existe o SVGALIB, que faz algo parecido.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts