+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 89.25 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

Можно вот так взять и сделать МФУ из дешевого сканера в GNU\Linux

07.12.2012 12:11
iidolm

Встала задача помочь своей фирме сэкономить. Не покупать дорогие МФУ типа xerox 3300mfp за ~22 тыс. рублей, а обойтись подручными или более дешевыми средствами.

Задачи:
1. Сканировать в сетевую папку
2. Ксерокопировать документы
3. Делать pdf из отсканированного изображения

Что имеем:
1. ПК под управлением Kubuntu 12.04.1x64(Тестовый вариант. В дальнейшем будет перевод на бездисковый неттоп на atom'е + Ubuntu(Centos?) server)
2. Уже старый принтер HP p1505n
3. Взятый на пробу сканер HP Scanjet G2710

Перед тем как взяться за задачу, надо было выяснить какие есть самые дешевые сканеры в наличии в моем городе, и есть ли они в списке поддерживаемых моделей у SANE. 
Выбор пал на 2 сканера, G2710 и BearPaw. Выбран был HP исходя из того что под BearPaw необходимо закачивать файлик с драйверами, а нам необходим самый простой вариант. Неизвестно сколько этот файлик будет храниться на файлообменниках, но если вдруг что случится - лучше иметь "искоробочное" решение. 

Поизучав форумы решение нашлось быстро. Необходима связка sane +scanbuttond. Не смотря на устаревшую информацию на официальном сайте scanbuttond, последние сборки, по крайней мере в репах, более свежие. Обе утилиты есть в стандартных репозиториях. Использовал их без всяких PPA. 

Версии утилит:

Через sane сканер заработал без каких либо плясок с бубном. Но встал вопрос - как использовать 3 имеющиеся на борту кнопки? Вот здесь нам и поможет scanbuttond. Ставим утилиту. Правим конфиг. В убунте по дефолту он находится в /etc/scanbuttond/initscanner.sh.example. Копируем пример в рабочий вариант(я пользуюсь vi, так что копипастите аккуратно, не забудьте сменить vi на имя вашего любимого редактора):

cp /etc/scanbuttond/initscanner.sh{.example,} && vi /etc/scanbuttond/initscanner.sh

и пишем в конец строку

scanimage -L

Cохраняем.
Подключаем сканер, делаем sane-find-scanner. Если все ok, запускаем в терминале scanbuttond с ключом -f и нажимаем кнопки на сканере(у меня после запуска scanbuttond -f проходит ~7 секунд до момента когда он начинает обрабатывать нажатия).

По "выхлопу" видно какой номер у каждой кнопки. Записываем или запоминаем их номера, после чего правим конфиг обработки нажатий.

cp /etc/scanbuttond/buttonpressed.sh{.example,} && vi /etc/scanbuttond/buttonpressed.sh

Разработчик(и) постарались и накидали нам уже несколько готовых примеров, которые помогут нам осуществить задуманное.
На 16 строке у нас есть две интересующие нас переменные - TMPFILE и TMPFILE_PDF. Для них прописываем путь куда будут класться отсканированные документы и документы сконвертированные в pdf соответственно. 

Например:

TMPFILE="${SAVEPATH}${DATE1}scan.jpeg"
TMPFILE_PDF="${SAVEPATH}${DATE1}scan.pdf"

Переменные $DATE1, $DATE2 и $SAVEPATH прописаны мною выше и выглядят так:

DATE1=$(date +%Y_%m_%d_%H%M%S)
DATE2=$(date +%Y_%m_%d_%H:%M:%S)
SAVEPATH="/home/panda/Scan/"

SAVEPATH, понятно, может быть любым. Ну или почти любым. Планируется использовать подключенную сетевую папку через fstab, так что проблем быть не должно.
Остальные 2 переменные TMPFILE_PS и LOCKFILE я не трогал, ибо их дефолтные значения меня вполне устраивают.

Теперь что касается настройки кнопок. У меня это выглядит следующим образом

case $1 in

        1)
                echo "$DATE2 -- Button 1 has been pressed on $2"
               	echo -ne '\007' > /dev/null 2>&1
        mplayer /usr/share/sounds/KDE-K3B-Insert-Medium.ogg > /dev/null 2>&1
        scanimage --resolution 300 --device-name $2 --mode Color -x 210 -y 297 / pnmtops -width=8.27 -height=11.69 > $TMPFILE_PS
                ps2pdf $TMPFILE_PS $TMPFILE_PDF
        echo "$DATE2 -- PDF create done"
                ;;

        2)
                echo "$DATE2 -- Button 2 has been pressed on $2"
        echo -ne '\007' > /dev/null 2>&1
        mplayer /usr/share/sounds/KDE-K3B-Insert-Medium.ogg > /dev/null 2>&1
        SCAN_OPTIONS="--resolution 300"
        scanimage --device-name $2 $SCAN_OPTIONS / pnmtops -width=8.27 -height=11.69 / lpr -J $2 $PRINTER
                lockfile-remove $LOCKFILE
        echo "$DATE2 -- Print done"
        ;;

    3)
        echo "$DATE2 -- Button 3 has been pressed on $2"
        echo -ne '\007' > /dev/null 2>&1
        mplayer /usr/share/sounds/KDE-K3B-Insert-Medium.ogg > /dev/null 2>&1
        scanimage --resolution 300 --mode Color --format=jpeg -x 210 -y 297 --device-name $2 > $TMPFILE
        convert $TMPFILE -quality 70 $TMPFILE 
            echo "$DATE2 -- Scan image done"
        ;;

