DI Management Home > Miscellaneous Computing > Setting up a virtual Linux client on Windows host to do C++ programming

Setting up a virtual Linux client on Windows host to do C++ programming

I recently needed to setup a virtual Linux machine on my Windows 10 system to do a C++ programming assignment for an online course.

To help others and as a reminder for myself I've documented what I went through. This includes any original links I found helpful, plus a summary in case the links go down. Originally writted April 2020. Updated October 2021.

Installing the VMware virtual machine.

  1. Download VMware Workstation Player for Windows. This not the Pro version. Workstation Player is free for non-commercial, personal and home use. The latest version (October 2021) is VMware Workstation 16 Player.
  2. Install it. Accept all default options

Installing Debian 10 on VMware.

Ref: How to Install Debian 10 on VMware Workstation 15 by Tony Bagci. This has excellent detailed advice with good screen shots (despite its user-unfriendly Javascript tricks). Anyway, thanks to Tony.


  1. Download the file debian-10.3.0-amd64-netinst.iso from Debian - Getting Debian at Debian.org. Put this in a "permanent" folder on your system where it can be found later.
    • October 2021: Debian 11 is now available, but VMWare Workstation Player 16 does not seem to recognise it. We'll stick with the older Debian 10 for now.
  2. Open VMware Workstation Player on its home page.
  3. Click Create a New Virtual Machine.
  4. Select Install a disc image ISO and browse to where you stored the file from step 1. It should automatically detect Debian 10.
  5. I used Debian with Xfce. If you choose another option some customising advice below may not work.
  6. Follow the prompts and select the default settings. (I know the article above suggests using Custom Settings, but this worked for me).
  7. Once the installation is complete, click Power on this virtual machine. Select Graphical Install and follow the prompts.
  8. Enter a decent password for root and write it down somewhere!
  9. Set up a user account for yourself, say newuser. It helps to have an easy-to-type password for this because you'll be typing it a lot.
  10. Select All files in one partition for disk partitioning.
  11. The install program will download what is required and finish the setup. This will take some time!

VMware Tools

You will also be prompted to install VM-tools. Unfortunately, what VMware suggests to do does not work anymore. See below.

Configuring Debian

While the standard Linux commands are usually the same for different packages, configuring each variant can be markedly different. Be warned: a lot of advice on the internet is either (a) old and out-of-date or (b) does not work on your particular configuration. Be prepared to keep looking and trying different ways. Don't pull out all your hair. This is just how Linux is.

To do C++ programming you need to install GCC from a package called build-essential. The way to do this is, in theory, simple:
sudo apt install build-essential
"sudo" being a way to invoke super-user (root) privileges by an ordinary user. But then you get an error message newuser is not in the suodoers list. It seems the default on the latest Debian installations is not to include new users in the sudoers list.

Adding yourself to the sudoers list

Using the usermod -aG sudo newuser command did not work for us.

However, the following worked for us on our Debian 10 with Xfce:
Log in as su: -- note the dash. It should give you the # prompt.

   su -

   cp /etc/sudoers /etc/sudoers.original

Use the nano editor to open the sudoers file.

   nano /etc/sudoers

and copy the line for root below and change the name to your own

   # User privilege specification
   root    ALL=(ALL:ALL) ALL
   newuser ALL=(ALL:ALL) ALL

Press control-O (Write Out) followed by 'Enter' to accept the filename and save, then control-X to exit the editor. Then type 'exit' to quit being superuser.
The above advice was in a comment somewhere but, sorry, I can't remember where. Thanks to the contributor.

Installing VMware Tools

VMware Tools gives you the ability to copy-and-paste between your Linux client and your Windows host. This is really useful.

Don't bother with the tar download you get when you try to use the VMware menu options to add VMware Tools. It doesn't work anymore. Instead do the following from a command-line console.

sudo apt-get install open-vm-tools

Then you'll find that copy-and-paste and drag-and-drop still do not work. You also need open-vm-tools-desktop.

sudo apt install open-vm-tools-desktop

Then shut down your Debian virtual system and start it again: Player > Power > Shut down Guest.

Installing GCC

Ref: How to Install GCC Compiler on Debian 10 Linux by Linuxize. A quick summary of the important bits:

First, update the packages list:

   sudo apt update

Install the build-essential package by running:

   sudo apt install build-essential

You may also want to install the manual pages that includes documentation about using GNU/Linux for development:

   sudo apt-get install manpages-dev

To confirm that the GCC compiler is successfully installed type gcc --version:

   gcc --version

Consider buying Linuxize a coffee. We did. Thanks, guys.

Installing NetBeans

Again, the advertised way to do this sudo apt install netbeans did not work for us.

Ref: Installing NetBeans IDE on Debian 10 by Shahriar Shovon. Summary:

1. Install Java (Update October 2021: OpenJDK Java now seems to be installed by default). If not, then do:
sudo apt install openjdk-11-jdk
java -version
2. Download the latest file netbeans-12.5-bin.zip from Apache NetBeans Releases. (The latest version as at October 2021 is 12.5 - edit the instructions below if you have a different version number).
cd ~/Downloads
ls -lh
sudo unzip netbeans-12.5-bin.zip -d /opt
sudo nano /usr/share/applications/netbeans.desktop
3. This creates a new file. Enter the following... and type control-W then control-X to save and exit the editor.
[Desktop Entry]
Name=NetBeans 12 IDE
4. Finally
sudo chmod +x /usr/share/applications/netbeans.desktop
NetBeans 12 IDE should now be available in your Applications > Run Program selections.

