This is a work-in-progress thread, I'll try to document what works and what doesn't.
Goal:
I have a GMKtec G3 plus mini pc, with an Intel N150 CPU. I wanted to run Proxmox on it to host my home VMs/containers. The most crucial role that the system was bought for was serving as my bedroom LibreELEC to drive my TV.
Intended audience:
You should probably feel at home with the Proxmox Virtualization Environment (PVE). It's an excellent hypervisor with a very friendly community.
Initial setup:
Make sure that on the system UEFI is enabled as well as all virtualization options (Intel VT, VT-d, IO-SRV if present).
I will not cover the Proxmox initial installation procedure. I followed the defaults and that was it.
You'll need a copy of a specially created LE build by sky42, see RE: LE 12.0 added lvm2, luks (dm-crypt, veracrypt), mdraid, ext4 encryption (NOTE: As of July 7th, LE12 nightly does not run with the N150 GPU (prolly due to the kernel used). OTOH, LE13 nightly runs just fine, but I selected sky42 's build since all my addons are basically for LE12 (and they work flawlessly).
From the link, download the img.gz version, and write it to a thumb drive using the LibreELEC USB Creator application.
Create a VM say libreelec mostly with with the default settings. I configured it for 4 vCPUs, 4Gb of RAM and a 32 vHDD. Select the cpu type to be host. Do not change the GPU type. BIOS should be (by default) SeaBIOS, which is ok.
Connect the thumb-drive to the system and from within proxmox add it as USB device, using pass-through. Boot from that and just do a LibreELEC install. Let it reboot after install, it will be stuck in the LE logo screen, that's ok. Power it down.
The actual stuff:
Now comes the hard part, to pass through the graphics adapter from proxmox to the LE VM. First add some modules to /etc/modules, so the file looks like this (see [1]):
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
intelvfio
vfio_iommu_type1
vfio_pci
Immediately afterwards run:
The kernel should also be started with an iommu=pt option (see also [1], plus how to do it in [2]). Basically, edit /etc/default/grub and
set variable GRUB_CMDLINE_LINUX_DEFAULT to be "quiet iommu=pt" instead of "quiet".
Save and do a:
Reboot.
Now you'll have to locate which is the PCI id of your graphics card. You do that by running a (sample output included):
root@pve:~# lspci -nnv |grep -i vga
00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-N [Intel Graphics] [8086:46d4] (prog-if 00 [VGA controller])
So the id is the one ending in 00:02.0. Now go to the LE VM configuration and add a PCI device. Select Raw device and from the pull down menu select the device ending in the code corresponding to your VGA. Check the Primary GPU box. Do not touch anything else!
At this point, being optimists we'll expect that everything will work, so this is the type to connect a USB keyboard to the box (if you have disconnected it before) and pass through the USB device that corresponds to your keyboard (Add USB device -> Use USB Vendor/Device ID).
Start your VM. If everything went fine, the console display of proxmox will be replaced with the librelec boot screen and, finally, with the LE configuration wizard.
For the record this is how my vm.conf file looks like:
agent: 0
boot: order=scsi0
cores: 4
cpu: host,flags=-md-clear;-pcid;-spec-ctrl;-ssbd;-ibpb;-virt-ssbd;-amd-ssbd;-amd-no-ssb;-pdpe1gb;-hv-evmcs;+aes
hostpci0: 0000:00:02.0,x-vga=1
memory: 4096
meta: creation-qemu=9.2.0,ctime=1751740822
name: libreelec
net0: virtio=XX:XX:XX:XX:XX:XX,bridge=vmbr0
numa: 0
ostype: l26
scsi0: local-lvm:vm-100-disk-0,discard=on,iothread=1,replicate=0,size=32G,ssd=1
scsihw: virtio-scsi-single
smbios1: uuid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
sockets: 1
usb0: host=1c4f:0002
vga: none
vmgenid: Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Display More
Waking the LE with WOL (wake-on-lan):
There are two approaches to wake your VM from PVE. The obvious one is to have the LE VM start at boot from the VM settings. In this case you'd have to WOL the PVE itself. That is, when you would power down the VM you should somehow (via a SSH command for example from LE to PVE) shutdown PVE itself. The problem is that in this case you would bring down all VMs on the system, defeating the purpose of having a hypervisor in the first place.
The second approach is extremely smart, credits go to the relevant authors at [3]. Note that the mechanism working by sending WOL packets to port 9 (Yatse uses a different port, so make sure you set the port to 9). You'll need also the MAC address of the LE VM.
Follow the instruction in the first post in [3], with an important change: instead of creating file /root/scripts/wol_hack.sh, create it with the contents of post https://forum.proxmox.com/threads/wake-o…879/post-756125
Apart from that, follow the instructions in the first post in [3].
Now you can send a WOL from yatse to the mac address of your LE VM and it will start happily!
Small niceties:
1) Try to document the PVE installation and modifications you did. If you have to rebuild PVE, you'll find that it will take minimal time to re-do your setup. Remember: every minute spending in documenting your setup is equivalent to much more time needed when disaster strikes.
2) Once you have your VM up and running, do take a snapshot of it. But avoid snapshotting as a means of proper backup. PVE allows to take you a full actual VM backup. Copy the backup elsewhere, or mount an NFS partition from your NAS (if you have one). These instructions are out of scope of this howto, just saying to avoid having to redo everything from scratch.
3) Finally, for PVE installation on SSDs, you might find instructions in [4] useful.
Final thoughts:
As this is WIP, I have not tested audio (currently connected to a computer monitor with no audio, but expect that it will work over HDMI). If not, the guide will be modified to reflect any changes.
Additionally, I do want to have some smart hibernation of the VM. If I find anything, I'll update the howto as well.
Changelog:
2025-07-14: added information for waking the VM after you've powered it down (yatse or other wake-on-lan utility needed).
References:
[1]: Proxmox PCI(e) Passthrough
[2]: Proxmox Editing the Kernel Commandline
[3]: Proxmox Forum: [TUTORIAL] Wake On LAN (WOL) for VMs and Containers
[4]: If you boot Proxmox from an SSD, disable these two services to prevent wearing out your drive