Что можно сделать из сломанного сканера. Делаем фотоаппарат из старого планшетного сканера

Исследования

От добрых людей попал мне в руки вот такой достаточно престарелый сканер, Mustek 6000p, аппарат времен Windows 95 и больших белых пластиковых корпусов. Как раритет большой ценности он не представляет, но выбросить, не заглянув внутрь, жалко).


Собственно, все его электронное содержимое, корпус отправляется на помойку.

Осветитель из сканирующей каретки - обычная флуоресцентная лампа с холодным катодом (CCFL), подобные используются в подсветке LCD-матриц.

Плата с каретки. В левой части видим высоковольтный инвертор, пришло время попробовать зажечь лампу.

В левом углу - интегральный стабилизатор 7812, обозначенный как Q8, по нему легко понять, по каким дорожкам инвертор получает питание. На его входе при включении сканера около 14 вольт, но лампа не горит, как ее запустить? К участку платы с инвертором ведет не так уж и много дорожек от разъема, которым плата каретки соединяется с основной платой, поэтому предположим, что на транзисторе Q5 собран ключ, запускающий лампу.

Замкнем пинцетом резистор R3, соединенный с базой транзистора, на + питания, и… да будет свет!

Разобравшись, что к чему, обрежем все лишнее, впаяем резистор-перемычку между R3 и питанием…

… и штырьки для родного разъема питания принтера.

Получим вот такую аккуратную плату-инвертор, проверяем еще раз.

Для освещения рабочего места этого, конечно же, недостаточно, но можно сделать в каком-нибудь ящике подсветку по принципу лампы в холодильнике. В качестве донора корпуса неплохо подошла не менее престарелая мышь, ровесница сканеру. Выключателем же будет геркон с нормально замкнутыми контактами.

В собранном виде. Жаль, что кнопки не несут никакой функциональной нагрузки=)

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

Для освещения небольшого пространства более чем достаточно

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

Для начала небольшое вступление.

Как то раз пришло время уборки на работе, разгрести завалы старых коробок из-под мониторов, принтеров, корпусов и т.п. И разбирая сии завалы, на мои глаза попались два старых сказевых сканера UMAX 1200S и по-моему 600S.
И пришло время над ними поиздеваться, как в свое время они издевались надо мной.

Быстренько разобрав первый 1200, я вынул оттуда все более-менее полезное, а именно: каленый штырь, по которому ездил комплекс сканера с лампой, микросхему и сам сканирующий датчик с системой зеркал. Вынув все потроха, я решил разобраться, что же там ценного есть. Не знаю технологий тех лет, но датчик сканирующий оказался на вид позолоченным как снаружи, так и внутри. Золото меня не прельстило, разбор сканера продолжился.
Кроме систем зеркал в основной движущейся части сканера и линзы, была лампа, очень похожая на лампу дневного света, но толщиной всего пару миллиметров.

К лампе была подключена схема питания, от которой на разъеме отходило два провода, что меня сильно прельстило подключить ее к какому-нибудь источнику постоянного тока. Благо в предыдущей коробке было несколько блоков питания от свитчей, мониторов и фиг знает от чего еще.

Разобрав весь хлам и выкинув лишнее, я приступил к испытаниям.

Для начала был выбран блок питания на 5вольт и 2ампера. Подключив лампу, я увидел, что она загорелась, но не полностью. Несколько см в дальнем участке лампы были темными. Пришло время 9-ти вольтовому блоку питания с 2,2 амперами. (тот что выше)
Лампа при этом загорелась достаточно ярко и полностью.

Зная, что сканер работал от блока питания 12в 2а и, зная горячий нрав лампы, а так же то, что она не предназначена для постоянной работы, я не стал подбирать б.п. большей мощности, тем более что яркости для меня оказалось достаточно.

И так, придя домой, я нашел применение этим лампам - осветить пространство под столом.

Давно меня раздражало то, что под столом, подлезая к компу, мне приходилось брать фонарик и при этом возникало несколько проблем как с батарейками к нему, так и с тем, что одна рука занята и надо отвлекаться, следя за тем, куда светит фонарик. Решено было подвесить лампу под столом, примечено место и разложены инструменты.

Оказалось очень удобным то, что штатный отражатель лампы из сканера был съемным и со своим креплением.