esac

Из кода понятно, что первая кнопка делает из полученного изображения PDF, вторая сканирует и выводит на печать на принтер по умолчанию(ксерокопия), а третья - просто сканирует.
Note: Надо заметить, что при сканировании у меня используется утилита convert, входящая в пакет imagemagic. Через нее получаем jpeg с приемлемым размером изображения.

Так же у меня на каждую кнопку повешены события типа 

echo -ne '\007' > /dev/null 2>&1

и

mplayer /usr/share/sounds/KDE-K3B-Insert-Medium.ogg > /dev/null 2>&1

Первое пищит спикером(что актуально для сервера без иксов), а второе через mplayer выводит звуковое уведомление(актуально для машин с иксами, т.к. первый пункт работает почему-то только из tty{1-6} ). Это сделано для того, что бы понять что кнопка на сканере была нажата. Потому что кнопки бывают разные, нажимаются иногда криво и не понятно, сработало нажатие, или нет. Понятно что это все можно закомментировать или оставить по вкусу.

Включить пищалку можно закомментировав в файле /etc/modprobe.d/blacklist.conf строки содержащие

blacklist snd_pcsp

и

blacklist pcspkr

Т.е. должно выглядеть так:

#blacklist snd_pcsp

и

#blacklist pcspkr

или установить пакет beep и вызывать его в скрипте.

Осталось всё это чудо записать в автозапуск. Создаем файлик /etc/init.d/scan и пишем в него:

#!/bin/bash
killall scanbuttond
scanbuttond -f >> /home/panda/Scan/scanlog.log 2>&1 &

Я сделал себе логирование, которое выглядит примерно так:

Можете перенаправить вывод и в /dev/null, и в /var/log/, как хотите. Мое дело предложить ;)

Даем права на исполнение и прописываем в rc.d:

chmod +x /etc/init.d/scan && update-rc.d scan defaults 80

Собственно на этом настройка закончена. Куда класть изображения, формат логирования, наличие оного - всё зависит от вашей фантазии, благо в scanbuttond можно прописать любой скрипт.

Итог:
Данный способ подходит для тех мест, где уже есть принтер и ПК на который это все дело можно повесить. Что бы не покупать еще дорогое МФУ - проще купить сканер. Ежели покупать неттоп + принтер + сканер, то расценки в нашем городе такие:
Неттоп ~ 10 000 р
Принтер ~ 1 550 р
Сканер ~ 3500 р

Итого ~ 15 000 рублей (если брать все с нуля) против ~22 000 рублей за сетевой МФУ (с функцией сканировать в сетевую папку) которое мы брали в отделы. Для себя я задачу решил с экономией, т.к. взяли только сканер.

Спасибо за внимание. 

P.S. Полный листинг /etc/scanbuttond/buttonpressed.sh очищенный от всего лишнего:

#!/bin/sh


DATE1=$(date +%Y_%m_%d_%H%M%S)
DATE2=$(date +%Y_%m_%d_%H:%M:%S)
SAVEPATH="/home/panda/Scan/"
TMPFILE="${SAVEPATH}${DATE1}scan.jpeg"
TMPFILE_PDF="${SAVEPATH}${DATE1}scan.pdf"
TMPFILE_PS="/tmp/scan.ps"
LOCKFILE="/tmp/scan.lock"


# Lock file handling and GNOME examples for buttons 2, 3, 4 below contributed
# by Lutz Müller <lutz@topfrose.de>.


if ! lockfile-create --retry 2 $LOCKFILE; then
  echo "$DATE1 -- Error: scanning already in progress for $2"
  exit
fi

rm -f $TMPFILE
rm -f $TMPFILE_PDF
rm -f $TMPFILE_PS

case $1 in

        1)
                echo "$DATE2 -- Button 1 has been pressed on $2"
        echo -ne '\007' > /dev/null 2>&1
        mplayer /usr/share/sounds/KDE-K3B-Insert-Medium.ogg > /dev/null 2>&1
        scanimage --resolution 300 --device-name $2 --mode Color -x 210 -y 297 / pnmtops -width=8.27 -height=11.69 > $TMPFILE_PS
                ps2pdf $TMPFILE_PS $TMPFILE_PDF
        echo "$DATE2 -- PDF create done"
                ;;

        2)
                echo "$DATE2 -- Button 2 has been pressed on $2"
        echo -ne '\007' > /dev/null 2>&1
        mplayer /usr/share/sounds/KDE-K3B-Insert-Medium.ogg > /dev/null 2>&1
        SCAN_OPTIONS="--resolution 300"
        scanimage --device-name $2 $SCAN_OPTIONS / pnmtops -width=8.27 -height=11.69 / lpr -J $2 $PRINTER
                lockfile-remove $LOCKFILE
        echo "$DATE2 -- Print done"
        ;;

    3)
        echo "$DATE2 -- Button 3 has been pressed on $2"
        echo -ne '\007' > /dev/null 2>&1
        mplayer /usr/share/sounds/KDE-K3B-Insert-Medium.ogg > /dev/null 2>&1
        scanimage --resolution 300 --mode Color --format=jpeg -x 210 -y 297 --device-name $2 > $TMPFILE
        convert $TMPFILE -quality 70 $TMPFILE 
        echo "$DATE2 -- Scan image done"
        ;;

esac

lockfile-remove $LOCKFILE

Ссылки по теме

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года