Не удается очистить /dev/fb0

Вопрос или проблема

У меня есть один из тех 7-дюймовых HDMI-дисплеев с eBay, подключенный к плате Q1900, работающей на Ubuntu 20. Я могу выводить изображения на дисплей с помощью fbi:

sudo fbi -a -T 1 --noverbose -d /dev/fb0 -t 5 --blend 1000 "${PICTURE}"

Но изображения, похоже, остаются в фреймбуфере или на панели. Когда я вывожу второе изображение, дисплей чередуется, показывая оба.

Я пробовал dd if=/dev/nul of=/dev/fbo и просто /dev/fbo.

Ни одно из них не работает. Я не пробовал перезапускать Linux, но перезапуск панели ничего не дает. Если мне придется перезапустить компьютер, это просто не сработает для меня.

Существует ли команда для очистки фреймбуфера, или это не то, что мне нужно сделать?

TI

Хорошо, я разобрался. Ранее я использовал

sudo fbi -a -T 1 –noverbose -d /dev/fb0 -t 5 –blend 1000 “${PICTURE}”

Но -t 5 запускает fbi в цикле на 5 секунд

Делая это

sudo fbi -1 -a -T 1 -d /dev/fb0 “$1”

работает отлично, обратите внимание на параметр -1

Кроме того, когда вы запускаете fbi, он продолжает работать, так что у меня было 10 копий, работающих одновременно. Я верю, что параметр -1 это исправляет, или просто использование killall fbi перед добавлением новых изображений.

Я считаю, что это решает проблему.

Ответ или решение

Вопрос касательно невозможности очистки /dev/fb0 является распространённой проблемой среди пользователей, которые работают с фреймбуфером в операционной системе Linux. На первый взгляд, задача кажется простой – просто очистить фреймбуфер, чтобы предотвратить показ старых изображений. Однако в действительности проблема гораздо глубже и требует более полного понимания работы системы в целом.

Теория

Фреймбуфер в Linux, обозначаемый как /dev/fb0, представляет собой устройство, которое используется для прямого обращения к видеопамяти системы. Оно позволяет программам напрямую записывать данные в видеопамять, минуя графический сервер, что даёт возможность отображать изображения на экране без необходимости работать через X-сервер или другие пользовательские интерфейсы. В вашей ситуации, вы использовали утилиту fbi для вывода изображений на ваш дисплей.

Утилита fbi специально разработана для отображения изображений в консольных средах, но она работает как самостоятельный процесс, который, как вы обнаружили, может оставаться запущенным даже после визуализации изображения. Это может привести к неочищенным образам в фреймбуфере, что вызывает накопление изображений и мигание между ними при декомпрессии или отображении нового.

Пример

Как вы выяснили, использование параметра -t 5 для fbi приводит к тому, что утилита устанавливает время показа на 5 секунд. Это создает цикл, при котором изображение обновляется каждые 5 секунд. Другими словами, флаг -t 5 предписывает fbi продолжать работать, обновляя изображение в цикле. Такое поведение не является желаемым в вашем случае, так как вы хотите отобразить только одно конкретное изображение и затем завершить отображение.

Применение параметра -1 позволяет задать fbi однократное отображение изображения, после чего процесс завершается. Таким образом, при показе нового изображения старое автоматически заменяется. Это предотвращает накопление ненужных процессов и обновлений в фреймбуфере.

Применение

Для практического решения вашей задачи, вам следует закрыть все активные копии fbi, которые могут продолжать работать фоном, например, с помощью команды killall fbi. Это остановит все процессы fbi и освободит ресурсы системы. Затем для отображения изображения используйте команду:

sudo fbi -1 -a -T 1 -d /dev/fb0 "${PICTURE}"

Такое использование гарантирует, что изображение будет выведено однократно, и процесс fbi завершится автоматически. Это предотвратит мигание изображений и накопление активных процессов в памяти.

Также, если вам необходимо полностью очистить фреймбуфер, хотя это обычно не требуется, вы можете заполнить его черным (или другим одноцветным) изображением, тем самым визуально "очистив" экран.

На практике, использование killall fbi перед новой загрузкой изображений и параметр -1 в fbi является оптимальным решением для автоматизации вашего процесса вывода изображений в среде Linux на фреймбуфере. Это позволит избежать ненужных перезагрузок и даст возможность работать с большим количеством изображений без визуальных помех.

Оцените материал
Добавить комментарий

Капча загружается...