%3F.png)
Eu costumava usar consoles de tela cheia (aqueles abertos com Ctrl+ Alt+ F1... F6) ativamente e cheguei à ideia de que gostaria de tentar decorá-los com uma espécie de "papel de parede" (um tanto escuro e monótono, claro para que não diminua a legibilidade), talvez isso possa parecer agradável (ou não, mas preciso tentar). Seria ainda melhor se eu pudesse definir imagens diferentes como fundo de console diferente (uma para Ctrl+ Alt+ F1, outra para Ctrl+ Alt+ F2etc).
O fato dos consoles terem uma resolução muito maior do que o modo de texto puro sugere que o modo gráfico completo é usado para eles e tudo é possível. Mas como?
Responder1
Tenho certeza de que o driver do console Linux não possui essa capacidade incorporada, no entanto, existe um aplicativo chamado fbterm
que pode fazer isso. Para fazer as imagens de fundo funcionarem, você também precisará de um utilitário que possa exibir uma imagem no framebuffer, como fbi
:
sudo apt-get install fbterm fbi
fbterm
Na verdade, não lê ou exibe imagens de fundo, ele espera que algum outro programa configure a imagem de fundo na tela antes de iniciar. Há instruções na fbterm
página de manual sobre como fazer isso usando fbv
, um utilitário absolutamente antiquado e sem suporte que eu não consegui compilar em um sistema Ubuntu moderno. fbi
é um visualizador de imagens muito mais limpo e agradável para o framebuffer, mas infelizmente não possui a funcionalidade "configure e saia" do mais simples fbv
e, portanto, interfere fbterm
se você tentar usá-lo diretamente. No entanto, consegui encontrar uma alternativa que funciona:
Primeiro, você precisará usar fbi
e cat
para exibir a imagem desejada e, em seguida, despejá-la em um arquivo de imagem "framebuffer raw format". Como root, em um console do framebuffer, execute:
( sleep 1; cat /dev/fb0 > nifty-background.fbimg ) & fbi -t 2 -1 --noverbose -a nifty-background.png
(Isso exibirá a imagem por alguns segundos e depois sairá, salvando o resultado no arquivo nifty-background.fbimg
. Substitua nifty-background.fbimg
e nifty-background.png
pelos nomes de arquivo que desejar, é claro.)
A primeira parte do comando espera 1 segundo antes de transferir o conteúdo do framebuffer para um arquivo. Ao mesmo tempo, a segunda parte (após o &) é iniciada fbi
para exibir a imagem no framebuffer, de modo que quando o comando cat começar a ser executado (1 segundo depois), haja uma imagem para despejar. A razão pela qual eles estão nessa ordem é porque descobri que fbi
havia problemas se não estivesse sendo executado em primeiro plano, o que significa que deve ser o último comando da lista.
A partir de então, sempre que quiser executar fbterm
, você pode iniciá-lo assim (você pode criar um pequeno script wrapper):
export FBTERM_BACKGROUND_IMAGE=1
cat nifty-background.fbimg > /dev/fb0; fbterm
Responder2
Posso distinguir o modo de texto real de sua emulação gráfica.
… que é uma das maneiras pelas quais o observador pode distinguir um BSOD real no Windows das ações do protetor de tela BSOD de piada que circulou há cerca de uma década. A exibição de caracteres gráficos de bloco usando o hardware do adaptador de vídeo no modo gráfico era sutilmente diferente dos caracteres gerados pelo hardware do adaptador de vídeo no modo de texto.
Sim, o adaptador de vídeo está no modo gráfico. Já faz algum tempo que é assim. Erasempredesta forma em sistemas sem hardware de adaptador de vídeo de PC. Nos primeiros anos do Linux, em PCs compatíveis, o console teria o hardware do adaptador de vídeo em modo texto. Mas esse uso foi silenciosamente reduzido a praticamente nada. O suporte Unicode para a maioria dos usuários hoje em dia requer um conjunto de glifos maior do que o hardware de modo texto. O firmware da máquina (é claro) usa modo gráfico para telas iniciais (com lindas imagens e logotipos de empresas), assim como o carregador do Linux e a inicialização do sistema.
Existe um programa emulador de terminal embutido no kernel do Linux. Ele está em camadas sobre o framebuffer e o subsistema de eventos de entrada, que usa interfaces internas do kernel para acessar. Ele se apresenta aos sistemas em modo de aplicação como uma série determinal virtual do kerneldispositivos /dev/tty1
e assim por diante.
Este programa é bastante limitado em comparação com emuladores de terminal que rodamforao kernel do Linux, como programas aplicativos comuns. Ele emula apenas um subconjunto limitado de funcionalidades de um terminal real e não possui os recursos adicionais dos últimos emuladores de terminal.
São aqueles que você precisa procurar para isso. Você deve estar familiarizado com os emuladores de terminal que usam X para entrada/saída, como xterm, lxterminal, gnome-console, konsole, eterm, wterm e o resto. Menos conhecidos são aqueles que usam o(s) dispositivo(s) framebuffer e os dispositivos de evento de entrada para sua entrada/saída. fornecendoterminais virtuais no espaço do usuário:
- zhcon(Pacote Ubuntu),
- fbpad,
- termo fb(Pacote Ubuntu) e seus garfos comojfbterm(Pacote Ubuntu),
- bogl-bterm (Pacote Ubuntu),
- o nosh
console-terminal-emulator
econsole-fb-realizer
, e - kmscon.
Alguns destes últimos podem fazer o que você quiser.
O fbterm pode ser configurado para usar o que estiver no framebuffer na inicialização como imagem de fundo, por exemplo. Portanto, tudo o que é necessário fazer é usar um dos vários outros utilitários para exibir imagens diretamente em um dispositivo framebuffer Linux para configurar uma imagem de fundo antes de executar o fbterm. Existem várias dessas ferramentas, incluindo:
- dfbg (Pacote Ubuntu),
- Ali Gholami Rudifbvis, e
- FBI (Pacote Ubuntu).
fbvis e fbi limpam a tela na saída e exigem as convoluções explicadas com mais detalhes na resposta de Foogod. dfbg, no entanto, não se limpa, tornando-o mais adequado para esta tarefa específica.
Leitura adicional
- https://unix.stackexchange.com/a/177209/5132
- https://unix.stackexchange.com/a/178807/5132
- https://unix.stackexchange.com/a/194218/5132
- Jonathan de Boyne Pollard (2015)."terminais virtuais de espaço de usuário". guia nosh. 1.20. nossa. Softwares da JdeBP.
- Jonathan de Boyne Pollard (2015).Uma rápida olhada nos terminais virtuais do espaço do usuário nossa. Softwares da JdeBP.
- Geert Uytterhoeven (25/10/1998).Para sua informação: mudanças no console do buffer de quadros desde 2.1.107. kernel do Linux.
Responder3
Embora a resposta de Foogod não tenha funcionado para mim, ela me levou na direção certa, fornecendo metade da solução (ou seja, lendo dados do framebuffer enquanto fbi
mostra uma imagem na tela TTY). Portanto, concedi a recompensa à sua resposta.
Abaixo está um script que facilita a inicialização fbterm
com caminho parcial para a imagem como um único argumento de linha de comando
Uso
O script deve ser salvo em um diretório listado em sua $PATH
variável. De preferência, deve estar na sua $HOME/bin
pasta pessoal. Referir-seComo adicionar um diretório ao PATH?na explicação de como adicionar seu pessoal bin
a $PATH
, mas criar um diretório chamado bin
em seu diretório inicial é suficiente para adicioná-lo PATH
no login novamente.
O script também deve ter permissão executável; você pode configurá-lo com chmod +x /path/to/script.sh
.
Finalmente, ele deve ser executado com sudo
, para permitir acesso root para leitura e gravação em /dev/fb0
.
Fonte do roteiro
Também disponível emmeu repositório Github.
#!/bin/bash
# Author : Serg Kolo
# Date: Dec 5, 2015
# Description: Script to render image and set it as background
# in conjunction with fbterm
# Depends: fbterm,fbi, awk
# Written for: https://askubuntu.com/q/701874/295286
function printUsage
{
echo "<<< Script to set background image in TTY console"
echo "<<< Written by Serg Kolo, Dec 5 , 2015"
echo "<<< Usage: scriptName.sh /path/to/image"
echo "<<< Must be ran with root privileges, in TTY only"
echo "exiting"
}
# check if we're root, if there's at least one ARG, and it is a TTY
if [ "$(whoami)" != "root" ] || [ "$#" -eq 0 ] || [ "$( tty | awk '{gsub(/[[:digit:]]/,""); gsub(/\/dev\//,"");print}' )" != "tty" ] ;then
printUsage
exit 1
fi
# read the full path of the image
IMAGE="$( readlink -f "$@" )"
# Launch fbi with whatever image was supplied as command line arg
# then take out whatever is the data in framebuffer;
# Store that data to /tmp folder
( sleep 1; cat /dev/fb0 > /tmp/BACKGROUND.fbimg ; sleep 1; pkill fbi ) & fbi -t 2 -1 --noverbose -a "$IMAGE"
# This portion is really optional; you can comment it out
# if you choose so
echo "LAUNCH FBTERM ?(y/n)"
read ANSWER
if [ "$ANSWER" != "y" ] ; then
echo exiting
exit 1
fi
# The man page states that fbterm takes screenshot of
# what is currently in framebuffer and sets it as background
# if FBTERM_BACKGROUND_IMAGE is set to 1
# Therefore the trick is to send the framebuffer data captured
# in the last step (which will display the image on screen)
# and then launch fbterm. Note, that I send output from the command
# send to background in order to avoid the extra text displayed on
# screen. That way we have clear image in framebuffer, without
# the shell text, when we launch fbterm
export FBTERM_BACKGROUND_IMAGE=1
clear
( cat /tmp/BACKGROUND.fbimg > /dev/fb0 &) > /dev/null; sleep 0.25; fbterm
informação adicional
Acontece que o usuário não precisa necessariamente usar sudo
; /dev/fb0
pertence ao video
grupo, então os usuários podem apenasadicionar-se a esse grupousando
sudo usermod -a -G video $USER
Assim, as verificações de root no script acima tornam-se obsoletas, especificamente [ "$(whoami)" != "root" ] ||
part.
Responder4
Respostasacimafuncionou para mim
Mas preciso especificardispositivopara o FBI:
fbi -d /dev/fb0
No meu caso, o FBI estava tentando dri:/dev/dri/card0
Paralegibilidadepossível usar o imagemagick:
convert -fill '#202020' -colorize 80% "$1" /tmp/background
Isso imitará o fundo transparente, convertendo a imagem em sobreposição de cores #202020
com 80%
visibilidade