2006-11-28
Как известно в ядро Linux уже встроена поддержка работы в графическом режиме через т.н. фреймбуфер. Однако, в силу ряда причин, программ эксплуатирующих эту предоставленную возможность крайне мало. Но мало это не значит, что нет вовсе. Так, например, прямо в консоли можно воспроизводить видео или просматривать изображения.
Как раз о просмотре изображений и пойдет речь в этой заметке. Выбор программ-просмоторщиков — «вьюверов» — работающих во фреймбуферной консоли очень ограничен. Рассмотрим чуть ли не единственного более-менее широко известного представителя этого класса программ — fbv.
fbv расшифровывается как FrameBuffer Viewer (ФреймБуферный Просмоторщик). Своё название он оправдывает полностью. И хотя не может похвастаться возможностями своих собратьев работающих в X Window System, базовый функционал «программы-смотрелки» fbv отрабатывает справно. А именно:
Поддерживает форматы jpg, png, bmp, gif (без анимации). Правда, отказывается работать с tiff'ами, и иногда наблюдаются проблемы с png изображениями в индексированной палитре.
Как и положено консольному приложению, основным для 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) }