I think I want to virtualize my desktop. Bad Idea?

A little background. I daily drive Manjaro mainly because when I got a desktop in 2019 for the first time in a decade it seemed like the easiest noob friendly distro that made GPU passthrough relatively painless. I hate windows, but need it or MacOS to run CAD software for my work (mostly freelance). So now I am running an old Xeon E5-2690v3 12 core 24 thread with 64GB of ECC ram and 2 GPUs one for my desktop and one for the windows 10VM. It works pretty well.

However now I am travelling a bit again for work and have a similar setup on my laptop (AMD 5800H with Nvidia dGPU), but keeping everything synce between the desktop and the laptop is a pain and transfer are cludgy. I have a VPN to my netowrk setup which works, but RDP has been iffy on the desktop manjaro host. I have a proxmox server / NAS which seems easy and makes remote access a breeze. Is there any reason not to throw a PCIe Nvme card on my desktop, migrate my windows VM, reinstall or migrate my manjaro setup and just pass a card to each while running the proxmox host GPUless/headless with evdev for keybord and mouse? INstead of a KVM i have just been switching inputs on monitors currently which works fine for the desktop setup.

What am I missing?

I just tested the console on my current proxmox server and it seems easy to log into the web UI of proxmox from a VM hosted on the proxmox server (it is funny, you can actually get a infinite mirror situation going if you log into the console of a gui VM and then log into the proxmox server and launch the same VM console).

Funny, I was in the situation as you. Manjaro with a Windows VM with HW passthrough. What made me switch to Proxmox was the constant struggle to wrangle the Desktop OS in order to keep my VM and vfio going. Setting up Hugepages, isolating Cores and I still had huge I/o latency and micro stutters in games. I tried Proxmox on a spare PC and I had a much better/ nearly exceptional experience out of the box.

Data access: that’s something I had to wrap my head around first:
Be aware that you can’t directly access the storage of other VMs within one VM. You could edit the vm config, but it’s not advisable, because Proxmox relies on the separation for migration and backup - you might delete storage of a unrelated VM if you decide to get rid of one which still has the entries. You could also passthrough a controller, but you’ll lose most advantages of virtualization. What I did was creating a privileged LXC Debian container which mounts a ZFS data set and shares it via samba externally and over an internal network bridge. The best thing is, the container and shares are still available if I restart or shut down my VMs. The container uses next to nothing (256MB and 1 core in my case). You can also access the shares from the host.

I have had pretty okay success with setting up samba shares in VMs / I believe in proxmox you can setup a shared folder from the host and have it auto mount inside VMs (if I remember correctly that is how my current proxmox server plex VM accesses the NAS ZFS movie share I made in the debian part of proxmox). So maybe I can just make a Storage share on the proxmox host and mount it wherever I need it.

Did you use evdev for keyboard / mouse control?

I have to recheck again, but I thought that you can only connect to other shares on the Proxmox Webui but not share folders yourself there. I try to keep as much baggage away from the hypervisor / host OS. I can easily snapshot VMs and containers and mess around with them without breaking anything.

Storage:
I usually keep my data storages and the host OS on separate media. So I still have a base if either of one breaks. If you have RAM to spare I would recommend ZFS. It’s really easy to administer. I use two mirrors who make up one pool. And it already saved my ass, because two disks (one in each mirror) of my spinning rust failed and I could still use my system without much performance loss. This setup also allows you to replace the disks with larger ones down the road.

Try a third party vnc product. Your setup is similar to mine (Manjaro host, two windows VMs) only I use realvnc to connect to the two VMs.

Works very well over the network for work stuff including video conferencing (bit of latency would not be good for gaming, but you can use Another tool for game streaming)

Ive tried the cloud streaming feature to access my CCTV when away from home and that works well too.

All my data is on a separate Nas so I can access from any of the desktops.

I appreciate my situation is a bit different to yours, I need “two of everything” as I am working for two clients who both want me to join on their internal MS teams or Zoom clients. I ended up buying two headsets and webcams and passing one each to each VM, keep the client work isolated from my own work and just use the red one for client a and the blue one for client b. The VM route is much nicer than having two laptops on my desk.

Good luck

After realizing my NAS was powerful enough for all my needs, I’ve had a vm for my desktop for over a year now and it’s been great. The caveat is I’m “directly” connected and don’t use rdp.

Host is proxmox on my 24 bay NAS/server in the garage, where it can scream as much as it likes without causing concern.
VM is KDE Fedora with a GPU and USB ports passed through.

