I Changed My Default Proxmox Console and It Improved Everything

Better vm consoles

One of the things I never paid much attention to when I first started using Proxmox was the console option used for accessing my virtual machines. Like most people, I simply clicked the Console button in the web interface and used whatever opened by default. For quick troubleshooting, that worked fine. But after managing more Linux servers, Windows VMs, Kubernetes nodes, Docker hosts, and desktop operating systems in Proxmox every day, I started realizing that the console method you use actually makes a pretty big difference. After experimenting with xterm.js, noVNC, and SPICE across my home lab, I ended up changing the way I access VMs almost entirely depending on the workload. Let me show you what I landed on.

The console options available in Proxmox

First, what are the console options available in Proxmox by default? Well, Proxmox, gives you three different console options depending on the type of VM or container you are running and what you are wanting to accomplish. These include the following:

  • xterm.js
  • noVNC
  • SPICE
Viewing the different console options in proxmox including xterm.js no vnc and spice
Viewing the different console options in proxmox including xterm.js no vnc and spice

At first glance, they may all seem similar because they let you access the guest operating system from the Proxmox interface. But they are actually designed to work with different OS’es and do different things. Understanding where each one shines can help you to improve your workflow, working with Proxmox and accessing your VMs and containers in the home lab and production envs.

Why mess with the default console?

As I mentioned in the outset, I was like most, I didn’t even think about the console properties or options as it defaulted to noVNC and it seemed to work for the most part on both Windows and Linux environments. However, the turning point for me came after I spent some time working inside Linux VMs running things like Docker, Kubernetes, automation, and infrastructure services.

The noVNC console has a few annoying quirks in these scenarios:

  • You don’t have copy/paste functionality
  • Keyboard shortcuts sometimes acted weird for me
  • Browser responsiveness could lag
  • Resizing the console window felt clunky
  • Shell interaction did not feel smooth
  • Desktop VMs occasionally felt sluggish

None of these issues were major issues necessarily. But when you are doing tasks across all your VMs, all day long, this adds enough frustration to make you want to start figuring out a better way. I started looking at and testing the other console options more seriously and I realized that Proxmox gives you better choices for certain OS’s and tasks.

Why xterm.js is great for Linux servers

If you work with a lot of Linux VMs and LXC containers like most of us do in a home lab with Proxmox, xterm.js is a great option as a console. When you use xterm.js, instead of it rendering a full GUI console, it gives you a terminal experience right in a browser, and the great thing about it is that copy/paste functionality is enabled by default which is awesome.

The experience feels faster, lighter, and more responsive compared to noVNC when working with command line systems. Below, you can see the connection I have made to a NixOS virtual machine using the xterm.js connection:

Connecting to a nixos virtual machine using the xterm.js console

Enabling xterm.js for Proxmox console access

How do you enable this? Well, you have to do a couple of things. First, we have to add a serial port to the VM you want to have xterm.js connectivity to.

Adding a serial port to a nixos virtual machine
Adding a serial port to a nixos virtual machine

Then, we had to add the configuration to our NixOS configuration file to output to the serial port ttyS0:

  # Keep normal VGA/noVNC as the primary console
  boot.kernelParams = [
    "console=tty0"
  ];

  # Add Proxmox xterm.js as an additional serial login console
  systemd.services."getty@ttyS0" = {
    wantedBy = [ "getty.target" ];
    serviceConfig = {
      ExecStart = [
        ""
        "${pkgs.util-linux}/sbin/agetty -L 115200 ttyS0 vt220"
      ];
      Restart = "always";
    };
  };

After you change your configuration, run a rebuild of your config and then reboot the system:

nixos-rebuild boot

reboot

For something like Debian or Ubuntu, you need to edit GRUB:

sudo nano /etc/default/grub

Find:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

Change to:

GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty0"

Limitations of xterm.js as a Proxmox console option

xterm.js is not perfect for everything or every console connection. The biggest limitation with using xterm.js is fairly obvious. It is meant to be a terminal only. If you need GUI installers, BIOS interaction, desktop operating systems, GUI troubleshooting, etc, xterm.js is not going to be the tool that you will want to use.

Also, it isn’t complex to setup, but it is a few steps. You have to add the serial port and then also edit your configuration so that your Linux OS will output to the serial console as well. But, I think for Linux administration, it is my favorite out of the three.

