Як використовувати / dev / fb0 як консоль з простору користувачів або виводити текст до неї


24

Отже, у мене є модель Palm Pre (оригінальний P100EWW), для якої я ввімкнув режим розробника, і встановив chroot Debian Squeeze. Чудово працює. Я маю намір використовувати це для будь-якого (bittorrent peer, веб-сервер), але телефону.

Я помітив, що якщо я це роблю, cat /dev/urandom > /dev/fb0він фактично записує на екран випадкові пікселі, поки не No space left on deviceсформується помилка. Дивовижно, тепер я можу використовувати дисплей.

Отже, які утиліти існують, що будуть або A) дозволити мені використовувати / dev / fb0 в якості консолі, до якої я можу вивести текст, або B) надати текст в / dev / fb0 з командного рядка.

Я ще не знаю про перекомпіляцію ядра для цього (я хотів би врешті-решт позбавити WebOS повністю і перетворити це на мінімальний сервер ARM), тому інструменти для простору користувачів, якщо вони існують, це те, про що я прошу. Також вважає за краще візуалізувати безпосередньо в / dev / fb0, а не використовувати X.


Віртуальні консолі Linux повинні працювати над драйвером фреймбуфера. Віртуальні консолі - потужний інструмент; з Linux 2.6 вони дозволяють встановлювати різні шрифти для кожної консолі. Але вони контролюються (з простору користувачів) через / dev / vcs  n та / dev / vcsa  n , а не / dev / fb0.
Incnis Mrsi

Відповіді:


11

Щоб використовувати фреймбуфер як консоль, вам потрібен fbdevмодуль. Можливо, вам доведеться перекомпілювати ядро.

Вас також може зацікавити проект DirectFB - бібліотека, яка полегшує використання фреймбуфера. Для цього вже написані програми та середовища GUI.


1
Схоже, коли я встановив Directfb ( webos-internals.org/wiki/Directfb ), він dfbgпоставився з утилітою, яка називається, що дозволяє мені помістити зображення там (і не видаляє його після завершення, як fbi). Я знаю, що, ймовірно, можна знайти утиліту для створення .png або подібного з тексту тексту, щоб це могло просто працювати ...
LawrenceC

24

Кілька людей відповіли на частини вашого питання, що стосуються ядра та розміщують зображення (а не текст) на фреймбуфер, але поки що решта залишається без адреси. Так, ви можете використовувати підсистему віртуального терміналу ядра для створення так званої консолі framebuffer . Але є кілька інструментів, які дозволяють використовувати пристрій framebuffer для створення віртуальних терміналів у просторі користувача . До них належать:

  • zhcon ( Debian ) - віртуальний термінал простору користувача, спрямований на обробку вводу-виводу CJK набагато краще, ніж підсистема ядра. Його особлива сила полягає в обробці кодувань, що не належать до UTF ISO 2022; особливою його слабкістю є кодування UTF.
  • fbterm ( Debian ) - віртуальний термінал простору користувача, який породив кілька форк, включаючи jfbterm . Він має купу плагінів методу введення CJK.
  • bogl-bterm ( Debian ) - віртуальний термінал простору користувача, який породив вилки, такі як niterm .
  • Алі Gholami Руді fbpad - віртуальний термінал мінімалізму , яка не в просторі користувача має залежностей від X бібліотек.
  • console-terminal-emulatorІ console-fb-realizerінструменти в Nosh - віртуальний термінал в просторі користувача , спрямованих на тиражування Linux і FreeBSD / PC-BSD Kernel віртуальних терміналів. Він також не має залежностей від X-бібліотек.
  • kmscon - віртуальний термінал простору користувача, який тісно пов'язаний із logindсервером у systemd та його поняттями "місця".

Зокрема, Алі Голамі Руді створив більше, ніж просто емулятор терміналу для роботи з кадром. Він також написав переглядач PDF прямого кадру, переглядач VNC, медіаплеєр та читач Корану.