For mouse/keyboard connectivity I use the network compatible version of extron usb extenders that I got from eBay. They are only usb 2.0, but that’s all I need or want 99% of the time, and they don’t need their own dedicated line like other extenders, they’ll work over any Ethernet connection.

For monitor connection I use a long ass fiber DisplayPort cable that ran to my room.

I tried the whole samba on a turnkey Linux lxc thing, never got it to work and burned a day on that. So I setup SMB directly on proxmox and was done in 15 minutes. This is perfectly fine for a homelab.

One thing with proxmox, is it uses a different qemu/kvm setting format instead of XML. I actually prefer the way proxmox does it (because xml is just awful to read) but it’ll be somewhat harder to find proxmox specific examples, or figure out how to convert things.

Note if you install proxmox on ZFS as root, it uses system-boot instead of grub, and thus will ignore grub settings.

It is a good idea to have a laptop or something nearby. Once set up things should work great until you make changes. Well, Fedora is really stable, I’m not sure if manjaro could do anything that makes it especially difficult to deal with in such a situation when it breaks.

Proxmox has a web UI that works well enough for basic stuff.

Keeping the heat and noise out of my room that a regular machine would make has been wonderful, especially in the summer.

You have to use a privileged container, or else samba won’t work unfortunately. Mounting the filesystem within the container, this needs be done with config edit. Otherwise you can also use the hd image the container offers by default - for example if you want to use Proxmox Backup function. Its still not ideal, but in a homelab or private network, I consider it okay.

Remote / RDP:
If you don’t want to trouble yourself with VPN you can also use Parsec on Windows VMs. Its a gaming centric remote solution which also works great for Desktop / CAD work. The free version only allows one screen to be shared. You’ll have to stick to Windows 10 for this though, for me it is still broken on all Win 11 machines (bare metal, iGPU, dGPU, host or client, doesn’t matter - I only get a black screen if I connect from or to a Parsec host on Win 11).
Edit: I’ve read through their entire terms and Eulas and the company seems trustworthy. Their service is used to establish the connection, but once thats done, their backend could die and you still be connected. It a small company though, so they are late if it comes to supporting the latest OS versions.

RDP on linux:
xrdp is something which I only got to work “out of the box” on Raspberry Pi OS . Any other distro failed for me. In the past I went for a VNC server for GUI access, which can also run independently from local X/wayland session.

Local Input:
I use 2x dedicated USB3 PCIe cards because the USB controller of my host system is in a IMMO group with a bunch of important system devices. I have very good experiences with PCIe cards which use Renesas chipsets. I also use a Roline USB3 switch. I game on my workstation so a hassle free input is important for me. Secondly I often use SATA to USB bridges / adapters for data recovery and some of them don’t like passthrough ports provided by Proxmox (in Proxmox you can also pass through single USB ports / devices).

I virtualise all of my work desktops and try to keep my host “clean”.

This way I gain the benefit of snapshot/rollback/clone for testing things.

But that’s just me and most of my work is sysadmin/web/terminal session/testing stuff.

That said, I feel that if your workload can be virtualised with no/minimal performance impact, go for it. Upgrades, roll backs, testing stuff becomes SO much easier.

1 Like

Alright I think I am going to try to make this work. I got a pcie quad nvme card and rearranged my GPUs so the nvmes can have the right slot which supports bifurcation. So now I am essentially dual booting proxmox and manjaro as I make the transition.

Can anyone here explain or link a tutorial for keyboard passthrough with evdev. I cant seem to figure out the args evdev syntax in the qemu vm.conf. The man pages says args are used to pass arguments and is essentially for power users, which doesnt actually help me any. I have this sorted in manjaro because virt-man uses xml files.

For remoting in I recommend parsec. It’s great and has almost nolag or stutter

I can post one of my VM configs which uses args. What are you trying to accomplish? It seems you want to Route mouse and keyboard inputs to the host OS. On Proxmox it doesn’t make a lot of sense, because you are not interacting directly with the host os.

I want to use one keyboard / mouse connected to the host and then route to multiple VMs (2) using edev. I could do the same with a KVM, but I dont want to buy one if I can avoid it. Edev has worked great on my current Manjaro setup to get my ps/2 model M to my windows VM. I figured that was the cheapest way virtualizing both. I do not really need the keyboard to interact with the host, but I thought it was requisite to the the keyboard to both VMs.