Подошло время для создания коробочки под схему питания лампы, дабы не висеть ей оголенной и некрасивой. Для этого был взят плакатный белый пластик толщиной 6мм и нижняя пустышка-болванка из бобины с болванками.

Из инструментов понадобилось: Dremel с режущим диском, круглый надфиль, два маленьких сверла (в моем случае под шестигранник), нож для бумаг со сменными лезвиями, паяльник и отвертки.

Из имеющегося было: разъем под нужный блок питания, двусторонний скотч, два маленьких шурупчика и длинный винт с гайкой.
Аккуратно отрезаем ножом два приблизительно одинаковых куска пластика и склеиваем их маленьким кусочком двустороннего скотча, чтобы выровнять их по краям Дремелем.

Не забывая надеть защитные очки и желательно респиратор, приступаем к работе.

Немного отступлю, очки понятно для чего, а вот назначение респиратора я немного объясню. Дело в том, что Дремель работает с вращением до 33-х тысяч оборотов в минуту и пыль от работы с ним получается достаточно мелкой. И чтобы не вдыхать непонятно из чего состоящую пыль – нужен респиратор

Хорошенько загадив все рабочее место и сделав два куска пластика одинаковыми, приступаем к вырезанию отверстия под разъем питания при помощи ножа и карандаша.
Достаточно извазюкав карандашом верхнюю часть разъема питания, и приложив к нужному месту на пластике - получим примерный трафарет для вырезания.
Вырезав, прикладываем обе пластмасски к схеме, заранее вставив разъем питания. Далее смотрим как пройдет основной винт крепления через всю конструкцию, намечаем отверстие сначала с одной стороны, и, просунув в уже просверленное отверстие, намечаем и делаем второе отверстие.
Далее берем вторую пластину, там, где будет гайка. Продеваем и закручиваем винт с гайкой на ней. Затем гайку с небольшим усилием, при помощи горячего паяльника, вдавливаем в пластик пока она не перестанет выступать. Охлаждаем и выкручиваем винт.
Берем обе крышки нашей коробочки и с внутренней стороны делаем небольшие пассики примерно миллиметр на миллиметр, туда будут вставлены ребра жесткости, так же являющиеся декоративными заглушками закрывающие края схемы питания.
По большому счету почти все готово, осталось только сделать крепления для самой лампы.

Для этого берем все тот же белый пластик и вырезаем два маленьких прямоугольника, делаем сверлами отверстия, сначала маленьким, затем по больше, но отверстия не должны быть точно по центру т.к. тогда крепления не позволят лампе поворачиваться, сделать их нужно с небольшим смещением вниз. Далее закручиваем шурупчиками и наклеиваем двусторонний скотч на внешнее основание получившихся плоскостей крепления.

Вставляем разъем лампы в схему ее питания, а схему - в нашу самопальную коробочку и потихоньку закручиваем, но не до конца.
Теперь приступаем к изготовлению боковых стенок. Для этого намечаем в уже заготовленной "болваночной прокладке" место резки и выпиливаем стенку заранее немного большего размера. Прикладываем к коробке и смотрим, как она подходит. Когда размер понравится - можно делать вторую стенку.
Приложив готовую первую стенку как шаблон - подгоняем вторую по размеру.
Когда все готово и убраны все заусенцы - приступаем к сборке.
Берем схему питания, отрезаем разъем для внешнего подключения питания и припаиваем к нему наш разъем под блок питания. Заново собираем всю коробочку, заранее изолировав все оголенные контакты и почистив все следы возни. Скручиваем, и в конце, вставляем ребра жесткости, после чего закручиваем до такого состояния, чтобы коробочка не развалилась. Если не все хорошо держится, можно ребра жесткости, по краям, проклеить дополнительно суперклеем, дабы оно не развалилось, ни от падения, ни от рук.


У меня получилось не все хорошо, а именно: винт оказался за пределами крышки, так, что его пришлось спиливать.

Затем, на стороне гайки, клеим четыре небольших кусочка двустороннего скотча, дабы потом можно было его быстро и без проблем снять. Еще у меня не нашлось кнопки выключателя, она будет припаяна на шнур б.п. позже.

Если кому-то не хочется так возиться (мне просто надо было понять работу Дремеля с разными материалами), тот может найти любую подходящую коробочку и закрепить схему в ней.

Кто хочет иметь подсветку в корпусе, тому могу посоветовать подключиться к любой 12в линии с нужным сопротивлением.