Why noVNC is still important

Even though we have mentioned using xterm.js for Linux machines, does this mean the default noVNC no longer has benefits? No, that’s not what we are saying. It still remains one of the most universally compatible console options that you can use in Proxmox. The noVNC console works really well because of the following characteristics:

The default novnc console option in proxmox
The default novnc console option in proxmox
  • It runs entirely in the browser
  • It does not require extra software
  • It works on nearly every device
  • It handles graphical consoles
  • It supports BIOS and boot troubleshooting

Let’s face it, this is one of the reasons this console is the default option when you install Proxmox. It just works. When I am quickly checking a VM from another machine, a tablet, or a laptop where I do not want to install additional clients, noVNC is still incredibly useful.

Image Product Price
1
EXCaliberPC (2025 MSI Release) Vector 16 HX AI RTX 5070 Ti Flex Edition (Intel Core Ultra 7 255HX, 32GB DDR5 RAM, 1TB NVMe SSD, NVIDIA GeForce RTX 5070Ti, 16" FHD+ 144Hz, Windows 11) Gaming Laptop

EXCaliberPC (2025 MSI Release) Vector 16 HX AI RTX 5070 Ti Flex Edition (Intel Core Ultra 7 255HX, 32GB DDR5 RAM, 1TB NVMe SSD, NVIDIA GeForce RTX 5070Ti, 16" FHD+ 144Hz, Windows 11) Gaming Laptop

$2,199.00
2
Dell Tower ECT1250 Desktop Computer - Series 2 Intel Core Ultra 7-265 Processor, 16GB DDR5 RAM, 2TB NVMe SSD, Intel UHD Graphics, Wired Keyboard and Mouse, Windows 11 Home, Black

Dell Tower ECT1250 Desktop Computer – Series 2 Intel Core Ultra 7-265 Processor, 16GB DDR5 RAM, 2TB NVMe SSD, Intel UHD Graphics, Wired Keyboard and Mouse, Windows 11 Home, Black

$1,259.99
3
HP 17 inch laptops, AMD Ryzen 5 7430U(Beats i7-1165G7), 20GB RAM 512GB NVMe SSD Windows 11 Pro, 17.3" FHD IPS, Copilot AI, Numeric Keyboard, Type-c, Patented KB Kit

HP 17 inch laptops, AMD Ryzen 5 7430U(Beats i7-1165G7), 20GB RAM 512GB NVMe SSD Windows 11 Pro, 17.3" FHD IPS, Copilot AI, Numeric Keyboard, Type-c, Patented KB Kit

$659.99 $1,099.99

The biggest frustrations with noVNC

While noVNC is the default and definitely is a great all around option that basically works with just about everything, the more VMs I managed, the more I noticed a few annoyances and challenges with noVNC.

Clipboard handling is just not very good in my experience there. You “can” enable clipboard to be the VNC option as shown below. Note the couple of “warnings” you get on this configuration.

Setting clipboard to vnc
Setting clipboard to vnc

But, I have had mixed results of being able to paste from the clipboard box. So, the way this is supposed to work is you paste text into the clipboard flyout board. Then click inside your VM and you should be able to do the normal CTRL+V and it work. If you want to copy “from” the VM, you can just highlight text in the VM app that you want to copy and then it should appear in the clipboard flyout board.

Copy and pasting using the novnc clipboard
Copy and pasting using the novnc clipboard

Keyboard mappings occasionally behave strangely for me aso, especially with the following:

  • Function keys
  • Alt combinations
  • Copy/paste shortcuts
  • International keyboard layouts

Performance can also vary depending on the browser you use, latency of the network where you are managing the server, especially if over VPN, etc, host load, GPU acceleration, guest operating system, etc. For occasional access, these issues are not a big deal. For constant day to day administration, though, it can become a headache.

The SPICE console

SPICE was the console option I initially ignored the most I think, simply because I didn’t understand it that well. However, after getting to know the SPICE console better, I can definitely say it has its place in your VM management and workflows. At first, I assumed it was simply another remote console protocol similar to VNC. But after testing it with Windows VMs and Linux desktop systems, I realized it can provide a much smoother desktop experience.

To have the SPICE console available as an option, you need to change the Graphic card to SPICE for your virtual machine. Once you do that, you will still see the noVNC option, but the SPICE console will become available to use.

Changing the display to spice
Changing the display to spice

Once you do this, click Console dropdown on your VM, and you should see the SPICE console available.

Launching the console with spice as the option
Launching the console with spice as the option

Now, I mentioned this earlier, but just as an overview of where I think SPICE is a strong option to use as a console, note the following types of VMs that I think you will benefit from enabling it:

  • Windows virtual desktops
  • Linux desktop VMs
  • GUI-heavy workloads
  • Multi-monitor environments
  • Audio redirection
  • Clipboard integration (requires the spice agent)
  • USB passthrough

I found the responsiveness of the SPICE console to be better than noVNC with GUI intensive console sessions. Especially over a local network, SPICE will feel more fluid.

SPICE Virt Viewer

To view the “downloaded” “vv” files when you click the SPICE console option, you need to have the Virt Viewer installed. You can download the virt viewer for Windows, etc from here: Virtual Machine Manager. Then just install it:

Installing virt viewer in windows to view spice files

SPICE guest tools

One bit of a downside to the SPICE console is that if you want to take advantage of all the features it can provide like copy/paste functionality, you will need to install the SPICE Guest tools in your client operating system. This is a free download from here Download. Below, I am installing the SPICE guest tools in Windows.

Installing the spice guest agent in windows
Installing the spice guest agent in windows

A common question is if you have the QEMU agent installed, does this automatically include the SPICE guest tools? No, these are separate installs.

When I switched some of my Windows administrative VMs to SPICE instead of relying on noVNC, the user experience immediately improved interacting with the VM. Mouse movement felt smoother. Desktop interaction became more responsive. Clipboard operations worked better.

Using the spice file viewed in the virt viewer utility
Using the spice file viewed in the virt viewer utility

The downside of using the SPICE console

As you can probably already tell, the downside of using the SPICE console is the lack of convenience. It is not exactly straightforward to use SPICE like it is with noVNC. You can’t just click the drop down menu for console, select SPICE and you are good to go.

Unlike noVNC, SPICE needs:

  • A client application (virt viewer)
  • Additional configuration (changing the display setting in the VM)
  • Downloading the SPICE config file (this is a “vv” file that virt viewer can open)
  • SPICE guest tools in some operating systems (this is required for things like copy and paste functionality)

That extra setup means it is not ideal or even possible for just one off quick access. It has to be a deliberate configuration that you setup for your virtual machine. If I just need to troubleshoot a VM quickly from a browser, noVNC is still easier. But for systems I use regularly, especially desktop-style workloads, SPICE is often worth the extra effort.

What I use now for different workloads

I have put together a table of when I use which console:

Console typeWhat I use it forWhy I use it
xterm.jsLinux server VMs, containers, Kubernetes nodes, Docker hosts, infrastructure appliances, CLI-heavy systemsLightweight, responsive, and ideal for daily shell administration
noVNCMany things, quick troubleshooting, BIOS access, boot recovery, temporary VM access, browser-only access, convenience-focused workflowsUniversally accessible from the browser and great as a fallback console
SPICEWindows VMs, Linux desktop VMs, GUI-heavy applications, long desktop sessions, systems needing clipboard or USB integrationBetter desktop responsiveness and integration features compared to noVNC

Wrapping up

Like everyone else, I just used the default noVNC console for basically all of my VM console access needs. But, as I worked more with Proxmox, and in testing out the functionality of each console type, I found that each of them have their pros and cons that you want to consider. They all I think have a specific use case that they excel in. How about you? What console do you typically use in your environment? Let me know in the comments if you have found different results compared to what I have found in my testing and shared here.

Google
Add as a preferred source on Google

Google is updating how articles are shown. Don’t miss our leading home lab and tech content, written by humans, by setting Virtualization Howto as a preferred source.

About The Author

Brandon Lee

Brandon Lee

Brandon Lee is the Senior Writer, Engineer and owner at Virtualizationhowto.com, and a 7-time VMware vExpert, with over two decades of experience in Information Technology. Having worked for numerous Fortune 500 companies as well as in various industries, He has extensive experience in various IT segments and is a strong advocate for open source technologies. Brandon holds many industry certifications, loves the outdoors and spending time with family. Also, he goes through the effort of testing and troubleshooting issues, so you don't have to.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments