I implement a LOT of customers on our hosted solution every year, here are some tips we’ve learned along the way that may be helpful to you.
Some Background: Blue Link provides hosted Enterprise Resource Planning (ERP) software either as an on premises or as a hosted solution. Lately, a lot of people are choosing the hosted solution so I’ve implemented a lot of hosted customers, both with full remote desktop sessions and using the Windows Server 2008 R2 RemoteApp feature as well.
In this blog entry I cover the top 3 requests I get:
- How to make everything bigger?
- How to make printing Invoices and other documents a LOT faster?
- How to copy files to/from the hosted environment?
How to make everything bigger:
So you bought yourself a nice high resolution computer monitor but now you find yourself squinting to see the text on the hosted applications? If so you may want to consider changing the Dots Per Inch (DPI) setting in your remote desktop session.
Before you begin, your server techs first have to make sure that this Microsoft KB article has been applied to your server: http://support.microsoft.com/kb/2726399. If you’re a Blue Link customer reading this, we’ve already applied that patch to your hosted servers, so you can skip that step.
Follow these steps to change the size:
This particular setting has to be changed in the “full” remote desktop, but once changed there, it will also affect any apps you run in the Remote App mode as well.
- Close any copies you may have open of the Blue Link and other RemoteApps running from the Remote Desktop environment (Outlook, Excel, Word, etc).
- Connect to the remote desktop session using the “full” remote desktop client. When you connect you should be able to see the desktop on the server, and a different start menu.
- Right-click on the desktop, and choose the “Screen Resolution” option:
- Click the “Make text and other items larger or smaller” link:
- Choose the “Medium – 125%” option:
- Click Apply
- Click Log off Now:
The next time you re-connect everything will be larger, and potentially easier to read.
This setting will be user-specific, so some users can choose to zoom their screens, others can leave them as is.
How to make printing a LOT faster: Mapping Printers through the Internet
Today I was at a client site where the printing of a single invoice was taking 15 seconds… printing an invoice should take anywhere from 2 to 10 seconds depending on how many lines it contains, but in general a 15 line invoice should print in about 5-7 seconds.
You may need some technical assistance from your network IT staff and from Blue Link support to get this particular tip implemented, but here’s what you should know as a user of the system.
There are two ways to get a print job from the hosted server to a printer sitting in your office.
- Option 1: Automatically mapped RDP printers.
- Option 2: Printing directly from the hosted server to the printer in your office with a direct connection across the Internet.
With Option 1: Here’s a rough description what actually happens:
Step 1: the document is first printed to a file on the server.
Step 2: the file is transmitted to your local computer through the remote desktop session.
Step 3: your local computer prints that file to the printer that was mapped through the connection.
With Option 2: Here’s what happens.
Step 1: The file prints DIRECTLY to the printer in your office – the data being streamed across the Internet from your hosted server, directly to the printer.
Steps to Configuring TCP/IP Printing directly across the Internet
To get option 2 to work, you need a few things in place:
- The printer MUST contain a network card/adapter and be connected to your internal network with a fixed IP address.
- Your Internet Router (the device that gets you an Internet connection) must have a “Port Forwarding” feature. (Optional: for a more secure solution, you may want a more expensive router that supports source IP filtering to restrict the inbound communication from the Blue Link external IP address).
- Your business has to have a fixed External IP address, or Optionally, you can purchase a Dynamic DNS subscription from a company such as DynDNS.org.
With those items in place, your tech configures a TCP/IP port forwarding rule to forward some external port to the specific internal port of the printer on your network.
Almost every network connected printer by default will listen on port 9100.
So if your office has two printers (say, one in the front office and another in the warehouse) then they might look like this:
- IP: 192.168.0.51 – Front Office Printer – Listening on Port 9100
- IP: 192.168.0.52 – Warehouse Printer – Listening on Port 9100
To make these work across the Internet since you only have one external IP address (Say 18.104.22.168) you’ll need to expose two DIFFERENT external ports, each one mapped to the correct internal IP address. So for the example given above, that mapping on the router will end up looking like this:
External IP Address (Internet)
Internal IP Address (In your Office)
Front Office Printer
Test that the Printer Mappings are Valid with Telnet Test
Once that is done, prior to attempting to map the printers on the hosted server, your technician should test that the port mapping rule is working by using a telnet command from a computer located outside of your office to test the inbound connectivity.
In the example above, the tech would run this command:
Telnet 22.214.171.124 9101
GOOD: They should end up with a Black Screen like this:
BAD: If the window comes up with an error like this:
With the text “Could not open connection to the host, on port xxxx: Connect failed” then the port is not opened correctly yet and your tech still has work to do to fix it before anyone at Blue Link would be able to configure the printer.
Adding the Printers on the Hosted Server
This step must be done by a server administrator. Administrative Privileges will be required to do these steps. Make sure you provide the server administrator with the following information:
- Make and model of your printer.
- External IP Address
- Published External Port
The server technician can now add a direct printer mapping on the server of your particular printer directly to your listening printer. Here’s how they do that:
The steps shown here are for Windows Server 2008 R2, but are very similar in Windows Server 2012.
There are really two steps to configuring this. The first step is to create a new local TCP/IP printer port for the destination IP and port, and then the second step is to add the actual printer.
PowerShell method for adding the port
The fastest possible way to add the external port is with PowerShell. Even if you hate PowerShell, this is still by far the FASTEST way to get this port added. here are the steps:
$hostAddress = "126.96.36.199"
In the script above, you obviously have to change the IP address, port and computername to be the correct values in your environment. The computername is the name of the hosted computer to which you’re adding this port – not the name of the computers at the customer’s site.
Using this Powershell technique to add the port, you’ll end up with a port that’s named: “Printer188.8.131.52:9101” in the example shown.
The real advantage to this PowerShell method is that it bypasses Windows having to scan the ports. And on servers with a lot of mapped printers, the wizard approach shown next can take several minutes to run.
GUI Method to add the TCP/IP port and printer
- In the Devices and Printers folder, click Add a printer.
- Choose the “Add a local printer” option – DO NOT select the network option:
- Choose the Standard TCP/IP Port option:
- In the Hostename or IP Address box, put either the DNS name of the External IP address you’ve exposed (that’s the preferred solution if there’s any chance of the IP address changing in future), or enter the external IP address at the destination network. You can confirm the external IP by having a user on that network visit a site like www.ipchicken.com:
- Click Next and Windows will waste your time waiting for a scan of the default TCP/IP printer port of 9100:
- When that scan completes, you’ll have the opportunity to change this to the CORRECT port:
- Enter the correct External Port number:
- Click OK
- From this point on you’re just following a regular printer install routine. Pick your printer from the list, or do the have disk thing to get the driver you downloaded for the specific make/model of printer loaded.
- Word to the wise: HP Printer Drivers are HORRIBLE in remote desktop environments. In most cases you’ll have to download the HP Universal Driver – assuming you can find it … sometimes it takes some digging, and sometimes you’ll have to cheat to get to the actual printer driver files. If when you try to extract the universal driver you get “friendly” printer driver installer start running move that Window out of the way and go look on the root of see for a new folder with a GUID or some other unique name that just got created. That folder has the less than helpful GUI installer you see but also contains the actual drivers folder you need – go copy that out of that folder and put it somewhere else. When you cancel the GUI it will auto-delete this temp folder so you’ll need the files somewhere else if you got stuck with that version of the Universal Driver Download.
- When you’re done the wizard you should be able to successfully print a test page.
Change your Default Printer AWAY from the Auto-Mapped Printer!
Once the printer is mapped and working, the next time you connect your computer, simply change your default printer to the pre-defined printer instead of using the auto-mapped printer.
In the test I did today, printing time for an invoice for this customer went from approximately 15 seconds to approximately 4 seconds. A significant improvement.
Bonus tip: Turn off mapping of Local Printers completely to get the best possible performance:
- If you can map all the printers that the user needs from their office, then turning of Printer mapping entirely will speed up the entire connection because there won’t be that delay after initial connection while it enumerates and maps the local printers. Turning off the mapping also prevents the default printers from changing.
How to Turn off Printer Mapping for RemoteApp icons.
If you’ve got RemoteApp .rdp shortcuts on the customer’s machines, then if you open the .rdp file in notepad (not the .lnk pointing at the .rdp, the actual .rdp file), you can change the
redirectprinters:i:1 setting (which means map printers) to
How to copy files to/from the hosted environment
Did you know that you can copy and paste files to or from the hosted environment? When connected to the full remote desktop, if you open the Computer icon you should be able to see your local disk drives mapped:
If you do not see your local disks, then you have to enable drive mapping in the remote desktop connection software:
Note: If you’re using RemoteApp, then you’ll need to edit the .rdp file by editing the file in notepad and then changing the redirectdrives option to 1:
A few things on this article:
A you haven’t talked about security, the way you have described is allowing anybody on the Internet to print to that printer.
Also, how have you accounted for bandwidth control? If someone prints a 200-300MB file to that printer, on slower remote links, this would cripple everyone’s performance.
I am not saying your workaround is a bad idea, just that what you are describing needs more thought into it.
Security: Ideally, the firewall that exposes the port should be doing so with at least an IP Filter limiting the inbound communication to be from the hosted server’s IP address only. This would prevent “just anyone” from printing to the printer and would prevent port scans from spewing pages of garbage to the printer.
Performance: Since we’re comparing direct printing to printing via an RDP Session, the direct printing should still consume less bandwidth and perform better than the user printing to an RDP printer, which actually creates an XPS file representation of the document that is then copied across the session to the local computer and then printed.
Also, the odds of that happening in my environment are next to nil, but it’s a good point to raise in general.