At the company where I work we have a full VMware View infrastructure. As users were being migrated to virtual machines one after another, we ended up being stuck with lots of workstations we didnt want to put full operating systems on. Through much trial and error I created what we have affectionately dubbed, The JCOS. James Cuadros Operating System (It just sort of stuck).

So with many companies, like ours, turning towards desktop virtualization and deploying Thin Clients as terminals for users to connect to their VDI’s, you may feel you are stuck with all these extra workstations that you don’t want to put full operating systems on (as this would defeat the purpose of getting users to use their virtual machines). With this solution you can turn old existing hardware into functioning Thin Clients for your VMware View environment. I will be using Windows Thin PC as my base OS because it is way better then Windows Fundamentals for legacy PC’s since its hardware compatibility list is close to what Windows 7 is.

First off

To get a hold of a Windows Thin PC ISO you have to have a Software Assurance agreement with Microsoft. To learn more about Windows Thin PC you can read about it here:

Breakdown of System Requirements

Windows Thin PC (32-bit)
Processor 1 GHz x86 processor
Hard disk 16 GB available hard disk space
Graphics card DirectX 9 card with WDDM 1.0 driver

Install Windows Thin PC

If you have installed Vista or 7 the installation process is pretty much exactly the same. Go through your normal settings if you have them.

Set Up Windows

  • Choose a user name and name computer
  • Set up a password for the account
  • Use Recommended settings
  • Set time and date
  • Select Work network

The first thing I always do on a new system is enable remote desktop (this is optional). To do this the easiest way is to run sysdm.cpl, click on the Remote Tab and select Allow connections…

Install the VMware View Client

(Supported versions are 4.5, 4.6, 5.0, 5.1)

Enable the Local Administrator account

You will want to do this eventually. Run command lusrmgr.msc

Make sure to set a password for the account

Windows Updates

Be sure to run all systems updates and patches before going on.

Anti Virus software

It would be a good idea to install some sort of free Anti-Virus software just to make sure you have your bases covered. I recommend AVG Free edition

AVG Free Version:

JCOS Installation

Unzip the JCOS Installation Files [Get them HERE]

If you are like me and never open the README.txt or Instructions.txt documentation, just make sure you move the JCOS folder to the root of the C drive. This is critical.

Run Installation Script

Open the JCOS folder which is now at the root of your C: drive

Right click on InstallJCOS.cmd and Run as Administrator

A command line window will pop up briefly and begin configuring the user account and auto login. Then a window will pop up saying “Windows will shutdown in 1 minute.” – The whole process takes just a few minutes and will reboot a total of 2 times.

What it’s doing

The combination of scripts are basically creating a user account named “user” (full name “VMware View User”) with the password “user” and making that account automatically log in. In addition it is also removing the normal shell for a Windows user account, so the taskbar and icons are hidden. The last thing it does is automatically launch the VMware View client.

If you are using an imaging solution to deploy thin clients, the JCOS is Sysprep compatible. Just run the sysprep.cmd after you have gone through the Sysprep process.

End Result

Click to enlarge screenshot

Note: If the need arises to log in as the Local Administrator, hit CTRL+ALT+DEL, then hold down BOTH Shift keys and select Log off, you will be brought back to the lock screen.

Tagged with:

40 Responses to How to Build a Thin Client on Existing Hardware

  1. Chuck says:

    I’ve been trying to utilize thinpc as well for the same purpose but ran into an issue with multiple monitor support. Have you had any similar experiences?
    For me it doesn’t seem like Dell or ATI have released the proper drivers for the embedded OS. I have contacted them both and they said that if the windows 7 drivers don’t work then I am out of luck.

  2. James says:

    We use a dual monitor set up where I work and it has worked great so far. We mainly use Dell hardware with ATI GPU’s, I haven’t had to slipstream any divers yet to get it to recognize both displays. What model Dells have you tried?

  3. sushant says:

    Im having two pc both are connected to wifi router and i want to use second pc wireless as a thin client using the first pc resources and idea to help me

  4. Libby says:

    Will the JCOS Installation files work on a 64-bit computer? If they are designed for 32-bit, I would expect them to not work. Can they be modified to work?

  5. James says:

    You could use Remote Desktop? It’s built I’m to Windows.

  6. James says:

    I don’t see why it wouldn’t work. The JCOS install files are really just command line scripts and switches that should work regardless of the architecture. I have not tested it on a 64-bit system though so I can’t say for certain.

  7. Laurent says:

    It’s exactly what I was looking for. Thanks a lot !

  8. Joe says:

    Duuuuude this is exactly what I’ve been looking for. Nicely done and thanks for making it available!! I’ll have to let you know what improvements if any I make. I think I might try to make it an all inclusive script that can be run from a startup script via GPO, and then I can include the view client installation. 😀

  9. Joe says:

    Hey there, I beefed up some of the logic you have in your UserRunOnce.cmd. I noticed that it was running for all users, and locking down some profiles unintentionally in the event a logoff/logon as a different user took place. I used a compare statement to only run the RunOnce if the user was viewuser. If it’s cool with you, I’d like to write up a blog post about how this helped me and what customizations I’ve made to it besides this.

    If “%USERNAME%” == “viewuser” (goto MakeItAKiosk)
    goto :end

    rem Since ViewUser is logged on, make it a Kiosk. Otherwise do nothing.

    regedit.exe /s C:\JCOS\JCOS-2.reg
    net localgroup administrators /remove viewuser
    shutdown.exe -r -t 15 -c “Rebooting in 15 seconds. It should be done when it comes back up.”


  10. James says:

    Hey Joe,

    Nice addition to the UserRunOnce.cmd. I myself have run in to that exact issue but haven’t looked in to correcting it. Your more then welcome to modify and repost the changes you made. My only request would be that if you could link back to this article I would greatly appreciate it. Let me know when you post any customizations you made, I would love to take a look. Thanks!


  11. Pretty nice post. I just stumbled upon your weblog and wished to say that I have really enjoyed browsing your blog posts. After all I will be subscribing to your rss feed and I hope you write again very soon!

  12. Ben says:

    net localgroup administrators /remove viewuser
    looks like /remove is not a valid option. Use /delete.

  13. Stephan Gruener says:

    Hi, this is an very nice small solution. but what if i will make changes to the thin Installation ? what can i do to get back my Standard Shell for Updates etc….

  14. James says:

    Use the trick for getting back in to the local administrator account. Log off while holding the shift key down.

  15. Rob says:

    In the JCOS script, JCOS-2.reg needs to use dwords for the Disable keys.



  16. Colby Zepik says:

    Has anyone made anything like this for a Citrix environment that anyone knows about? I am struggling with “locking” down Thin PC to prevent users from accessing anything but the items needed to get on the VM? Any help would be awesome. I know this vmware but I thought I’d ask. Thanks again!

  17. James says:

    Hi Colby,

    As long as the Citrix application is an executable you should be able to configure it to open Citrix instead of View. In the installation files open the “AutoView.cmd” file in a text editor. It should look like this:

    @echo off
    "C:\Program Files\VMware\VMware View\Client\bin\wswc.exe"
    goto View

    Replace the file path to the View client with the Path to the Citrix client and that should do it.

  18. Matt says:

    Did you have any issues with USB or other device (local DVD etc) passthrough? Keyboard/mouse etc worked fine but a USB device which set its self up as 3 devices in device manager wouldnt pass through correctly. Neither would the SATA DVD drive. Potentially just something I have missed

  19. James says:

    Unfortunately removing the Windows shell from the VMware View user actually disables any peripherals aside from audio.

  20. Martin says:

    Need some help here. I ran through the processs using the JCOS setup and it worked great, problem I am having is my “user” password expired and am unable to change it with “user” password. I get access denied. I can’t get the system to boot in with safe mode or anything. just come up to the change password screeen which is not working
    Have a few systems in this state HELP

  21. Steven says:

    Didn’t work as easy for me……
    Had to run it all manually.
    Ran the 2 reg files and checked that they did the changes.
    Then I had a problem with the password being too short. So I changed it.
    Then manually added the user.
    Then it auto booted, but logged on as user with the windows shell?
    So then I ran the cmd again under that username.
    Then it wants me to say OK to running the cmd file.

    Other than that it was quite good for me to see what settings were changed.


  22. Clinton says:

    Looks interesting, I was looking for a solution like this. Gonna give it a try! Thanks.

  23. Youssef says:

    it’s very helpful , i used it and it is very good

  24. Matt says:

    Thanks for this; gives us some ideas to work with. Only thing is…the shift logoff does not seem to work? any suggestions where to look? I’m running this in a VM for testing if that matters…

  25. James says:

    Hey Matt,

    Yes, actually I have had some difficulty getting this to work with remote technologies such as Console mode in vCenter and other applications like TeamViewer and Remote Desktop. I think it just has something to do with the way keyboard shortcuts are passed through.

  26. Great article! I have been doing something similar with Windows 7 (we don’t have SA where I work). Will your steps work with full-blown Windows 7 over Windows Thin PC?


  27. James says:

    Thank you! Yes, it will work the same on the full installation of Windows 7.

  28. Joe says:

    Awesome blog, I am not in any way a coder so I was curious to know, if there was a way to take it a bit further. Meaning an additional script that would auto fill the VMware View machine IP and user credentials and auto log into the virtual machine silently? By the way I am using it with RDC Thanks.

  29. Pete says:

    Great article! We’ve done something similar, but have used Group Policy to configure everything. Works really well for us, but it was interesting to see how others are looking at the problem and coming up with ideas.

  30. Javier says:

    It didn’t work for me with Vmware View 5.3 and VMware-Horizon-View-Client-x86-3.0.0, any idea when this version will be supported.

  31. James says:


    Thanks for the feedback. What exactly doesn’t work?

  32. Javier says:

    the logon screen screen never shows up, after reboot, it only shows a black screen, the vmware view logon screen doesn’t display, I can go back to windows but that’s not the idea.

  33. James says:

    Try opening the file launchview.cmd in a text editor and verify the path that is specified in the batch file matches up to the location of the VMware View executable.

    @echo off
    "C:\Program Files\VMware\VMware View\Client\bin\wswc.exe"
    goto View

  34. Javier says:

    you are the men James thanks a lot that worked just fine. Thanks a lot will give this a try.

  35. Philippe says:

    Great work James.
    After 24h working on your scripts, here are my optimizations.
    No need to use all those files. Only 2 cmd are needed.

    *** InstallJCOS.cmd ***

    @rem JCOS Installer Script
    @rem by James Cuadros, update Philippe OESTERLE

    @rem Add a user called “user” with the password “User97400″
    net user user User97400 /ADD /PASSWORDCHG:NO /FULLNAME:”VMware View User”
    net localgroup administrateurs /add user

    @rem Add the following registry key changes:
    REG add “HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon” /v DefaultUserName /t REG_SZ /d user /f
    REG add “HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon” /v DefaultPassword /t REG_SZ /d User97400 /f
    REG add “HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon” /v AutoAdminLogon /t REG_SZ /d 1 /f
    REG add “HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon” /v ForceAutoLogon /t REG_SZ /d 1 /f
    REG add “HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon” /v LogonType /t REG_SZ /d 0 /f
    REG add “HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce” /v UserRunOnce /t REG_SZ /d C:\JCOS\UserRunOnce.cmd /f
    @rem This allows the user account to auto login. Log in as local Administrator by holding the Shift key when logging out

    @rem Reboot the system to modify the user account shell.
    shutdown -r -t 30 -c “Redemarrage du PC dans 30 secondes – Fermez toutes les applications ouvertes”

    *** UserRunOnce.cmd ***

    REG add “HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon” /v Shell /t REG_SZ /d “C:\Program Files (x86)\VMware\VMware Horizon View Client\vmware-view.exe” /f
    REG add “HKCU\Control Panel\Desktop” /v WallPaper /t REG_SZ /d “” /f
    REG add “HKCU\Control Panel\Desktop” /v OriginalWallPaper /t REG_SZ /d “” /f
    REG add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableLockWorkstation /t REG_DWORD /d 1 /f
    REG add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableChangePassword /t REG_DWORD /d 1 /f
    REG add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableTaskMgr /t REG_DWORD /d 1 /f
    net localgroup administrateurs /delete user
    shutdown.exe -r -t 30 -f -c “Ultime redemarrage dans 30 secondes”

    Enjoy 😉
    Philippe (FR)

  36. Philippe says:

    (I use a 64 bits version of Win7 and the last Vmware horizon viex client, that’s why the path for the shell is different from your original script)

  37. Roxanne says:

    Superb, thank you so much!!!!

  38. Himanshu says:

    Hi James,

    Just want to know if I want to implement this on my office LAN and my office does not have a dotcom domain, then do I need to have a server and create an active directory domain? What OS must reside on the server? Consider me a dummy. 🙂

  39. James says:

    Hello Himanshu,

    Great question. First of all, do you already have a VMwware View server currently? If you do not have a domain you will need to use static IP addresses for the View client to connect to the server. The View connection server itself can run on Windows 2008 – 2012 R2 (maybe even Server 2003). And yes, to create a domain you will need a Windows server 2003 or higher, I would recommend a newer build like 2012 or 2012 R2 if possible.

  40. Roxanne says:

    Hi James,
    As I stated earlier, this is a great solution for reviving older desktops.
    What are your thoughts on deploying your script on laptops that will only connect to my network via the View client? Do you or anyone else think I should still add these laptops to AD? I like this solution because I can circumvent using a VPN, which means no license fees for me.

Leave a Reply

Your email address will not be published. Required fields are marked *