Так же можно попробовать использовать лампу без ее отражателя (к тому же он не совсем отражатель, а скорее гаситель т.к. он не зеркальный, а бело-черный). Но для этого нужно быть предельно внимательным к концам лампы, так как впаянные в стекло провода достаточно толстые и их можно отломить, либо стекло может потрескаться в этих местах. На краях лампы есть прорезиненные специальные держатели, на них я бы порекомендовал обустраивать какие-то свои крепежи. Лампа проработав около 40 минут с моим б.п. практически не нагрела, ни отражатель, ни резинки по бокам нее. Если подаваемое напряжение на лампу будет больше 9в, то лампа, скорее всего, будет перегреваться, и, возможно, выйдет из строя. Если вы решите использовать ее без отражателя, хотя она и будет освещать все вокруг, но также будет светить и в глаза, что мне как-то не показалось мало.

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

Итак, готовый вариант..

От добрых людей попал мне в руки вот такой достаточно престарелый сканер, Mustek 6000p, аппарат времен Windows 95 и больших белых пластиковых корпусов. Как раритет большой ценности он не представляет, но выбросить, не заглянув внутрь, жалко).


Собственно, все его электронное содержимое, корпус отправляется на помойку.

Осветитель из сканирующей каретки - обычная флуоресцентная лампа с холодным катодом (CCFL), подобные используются в подсветке LCD-матриц.

Плата с каретки. В левой части видим высоковольтный инвертор, пришло время попробовать зажечь лампу.

В левом углу - интегральный стабилизатор 7812, обозначенный как Q8, по нему легко понять, по каким дорожкам инвертор получает питание. На его входе при включении сканера около 14 вольт, но лампа не горит, как ее запустить? К участку платы с инвертором ведет не так уж и много дорожек от разъема, которым плата каретки соединяется с основной платой, поэтому предположим, что на транзисторе Q5 собран ключ, запускающий лампу.

Замкнем пинцетом резистор R3, соединенный с базой транзистора, на + питания, и… да будет свет!

Разобравшись, что к чему, обрежем все лишнее, впаяем резистор-перемычку между R3 и питанием…

… и штырьки для родного разъема питания принтера.

Получим вот такую аккуратную плату-инвертор, проверяем еще раз.

Для освещения рабочего места этого, конечно же, недостаточно, но можно сделать в каком-нибудь ящике подсветку по принципу лампы в холодильнике. В качестве донора корпуса неплохо подошла не менее престарелая мышь, ровесница сканеру. Выключателем же будет геркон с нормально замкнутыми контактами.

В собранном виде. Жаль, что кнопки не несут никакой функциональной нагрузки=)

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

Для освещения небольшого пространства более чем достаточно

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

Ваш сканер не работает со свежей версией операционной системы? Не спешите бежать в магазин за новым: CHIP предложит универсальное бесплатное решение для любых устройств. CHIP расскажет, как с помощью программы VueScan использовать несовременный сканер для работы с новой ОС Проблемы с использованием устаревших сканеров зачастую связаны с отсутствием последних версий соответствующих драйверов как в Windows, так и у производителей. Однако в большинстве случаев разрешение и качество таких аппаратов еще вполне приемлемое. Конечно, вы можете создать вторую виртуальную ОС и запускать сканирование из нее, но программа VueScan предлагает более практичное решение. Бесплатная базовая версия этого ПО с ограниченной функциональностью позволяет вернуть в строй старый сканер для использования при необходимости. При этом даже стандартная и профессиональная версии этой утилиты стоимостью около 1200 и 2500 рублей соответственно с дополнительными профессиональными возможностями, такими, например, как калибровка, обойдутся вам дешевле, чем новый сканер от известного бренда.

В любом случае попытаться стоит. Для начала убедитесь, что приложение VueScan поддерживает модель вашего сканера. Список устройств вы найдете на сайте программы (короткая ссылка: b23.ru/hc4t). Страница для конкретной модели содержит сведения о поддерживаемых функциях и особенностях. Здесь даже находится ссылка для загрузки последней версии программы. Поскольку часто существуют небольшие исправления, рекомендуем загружать VueScan непосредственно со страницы hamrick.com/#download. Разница в версиях будет заметна впоследствии, в зависимости от того, есть ли у вас лицензионный ключ. Купить программу можно в любой момент, однако все описанные ниже
действия доступны и в базовой версии.

