FrameBuffer Viewer

Алексей Корельский aka snake

2006-11-28

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

Как раз о просмотре изображений и пойдет речь в этой заметке. Выбор программ-просмоторщиков — «вьюверов» — работающих во фреймбуферной консоли очень ограничен. Рассмотрим чуть ли не единственного более-менее широко известного представителя этого класса программ — fbv.

fbv расшифровывается как FrameBuffer Viewer (ФреймБуферный Просмоторщик). Своё название он оправдывает полностью. И хотя не может похвастаться возможностями своих собратьев работающих в X Window System, базовый функционал «программы-смотрелки» fbv отрабатывает справно. А именно:

  • Поддерживает форматы jpg, png, bmp, gif (без анимации). Правда, отказывается работать с tiff'ами, и иногда наблюдаются проблемы с png изображениями в индексированной палитре.

  • Поддерживает возможность промотки изображения, если оно не помещается на экран. Для этого нужно использовать курсорные клавиши клавиатуры, либо кнопки «a», «d», «w» и «x».
  • Поддерживает подгонку изображений под размер монитора, двух типов — простую и по улучшенному алгоритму. При этом картинки исключительно уменьшаются, что бы полностью поместится на консоле. Если изображение не превышает размеров экрана, то оно всегда демонстрируется как есть.
  • Поддерживает просмотр нескольких изображений перечисленных в качестве аргументов командной строки. Переход к следующему изображению осуществляется по клавише «enter», либо «пробел», к предыдущему — «backspace».
  • Поддерживает возможность показа изображений в режиме слайдшоу. Для этого необходимо в командной строке указать ключ «-delay» или «-s» и задержку в десятых долях секунды.

Как и положено консольному приложению, основным для fbv является интерфейс командной строки:

	fbv [опции] image1 image2 image3 ...

Разумеется, поддерживаются метасимволы шела — «*», «?» и пр.

Выход из программы по нажатию «enter», либо «пробел» после достижения последнего изображения в последовательности, либо по нажатию клавиши «q».

Приложение

fbv очень хорошо интегрируется с файловым менеджером MC. Для этого нужно найти файл /usr/share/mc/mc.ext и отредактировать в нем секцию include/image

примерно следующим образом:

include/image
	Open=if [ "$DISPLAY" = "" ]; then fbv %f; else (qiv %f &); fi
	View=%view{ascii} identify %f

В результате, при щелчке по графическому файлу в консоле будет вызываться fbv, а в X Window systemqiv. Можно добавить и тому и другому опций по вкусу.

Еще одно несовсем обычное применение: Однажды мне захотелось посмотреть слайдшоу именно в консоле, причем порядок изображений должен быть случайным. fbv штатно не поддерживает такого режима. Чтобы обойти это граничение я быстренько набрасал скриптик на perl'е:

#!/usr/bin/perl

#This script read from STDIN array of any text strings, #stongly shuffle it and print it back to SDTOUT. #It can be useful in command pipe, to get randomazed list of #arguments: # # fbv -k -s 50 `find ~ -name "*.jpg"|shuffle` # #Command above starts in frame buffer console slide show from #all jpeg images at curent user's home. (fbv can not randomaze #images by it self)

@list = <STDIN>;

for ($i = 0; $i < 2*$#list; $i++){ ($first, $second) = random_indexes($#list+1); @list[$first, $second] = @list[$second, $first]; } print @list;

sub random_indexes{ $x = $y = int(rand($_[0])); while ($x == $y){ $y = int(rand($_[0])); } return ($x,$y) }