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