LINUX.ORG.RU

Сообщения BP

 

Как получить информацию о завершении печати через cups-pdf, либо узнать что формируемый им pdf-файл не занят никаким процессом?

Доброго дня, Подскажите, как получить информацию о завершении печати при печати в файл через cups-pdf, либо узнать о завершении печати когда формируемый pdf-файл «освобождается», т.е. он больше не занят никаким процессом?

Пояснение к вопросу:

Есть терминальный сервер с CentOS и клиенты с разными ОС: debian, windows XP, windows 7. Подключение через NX-Client. Чтобы печатать из ПО, запускаемого на сервере, на клиент с windows, требуется либо установить драйвера принтеров на сервер либо искать альтернативу. Выбранный нами альтернативный способ заключается в следующем.

1) на сервере установлен cups-pdf. 2) монтируем общесетевой ресурс на windows-машине 10...IP/wprinter в /mnt/wprint (Используем имеющийся сервер с windows. Здесь конечно возможны варианты с монтированием либо можно сделать общедоступным в сети каталог CentOS и т.п. но это уже вопросы оптимизации за рамками темы.) 3) создаём каталог /mnt/wprint/USERx/PDF для каждого пользователя, где USERx - имя пользователя (пользователей около 100, одновременно могут работать до 50-60). 4) в настройках cups-pdf прописано помещать создаваемые файлы в каталог /mnt/wprint/USERx/PDF 5) тот же каталог находящийся на windows-сервере монтируется на каждом windows-клиенте таким образом: Подключаем сетевой диск как P: с адресом в сети 10...IPwprinterUSERx 6) в 10...IP/wprinterUSERx помещаем скрипт pdf-print.bat (о нём ниже) 7) на каждом windows-клиенте запускаем скрипт P:\pdf-print.bat 8) на каждом клиенте установлен foxit -reader, который может выводить на печать pdf из командной строки, а значит, есть возможность просто вывести на печать любой pdf-файл из скрипта. 9) скрипт делает следующее: раз в секунду проверяет наличие файла в каталоге P:PDF, при его наличии делает паузу 3 секунды, выводит на печать, удаляет файл. (варианты и возможные проблемы печати пока пропускаем, они решаемые все кроме задержки). Итог) Как это работает: при выводе документа на печать cups-pdf формирует pdf-файл, который автоматически попадает в нужный каталог на windows-сервере, а соответствующий данному USERx клиент имеет на борту запущенный скрипт, который раз в секунду проверяет наличие файлов в этом каталоге, и выводит на печать при его наличии.

Вот здесь возникает проблема: linux никаким образом не резервирует файл, не ставит какую-то отметку что файл занят и т.п. Поэтому скрипт не знает, когда файл готов к печати а когда нет. Если вывести на печать неготовый файл, он не распечатается, foxit выдаст ошибку типа 'pdf повреждён'. Такое может случиться в случае печати многостраничного документа, когда его формирование занимает какое-то продолжительное время, или если момент создания файла совпадает с моментом его поиска скриптом, или просто при большой нагруженности сети или сервера. Чтобы исключить эту проблему, искусственно вводится задержка в скрипте, эта задержка резко снижает процен ошибок, но она проблему не решает, и вообще это неправильный способ. Если документ имеет 1-2 страницы, это работает. если 20-30 - приходится увеличивать задержку, если больше- это вообще нереально. величина 3 секунды подобрано экспериментально и с запасом, чтобы система работала без сбоев для документов менее 3 страниц.

Прошу подсказать решение проблемы. Решением проблемы было бы сообщение от cups что печать задания такого-то завершена, либо чёткое указание того, что файл ещё занят, чтобы не печатать его пока его формирование не закончится. Информацию о завершении печати можно попробовать получить, например, если включить режим лога cups «разработка», тогда в лог пишется абсолютно вся информация, и вытаскивать её оттуда ещё каким-то скриптом в CentOS, например через tail искать появление сообщений о завершении печати, и определять пользователя к которому оно относится, и т.п.... но этот вариант- это костыли похлеще всей этой системы вцелом. Ещё вариант, проверять каким-то образом, что файл занят, скриптом на CentOS. Подскажите, как это сделать. Я вообще сомневаюсь что cups как-то это указывает, файл может открываться на дополнение, чтобы кусками добавлять в него информацию, т.е. не будет занят постоянно.

 , ,

BP
()

Подать звуковой сигнал при смене цвета пиксела

Добрый день! Нужна помощь в решении несложной задачи.

Суть задачи: 1- следить за одним пикселем экрана ( по введённым координатам либо под курсором мыши), 2- при изменении цвета подать звуковой сигнал ( как самый простой вариант- можно через выполнение команды с помощью любого плеера управляемого через консоль, например MPlayer ).

Собственно и два вопроса: 1- Мне неизвестно каким средством (в какой среде) и с помощью какой функции можно узнать цвет любой точки экрана в Linux (Имеется небольшой опыт программирования без использования системных функций -только решение алгоритмов, - в консольном C Linux-а, а также Pascal и Delphi; web-программированием не занимался.) В Delphi для этого имеется специальная функция, а опрос делать можно например по таймеру через определённый интервал. Должно быть что-то похожее в C++\QT или может быть в Lazarus. 2- Какой функцией запускается какая-либо внешняя программа ( ну это думаю несложно и погуглить -справлюсь, главное решить первый вопрос )

Язык и рабочая среда особо роли не играют если программа не раздуется до более полсотни строк. Скорее всего есть какие-то стандартые приёмы. Предполагаю проще будет в QT или Lazarus. Предпочтительнее решение на Pascal ( но не знаю возможно ли это ). СИ, думаю, может оказаться сложнее, но если кто поделится готовым куском кода, тоже вполне подойдёт.

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

Пользуюсь Ubuntu 10.04 Gnome, дополнительно ставил QT и KDE, вроде есть TK (так не помню, пишу с работы).

BP
()

RSS подписка на новые темы