Повне порівняльне порівняння виходить за межі цієї відповіді; але ось деякі моменти, що стосуються питання:

  • Як зазначалося, декілька віртуальних термінальних програм у просторі користувача використовують X-бібліотеки для обробки шрифтів, відображення на клавіатурі, методів введення CJK тощо. Вони не X-клієнти, але вони мають залежність від X-бібліотек. fbpadа інструменти носа за допомогою дизайну не використовують жодної X бібліотеки.
  • Програми, які використовують X-бібліотеки для обробки шрифтів, звичайно, використовують X-шрифти. Інші домовляються про інші.
    • і bogl-bterm, і fbpad мають свої власні формати шрифту. Один перетворює шрифти BDF в шрифти BOGL за допомогою bdftoboglінструменту; і один перетворює TTF у шрифти "tinyfont", які використовуються fbpad за допомогою інструменту ft2tf ( Arch ).
    • Інструмент nosh console-fb-realizerвикористовує ті самі "vt" шрифти, що й нова підсистема віртуального терміналу ядра FreeBSD 10.1 , і таким чином ділиться інструментом vtfontcvtдля управління шрифтом FreeBSD для перетворення шрифтів BDF.
  • Програми, що використовують X-бібліотеки, використовують відображення X-клавіатури. Щодо інших:
    • Інструменти носа мають власний ідіосинкратичний формат карт клавіатури, призначений забезпечити повноцінну клавіатуру ISO 9995-3 з ISO "загальною" групою 2. Перетворює файли BSD kbdmap у цей формат за допомогою console-convert-kbdmapінструменту. Знову ж таки, ці файли kbdmap - це ті, що використовуються з підсистемою FreeBSD / PC-BSD vt .
    • fbpad взагалі не робить власне відображення клавіатури, а для цього покладається на наявність підсистеми віртуального терміналу ядра та її механізму відображення клавіатури.
  • Існує певна різниця у виклику та необхідних привілеях:
    • zhcon, fbterm, bogl-bterm, fbpad і kmscon працюють на основі того, що емулятор термінала створює програму shell / login на терміналі безпосередньо в якості дочірнього процесу. Для їх нересту вони потребують привілеїв суперпользователя login.
    • Носові інструменти були розроблені для інтеграції з існуючою /etc/ttys(BSD), /etc/inittab(системою Linux 5 init) або іншою системою, до якої вони залишають роботу з нересту getty / login / shell. console-fb-realizerпотрібно лише достатньо привілеїв, щоб відкрити пристрої фреймбуфера і введення подій, які не повинні бути привілеями суперпользователя, а також отримати доступ до FIFO і звичайних файлів, що підтримуються console-terminal-emulator, що, в свою чергу, зовсім не потребує спеціальних привілеїв.

Все це, звичайно, термінальні емулятори . Якщо ви хочете вийняти емуляцію термінала і поставити текст на рамку буфера безпосередньо, у вас є кілька варіантів:

  • bogl-bterm, звичайно, базується на власній графічній бібліотеці Бена Пфаффа, бібліотеці вводу / виводу кадрів Бен Пфаффа, розробленої для використання в середовищах налаштування / порятунку (та "для графічних інтерфейсів у КПК" ). Ви, звичайно, можете писати програми, які безпосередньо використовують це.
  • На півдорозі між написанням програми, яка використовує бібліотеку фреймбуферів, щоб зробити власне візуалізацію, і програмою, яка випльовує послідовності евакуації до того, що, на його думку, є терміналом: віртуальний термінал, що користується простором користувача, є модульним і розпадається на складові частини. Не можна просто не користуватися console-terminal-emulator.

    console-fb-realizerвикористовує файл відображення з масивом символьних комірок, як /dev/vcsa*звичайний файл (а не спеціальний файл пристрою символів) та з кодовими точками Unicode, атрибутами ECMA-48 та кольором 24-бітового RGB. Таким чином, можна запустити його та просто записати символ + атрибут + колір безпосередньо у файл масиву символьної комірки, дозволяючи console-fb-realizerробити візуалізацію шрифту до фреймбуфера.

    Як бік: Зауважте, що це протилежність інтеграції з BRLTTY , яка використовує, console-terminal-emulatorале не працює console-fb-realizer.


