[Guide] Remote Gaming on Unraid

I’d rather buy from a local reseller instead of Amazon, and I was just wondering if this product: LogiLink HDMI EDID Emulator (Digital -> Digital) - digitec is the kind of dummy plug he mentioned throughout the tutorial? I don’t want to buy anything wrong of course.

No, it’s not.

Thank you for clarifying

Any chance you could go a bit more into what this dummy plug is supposed to do? I don’t really understand, what I need it for.

Thank you very much in advance

EDIT:

I got help from another user and they mentioned this product. Can you clarify that this is in fact, what I am looking for?

Yes, that’s what you are looking for. You need a virtual monitor, basically. The VM needs to have a display hooked up to it, even if it is a fake one.

Ooh alright, thank you very much for your help!

1 Like

Hello!

Thanks for this guide :slight_smile:

I’ve gotten everything up and running successfully.

The only issue I have is with games that require a mouse interface e.g World of Warcraft.

Once you “click into” the game, the cursor is locked into the game/disappears and I can’t click menu items or anything of the sort.

No issues with controller only games such as Fall Guys, which worked flawlessly.

Any ideas on what could be causing this? I’m stumped

edit:

Upon further testing/troubleshooting, I’ve noticed this issue is related only to Parsec.

If I utilize Rainway, I do not have the issue.

However, when using Rainway, the mouse’s scroll wheel does not work, at all. It won’t function in Windows as a scroll wheel for a window, nor in games like WoW for camera adjustment or Minecraft for your bar selection.

Was setting up for remote gaming with Parsec, although not on a VM on Unraid, I thought the information could still potentially be useful. My first test led me to black screens on my remote connection and a quick search informed me this was because no monitors were detected on the host computer. This happens with DisplayPort connected monitors - apparently if they’re off they stop being detected by the computer all together. This was a two fold problem for me.
I used a spare dummy plug I had when I was back home and cloned my primary display to the now third display (I have two physical monitors already). With the dummy plug installed, I now could see my primary display over Parsec!
Curiously, I had no mouse cursor. This is because my mouse is connected on a USB port on the monitors, which get turned off when I’m away. But then I was able to find Parsec suggests Enabling Mouse Keys in Accessibility options to, essentially, force Windows to always think a mouse is present. This gave me a functioning cursor.
Hopefully this can be useful information to someone.

1 Like

@Madd33n @mrshaba I’m having the same issue where I switch to my GPU then my windows VM won’t work. How did you two get past that?

I have this same issue and its driving me crazy!!

I’ve done all the steps in the right order but none of my graphics cards show up under other PCI devices. I’m stuck at step 6. Is there something I’m missing?

default menu.c32
menu title Lime Technology, Inc.
prompt 0
timeout 50
label Unraid OS
  menu default
  kernel /bzimage
  append isolcpus=2-7 vfio-pci.ids=10de:1c02,10de:10f1,1002:679a,1002:aaa0         
pcie_acs_override=downstream,multifunction initrd=/bzroot
label Unraid OS GUI Mode
  kernel /bzimage
  append isolcpus=2-7 vfio-pci.ids=10de:1c02,10de:10f1,1002:679a,1002:aaa0 
pcie_acs_override=downstream,multifunction initrd=/bzroot,/bzroot-gui
label Unraid OS Safe Mode (no plugins, no GUI)
  kernel /bzimage
  append initrd=/bzroot unraidsafemode
label Unraid OS GUI Safe Mode (no plugins)
  kernel /bzimage
  append initrd=/bzroot,/bzroot-gui unraidsafemode
label Memtest86+
  kernel /memtest

I have a GTX1060 and an ATI 7950
ASUSTeK COMPUTER INC. P8Z77-V DELUXE, Version Rev 1.xx
American Megatrends Inc., Version 2104
BIOS dated: Tue 13 Aug 2013 12:00:00 AM PDT
Intel® Core™ i7-3770K CPU @ 3.50GHz

[10de:1c02]	01:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 3GB] (rev a1)
[10de:10f1]	01:00.1 Audio device: NVIDIA Corporation GP106 High Definition Audio Controller (rev a1)
[1002:679a]	02:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti PRO [Radeon HD 7950/8950 OEM / R9 280]
[1002:aaa0]	02:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti HDMI Audio [Radeon HD 7870 XT / 7950/7970]

How much of this guide is required now that NVIDIA is allowing GPU passthrough? Should you still align the bus, port, and function on the GPU devices? and is 6.7 unnecessary?

Thank you so much for posting this. I have almost everything configured but I keep getting the Error Code43 for my 1060 GPU. I am not sure what else I can do to get this working but below are my full system specs, and the VM config, sysconfig, and it still seems to be problematic.

System:

  • CPU: AMD Ryzen 7 2700X
  • Mobo: Gigabyte Technology Co., Ltd. X570 AORUS ELITE
  • GPU:
    • Primary: Nvidia GT710 - used for manual server access
    • Secondary: Nvidia GeForce GTX 1060 3GB - Passedthrough GPU

Any help you could provide would be absolutely amazing. I feel like it has to be something small that I am missing if others have been able to passthrough this GPU before.

VM XML File:
<?xml version='1.0' encoding='UTF-8'?>
<domain type='kvm' id='3'>
  <name>Gaming VM</name>
  <uuid>d2464189-0aa2-1482-af34-c7498c58a3e4</uuid>
  <metadata>
    <vmtemplate xmlns="unraid" name="Windows 10" icon="windows.png" os="windows10"/>
  </metadata>
  <memory unit='KiB'>16777216</memory>
  <currentMemory unit='KiB'>16777216</currentMemory>
  <memoryBacking>
    <nosharepages/>
  </memoryBacking>
  <vcpu placement='static'>12</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='2'/>
    <vcpupin vcpu='1' cpuset='10'/>
    <vcpupin vcpu='2' cpuset='3'/>
    <vcpupin vcpu='3' cpuset='11'/>
    <vcpupin vcpu='4' cpuset='4'/>
    <vcpupin vcpu='5' cpuset='12'/>
    <vcpupin vcpu='6' cpuset='5'/>
    <vcpupin vcpu='7' cpuset='13'/>
    <vcpupin vcpu='8' cpuset='6'/>
    <vcpupin vcpu='9' cpuset='14'/>
    <vcpupin vcpu='10' cpuset='7'/>
    <vcpupin vcpu='11' cpuset='15'/>
  </cputune>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='x86_64' machine='pc-i440fx-4.2'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/etc/libvirt/qemu/nvram/d2464189-0aa2-1482-af34-c7498c58a3e4_VARS-pure-efi.fd</nvram>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough' check='none' migratable='on'>
    <topology sockets='1' dies='1' cores='6' threads='2'/>
    <cache mode='passthrough'/>
    <feature policy='require' name='topoext'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/local/sbin/qemu</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='writeback'/>
      <source file='/mnt/disks/Samsung_SSD_960_PRO_512GB_S3EWNCAJ110096N/Gaming VM/vdisk1.img' index='3'/>
      <backingStore/>
      <target dev='hdc' bus='virtio'/>
      <boot order='1'/>
      <alias name='virtio-disk2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/isos/Win10_20H2_English_x64.iso' index='2'/>
      <backingStore/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <boot order='2'/>
      <alias name='ide0-0-0'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/isos/virtio-win-0.1.190-1.iso' index='1'/>
      <backingStore/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <alias name='ide0-0-1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='sata' index='0'>
      <alias name='sata0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <alias name='virtio-serial0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'>
      <alias name='pci.0'/>
    </controller>
    <controller type='usb' index='0' model='qemu-xhci' ports='15'>
      <alias name='usb'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </controller>
    <controller type='ide' index='0'>
      <alias name='ide'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:3c:ca:c9'/>
      <source bridge='br0'/>
      <target dev='vnet0'/>
      <model type='virtio-net'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/0'/>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/0'>
      <source path='/dev/pts/0'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-3-Gaming VM/org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
      <alias name='channel0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <alias name='input0'/>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'>
      <alias name='input1'/>
    </input>
    <input type='keyboard' bus='ps2'>
      <alias name='input2'/>
    </input>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
      </source>
      <alias name='hostdev0'/>
      <rom file='/mnt/user/isos/Nvidia/1070/EVGA.GTX1060.3072.160725.rom'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' multifunction='on'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x05' slot='0x00' function='0x1'/>
      </source>
      <alias name='hostdev1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/>
    </hostdev>
    <memballoon model='none'/>
  </devices>
  <seclabel type='dynamic' model='dac' relabel='yes'>
    <label>+0:+100</label>
    <imagelabel>+0:+100</imagelabel>
  </seclabel>
