Як я можу налаштувати повний екран консолі (TTY)?


17

Раніше я активно використовував повноекранні консолі (ті, що відкриваються з Ctrl+ Alt+ F1... F6), і прийшов до думки, що я хотів би спробувати прикрасити її на зразок "шпалер" (досить темних і монотонних, звичайно щоб не зменшити читабельність), можливо, це могло б виглядати і відчувати себе добре (чи ні, але мені потрібно спробувати). Ще краще, якби я міг встановити різні зображення як різний фон консолі (один для Ctrl+ Alt+ F1, інший для Ctrl+ Alt+ F2тощо).

Той факт, що консолі мають набагато більшу роздільну здатність, який забезпечує режим чистого тексту, говорить про те, що для них використовується повноцінний графічний режим, і все можливо. Але як?


2
Неможливо. Віртуальні консолі є лише текстовими.
Сергій Колодяжний

5
@Serg Я використовую текстові режими ще з часів, коли Linux навіть не існував - повірте, я можу відрізнити реальний текстовий режим від його графічної емуляції. Багато людей навряд чи можуть собі це уявити, але я навіть дивився фільми в консолях, на яких не встановлено жодного X-сервера протягом Linux 2.4 днів. Це змушує мене сумніватися, що насправді це неможливо.
Іван

1
Гаразд, добре дозвольте себе виправити: я вірю в перегляд зображень та фільмів у консолі, через те, що знаю як framebufferпристрій, але з цим екраном зайнято вихід якоїсь програми, наприклад fbi. TTY сам по собі досі є текстовим пристроєм
Сергій Колодяжний

2
Я поставлю щедрість за ваше запитання, як тільки це буде відповідне. Я зацікавився насправді
Сергій Колодяжний

Відповіді:


12

Я майже впевнений, що драйвер консолі Linux не має вбудованої здатності, проте є програма, fbtermяка називається, яка може це зробити. Для того, щоб фонові зображення працювали, вам також знадобиться утиліта, яка може відображати зображення на фреймбуфер, наприклад fbi:

sudo apt-get install fbterm fbi

fbtermнасправді не читає і не відображає самі фонові зображення, він очікує, що якась інша програма встановить фонове зображення на екрані перед його запуском. На fbtermсторінці man є інструкції, як це зробити за fbvдопомогою абсолютно застарілої та непідтримуваної утиліти, яку мені навіть не вдалося скласти в сучасній системі Ubuntu. fbiє набагато більш чистим і приємним переглядачем зображень для фреймбуфера, але, на жаль, не має функціоналу "встановити його та вийти" простішого fbv, і, таким чином, заважає, fbtermякщо ви спробуєте ним скористатися безпосередньо. Однак мені вдалося придумати альтернативу, яка працює:

По-перше, вам потрібно буде використовувати fbiта catвідображати потрібне зображення, а потім перенести його у файл зображень у форматі "необроблений формат framebuffer". Як root, на консолі framebuffer запустіть:

( 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

7

Я можу відрізнити реальний текстовий режим від його графічної емуляції.

… Що є одним із способів того, як спостерігач міг відрізнити справжній BSOD у Windows від дії жартівливої ​​заставки BSOD, яка робила раунди десять років тому. Відображення символів блокової графіки з використанням апаратного забезпечення адаптера дисплея в графічному режимі нескінченно відрізняється від символів, створених апаратом адаптера дисплея в текстовому режимі.

Так, адаптер дисплея знаходиться в графічному режимі. Так було вже досить давно, зараз. Це було завжди таким чином у системах без апаратного забезпечення адаптера для дисплея ПК. У перші роки Linux на ПК, сумісних з ПК, консоль мала б апаратне забезпечення адаптера дисплея в текстовому режимі. Але це використання спокійно розмило майже нічого. Підтримка Unicode для більшості користувачів сьогодні потребує більшого набору гліфів, ніж апаратне забезпечення в текстовому режимі. Програмне забезпечення машини (звичайно) використовує графічний режим для екрану заставки (з гарними зображеннями та логотипами компанії), як і завантажувач Linux та ініціалізація системи.

Існує програма термінального емулятора, вбудована в ядро ​​Linux. Він шарується поверх фреймбуфера і підсистеми вхідних подій, для використання якої використовуються внутрішні інтерфейси ядра. Він представляє системи в режимі додатків у вигляді серії віртуальних термінальних пристроїв ядра/dev/tty1 тощо.

Ця програма є досить обмеженою порівняно з емуляторами терміналів, які працюють поза ядром Linux, як звичайні програми. Він імітує лише обмежений набір реальних функціональних можливостей терміналу, і йому не вистачає додаткових особливостей останніх емуляторів терміналів.

Саме на це потрібно звернути увагу. Можливо, ви знайомі з термінальними емуляторами, які використовують X для введення / виведення, таких як xterm, lxterminal, gnome-console, konsole, eterm, wterm та інші. Менш відомими є ті, які використовують пристрій (і) фреймбуфера та пристрої введення для введення / виводу. забезпечення віртуальних терміналів у просторі користувачів :

Деякі з цих останніх можуть робити те, що ви хочете.

fbterm може бути налаштований, щоб використовувати те, що є у фреймбуфер при запуску, як фонове зображення, наприклад. Тому все, що потрібно зробити, - це використовувати одну з кількох інших утиліт для відображення зображень безпосередньо на Linux framebuffer deviceto, встановити фонове зображення перед запуском fbterm. Існує кілька таких інструментів, серед яких:

fbvis та fbi очищають екран при виході та вимагають згортків, які детальніше пояснюються у відповіді Foogod. dfbg, однак, не прибирає після себе, що робить його більш придатним для цієї задачі.

Подальше читання


Питання задавали питання про те, як створити фонове зображення для консолі. У вашій відповіді перераховані лише потенційні рішення. Тому я присуджую нагороду за іншу відповідь, однак я дякую вам за велику кількість наданої вами інформації. Ви маєте мою підтримку.
Сергій Колодяжний

4

Незважаючи на те, що відповідь Foogod для мене не спрацювала, вона привела мене в правильне русло, запропонувавши половину рішення (а саме, читаючи дані фреймбуфера, при цьому fbiпоказуючи зображення на екрані TTY). Тому я нагородив його відповідь щедротою.

Bellow - це сценарій, який дозволяє легко запустити fbtermчастковий шлях до зображення як єдиний аргумент командного рядка

Використання

Сценарій повинен бути збережений у каталозі, який вказаний у вашій $PATHзмінній. Переважно це має бути у вашій особистій $HOME/binпапці. Див. Як додати каталог до PATH? про пояснення того, як додати свою особу binдо $PATH, але для створення каталогу, названого binу вашому домашньому каталозі, достатньо, щоб додати йогоPATH під час повторного входу.

Сценарій також повинен мати дозвіл на виконання; ви можете встановити йогоchmod +x /path/to/script.sh .

Нарешті, його потрібно виконати sudo, щоб дозволити кореневому доступу для читання та запису/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: /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 

додаткова інформація

Виявляється, користувачеві не обов’язково користуватися sudo; /dev/fb0належить до videoгрупи, тому користувачі могли просто додати себе до цієї групи за допомогою

sudo usermod -a -G video $USER

Таким чином, перевірки на root у наведеному вище скрипті застарівають, зокрема, є [ "$(whoami)" != "root" ] ||частиною.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.