Framebuffer - recursos gráficos sem o X

Publicado por Leandro Santiago em 10/02/2007

[ Hits: 23.014 ]

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

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

Como preparar a compilação de um programa que utiliza Qt4

Editando documentos em formato PDF com o Koffice

Controlando o amarok pela linha-de-comando

Seu Linux falando português nativamente

Leitura recomendada

This disk contains mismatched GPT and MBR partition: /dev/sda [RESOLVIDO]

Sublime Text Editor 2 - Instalando e integrando no Ubuntu 12.04

htop - Error opening terminal: unknown

Auctex: Tabela de atalhos

Dinâmica molecular no Linux

  

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