Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > Печать из Linux по сети.


Автор: mihanik 18.1.2011, 00:11
Дано:
1. Компьютер №1 – fedora linux
2. Компьютер №2 – Windows 7 с принтером
3. Драйверов под Linux к принтеру нет и не предвидится
4. Локальная сеть между этими компьютерами имеется

Надо:
Печатать из Linux на принтере, подключенном к Windows.

Решение:

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

Подробное решение.

Сначала настраиваем виндовую машину.

Шаг №1. На виндовой машине заводим пользователя с паролем от имени которого будем впоследствии запускать необходимый скрипт (подробности далее).
Шаг №2. Устанавливаем на виндовую машину Foxit Reader (берём с официального сайта – http://www.foxitsoftware.com/pdf/reader/ )
Эта программа нам нужна только по одной причине, – Foxit Reader умеет распечатывать PDF-файлы на «принтере по умолчанию» из командной строки.
Шаг №3. На виндовой машине создаём папку и делаем её доступной на запись по сети («общая шара»). Допустим, что эта папка называется C:\pdfprint (имя папки фигурирует в скрипте ниже)
Шаг №4. На виндовой машине создаём файл pdfprint.vbs следующего содержания

    
Код

Set objWMIService = GetObject(«winmgmts:» _
    & «{impersonationLevel=impersonate}!\\.\root\cimv2″)
    Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
    («SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE » _
    & «Targetinstance ISA ‘CIM_DirectoryContainsFile’ and » _
    & «TargetInstance.GroupComponent= » _
    & «‘Win32_Directory.Name=»"c:\\\\pdfprint»"‘»)
    Set objFSO = CreateObject(«Scripting.FileSystemObject»)
    Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
    MyFile = objLatestEvent.TargetInstance.PartComponent
    Set objLatestEvent = Nothing

    MyFile = UCase (MyFile)
    MyFile = Replace(MyFile, «\\», «\»)
    MyFile = Mid (MyFile,InStr(MyFile,»"»")+1, Len(MyFile)-InStr(MyFile,»"»")-1)

    If (InStr ( MyFile, «.PDF»)) = (Len (MyFile)-3) Then
    Set WSHShell = WScript.CreateObject(«WScript.Shell»)
    WshShell.Run «»"C:\Program Files\Foxit Software\Foxit Reader\Foxit Reader.exe»" -p » & «»"» & MyFile & «»"», 1, True
    Set WSHShell = Nothing
    End If

    Set objFSO = CreateObject(«Scripting.FileSystemObject»)
    objFSO.DeleteFile(MyFile)
    Set objFSO = Nothing

    Loop


Шаг №5. На виндовой машине создаём назначенное задание начинающее выполняться при включении компьютера. В качестве выполняемой команды указываем скрипт pdfprint.vbs. Т.е. как только виндовый компьютер включиться, сразу начинает работать наш скрипт.

Ну… На этом настройка виндовой машины закончилась.

Начинаем настраивать линуксовую машину.

Шаг №6. Монтируем при помощи cifs виндовую шару в какую-нибудь папку (например в /media/pdf ) в фаловой системе Linux (если что, подробности тут – http://oss-it.ru/157 )

Шаг №7. Устанавливаем  PDF-принтер.

    yum -y install cups-pdf

Шаг №8. Немного изменяем файл /etc/cups/cups-pdf.conf. В нём изменяем один-единственный параметр Out ${DESKTOP} изменяем на Out /media/pdf

Всё!!!

Перезагружаем обе машины и проверяем, что всё работает. Если что-то не работает, пытаемся понять почему.

Чем этот способ мне нравится?

1. Тем, что линуксовой машине наплевать на то, какой принтер установлен на виндовой машине. Linux даже и не догадывается, что документы печатаются.

2. Без особых плясок с бубном всё работает довольно стабильно.

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


Автор: Фантом 18.1.2011, 01:17
А зачем? Расшариваем принтер под Windows, прописываем на Linux-машине в CUPS его как сетевой под SAMBA... и, собственно, все.

Автор: mihanik 18.1.2011, 08:08
Цитата(Фантом @  18.1.2011,  01:17 Найти цитируемый пост)
Расшариваем принтер под Windows, прописываем на Linux-машине в CUPS его как сетевой под SAMBA... и, собственно, все. 


Цитата(mihanik @  18.1.2011,  00:11 Найти цитируемый пост)
3. Драйверов под Linux к принтеру нет и не предвидится


Автор: Фантом 18.1.2011, 14:29
Цитата(mihanik @  18.1.2011,  08:08 Найти цитируемый пост)
3. Драйверов под Linux к принтеру нет и не предвидится

Да, прозевал. Правда, тогда проще купить другой принтер.  smile 

Автор: mihanik 19.1.2011, 00:34
Цитата(Фантом @  18.1.2011,  14:29 Найти цитируемый пост)
Правда, тогда проще купить другой принтер.  smile  


Не всем этот вариант подходит... smile

Автор: kapbepucm 20.1.2011, 10:50
mihanik, а скриптик VBS много кушает ресурсов? Как насчёт, если комп. не торопливый?

Автор: mihanik 20.1.2011, 14:35
Цитата(kapbepucm @  20.1.2011,  10:50 Найти цитируемый пост)
mihanik, а скриптик VBS много кушает ресурсов? Как насчёт, если комп. не торопливый? 


Нет.
Пользователь, который сидит за виндовой машиной даже ни о чём и не догадывается. smile
Там процента 2-3 от проца занято...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)