VueScan автоматически распознает работающий сканер и воспользуется имеющимся драйвером. Если устройство еще не функционирует, нажмите комбинацию клавиш «Win+Pause» и запустите Диспетчер устройств. В нем найдите свой сканер в категории «Устройства обработки изображений». Щелкните по нему правой кнопкой мыши и запустите команду «Обновить драйверы». Теперь необходимо выбрать вариант «Выполнить поиск драйверов на этом компьютере». В качестве места расположения задайте «C:VueScan» и нажмите на «Далее». Таким образом можно даже заменить драйвер: сначала удалите старый, перезапустите Windows и подключите драйвер VueScan.

На этапах 2 и 3 в пошаговом руководстве ниже вы увидите, насколько легко и быстро осуществляется сканирование в VueScan по настроенной процедуре. Созданные файлы приличного качества не будут содержать водяных знаков. Помимо этого программа позволит выбрать разрешение сканируемого снимка, тип (расширение) сохраняемого файла, а также заранее задать баланс белого. Вы также можете вручную подправить цвета, подробно оценив их на гистограмме кривых, и сразу улучшить цветопередачу. Кроме того, впоследствии вы сможете настроить яркость, контраст и цвета в графическом редакторе.

Как это сделать?

1 НОВЫЙ ДРАЙВЕР VueScan работает с тысячей даже устаревших моделей сканеров, при необходимости используя собственные драйверы, и позволяет за несколько кликов получить результат благодаря стандартным опциям. Интерфейс программы полностью локализован.

2 БЫСТРОЕ НАЧАЛО РАБОТЫ Выберите в пункте «Задача» значение «Сканирование в файл», задайте «Носитель» - например, «Изображение» - и качество сканирования (типы «Для редактирования» и «Для архива» имеют наивысшее качество). Результатом варианта «Для печати» станут файлы в формате JPEG, а при указании качества «Для редактирования» вы получите TIFF-изображения.

3 ГИБКОЕ КАДРИРОВАНИЕ В режиме просмотра вы можете задать на вкладке «Кадрирование» для рамки автоматический режим с применением многочисленных форматов по умолчанию или же ручной - «Установка пользователем».

4 РАСШИРЕННЫЕ ВОЗМОЖНОСТИ НАСТРОЙКИ Нажмите в нижнем меню кнопку «Больше». Перед вами откроются дополнительные возможности настройки сканирования.

5 ВКЛАДКА «НА ВЫХОДЕ » Здесь вы выбираете место сохранения, тип файла (например, TIFF, PDF, текстовый OCR или RAW), а также дополнительные возможности сохранения. Файл OCR работает даже в базовой версии программы.

6 ЦВЕТОВАЯ НАСТРОЙКА На вкладке «Цвет» вы можете изменить «Цветовой баланс» с варианта «Баланс белого» на «Лампы накаливания» или «Люминисцентные лампы». При оптимизации помогут настройки точки черного, белого, кривой и яркости, которые вы увидите, нажав кнопку «Больше».

7 РАБОТА С КРИВЫМИ В меню «Изображение» выберите пункт «График изображения» для просмотра анализа картинки и воздействия внесенных изменений. Это очень полезно при тонкой настройке.

8 БЕСПРОВОДНОЕ СОЕДИНЕНИЕ Владельцы сетевых сканеров с помощью приложения VueScan Mobile могут сканировать изображения непосредственно на свой iPad или iPhone. Коммерческая версия настольной программы предлагает еще больше вариантов настроек и форматов, а также возможность прямой отправки результатов по электронной почте.

О том, как использовать старый сканер вместе с сервером под Debian для сканирования при нажатии кнопки, да ещё и с автоматической сортировкой.
Зачем это нужно?
Это подходит всем, кого не устраивают завалы бумаги на рабочем месте. К примеру:
  • Школьникам и студентам, тем, у кого актуальна тема груды накопившихся раздаточных материалов в школе, техникуме или университете.
  • Служащим в офисе, у которых таких же бумаг и писем накапливается великое множество
  • Простым людям - для сканирования всяких приходящих писем, счетов и чеков (как известно, чеки имеют свойство выцветать, именно в этом и заключается моя проблема - нужно будет сканировать большое количество чеков, а это не особо удобно)
