Enable VT-d(Intel Virtualization Technology for Directed I/O), for IOMMU(Input Output Memory Management Unit) services, and SR-IOV (Single Root IO Virtualization), a technology that allows a physical PCIe device to present itself multiple times through the PCIe bus, in motherboard BIOS in Chipset, e.g. ASRock Z790 Riptide WiFi & Mini PC with Intel Alder Lake-N i3-N305.
Enable SR-IOV for Mellonax network adapter e.g. Mellanox ConnectX-4 MCX455A-ECAT PCIe x16 3.0 100GBe VPI EDR IB in the same motherboard BIOS.
SR-IOV is default enabled for Intel 82599ES 10G optical ports network card.
root@pve:~# cat /etc/apt/sources.list deb http://deb.debian.org/debian bookworm main contrib deb http://deb.debian.org/debian bookworm-updates main contrib deb http://security.debian.org/debian-security bookworm-security main contrib
root@pve:~# apt install proxmox-headers-$(uname -r) Reading package lists... Done Building dependency tree... Done Reading state information... Done The following NEW packages will be installed: proxmox-headers-6.8.4-2-pve 0 upgraded, 1 newly installed, 0 to remove and 39 not upgraded. Need to get 13.7 MB of archives. After this operation, 97.0 MB of additional disk space will be used. Get:1 http://download.proxmox.com/debian/pve bookworm/pve-no-subscription amd64 proxmox-headers-6.8.4-2-pve amd64 6.8.4-2 [13.7 MB] Fetched 13.7 MB in 1s (23.8 MB/s) Selecting previously unselected package proxmox-headers-6.8.4-2-pve. (Reading database ... 70448 files and directories currently installed.) Preparing to unpack .../proxmox-headers-6.8.4-2-pve_6.8.4-2_amd64.deb ... Unpacking proxmox-headers-6.8.4-2-pve (6.8.4-2) ... Setting up proxmox-headers-6.8.4-2-pve (6.8.4-2) ...
Upgrade Linux Kernel i915 firmware to the latest version:
root@pve:~# dpkg -i /tmp/i915-sriov-dkms_2026.02.09_amd64.deb Selecting previously unselected package i915-sriov-dkms. (Reading database ... 97011 files and directories currently installed.) Preparing to unpack .../i915-sriov-dkms_2026.02.09_amd64.deb ... Unpacking i915-sriov-dkms (2026.02.09) ... Setting up i915-sriov-dkms (2026.02.09) ... Removing old i915-sriov-dkms/2026.02.09 DKMS files... Deleting module i915-sriov-dkms/2026.02.09 completely from the DKMS tree. Loading new i915-sriov-dkms/2026.02.09 DKMS files... Building for 6.17.9-1-pve
Building initial module i915-sriov-dkms/2026.02.09 for 6.17.9-1-pve Sign command: /lib/modules/6.17.9-1-pve/build/scripts/sign-file Signing key: /var/lib/dkms/mok.key Public certificate (MOK): /var/lib/dkms/mok.pub Certificate or key are missing, generating self signed certificate for MOK...
Building module(s)....................................................... done. Signing module /var/lib/dkms/i915-sriov-dkms/2026.02.09/build/compat/intel_sriov_compat.ko Signing module /var/lib/dkms/i915-sriov-dkms/2026.02.09/build/drivers/gpu/drm/i915/i915.ko Signing module /var/lib/dkms/i915-sriov-dkms/2026.02.09/build/drivers/gpu/drm/i915/kvmgt.ko Signing module /var/lib/dkms/i915-sriov-dkms/2026.02.09/build/drivers/gpu/drm/xe/xe.ko Installing /lib/modules/6.17.9-1-pve/updates/dkms/intel_sriov_compat.ko Found pre-existing /lib/modules/6.17.9-1-pve/kernel/drivers/gpu/drm/i915/i915.ko, archiving for uninstallation Installing /lib/modules/6.17.9-1-pve/updates/dkms/i915.ko Found pre-existing /lib/modules/6.17.9-1-pve/kernel/drivers/gpu/drm/i915/kvmgt.ko, archiving for uninstallation Installing /lib/modules/6.17.9-1-pve/updates/dkms/kvmgt.ko Found pre-existing /lib/modules/6.17.9-1-pve/kernel/drivers/gpu/drm/xe/xe.ko, archiving for uninstallation Installing /lib/modules/6.17.9-1-pve/updates/dkms/xe.ko Running depmod... done. update-initramfs: Generating /boot/initrd.img-6.17.9-1-pve Running hook script 'zz-proxmox-boot'.. Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace.. No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync. update-initramfs: Generating /boot/initrd.img-6.17.2-1-pve Running hook script 'zz-proxmox-boot'.. Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace.. No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.
and enable i915-sriov-dkms module with upto maximum 7 VFS (Virtual File System) in Linux kernel:
Add a PCI device for Ubuntu VM, and choose one Virtual GPU; Enable Primary GPU and PCI Express in options; Choose none in Display and host in Processors options:
Setup remote desktop connection to Ubuntu:
1 2 3 4 5
root@nucleus:~# apt install ubuntu-desktop
root@nucleus:~# apt install xrdp
root@nucleus:~# systemctl enable xrdp
Fix Remote Desktop audio over HDMI issue with the script, enable the sound redirection:
1
terrence@nucleus:~$ ./xrdp-installer-1.5.1.sh -s
then reboot VM.
Now Audio device becomes xrdp input / output.
Windows Server 2022
Windows Server 2022 is similar to Windows 11 setup in Proxmox. A few issues like GPU:
just disable GPU then enable it, it will work correctly.
And no sound after installation, but can enable Windows Audio Service and choose Remote Audio:
then audio over HDMI to remote desktop can work.
In addition, can setup User Auto Logon after Windows Server 2022 startup. And check Windows license by running:
1
PS C:\Users\Administrator> slmgr -dlv
Now can remote desktop access Ubuntu, Windows 11 and Windows Server 2022 VMs both run in Proxmox:
Confirm Are you sure you want to perform this action? Performing operation 'Modify' on Target 'SMB Client Configuration'. [Y] Yes[A] Yes to All [N] No[L] No to All [S] Suspend[?] Help (default is "Y"):
Check network interfaces which show “RSS capable = True“:
Server Name Selected Client IP Server IP Client Interface Index Server Interface Index Client RSS Capable Client RDMA Capable ---------------------------------------------------------------------------------------------------------------------- Synology True 192.168.0.98192.168.0.112265 False False Synology False 192.168.0.98192.168.0.34264 False False Synology False 192.168.0.98192.168.196.140267 False False
192.168.0.98 is Windows 11 network address, after Network Teaming; 192.168.0.112 and 192.168.0.34 are Synology NAS network addresses.
Synology NAS DS920+ with two 1Gbps ethernet adapters. There is an affordable and easy upgrading its gigabytes network path to 2.5Gbps.
Login Synology NAS Admin UI and run Control Panel -> Network -> Network Interface
Get a USB 3.0 Ethernet Adapter 2.5Gbps with Realtek RTL8156 / RTL8156B / RTL8156BG chipset, e.g., UGREEN 2.5Gbps USB-C Ethernet Adapter:
Find out the architecture name of CPU in NAS. For example, Synology DS920+ is equipped with Intel Celeron J4125 CPU. The architecture name of this processor is Geminilake.
Go to driver releases site https://github.com/bb-qq/r8152/releases and download the latest version e.g. r8152-geminilake-2.17.1-1_7.2.spk, Synology DSM 7.2 and above, use packages with the suffix _7.2.
Login Synology Admin UI, then go to Package Center -> Manual Install and choose a driver package downloaded from above step.
The installation will fail at the very first time.
Then ssh into the NAS, and run the following command:
$ sudo bash /var/packages/r8152/scripts/install-udev-rules Updating Hardware Database Index... UDEV rules have been installed to /usr/lib/udev/rules.d lrwxrwxrwx 1 root root 50 May 24 17:13 /usr/lib/udev/rules.d/51-usb-r8152-net.rules -> /var/packages/r8152/scripts/51-usb-r8152-net.rules
and continue / retry the installation .
Reboot NAS.
Login Synology Admin UI, Package Center -> Installed -> RTL8152/RTL8153 driver and check new installed Realtek network adapter driver is running:
Control Panel -> Network -> Network Interface and check the new network interface LAN 3 and Lan 4 have been turned on, with MTU / jumbo frame enabled 9000:
Bind the USB network adapter and run iperf3 network performance test:
$ adb devices List of devices attached 9b26c76 device
$ adb reboot bootloader
Wait for phone to reboot till phone in the Bootloader mode, then run:
1
$ fastboot flashing unlock
ON the phone will ask to confirm “UNLOCK THE BOOTLOADER”. After UNLOCK, your phone WILL BE RESET, like a factory hard reset. ALL APPS AND DATA ARE GONE. Android system will be reinstalled.
On the phone Settings, search for USB Preferences, select USE USB FOR File transfer
On Windows, in File Explorer, copy OnePlus5TOxygen_43_OTA_069_all_2010292144_76910d123e3940e5/boot.img file to ONEPLUS A5010 -> Internal shared storage -> Download directory on the phone
PS C:\ProgramData\ssh> ((Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows nt\CurrentVersion\" -Name ProductName).ProductName) Windows 10 Enterprise
Check Windows Domain information:
1 2 3 4 5 6 7 8 9 10 11 12
PS C:\ProgramData\ssh> dsregcmd /status
+----------------------------------------------------------------------+ | Device State | +----------------------------------------------------------------------+
AzureAdJoined : YES EnterpriseJoined : NO DomainJoined : YES DomainName : CORP Device Name : WINDOWS.corp.paradise.local ...
Check OpenSSH Server for Windows run as a service:
Make sure OpenSSH SSH Server firewall inbound rule allows ALL profiles:
The default C:\ProgramData\ssh\sshd_config file doesn’t work for Windows Domain users authentication, and does’t support .ssh\authorized_keys public key authentication. Error lookup_principal_name: User principal name lokup failed for user ‘corp\darling’ in OpenSSH Server C:\ProgramData\ssh\logs\ssd log file. A work around solution is to comment out lines:
1 2
#Match Group administrators # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
# This is the sshd server system-wide configuration file. See # sshd_config(5) for more information.
# The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value.
#Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 # but this is overridden so installations will only check .ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys
#AuthorizedPrincipalsFile none
# For this to work you will also need host keys in %programData%/ssh/ssh_known_hosts #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no
# GSSAPI options #GSSAPIAuthentication no
#AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no #PermitTTY yes #PrintMotd yes #PrintLastLog yes #TCPKeepAlive yes #UseLogin no #PermitUserEnvironment no #ClientAliveInterval 0 #ClientAliveCountMax 3 #UseDNS no #PidFile /var/run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none #VersionAddendum none
# no default banner path #Banner none
# override default of no subsystems Subsystem sftp sftp-server.exe
# Example of overriding settings on a per-user basis #Match User anoncvs # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server
#Match Group administrators # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
Now run ssh client and log on SSH Server:
1 2 3 4 5
$ sshpass -f ~/.ssh/windows.passwd ssh -l darling windows.local Microsoft Windows [Version 10.0.19044.2965] (c) Microsoft Corporation. All rights reserved.