Дано:
- Локальный компьютер под управлением OS Windows.
- Удалённый компьютер под управлением OS Windows.
- vnc+ssh сессия с локального на удалённый компьютер.
Требуется:
Обеспечить возможность прямой печати из VNC сессии на локальный компьютер.
Решение?
- Убеждаемся, что сетевое имя локального компьютера вменяемое (нет пробелов, нет русских символов и прочего сомнительного бреда).
- На локальном компьютере устанавливаем службы печати для UNIX.
"Панель управления" - "Установка и удаление программ" - "Установка компонентов Windows" - "Другие службы доступа к файлам и принтерам в сети" - [x] "Службы печати для Unix".
или для ушибленных операционных систем:
"Панель управления" - "Программы и компоненты" - "Включение или отключение компонентов Windows" - "Службы печати и документов(?)" -> [x] "Службы печати для Unix".
Естественно, к кастрированным операционным системам это не относится - там подобных вещей нет в принципе.
- Активируем службу.
sc config LPDSVC start= auto
- Запускаем службу.
sc start LPDSVC
- Выставляем принтер в общий доступ.
Имя общего ресурса пишите ЛАТИНСКИМИ БУКВАМИ БЕЗ ПРОБЕЛОВ, лучше всего - строчными. Это имя будет использоваться в качестве имени очереди для печати.
Уже сейчас можно проверить, работает ли принтер. В терминале введите команду:
lpr -S %COMPUTERNAME% -P имя_очереди_строчными_буквами "%SystemRoot%\win.ini"
Принтер должен распечатать файл win.ini (там буквально одна страница, обычно).
Указывать вместо "%COMPUTERNAME%" - "localhost" бесполезно. Виндовый LPD не принимает задания с локального интерфейса. Хотя и прослушивает его…
- В строку подключения VNC сессии добавляем ключ -R 515:%COMPUTERNAME%:515.
К сожалению, если на системе клиента уже работает LPD сервер, ничего не получится.
- Подключаемся к удалённому серверу.
Можно проверить, работает ли печать, прежде чем продолжать настройку. Введите в удалённом терминале (можно прямо в окне SSH соединения) команду:
lpr -S localhost -P имя_очереди_строчными_буквами "%SystemRoot%\win.ini"
Принтер, опять же, должен распечатать файл, на сей раз - с удалённого компьютера.
- Устанавливаем новый локальный(!) принтер.
При установке попросить создать новый порт -> "Standard TCP/IP port" - имя принтера: localhost, имя порта: SSHLPD -> Особое -> Протокол LPR, имя очереди - имя общего ресурса строчными буквами.
Драйвер принтера: Generic -> MS Publisher Imagesetter
- Пробуем распечатать тестовую страницу. У меня всё работает.
P.S.
Если используется родной драйвер принтера, и на печать уходят коды печати вместо данных, попробуйте добавить параметр обхода обработчика WinPrint:
reg ADD HKLM\SYSTEM\CurrentControlSet\Services\LPDSVC\Parameters /v SimulatePassThrough /d 1 /t REG_DWORD /f
и перезагрузить сервис
sc stop LPDSVC && sc start LPDSVC