Как я себе это представляю?
Да очень просто. Положил бумажку в сканер, нажал кнопку, дождался звукового сигнала о конце сканирования и обработки, вынул бумажку, при необходимости - GOTO 10.
И что у меня вышло?
Бесперебойно работающая система, которая также позволяет пакетное сканирование и автоматическую сортировку по папкам, логирование и прочие заморочки - что в скрипт впишешь, то и будет.

Подарили мне как-то сканер Epson Perfection 1200U. Простой сканер, подключаемый по USB, довольно старый, но с хорошим разрешением. Захотелось мне подключить его к своему компьютеру - и тут засада, он рассчитан на 110 вольт. Ладно, позже достал трансформатор, подключил. Работает, но только под Windows XP - под Windows 7 драйверов нет и не предвидится. На рабочем компе Windows 7 x64 - и вот я, как дурак, запускал виртуалку каждый раз, когда нужно было что-то сосканировать, а другого сканера рядом не было.
*Место для горьких сожалений о недобросовестных производителях*

Шло время, рабочий компьютер поменялся по воле неосторожной кружки чая, мать её за ногу. Решил на новый компьютер поставить Debian, ибо привычнее. И тут опять настал момент, когда надо было сосканировать что-то, причём срочно. Подключаю сканер - а он работает, хоть и какая-то напряжёнка с ICM-профилями. Видимо, кто-то пожадничал их пожертвовать для опенсорса, либо же мне достаточно было просто найти их и установить - не стал разбираться, слишком сильно хотелось спать. Самое главное, что стало можно удобно сканировать что угодно. Стоп, а если подключить к серверу без GUI и запустить scanimage? Хм, работает. Класс!

Так, а на корпусе сканера есть кнопочка. Никогда ей не удавалось в Винде воспользоваться, ноль эмоций. Тут, впрочем, тоже. Запрос в Гугл нашёл два проекта - scanbuttond и scanbd. Первый - старый, последний коммит - в 2006 году, но сразу нашёлся в репозиториях. Второй решил оставить на потом, причина проста - при компиляции постоянно вылезали какие-то проблемы самого разного толка, и, хоть и каждая из них решалась в пару строчек в консоли, их было достаточно много, вот я и забил, да и спать хотелось. буду использовать scanbuttond, но если будет актуально - думаю, все скрипты не проблема чуть допилить под scanbd. Вопрос, конечно, в том, насколько не проблема… Но пока - scanbuttond.

Начало работы со scanbuttond
Ставлю scanbuttond из репозиториев, запускаю scanbuttond, смотрю в /var/log/daemon.log, нажимаю кнопочку, sleepbuttond радостно оповещает о том, что кнопочка нажата и затем отпущена. Прикольно!
А дальше что? Дальше всё просто. Первым делом отредактировать /etc/default/scanbuttond и включить запуск демона вместе с системой, ну и запустить его командой service scanbuttond start. Какие скрипты будут вызываться?
Первый - это initscanner.sh.example (переименовываем, граждане, не стесняемся, убираем этот.example), он вызывается каждый раз, когда подключается какой-либо сканер, и в основном (насколько я могу судить) является интерфейсом для подключения различных костылей, ну и иногда - оповещения и логирования.
Второй скрипт интереснее, он уже вызывается непосредственно тогда, когда нажимается кнопка. Называется он buttonpressed.sh.example, ну и последняя часть названия тут опять лишняя. Вызывается этот скрипт каждый раз, когда на кнопку нажимают. Именно в него и нужно совать все эти разные команды сканирования и прочее.
Что ж, сваял два скрипта для того, чтобы обрабатывать нажатие кнопки. Первый - на BASH. Когда нажимается кнопочка, scanbuttond передаёт управление этому скрипту, указывая номер кнопочки и название сканера как $1 и $2. Сканер один, кнопочка одна - мне на аргументы можно и не обращать внимания (всё равно спать хочется), но на потом запомнил. Первый скрипт - buttonpressed.sh - вызывает scanimage с заранее заданными параметрами, переносит готовое изображение в TIFF в папку в домашней директории, конвертирует tiff в jpg и и затем вызывает второй скрипт. Второй скрипт на Python подбирает изображению имя, исходя из занятых имён.

Первый скрипт - buttonpressed.sh