</domain>

sysconfig File:
kernel /bzimage
append pcie_acs_override=downstream,multifunction isolcpus=2-7,10-15 vfio-pci.ids=10de:1c02,10de:10f1 initrd=/bzroot 
System Information for GPU devices
IOMMU group 23:			 	[10de:1c02] 05:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 3GB] (rev a1)
IOMMU group 24:			 	[10de:10f1] 05:00.1 Audio device: NVIDIA Corporation GP106 High Definition Audio Controller (rev a1)

Did you dump the BIOS from your GPU or download it? I found that my 1050 didn’t work with with the BIOS files I found online.

Thankfully, you can dump BIOS in unraid–I followed this guide here: How to Easily Dump the vBios from any GPU for Passthrough - YouTube

Dude thank you so much. This solved it for me. After using the bios dumped from my actual card it recognized properly!

1 Like

Hello there!

Thanks at first for this fantastic tutorial! You really did invest time to make it like this!

I have a problem:
My GTX 970 is stuck with a error 43 and nothing does work. I did everything like your tutorial said and now tryed some alternatives. VFIO with the clickable solution directly in the System Devices section. Enable Hyper V etc.
I have some problems with the section where you did edit the xml with the pci busses etc. This may be the reason.

Ill post my xml and the except from the System Devices. Hopefully you have a idea. I really want to get this running :slight_smile:

<?xml version='1.0' encoding='UTF-8'?>
<domain type='kvm'>
  <name>Testvm</name>
  <uuid>1795b3e4-8711-0041-8d84-0dabe0d09e82</uuid>
  <metadata>
    <vmtemplate xmlns="unraid" name="Windows 10" icon="windows.png" os="windows10"/>
  </metadata>
  <memory unit='KiB'>3145728</memory>
  <currentMemory unit='KiB'>3145728</currentMemory>
  <memoryBacking>
    <nosharepages/>
  </memoryBacking>
  <vcpu placement='static'>3</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='5'/>
    <vcpupin vcpu='2' cpuset='2'/>
  </cputune>
  <os>
    <type arch='x86_64' machine='pc-i440fx-5.1'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/etc/libvirt/qemu/nvram/1795b3e4-8711-0041-8d84-0dabe0d09e82_VARS-pure-efi.fd</nvram>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vendor_id state='on' value='none'/>
    </hyperv>
  </features>
  <cpu mode='host-passthrough' check='none' migratable='on'>
    <topology sockets='1' dies='1' cores='3' threads='1'/>
    <cache mode='passthrough'/>
    <feature policy='require' name='topoext'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='hypervclock' present='yes'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/local/sbin/qemu</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='writeback'/>
      <source file='/mnt/user/domains/gamingvmgtx970/vdisk1.img'/>
      <target dev='hdc' bus='virtio'/>
      <boot order='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/isos/Win10_21H1_German_x64.iso'/>
      <target dev='hda' bus='sata'/>
      <readonly/>
      <boot order='2'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/isos/virtio-win-0.1.190-1.iso'/>
      <target dev='hdb' bus='sata'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </controller>
    <controller type='usb' index='0' model='qemu-xhci' ports='15'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:49:a5:07'/>
      <source bridge='br0'/>
      <model type='virtio-net'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/isos/MSI.GTX970.4096.160125_1.rom'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' multifunction='on'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </hostdev>
    <memballoon model='none'/>
  </devices>
</domain>

IOMMU group 8:			 	[10de:13c2] 01:00.0 VGA compatible controller: NVIDIA Corporation GM204 [GeForce GTX 970] (rev a1)
IOMMU group 9:			 	[10de:0fbb] 01:00.1 Audio device: NVIDIA Corporation GM204 High Definition Audio Controller (rev a1)
Loading config from /boot/config/vfio-pci.cfg
BIND=0000:01:00.0|10de:13c2 0000:01:00.1|10de:0fbb
---
Processing 0000:01:00.0 10de:13c2
Vendor:Device 10de:13c2 found at 0000:01:00.0

IOMMU group members (sans bridges):
/sys/bus/pci/devices/0000:01:00.0/iommu_group/devices/0000:01:00.0

Binding...
Successfully bound the device 10de:13c2 at 0000:01:00.0 to vfio-pci
---
Processing 0000:01:00.1 10de:0fbb
Vendor:Device 10de:0fbb found at 0000:01:00.1

IOMMU group members (sans bridges):
/sys/bus/pci/devices/0000:01:00.1/iommu_group/devices/0000:01:00.1

Binding...
Successfully bound the device 10de:0fbb at 0000:01:00.1 to vfio-pci
---
vfio-pci binding complete

Devices listed in /sys/bus/pci/drivers/vfio-pci:
lrwxrwxrwx 1 root root 0 Jul 1 09:01 0000:01:00.0 -> ../../../../devices/pci0000:00/0000:00:01.1/0000:01:00.0
lrwxrwxrwx 1 root root 0 Jul 1 09:01 0000:01:00.1 -> ../../../../devices/pci0000:00/0000:00:01.1/0000:01:00.1

ls -l /dev/vfio/
total 0
crw------- 1 root root 249, 0 Jul 1 09:01 8
crw------- 1 root root 249, 1 Jul 1 09:01 9
crw-rw-rw- 1 root root 10, 196 Jul 1 09:01 vfio

Thanks in advance for your help, I didnt find a working solution for my problem in this thread :frowning:
And: is it possible to use the iGPU of my Ryzen 5 2400g in a vm? For what do I need a GPU for unraid?
Just to ask btw :slight_smile:

Edit:
It’s working now, just from one day to another. Don’t know why :slight_smile:

Blockquote

Change this:

slot=‘0x08’ function=‘0x0’/>

to

slot=‘0x06’ function=‘0x1’/>

and then try it

Could you explain why I should do that?
Would be interesting to know… I think it’s the part I didn’t understand in the tutorial :slight_smile: thank you in advance :slight_smile:

Because the GPU has an onboard sound card as well as the Graphics and so when you pass it through it needs to be on the same virtual slot, as it can’t be in separate slots in real life so hence it needs to be the same in the VM otherwise it will give you an error. Spaceinvaderone explains it really well in his videos on passthrough. https://youtu.be/QlTVANDndpM?t=248

Don’t just skip things because you don’t understand them! Ask questions :slight_smile:

And @ArmaLite5.56 is correct.

I didn’t skip :slight_smile: just didn’t understand what the guide wanted to tell me. I didn’t see the relation and couldn’t adapt the made changes. I didn’t know that space invader one did a video on that :slight_smile: but thanks for explaining. Currently I’m wondering, why the sound cad did work directly and the graphics not. Didn’t make the change. Was just running one day to another.