Как я могу настроить полноэкранный фон консоли (TTY)?
Раньше я активно использовал полноэкранные консоли (те, которые открывались с помощью Ctrl+Alt+F1...F6) и пришел к мысли, что я хотел бы попытаться украсить их "обоями" своего рода (довольно темными и однообразный, конечно, чтобы не ухудшить читабельность), возможно, это может выглядеть и чувствовать себя хорошо (или нет, но мне нужно попробовать). Было бы даже лучше, если бы я мог установить разные картинки в качестве фона для другой консоли (одну для Ctrl+Alt+F1, другую для Ctrl+Alt+F2 и т. Д.).
Тот факт, что консоли имеют гораздо более высокое разрешение, чем в режиме чистого текста, говорит о том, что для них используется полноценный графический режим, и все возможно. Но как?
4 ответа
Я почти уверен, что драйвер консоли Linux не имеет этой встроенной возможности, однако есть приложение под названием fbterm
который может сделать это. Чтобы фоновые изображения работали, вам также понадобится утилита, которая может отображать изображение в буфере кадров, например fbi
:
sudo apt-get install fbterm fbi
fbterm
фактически не читает и не отображает фоновые изображения, он ожидает, что какая-то другая программа установит фоновое изображение на экране перед его запуском. Есть инструкции в fbterm
страница руководства о том, как это сделать, используя fbv
абсолютно устаревшая и неподдерживаемая утилита, которую я даже не смог собрать в современной системе Ubuntu. fbi
это намного более чистый и приятный просмотрщик изображений для кадрового буфера, но, к сожалению, он не обладает функциональностью "установить и выйти" из более простого fbv
и, таким образом, мешает fbterm
если вы попытаетесь использовать его напрямую. Тем не менее, я смог придумать альтернативу, которая работает:
Во-первых, вам нужно будет использовать fbi
а также cat
чтобы отобразить нужное изображение, а затем выгрузить его в файл изображения "framebuffer raw format". От имени пользователя root в консоли фреймбуфера запустите:
( sleep 1; cat /dev/fb0 > nifty-background.fbimg ) & fbi -t 2 -1 --noverbose -a nifty-background.png
(Это будет отображать изображение в течение нескольких секунд, а затем выйти, сохранив результат в файле nifty-background.fbimg
, замещать nifty-background.fbimg
а также nifty-background.png
с любыми именами файлов, конечно.)
Первая часть команды ждет 1 секунду, прежде чем загружать содержимое кадрового буфера в файл. В то же время вторая часть (после &) запускается fbi
чтобы отобразить изображение в буфере кадров, чтобы когда команда cat приступила к выполнению (1 секунда спустя), там было изображение, которое нужно выгрузить. Причина в том, что они в таком порядке, потому что я обнаружил, что fbi
были проблемы, если он не работал на переднем плане, что означает, что это должна быть последняя команда в списке.
С тех пор, когда вы хотите запустить fbterm
, вы можете запустить его так (вы можете создать небольшой скрипт-обертку):
export FBTERM_BACKGROUND_IMAGE=1
cat nifty-background.fbimg > /dev/fb0; fbterm
Я могу отличить реальный текстовый режим от его графической эмуляции.
... что является одним из способов, с помощью которых наблюдатель мог бы отличить настоящий BSOD на Windows от действий заставки-шутки BSOD, которые делались примерно десять лет назад. Отображение блочных графических символов с использованием аппаратного обеспечения адаптера дисплея в графическом режиме несколько отличалось от символов, сгенерированных аппаратным обеспечением адаптера дисплея в текстовом режиме.
Да, адаптер дисплея находится в графическом режиме. Так было уже довольно давно. Так было всегда в системах без аппаратного адаптера дисплея ПК. В первые годы существования Linux на ПК-совместимых устройствах консоль имела аппаратный адаптер дисплея в текстовом режиме. Но это использование незаметно испортилось. Поддержка Unicode для большинства пользователей в настоящее время требует большего набора глифов, чем аппаратное обеспечение текстового режима. Прошивка машины (конечно) использует графический режим для заставок (с красивыми картинками и логотипами компании), как и загрузчик Linux и инициализация системы.
В ядро Linux встроена программа-эмулятор терминала. Он расположен поверх фрейм-буфера и подсистемы входных событий, для доступа к которым он использует внутренние интерфейсы ядра. Он представляет себя в режиме приложений как серия виртуальных терминальных устройств ядра,/dev/tty1
и так далее.
Эта программа довольно ограничена по сравнению с эмуляторами терминала, которые работаютс ядром Linux, как обычные прикладные программы. Он только эмулирует ограниченное подмножество функциональности реального терминала, и ему не хватает дополнительных функций последних эмуляторов терминала.
Это те, которые вам нужно искать для этого. Возможно, вы знакомы с эмуляторами терминала, которые используют X для своего ввода / вывода, такими как xterm, lxterminal, gnome-console, konsole, eterm, wterm и другие. Менее известны те, которые используют устройства кадрового буфера и устройства событий ввода для их ввода / вывода. предоставление виртуальных терминалов в пользовательском пространстве:
- zhcon( пакет Ubuntu),
- fbpad,
- fbterm( пакет Ubuntu) и его форки, такие как jfbterm( пакет Ubuntu),
- bogl-bterm ( пакет Ubuntu),
- Нош
console-terminal-emulator
а такжеconsole-fb-realizer
, а также - кмскон
Некоторые из этих последних могут делать то, что вы хотите.
fbterm может быть настроен на использование того, что находится в кадровом буфере при запуске, в качестве фонового изображения, например. Поэтому все, что нужно сделать, - это использовать одну из нескольких других утилит для отображения изображений непосредственно на устройстве кадрового буфера Linux, чтобы настроить фоновое изображение перед запуском fbterm. Есть несколько таких инструментов, в том числе:
- dfbg ( пакет Ubuntu),
- Fbvis Али Голами Руди, и
- fbi ( пакет Ubuntu).
fbvis и fbi очищают экран при выходе и требуют сверток, которые более подробно объясняются в ответе Фугода. dfbg, однако, не убирает за собой, что делает его более подходящим для этой конкретной задачи.
дальнейшее чтение
- https://unix.stackexchange.com/a/177209/5132
- /questions/667016/gde-hranyatsya-paketyi-ustanovlennyie-obnovlennyie-s-pomoschyu-apt/667023#667023
- https://unix.stackexchange.com/a/194218/5132
- Джонатан де Бойн Поллард (2015). "виртуальные терминалы в пользовательском пространстве". Руководство Nosh. 1,20. перекус. Программное обеспечение JdeBP.
- Джонатан де Бойн Поллард (2015). Беглый взгляд на виртуальные терминалы в пользовательском пространстве. Программное обеспечение JdeBP.
- Geert Uytterhoeven (1998-10-25). К сведению: консольный буфер кадров изменяется с 2.1.107. Linux-ядро.
Хотя ответ Фугода не сработал для меня, он действительно привел меня в правильном направлении, предоставив половину решения (а именно, чтение данных кадрового буфера, в то время как fbi
показывает изображение на экране TTY). Поэтому я наградил его ответ щедротой.
Ниже приведен скрипт, который облегчает запуск fbterm
с частичным путем к изображению в качестве единственного аргумента командной строки
использование
Скрипт должен быть сохранен в каталоге, который указан в вашем $PATH
переменная. Желательно, чтобы это было в вашем личном $HOME/bin
папка. Обратитесь к разделу Как добавить каталог в PATH? на объяснение, как добавить свой личный bin
в $PATH
, но создание каталога под названием bin
в вашем домашнем каталоге достаточно, чтобы добавить его в PATH
при повторном входе.
Сценарий также должен иметь разрешение на выполнение; Вы можете установить его с chmod +x /path/to/script.sh
,
Наконец, он должен быть запущен с sudo
, чтобы разрешить root-доступ для чтения и записи /dev/fb0
,
Источник скрипта
Также доступно в моем репозитории 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://Ask-ubuntu.ru/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
Дополнительная информация
Оказывается, что пользователю не обязательно использовать sudo
; /dev/fb0
принадлежит video
группа, чтобы пользователи могли просто добавить себя в эту группу, используя
sudo usermod -a -G video $USER
Таким образом, проверки на наличие root в приведенном выше скрипте устарели, особенно [ "$(whoami)" != "root" ] ||
часть.
Ответы выше работали для меня
Но нужно указать устройство для фбр:
fbi -d /dev/fb0
В моем случае ФБР пыталось dri:/dev/dri/card0
Для удобочитаемости можно использовать imagemagick:
convert -fill '#202020' -colorize 80% "$1" /tmp/background
Это будет имитировать прозрачный фон путем преобразования изображения в цветное наложение.#202020
с80%
видимость