#!/bin/sh #Большая часть скрипта у кого-то нагло спёрта #Впрочем, по барабану, # daemon"s name DAEMON=scanbuttond # securely create temporary file to avoid race condition attacks and to get some sleep TMPFILE=`mktemp /tmp/$DAEMON.XXXXXX` # lock file LOCKFILE="/tmp/$DAEMON.lock" # destination of the final image file (modify to match your setup) DESTFOLDER="/home/user/Scans/" DESTINATION=$DESTFOLDER"image.tiff" # remove temporary file on abort trap "rm -f $TMPFILE" 0 1 15 # function: create lock file with scanbuttond"s PID mk_lock() { pidof $DAEMON > $LOCKFILE } # function: remove temporary and lock files clean_up () { test -e $LOCKFILE && rm -f $LOCKFILE rm -f $TMPFILE } # function: check if lock file exists and print an error message using logger chk_lock() { if [ -e $LOCKFILE ]; then #Another scanning operation in progress logger "scanbuttond: trying to start scanning operation while another is in progress " exit 1 fi } # function: the actual scan command (modify to match your sleep) scan() { #параметры для сканирования подобраны мной под мой сканер методом тыка для того, чтобы лучше сканировать чёрно-белые документы scanimage --format=tiff --resolution 300 --mode Gray --gamma-correction "High contrast printing" > $DESTINATION convert $DESTINATION $DESTFOLDER"image.jpg" logger "Filename: " `python /etc/scanbuttond/convert_scan.py` rm $DESTINATION } chk_lock mk_lock scan clean_up


Второй скрипт - convert_scan.py

import os filename = "image.jpg" directory = "/home/user/Scans" os.chdir(directory) try: filenames = except KeyError: filenames = counter = 1 new_filename = "scan_000.jpg" while new_filename in filenames: new_filename = "scan_"+str(counter).zfill(3)+".jpg" counter += 1 print new_filename os.rename(filename, new_filename)


Для использования меняем переменную DESTFOLDER в первом скрипте и directory во втором.
Начал запускать это всё. Вручную запуск первого скрипта отрабатывает на ура. А вот если по кнопке - то фиг с маслом. Не сразу на сонную голову допёр, что дело в разрешениях, видимо, дело в том, что вывод скриптов никуда не показывался, а запустить scanbuttond в foreground и посмотреть вывод я догадался только к 5 утра. Короче, проблема в том, что в режиме демона все скрипты запускаются от пользователя saned, как и сам демон, в общем-то. Какие же шаги нужно предпринять?
Примем, что scanbuttond запускается от юзера saned, папка для хранения фотографий - /home/user/Scans, а доступ к папке нужно, помимо всего, иметь пользователю user.
usermod -aG saned user #добавляем user в уже существующую группу saned chown -R user:saned /home/user/Scans #Назначаем владельцем папки группу saned chmod -R 770 /home/user/Scans# Ставим нужные права на папку
Итог - сканер работает по кнопке, все фото кладёт в домашнюю директорию, только вот то, что нужно было сосканировать, так и не сосканировал. Короче, как всегда, вместо решения проблемы писал средство автоматического решения. Как всегда, хочется спать.
Но хочется-то большего!

А именно:
Автоматической сортировки сканов по директориям. Как я себе это представляю?

>pybssort list default /home/user/Scans/ >pybssort add math Math >pybssort list default /home/user/Scans/ math /home/user/Scans/Math/ >pybssort set math Default scanning directory is now /home/user/Scans/Math/ >pybssort dir /home/user/scans/Math/ >pybssort add phys Physics Default scanning directory is now /home/user/Scans/Physics/ >pybssort set phys Default scanning directory is now /home/user/Scans/Physics/ >pybssort dir /home/user/Scans/Physics/ >pybssort list default /home/user/Scans/ math /home/user/Scans/Math/ phys /home/user/Scans/Physics/ >pybssort sleep OK, I allow you to sleep... No, wait, finish your article! >pybssort del math OK >pybssort list default /home/user/Scans/ phys /home/user/Scans/Physics/

Команды list, add, del, set предназначены для изменения папки сканирования. Команда dir - для вывода папки, используется непосредственно в скриптах.

