Fun in the lab with VMware and a Raspberry Pi

Note: These instructions are only intended for use in a lab environment for non-production use. Do not use the steps described here to further contribute to the number of insecure IoT devices populating our world. Assume everything described is an unsupported configuration. Finally, be mindful of the Windows 10 IoT prototyping restrictions as well as other applicable licensing terms.

Since the release of the Raspberry Pi 4 earlier this year, there’s been renewed discussion within the EUC community concerning the use of the Raspberry Pi as a thin-client device. While involving a Raspberry Pi, this post is not about a Raspberry Pi 4. There has also been a large amount of interested displayed for running ESXi on a Raspberry Pi. While involving a VMware product, this post is not about ESXi.

Several years ago, I walked out of a Nashville VMUG UserCon event with a Raspberry Pi 3 Model B kit. This was shortly after VMware’s announcement of Horizon Client 4.6, which included support for the Raspberry Pi 3 Model B. As is the case today, this is supported when either ThinLinx TLXOS or Stratodesk NoTouch OS are installed on the device. I ended up trying out TLXOS. While my experiences with TLXOS were positive, I found that audio and video played out of sync on my Raspberry Pi. This occurred both when playing media in a remote desktop as well as when played locally while running Raspbian. While at the time this lead to be setting the Raspberry Pi aside, thanks to some info from a colleague, I have found this issue was resolved in a subsequent firmware release.

As part of a larger project I am currently working on, I wanted to setup a dedicated Horizon Client device. While I could have revisited TLXOS, I had also recently noticed the Horizon Client download page has locally hosted Windows UWP client downloads, including for ARM-based devices. While I first noticed this while downloading Horizon Client 5.2, it appears this was also available for Horizon Client 5.1. Prior to these releases, this page simply contained links to the Windows store page. Reviewing the documentation, I was not able to find any ARM specific guidance on supported hardware platforms or specific system requirements.

There is a Windows 10 release, Windows 10 IoT Core, available for the Raspberry Pi 2 and 3. Windows 10 IoT Core is one of two Internet of Things focused editions of Windows 10. Windows 10 IoT Core is intended for smaller ARM and x86 devices, supports only the UWP UI, and runs a single foreground application at a time. There are two applications you’ll use to install and manage a Rapsberry Pi 3 running Windows IoT Core, the IoT Dashboard for device setup and the Windows Device Portal for remote device management, including loading applications and performing power operations on the device.

Within the Windows IoT documentation is a tutorial on installing Windows 10 IoT Core on a Raspberry Pi 3 Model 3. Once this is complete the next step is to start the Windows Device Portal and install the Horizon Client.

The Windows UWP Horizon Client for ARM download comes in the form of a zip file. In the case of the Horizon Client 5.2 release, this zip file is named VMware-Horizon-Client-WinUniversal-5.2.0-14569086-ARM.zip. There are two files of note within this zip file a HorizonViewClient_5.2.0.0_ARM.appx within the HorizonViewClient_5.2.0.0_ARM_Test folder and Microsoft.VCLibs.ARM.14.00.appx within HorizonViewClient_5.2.0.0_ARM_Test\Dependencies\ARM.

Using the Windows Device Portal, both files can be added to the Windows 10 IoT Core installation. Once you’ve opened the Windows Device Portal, navigate to Apps -> Apps Manager. Once here the file HorizonViewClient_5.2.0.0_ARM.appx can be selected and the option for “Allow me to select framework packages” checked. The next step will then prompt for dependencies, allowing for selection of the Microsoft.VCLibs.ARM.14.00.appx file. Once installation is complete, VMware Horizon Client will be shown on the list of Apps.

At this point the client can be started via the Actions menu and selecting Start. Via radio button it can also be selected as the Foreground App that opens on startup. Once running the interface is like other Horizon clients. As Windows 10 IoT is designed to run a single foreground application at a time, there is no window chrome to allow you to close, minimize, or otherwise resize the application. A consequence of this is the lack of an obvious means of exiting the client or shutting down the device without using the Windows Device Portal. I did find I was able to use Alt+Tab to move between the VMware Horizon Client and the IOTCoreDefaultApplication if both were running.

I was able to use this client to connect a VM within my lab and play Civilization VI. While I tried both Blast and PCoIP, I settled on PCoIP as I found the interface to be more responsive. Video playback segments, such as the game opening, with either protocol were slideshow like. Looking at Performance within the Windows Device Portal during gameplay, I observed steady 100% CPU utilization and the use of a generic render driver for the GPU, which could explain the differences between protocols as well as the playback issues.

In light of the reduced video playback performance and high CPU utilization, I doubt I’ll be making regular use of this configuration; however, it was an interested experiment to try out.