J'avais l'habitude d'utiliser des consoles plein écran (celles ouvertes avec Ctrl+Alt+F1...F6) activement et sont venus à une idée que je voudrais essayer de le décorer avec un "papier peint" d'une sorte (un assez sombre et monotone bien sûr pour qu'il ne diminue pas la lisibilité), peut-être cela pourrait ressembler et se sentir bien (ou pas, mais j'ai besoin d'essayer). Ce serait encore mieux si je pouvais définir différentes images comme arrière-plan de la console (une pour Ctrl+Alt+F1, un autre pour Ctrl+Alt+F2 etc).
Le fait que les consoles aient une résolution bien supérieure à celle fournie par le mode texte pur suggère que le mode graphique à part entière est utilisé pour elles et que tout est possible. Mais comment?
Je suis à peu près sûr que le pilote de console Linux ne possède pas cette capacité, mais il existe une application appelée fbterm
qui peut le faire. Afin de faire fonctionner les images d’arrière-plan, vous aurez également besoin d’un utilitaire permettant d’afficher une image sur le framebuffer telle que fbi
:
Sudo apt-get install fbterm fbi
fbterm
ne lit pas et n'affiche pas les images d'arrière-plan, il s'attend à ce qu'un autre programme configure l'image d'arrière-plan à l'écran avant son démarrage. La page de manuel fbterm
contient des instructions sur la procédure à suivre, à l'aide de fbv
, un utilitaire totalement obsolète et non pris en charge que je ne pouvais même pas compiler sur un système Ubuntu moderne. fbi
est une visionneuse d'images beaucoup plus propre et plus agréable pour le framebuffer, mais n'a malheureusement pas la fonctionnalité "régler et quitter" de la plus simple fbv
, et interfère donc avec fbterm
si vous essayez de l'utiliser directement. Cependant, j'ai pu proposer une alternative qui fonctionne:
Vous devez d’abord utiliser fbi
et cat
pour afficher l’image souhaitée, puis la vider dans un fichier image "format brut du tampon de trame". En tant que root, dans une console de framebuffer, exécutez:
( sleep 1; cat /dev/fb0 > nifty-background.fbimg ) & fbi -t 2 -1 --noverbose -a nifty-background.png
(Cela affichera l'image pendant quelques secondes, puis quittera, après avoir enregistré le résultat dans le fichier nifty-background.fbimg
. Remplacez nifty-background.fbimg
et nifty-background.png
par le nom de fichier de votre choix, bien sûr.)
La première partie de la commande attend 1 seconde avant de convertir le contenu du framebuffer dans un fichier. En même temps, la deuxième partie (après le &) lance fbi
pour afficher l'image sur le framebuffer, de sorte que lorsque la commande cat arrive à s'exécuter (1 seconde plus tard), il y a une image à vider. La raison pour laquelle ils sont dans cet ordre est parce que j’ai trouvé que fbi
avait des problèmes s’il ne fonctionnait pas au premier plan, ce qui signifie que ce devait être la dernière commande de la liste.
À partir de là, chaque fois que vous voulez exécuter fbterm
, vous pouvez le démarrer comme suit (vous pouvez créer un petit script wrapper):
export FBTERM_BACKGROUND_IMAGE=1
cat nifty-background.fbimg > /dev/fb0; fbterm
Je peux distinguer le mode texte réel de son émulation graphique.
… Qui est l’un des moyens permettant à l’observateur de distinguer un véritable BSOD sous Windows des actions de l’écran de veille plaisant BSOD qui a fait le tour il ya une dizaine d’années. L'affichage des caractères graphiques en bloc à l'aide du matériel de la carte graphique en mode graphique était légèrement différent des caractères générés par le matériel de la carte graphique en mode texte.
Oui, la carte graphique est en mode graphique. Il en est ainsi depuis un bon moment maintenant. C'était toujours de cette façon sur les systèmes dépourvus de matériel d'adaptateur d'affichage PC. Dans les premières années de Linux, sur les ordinateurs compatibles PC, le matériel de la carte graphique était en mode texte sur la console. Mais cette utilisation a discrètement érodé à peu près rien. La prise en charge Unicode par la plupart des utilisateurs nécessite de nos jours un ensemble de glyphes plus important que celui du matériel en mode texte. Le firmware de la machine (bien sûr) utilise le mode graphique pour les écrans de démarrage (avec de jolies images et les logos de la société), tout comme le chargeur Linux et l’initialisation du système.
Il existe un programme d'émulateur de terminal intégré au noyau Linux. Il se superpose au framebuffer et au sous-système d'événements en entrée, auxquels il utilise des interfaces internes du noyau pour accéder. Il se présente aux systèmes en mode application comme une série de terminaux virtuels du noyau , de /dev/tty1
et ainsi de suite.
Ce programme est assez limité comparé aux émulateurs de terminaux qui exécutent en dehors du noyau le noyau Linux, en tant que programmes d’application ordinaires. Il n'émule qu'un sous-ensemble limité des fonctionnalités d'un terminal réel et ne possède pas les fonctionnalités supplémentaires des émulateurs de ce dernier.
Ce sont ceux que vous devez rechercher pour cela. Vous connaissez peut-être les émulateurs de terminaux qui utilisent X pour leurs entrées/sorties, tels que xterm, lxterminal, gnome-console, konsole, eterm, wterm et le reste. Moins connus sont ceux qui utilisent le (s) périphérique (s) du framebuffer et les périphériques d’événement en entrée pour leur entrée/sortie. fournissant terminaux virtuels de l'espace utilisateur :
console-terminal-emulator
et console-fb-realizer
, etCertains de ces derniers peuvent faire ce que vous voulez.
fbterm peut être configuré pour utiliser, par exemple, tout ce qui se trouve dans le framebuffer au démarrage comme image d’arrière-plan. Il suffit donc d'utiliser l'un des nombreux autres utilitaires pour afficher les images directement sur un framebuffer Linux afin de définir une image d'arrière-plan avant d'exécuter fbterm. Il existe plusieurs de ces outils, notamment:
fbvis et fbi effacent l'écran à la sortie et exigent les circonvolutions expliquées plus en détail dans la réponse de Foogod. dfbg, cependant, ne nettoie pas après lui-même, le rendant plus approprié pour cette tâche particulière.
La réponse de Foogod n'a pas fonctionné pour moi, mais elle m'a conduit dans la bonne direction, en fournissant la moitié de la solution (à savoir, la lecture des données du framebuffer, alors que fbi
montre une image sur l'écran TTY). J'ai donc accordé sa récompense à la réponse.
Bellow est un script qui facilite le lancement de fbterm
avec un chemin partiel de l’image en tant qu’argument unique en ligne de commande.
Utilisation
Le script doit être enregistré dans un répertoire répertorié dans votre variable $PATH
. De préférence, il doit être dans votre dossier personnel $HOME/bin
. Reportez-vous à la section Comment ajouter un répertoire au chemin PATH? Pour plus d'informations, comment ajouter votre nom personnel bin
à $PATH
, mais la création d'un répertoire appelé bin
dans votre répertoire personnel est suffisante pour l'ajouter à PATH
lors de la nouvelle connexion .
Le script doit également avoir une autorisation exécutable; vous pouvez le définir avec chmod +x /path/to/script.sh
.
Enfin, il doit être exécuté avec Sudo
name__, afin de permettre un accès root pour la lecture et l'écriture sur /dev/fb0
.
Source du script
Egalement disponible sur mon dépôt 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
Informations supplémentaires
Il s'avère que l'utilisateur n'a pas nécessairement besoin d'utiliser Sudo
name__; /dev/fb0
appartient au groupe video
afin que les utilisateurs puissent simplement s'ajouter eux-mêmes à ce groupe en utilisant
Sudo usermod -a -G video $USER
Ainsi, les vérifications de la racine dans le script ci-dessus deviennent obsolètes, en particulier la partie [ "$(whoami)" != "root" ] ||
.