Strona 1 z 1

[SOLVED] Drukowanie z serwera zdalnego na drukarce lokalnej.

: 05 lip 2019, 19:39
autor: zxraf48kb
Witam.

Takie zagadnienie:

Z kompa (ubuntu), łączę się z serwerem (ubuntu), który jest hostem dla maszyny wirtualnej (Virtualbox/win). Połączenie ssh/rdp.
No i właśnie ... Jak z takiego można wydrukować na drukarce podłączonej lokalnie do USB kompa?
Domyślam się że trzeba se otworzyć dodatkowy tunel ssh, na potrzeby drukowania, ale nie mam pojęcia jak zkonfigurować ustawienia drukarki w "win" i usb-kompie.
Plizzz sugestie.

Pozdr

PS: Domyślam się że sterownik win powinien być jako drukarka lokalna na porcie adresIP hosta, port tunelu ... Chyba tak ?
Ale jak ustawić nie wiem jak ustawić nasłuchiwanie drukarki na porcie localhost:port tunelu w kompie.

Re: Drukowanie z serwera zdalnego na drukarce lokalnej.

: 06 lip 2019, 02:13
autor: jacekalex
Manager druku CUPS obsługuje wszyskie sieciowe protokoły drukowania.
Możesz zrealizować połączenie z drukarką np po IPP/SSL bezpośrednio, albo przez tunel SSH.

Re: Drukowanie z serwera zdalnego na drukarce lokalnej.

: 06 lip 2019, 13:41
autor: zxraf48kb
No dobra.
Otwieram sobie tunel z kompa:

Kod: Zaznacz cały

ssh -g -R 1631:127.0.0.1:631 -N -f -l <juzer> <serwer>
Teraz mogę sobie drukować z hosta:

Kod: Zaznacz cały

lpr -H 127.0.0.1:1631 -P <nazwa_drukarki> plik.pdf
A teraz, jak ustawić drukarkę na gościu (VirtualBox/Windows)?

Pozdr

Re: Drukowanie z serwera zdalnego na drukarce lokalnej.

: 07 lip 2019, 19:38
autor: zxraf48kb
OK.
Po tentegowaniach i kombinacjach się udało, więc SOLVED, ale może ktoś, coś bardziej elegancki będzie miał pomysł.
1. Na hoście zakładamy folder, który będzie jakby taki "spool"
2. Teraz trzeba napisać skrypcik, chodzący w tle, który będzie monitorował, czy aby nie pojawi się tam jakiś .PDF. Jest takie inotify-tools, który ma funkcje "inotifywait", zatem:

Kod: Zaznacz cały

sudo apt-get install inotify-tools
Teraz skrypcik ... W raziegdyby pojawił się w katalogu jakiś PDF, to ma go wydrukował do portu ssh, a następnie skasować:

Kod: Zaznacz cały

#!/bin/bash
inotifywait -m /home/.........../printorres -e create -e moved_to |
    while read path action file; do
        if [[ "${file^^}" =~ .*PDF$ ]]; then 
            # echo $file
            lpr -H 127.0.0.1:631 -P Brother_MFC_J625DW /home/.........../printorres$file
            rm /home/.........../printorres/$file
        fi
    done
Potrzebny będzie jeszcze jeden skrypcik, który zatłucze ten pierwszy przy zamykani sesji. Nie wiem , nie rozumiem, nie umiem dlaczego kill %(pidof inotifywait) nie przechodzi komendą ssh. Może ktoś coś. Nie istotna jest nazwa jaką damy skrypcikowi. On tworzy proces "inotifywait" i tak go zabijamy.

Kod: Zaznacz cały

#!/bin/bash
kill $(pidof inotifywait)
To było na tyle po stronie hosta.

3. Teraz strona druga.

Kod: Zaznacz cały

#!/bin/bash

# Nazwa użytkownika i hasło
juzer="XXX"
pw=$(zenity --password) 

# Odpalamy skrypcik w tle, na hoscie
sshpass -p $pw ssh $juzer@SERWER "nohup /................./printerros < /dev/null > /tmp/mylogfile 2>&1 &"  

# Tunele ssh dla VNC i do drukowania
sshpass -p $pw ssh -L 5901:127.0.0.1:5901 -N -f $juzer@SERWER
sshpass -p $pw ssh -R 1631:127.0.0.1:631 -N -f $juzer@SERWER

# Otwieramy VNCwiułer. Taki lub inny
xtigervncviewer 127.0.0.1::5901

# Po zamknięciu, zabijamy skrypcik drugim skrypcikiem
sshpass -p $pw ssh $juzer@SERWER "/................./kill-printeros"

# Zamykamy tunele ssh
kill $(pidof ssh)
Teraz można se drukować do PDFa, zarówno z pulpitu hosta, jak i wirtualnego gościa i będzie szło na naszą drukarkę przy kompie.
To u mnie działa, więc raczej [SOLVED], ale może ktoś, coś może poradzić lepiej i bardziej elegancko.


Pozdr