What?
I recently got into the position where I needed to get something printed from a Windows XP application which ran in Virtualbox.
My host OS was Ubuntu Linux, and while you could attempt to use USB passthrough for the printer, often there are not any drivers for Windows XP.
In my scenario I had no printer available at the time either, which is why I wanted a PDF instead.
How?
CUPS is the answer. The following are some notes on how I got my PDF even though the Windows application thought it was printing on a regular printer
CUPS
First step is to configure CUPS to allow remote connections
$ cupsctl --remote-any
CUPS-PDF
Then to create the PDFs I used CUPS-PDF. This is not required if you want to use CUPS to print on a actual printer. To install CUPS-PDF:
sudo apt install cups-pdf
sudo systemctl restart cups
This will give you a printer named “PDF” on your system. By default, everything you print will end up as .pdf’s under /var/spool/cups-pdf/ANONYMOUS
.
To enable printer sharing, open up a web-browser on your system and navigate to http://localhost:631. If prompted for credentials, enter the username and password you use for logging into the computer.
-
Press the
Printers
tab on the top to list your installed printers, and press thePDF
printer. -
When viewing the printer, press the
Administration
dropdown, and selectModify Printer
-
Then, press
Continue
until the screen showing a option forSharing
appears. Select the checkbox forShare This Printer
and press Continue until done.
Virtualbox networking
Then to allow connections between the Virtualbox VM and the host OS I configured Virtualbox host-only networking.
-
First I created the connection as such, under Host Network Manager.
-
Then I configured the VM to use the connection as it’s primary interface. Note that this will disable internet access for the VM unless you perform some additional tricks, however this is out of scope for this post.
In my setup I had to temporarily deactivate the systemd firewall to get the connection to work. I could of course only open up the relevant ports, but as I were on a trusted and safe network I opted to simply temporarily disable it until I was done printing instead.
sudo systemctl stop firewalld
To ensure that the networking is working as it should, you can use Python’s simpleHTTPserver to test.
$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
When browsering to http://192.168.56.1:8000
you should see a directory listing from the folder where you ran the command above. If so, then you have configured the networking correctly!
If you do not see the listing, ensure the settings in VirtualBox, and that there are no firewall rules which blocks the connection.
Windows XP
PostScript driver
On the Windows XP side of things we first need to install a printer driver which matches our setup. For this any PostScript compatible driver should work. The first Google search for me resulted in Epsons Universal driver for WP-4590, which worked perfectly fine with CUPS for me.
Download the following driver, and install it in your Windows XP VM.
- Printer Driver - Postscript 3 v1.0: https://epson.com/Support/Printers/All-In-Ones/WorkForce-Series/Epson-WorkForce-Pro-WP-4590/s/SPT_C11CB31201?review-filter=Windows+XP+32-bit
Configure printer
Then to configure Windows to use CUPS I went through the normal “Add Printer Wizard”.
-
I selected “Connect to a printer on the Internet ..” and filled in the following URL:
http://192.168.56.1:631/printers/PDF
. -
When asked for a driver, I pressed “Have Disk” and navigated to where the Epson driver had extracted it’s content:
C:\epson\epson14484
-
Press Next until done
Testing 🖨️
Then to test your setup, simply find your PDF printer in Windows XP’s “Printers and faxes”, right click for Properties and press “Print Test Page”. You should then end up with a file under /var/spool/cups-pdf/ANONYMOUS
!
(Note, you might need to change the permissions of the file to access it.)
Done!
And thats it! Hopefully this page found it’s way and was of help to the one other person that needed this. If you’re out there, and you are still stuck even after reading this, then feel free to contact me at andreas@whynot.guide 🖨️.