В чём смысл?
В любой момент можно изменить папку для сканирования одной командой в консоли. Причём это может сделать любой пользователь - если такое нежелательно, нужно всего лишь изменить разрешения на папку с БД. Вы можете создавать контексты, смотреть их - и всё одной командой.
  • Сначала рассортировали бумаги в кучки на полу по темам, берём архивы с записями по физике.
  • В консоли набираем pybssort add phys Physics.
  • Кладём по листочку, нажимаем кнопку, дожидаемся конца сканирования, выкидываем сосканированный листочек и кладём следующий.
  • Все сканы - в папке /home/user/Scans/Physics.
  • Доходим до записей по математике, набираем pybssort add math Math, сканируем дальше - и все последующие сканы в /home/user/Scans/Math.
  • Нашли ещё листочек с записью по физике, набираем pybssort set phys - и опять всё летит в /home/user/Scans/Physics.

Хм, а как назвать эти вот все default, phys, math? Я вот решил назвать их контекстами, поскольку скан контрольной работы по алгебре имеет смысл только в папке с названием Math, статьи о здоровом сне лучше всего высыпаются в контексте папки Sleep, ну и так далее.

Что в итоге вышло?

Простая программа на Python. Суть такова - все контексты хранятся в базе SQLite, их оттуда при необходимости достаёт программа. Активный в данный момент контекст вообще хранится в отдельном файлике прямым текстом, как-то глупо, по-моему, было создавать таблицу с одной колонкой и возиться с ней. Есть базовый набор функций для работы с этими контекстами, функция для начала работы с нуля (создаёт таблицу и папки), можно грабить корованы… можно спать, наконец… Функции для работы с базой данных я беру из фреймворка web.py, на котором разрабатываю свои мелкие проектики.
Почему не использовать встроенный модуль sleeplite3 sqlite3? Почему я беру целый веб-фреймворк, чтобы взять из него только лишь web.database? Ответ прост - это банальная лень. Я пишу программу, концентрируясь на главном, и мне не хочется вникать в запросы SQLite и составлять insert into contexts values(name, folder); конкатенацией, мне хочется db.insert("contexts", name=name, folder=folder) и спать. Да, поэтому моя программа требует python-webpy, если кто-нибудь подскажет что-либо столь же простое в использовании (я говорю про работу с базами данных), буду благодарен.

Что нужно сделать для установки?
wget https://gist.github.com/CRImier/7330722/raw/pybssort.py #Изменяем начальную директорию для сканирования nano pybssort.py chmod +x pybssort.py mv pybssort.py /usr/local/bin/pybssort

Отмечу - её в первый раз нужно запускать от рута, поскольку это нужно для создания папок в /var/lib, чтобы хранить там базу данных. После первого запуска рут не требуется. Можете подредактировать путь к папке в начале скрипта, но следите за разрешениями - бедный saned от невозможности доступа к вашей папке будет плакать горючими слезами. Вы ведь не хотите его расстроить, верно?

А как её связать с уже существующими скриптами? Да просто в первом скрипте нужно вставить "pybssort dir" вместо захардкоженной DESTINATION, а во второй скрипт ту же переменную передать аргументом командной строки.
Как-то так:

Первый скрипт

... # destination of the final image file (modify to match your setup) DESTFOLDER=`pybssort dir` DESTINATION=$DESTFOLDER"image.tiff" ... # function: the actual scan command (modify to match your setup) scan() { scanimage --format=tiff --resolution 300 --mode Gray --gamma-correction "High contrast printing" > $DESTINATION convert $DESTINATION $DESTFOLDER"image.jpg" logger "Filename: " `python /etc/scanbuttond/convert_scan.py $DESTFOLDER` rm $DESTINATION } ...


Второй скрипт

import os import sys #необходим для получения аргумента... directory = sys.argv

Для дебага собственных скриптов советую выполнить в рабочем окружении следующую последовательность команд: service scanbuttond stop sudo -u saned scanbuttond -f & tail -f /var/log/messages & tail -f /var/log/daemon.log &
И использовать в скриптах echo, logger и print (для Python).

Критика насчёт всех трёх скриптов, исполнения, красоты кода, отступов, орфографии, оформления топика, bad practices в коде и логике, актуальности решения, возможных дополнений, адекватности автора и прочего приветствуется.

Этот BASH-скрипт через какое-то время меня порядком достал - никак не мог вписать нормальную обработку ошибок. Плюнул, переписал скрипт на Питоне. Работает в итоге даже лучше. Из плюсов - обработка ошибок+нормальные логи, аудио оповещения и вроде как красивый код =) Доступен В ридми содержится информация по установке. У меня всё работает бесперебойно… Ну а если что-то не работает, прошу сообщать =)