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 buffer de quadros, enquanto fbi
mostra uma imagem na tela TTY). Portanto, eu concedi a sua resposta a recompensa.
Abaixo é um script que facilita o lançamento 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, ele deve estar na sua $HOME/bin
pasta pessoal . Consulte Como adicionar um diretório ao PATH? na explicação como adicionar o seu pessoal bin
para $PATH
, mas a criação de um diretório chamado bin
em seu diretório home é suficiente para adicioná-lo PATH
na re-login.
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 /dev/fb0
.
Origem do Script
Também disponível no meu 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: /ubuntu//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, para que os usuários possam se adicionar a esse grupo usando
sudo usermod -a -G video $USER
Assim, as verificações de raiz no script acima se tornam obsoletas, especificamente [ "$(whoami)" != "root" ] ||
parte.