Adding the C/C++ interface to NetBeans

The C/C++ interface no longer comes as default with the NetBeans IDE. You need to add it. Update October 2021:

  1. Go to the Plugin Manager (Tools > Plugins > Settings)
  2. Enable the checkbox for NetBeans 8.2 Plugin Portal
  3. Click on the "Available Plugins" tab and click "Check for Newest"
  4. Check the "C/C++" box and click "Install"

Ref: ScottK's answer at C/C++ option not available in NetBeans. Thanks, Scott. This worked for us.

Then use the Activate Features option to activate the C/C++ interface.

Setting up automatic login

When you start up your Debian client, you don't want to have to log in each time. As always, most of the ways you find on google to set this up do not work anymore.

Update October 2021: And just to prove that last point, things are different this time when we installed the newer version 4.19.208-1 of Debian10 vs the old one 4.19.98-1 back in April 2020. This time we need to edit the LightDM configuration file.

sudo nano /etc/lightdm/lightdm.conf

Uncomment and edit the lines:

Ref: How can I enable auto-login into Debian 10 xfce session? and LightDM:Enable autologin.

Old April 2020:
Open the daemon.conf file in the Nano editor through the following command:

sudo nano /etc/gdm3/daemon.conf

Uncomment and edit the lines:

Avoiding delay at boot time

To avoid the delay when you start Debian 10, edit the GRUB configuration file and set GRUB_TIMEOUT to zero.

sudo nano /etc/default/grub


This is from the excellent page 30 Things to Do After Installing Debian 10.

Copying files between Windows and your Linux client

You will find various methods described on how to set up a virtual directory to copy files between your Linux client and your windows host. This usually involves a convoluted "mount" command. It rarely works and if it does, it's a pain. Here's a better way.

  1. Install WinSCP on your Windows host.
  2. In a command-line console on your Linux client run
    ip a
    This will give you output similar to:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:32:6f:cc:0d brd ff:ff:ff:ff:ff:ff
        inet brd scope global dynamic noprefixroute ens33
           valid_lft 1791sec preferred_lft 1791sec
        inet6 fe80::00c:32ff:fe6f:cc0d/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
  3. Take note of the IP address on line 9 after the word "inet". In this case it is "".
  4. Start WinSCP and click on Login New Site.
  5. Under Host Name enter the IP address from above.
  6. For User name enter your Linux username and for Password your Linux user password. Then click on Login.

    WinSCP settings

  7. This should log you into your Linux client and allow you to transfer files to and from your Windows host.

Note that the IP address will change from time to time. We found the WinSCP Synchronise option with Local as the target directory to be most useful.

Installing SSH

If the above procedure fails to connect, you may need to install a OpenSSH server on your Linux client. There is an option somewhere in the Debian install procedure to check a box for this, which we missed.

sudo apt install openssh-server
To start it, either reboot or do
sudo systemctl start ssh

Ref: Enable SSH on Debian 10 by Shahriar Shovon.

Transferring to another machine

If you need to transfer VMware to another machine, follow the instructions at Techwalla's How to Transfer VMware VM to Another Computer by Chris Hoffman.

Key points:


We hope this has helped you. If we've missed something or not acknowledged your work, please let us know.

Our configuration

For reference, here is our configuration as at 12 October 2021.

OS Name:    Microsoft Windows 10 Home, 64-bit, version 20H2
OS Version: Version 10.0.19042.1237
VMware Workstation 16 Player 16.1.2 build-17966106
  Guest operating system: Linux Version: Debian 10.x.64-bit
uname -a
  Linux debian 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64 GNU/Linux
gcc --version
  gcc (Debian 8.3.0-6) 8.3.0
About NetBeans:
  Product Version: Apache NetBeans IDE 12.5
  Updates: NetBeans IDE is updated to version NetBeans 8.2 Patch 2
  Java: 11.0.12; OpenJDK 64-Bit Server VM 11.0.12+7-post-Debian-2deb10u1
  Runtime: OpenJDK Runtime Environment 11.0.12+7-post-Debian-2deb10u1
  System: Linux version 4.19.0-18-amd64 running on amd64; UTF-8; en_AU (nb)

And back in the day on 19 April 2020.

OS Name:    Microsoft Windows 10 Pro
OS Version: 10.0.18362 N/A Build 18362
VMware Workstation 15 Player 15.5.2 build-15785264
  Guest operating system: Linux Version: Debian 10.x.64-bit
uname -a
  Linux debian10 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64 GNU/Linux
gcc --version
  gcc (Debian 8.3.0-6) 8.3.0
About NetBeans:
  Product Version: Apache NetBeans IDE 11.3
  Updates: NetBeans IDE is updated to version NetBeans 8.2 Patch 2
  Java: 11.0.6; OpenJDK 64-Bit Server VM 11.0.6+10-post-Debian-1deb10u1
  Runtime: OpenJDK Runtime Environment 11.0.6+10-post-Debian-1deb10u1
  System: Linux version 4.19.0-8-amd64 running on amd64; UTF-8; en_AU (nb)

Contact us

To contact us or comment on this page, please send us a message. If you have a suggestion to improve the advice on this page, please tell us. If you can't get it to work, sorry, you are on your own together with Google. That's just how Linux is. But, hey!, it's free.

This page first published 19 April 2020. Last updated 17 March 2022.