Как известно в ядро 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 system — qiv. Можно добавить и тому и другому
опций по вкусу.
Еще одно несовсем обычное применение: Однажды мне захотелось посмотреть слайдшоу именно
в консоле, причем порядок изображений должен быть случайным. 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)
}