Там являются различными:
id3v2
или eyeD3
для командной строкиbanshee
, rhythmbox
или amarok
и много других, попытайтесь искать свой репозиторий дистрибутивов и протестируйте некоторых из них.
Для использования кадрового буфера в качестве консоли, Вам нужно fbdev
модуль. Вам, вероятно, придется перекомпилировать Ваше ядро.
Можно также интересоваться проектом DirectFB, который является библиотекой, которая делает использование кадрового буфера легче. Уже существуют также приложения и среды GUI, записанные для него.
Для консольной стороны можно повторить материал к /dev/console
или можно использовать системный журнал, и в зависимости от различных других настроек, он может обнаружиться на консоли.
Для изображений я просто попробовал catting bmp файл к fb0, и он на самом деле работал! (sortof - несколько копий, меньшего размера)
Я нашел bmp к кадровому буферу программу здесь. Это должно быть идеальным примером формата, который ожидает fb0. Существует также fbi
, программа для записи непосредственно в кадровый буфер.
fbi
позволяет мне помещать изображение на экран, который полезен, но он очищает кадровый буфер, после того как он выходит.
– LawrenceC
11.09.2011, 05:00
Несколько человек ответили на части вашего вопроса, касающиеся ядра и размещения изображений (а не текста) в фреймбуфере, но пока что остальное остается без ответа. Да, вы можете использовать подсистему виртуальных терминалов ядра для создания так называемой консоли framebuffer. Но есть несколько инструментов, которые позволяют использовать устройство framebuffer для создания виртуальных терминалов пользовательского пространства. К ним относятся:
console-terminal-emulator
и console-fb-realizer
в nosh - виртуальный терминал пользовательского пространства, нацеленный на копирование виртуальных терминалов ядра Linux и FreeBSD/PC-BSD. Он также не имеет зависимостей от библиотек X. logind
сервером в systemd и его понятиями "места". Али Голами Руди, в частности, создал не просто эмулятор терминала для работы с фреймбуфером. Он также написал PDF-просмотрщик, VNC-просмотрщик, медиаплеер и программу для чтения Корана.
Полное сравнение бок о бок выходит за рамки данного ответа; но вот некоторые моменты, которые имеют отношение к вопросу:
fbpad
и инструменты nosh по своей конструкции не используют никаких библиотек X. bdftobogl
; а другой конвертирует TTF в шрифты "tinyfont", которые используются fbpad, с помощью инструмента ft2tf (Arch). console-fb-realizer
использует те же шрифты "vt", что и новая подсистема виртуальных терминалов ядра FreeBSD 10.1, и поэтому использует инструмент манипулирования шрифтами FreeBSD vtfontcvt
для преобразования шрифтов BDF. console-convert-kbdmap
. Опять же, эти файлы kbdmap - те, что используются в подсистеме vt FreeBSD/PC-BSD. login
им нужны привилегии суперпользователя. /etc/ttys
(BSD), /etc/inittab
(Linux system 5 init
) или другой системой, которой они оставляют работу по порождению getty/login/shell. console-fb-realizer
нуждается только в привилегиях, достаточных для открытия фреймбуфера и устройств событий ввода, что не требует привилегий суперпользователя, и для доступа к FIFO и обычным файлам, обслуживаемым console-terminal-emulator
, который, в свою очередь, вообще не нуждается в специальных привилегиях. Все это, конечно, эмуляторы терминалов. Если вы хотите убрать эмуляцию терминала и вывести текст на фреймбуфер более непосредственно, у вас есть несколько вариантов:
console-terminal-emulator
. console-fb-realizer
использует дисплейный файл с массивом символьных ячеек, как /dev/vcsa*
, но обычный файл (не файл специального устройства символов) и с кодовыми точками Unicode, атрибутами ECMA-48 и 24-битным цветом RGB. Так что можно запустить его и просто записать символ+атрибут+цвет прямо в файл массива ячеек символов, позволив console-fb-realizer
выполнить рендеринг шрифта в фреймбуфер.
В качестве дополнения: Обратите внимание, что это противоположно интеграции с BRLTTY, которая использует console-terminal-emulator
, но не запускает console-fb-realizer
.
Это старый пост, но я понимаю, что обычно вам нужна консоль фреймбуфера (fbcon) для запуска консоли в фреймбуфере. Дело в комплектации. (драйверы устройств / графика / дисплей консоли ..)
Если вы можете cat /dev/urandom > /dev/fb0
и получить случайные пиксели на экране, у вас есть все, что вам нужно.
В моем случае мне нужно было сбросить некоторую текстовую информацию. Я тестировал это в busybox и raspi, так что это может сработать и для вас. Ответ может быть немного длинным, так как если вы не используете консоль, вам придется выводить пиксели символов самостоятельно. К счастью, кто-то уже проделал эту сложную работу, поэтому нам нужно просто объединить их.
В busybox или в вашем raspi у вас должен быть fbset
бинарник.
Это может помочь вам узнать ваши настройки размеров экрана.
В моей встроенной программе это выглядит так:
# fbset
mode "480x272-1"
# D: 0.104 MHz, H: 0.207 kHz, V: 0.657 Hz
geometry 480 272 480 272 16
timings 9600000 3 3 0 32 17 11
accel false
rgba 5/0,6/5,5/11,0/0
endmode
Важной частью здесь является ширина 480 и высота 272 пикселей.
Как вы упомянули, вы можете выполнить экран с помощью команды
cat /dev/urandom > /dev/fb0
и вы можете очистить его с помощью cat /dev/zeros > /dev/fb0
Чем очищать экран, мы должны убедиться, что вы получили правильные размеры.
Случайно в моем busybox был бинарник fbsplash, который получал в качестве входных данных файл .ppm.
Поправьте, если я ошибаюсь, но кажется, что fb0
принимает этот формат.
Если посмотреть на Portable Anymap в Wikipedia, там есть несколько "подформатов"... fbsplash использует причудливый с цветом, и так далее... но мы хотим иметь возможность просто распечатать что-то читабельное. Давайте для простоты воспользуемся P1, закодированным в ASCII. Если бы мы могли напечатать вертикальную линию, мы бы знали, что наши размеры верны. Давайте попробуем:
Вертикальная линия в ppm типа P1 должна выглядеть так:
P1
480 272
f 0 0 0 0 ... 0
f 0 0 0 0 ... 0
...
f 0 0 0 0 ... 0
Итак, будет 272 строки, шириной 959 символов. В документации сказано, что вместо f должно быть 1... на busybox и raspi f было ярче.
Важно, чтобы после 0 не было пробела... Эта задача может быть немного утомительной... лучше использовать текстовый редактор, который поможет вам. В vim вы можете скопировать первые две строки, перейти в командный режим (esc), затем ввести следующие символы:
of(esc)479a 0(esc)yy271p
Конечно, я использую свои размеры, вы должны использовать свои.
Скопируйте этот файл на /dev/fb0
, он должен выглядеть следующим образом:
Хорошо, я обманываю... там не одна строка... там около 8... но когда это не работает (у нас неправильные размеры или у нас есть пробел в конце, иметь только одну строку намного проще).
Если вы дошли до этого, нам нужно просто напечатать правильные пиксели, чтобы увидеть их как символы. Благодаря Marcel Sondaar и его репозиторию на GitHub нам не нужно будет рисовать каждый символ.
С помощью небольшой доработки можно расширить его простую программу, чтобы печатать f
вместо X
и 0
вместо пробелов, вставить пробелы между каждым символом, добавить заголовок, и у нас есть файл .ppm с буквой, соответствующей ее коду.
Еще один маленький шаг - и вы получаете на вход не символ, а строку.
Катируйте файл, передайте в вашу программу и выведите на /dev/fb0
и вы получите текстовый вывод:
Я протестировал это решение также на raspberry pi и оно сработало. Система говорит мне, что у меня нет репутации для размещения более 2 ссылок. Пока я не разберусь с этим, вы должны полагаться на мои слова :D
dfbg
который позволяет мне поставить изображение там (и не удаляет его после завершения какfbi
). Я знаю, что могу, вероятно, найти, что утилита создает .png или подобный из текста блока, таким образом, это могло бы просто работать... – LawrenceC 11.09.2011, 04:57