1
Це дивовижна відповідь. Бібліотеки Просвітництва вимагають підтримки фреймбуфера в Linux fbcon- залежно від параметрів часу компіляції . Це також стосується їх залежного емулятора терміналу Термінологія : Працює безпосередньо в linux framebuffer (fbcon) . Окрім того terminology, я другий kmscon (та інший твір Девіда Геррмана) рекомендую сам .
mikeserv

1
Руді - майстер фреймбуфера! Одного разу я також відкину X11.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

10

Якщо ви можете котити /dev/urandom > /dev/fb0і отримувати випадкові пікселі на екрані, у вас є все необхідне.

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

У зайнятій скриньці або у вашому рашпі має бути 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

Окрім очищення екрана, ми маємо запевнити, що ви правильно отримали розміри.

Випадково у мого зайнятої скриньки був двійковий файл fbsplash, який отримує як вхідний файл.

Правильно, якщо я помиляюся, але здається, що fb0приймає цей формат. Подивившись на Portable Anymap у Вікіпедії , є кілька "підформатів" ... 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 символів. У документації сказано, що він повинен бути 1, а не f ... на busybox, а raspi f був яскравішим.

Важливо, щоб у вас не було місця після 0-х ... Це завдання може бути трохи втомливим ... краще скористайтеся текстовим редактором, який вам допоможе. У vim ви можете скопіювати перші два рядки, перейдіть до командного режиму (esc), а потім наберіть наступні символи:

of(esc)479a 0(esc)yy271p

Звичайно, я використовую свої розміри, ви повинні використовувати свої. Отримайте цей файл /dev/fb0, він повинен виглядати так: Екран вертикальної лінії

Гаразд, я обманюю ... це не один рядок там ... це приблизно 8 ... але коли він не працює (у нас неправильні розміри або у нас є пробіл в кінці, мати лише один рядок - це багато легше).

Якщо у вас так далеко, нам потрібно просто надрукувати правильні пікселі, щоб побачити їх як символи. Завдяки Марселю Сондару та його репо на GitHub нам не потрібно буде малювати кожен твір.

За допомогою невеликого налаштування розгорніть його просту програму для друку fзамість, Xа 0замість пробілів, вставляйте пробіли між кожним знаком, додайте заголовок, і у нас є файл .ppm з буквою, що відповідає його коду.

Ще один невеликий крок далі, і ви отримуєте не графік як вхід, а рядок. Прокрутіть файл, передайте програму та виведіть текст, /dev/fb0і ви отримаєте текст:

Приклад виведення тексту

Я тестую це рішення також на малиновому пі, і воно спрацювало. Система каже мені, що я не маю репутації розміщувати більше 2 посилань. Поки я цього не отримаю, ти повинен покластися на моє слово: D


2

Що стосується консолі, ви можете переглядати матеріали /dev/consoleабо використовувати syslog, і залежно від різних інших параметрів це може відображатися на консолі.

Щодо зображень, я просто спробував ввести bmp-файл у fb0, і він фактично спрацював! (сортоф - кілька копій, менший розмір)

Я знайшов програму ВМР-к-фреймбуфер тут . Це має бути ідеальним прикладом формату, який очікує fb0. Також є fbiпрограма для запису безпосередньо в буфер кадру.


fbiдозволяє мені розмістити зображення на екрані, що корисно, але він очищає кадр буфер після його виходу.
LawrenceC

0

Це стара публікація, але я розумію, що для запуску консолі на framebuffer вам потрібна консоль framebuffer (fbcon). Це в конфігурації. (драйвери пристрою / графіка / дисплей консолі ..)

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