Client doesn't connect to host (B7, Fedora client/Win11 host)

Hi,

I’m having an issue I just can’t figure out, connecting to Win11 host from my Fedora 42 client. I’m using a passthrough 1660 GTX for the guest, with a headless HDMI plug. I built the client from source after a repo clone, and installed the latest host exe (B7). Here’s my VM’s XML file:

<domain type="kvm">
  <name>yumemi</name>
  <uuid>5197965b-a45d-4c7e-97ef-2e34dcc4b21b</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://microsoft.com/win/11"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit="KiB">32873472</memory>
  <currentMemory unit="KiB">32873472</currentMemory>
  <memoryBacking>
    <source type="memfd"/>
    <access mode="shared"/>
  </memoryBacking>
  <vcpu placement="static">12</vcpu>
  <iothreads>1</iothreads>
  <cputune>
    <vcpupin vcpu="0" cpuset="3"/>
    <vcpupin vcpu="1" cpuset="15"/>
    <vcpupin vcpu="2" cpuset="4"/>
    <vcpupin vcpu="3" cpuset="16"/>
    <vcpupin vcpu="4" cpuset="5"/>
    <vcpupin vcpu="5" cpuset="17"/>
    <vcpupin vcpu="6" cpuset="6"/>
    <vcpupin vcpu="7" cpuset="18"/>
    <vcpupin vcpu="8" cpuset="7"/>
    <vcpupin vcpu="9" cpuset="19"/>
    <vcpupin vcpu="10" cpuset="8"/>
    <vcpupin vcpu="11" cpuset="20"/>
    <emulatorpin cpuset="9"/>
    <iothreadpin iothread="1" cpuset="10"/>
  </cputune>
  <numatune>
    <memory mode="strict" nodeset="0"/>
  </numatune>
  <os firmware="efi">
    <type arch="x86_64" machine="pc-q35-7.2">hvm</type>
    <firmware>
      <feature enabled="yes" name="enrolled-keys"/>
      <feature enabled="yes" name="secure-boot"/>
    </firmware>
    <loader readonly="yes" secure="yes" type="pflash" format="raw">/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd</loader>
    <nvram template="/usr/share/edk2/ovmf/OVMF_VARS.secboot.fd" templateFormat="raw" format="raw">/var/lib/libvirt/qemu/nvram/yumemi_VARS.fd</nvram>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv mode="custom">
      <relaxed state="on"/>
      <vapic state="on"/>
      <spinlocks state="on" retries="8191"/>
      <vpindex state="on"/>
      <runtime state="on"/>
      <synic state="on"/>
      <stimer state="on"/>
      <reset state="on"/>
      <vendor_id state="on" value="lookinglass"/>
      <frequencies state="on"/>
      <reenlightenment state="on"/>
      <tlbflush state="on"/>
      <ipi state="on"/>
    </hyperv>
    <kvm>
      <hidden state="on"/>
    </kvm>
    <vmport state="off"/>
    <smm state="on"/>
  </features>
  <cpu mode="host-passthrough" check="none" migratable="on">
    <topology sockets="1" dies="1" clusters="1" cores="6" threads="2"/>
  </cpu>
  <clock offset="localtime">
    <timer name="rtc" tickpolicy="catchup"/>
    <timer name="pit" tickpolicy="delay"/>
    <timer name="hpet" present="no"/>
    <timer name="hypervclock" present="yes"/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled="no"/>
    <suspend-to-disk enabled="no"/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type="file" device="disk">
      <driver name="qemu" type="raw" cache="none" io="native" iothread="1"/>
      <source file="/yumemi/yumemi.img"/>
      <target dev="vda" bus="virtio"/>
      <boot order="1"/>
      <address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
    </disk>
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw"/>
      <target dev="sdb" bus="sata"/>
      <readonly/>
      <address type="drive" controller="0" bus="0" target="0" unit="1"/>
    </disk>
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw"/>
      <target dev="sdc" bus="sata"/>
      <readonly/>
      <address type="drive" controller="0" bus="0" target="0" unit="2"/>
    </disk>
    <controller type="pci" index="0" model="pcie-root"/>
    <controller type="pci" index="1" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="1" port="0x10"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0" multifunction="on"/>
    </controller>
    <controller type="pci" index="2" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="2" port="0x11"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x1"/>
    </controller>
    <controller type="pci" index="3" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="3" port="0x12"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x2"/>
    </controller>
    <controller type="pci" index="4" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="4" port="0x13"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x3"/>
    </controller>
    <controller type="pci" index="5" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="5" port="0x14"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x4"/>
    </controller>
    <controller type="pci" index="6" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="6" port="0x15"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x5"/>
    </controller>
    <controller type="pci" index="7" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="7" port="0x16"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x6"/>
    </controller>
    <controller type="pci" index="8" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="8" port="0x17"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x7"/>
    </controller>
    <controller type="pci" index="9" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="9" port="0x18"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0" multifunction="on"/>
    </controller>
    <controller type="pci" index="10" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="10" port="0x19"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x1"/>
    </controller>
    <controller type="pci" index="11" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="11" port="0x1a"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x2"/>
    </controller>
    <controller type="pci" index="12" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="12" port="0x1b"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x3"/>
    </controller>
    <controller type="pci" index="13" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="13" port="0x1c"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x4"/>
    </controller>
    <controller type="pci" index="14" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="14" port="0x1d"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x5"/>
    </controller>
    <controller type="pci" index="15" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="15" port="0x8"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0"/>
    </controller>
    <controller type="pci" index="16" model="pcie-to-pci-bridge">
      <model name="pcie-pci-bridge"/>
      <address type="pci" domain="0x0000" bus="0x0a" slot="0x00" function="0x0"/>
    </controller>
    <controller type="sata" index="0">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x1f" function="0x2"/>
    </controller>
    <controller type="virtio-serial" index="0">
      <address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
    </controller>
    <controller type="usb" index="0" model="qemu-xhci">
      <address type="pci" domain="0x0000" bus="0x02" slot="0x00" function="0x0"/>
    </controller>
    <interface type="network">
      <mac address="52:54:00:44:cd:f7"/>
      <source network="default"/>
      <model type="virtio"/>
      <address type="pci" domain="0x0000" bus="0x01" slot="0x00" 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="spicevmc">
      <target type="virtio" name="com.redhat.spice.0"/>
      <address type="virtio-serial" controller="0" bus="0" port="1"/>
    </channel>
    <input type="mouse" bus="ps2"/>
    <input type="keyboard" bus="ps2"/>
    <input type="keyboard" bus="usb">
      <address type="usb" bus="0" port="1"/>
    </input>
    <tpm model="tpm-crb">
      <backend type="emulator" version="2.0"/>
    </tpm>
    <graphics type="spice" autoport="yes" listen="127.0.0.1">
      <listen type="address" address="127.0.0.1"/>
      <image compression="off"/>
    </graphics>
    <sound model="ich9">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x1b" function="0x0"/>
    </sound>
    <audio id="1" type="none"/>
    <video>
      <model type="none"/>
    </video>
    <hostdev mode="subsystem" type="pci" managed="yes">
      <source>
        <address domain="0x0000" bus="0x06" slot="0x00" function="0x0"/>
      </source>
      <address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/>
    </hostdev>
    <hostdev mode="subsystem" type="pci" managed="yes">
      <source>
        <address domain="0x0000" bus="0x06" slot="0x00" function="0x1"/>
      </source>
      <address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/>
    </hostdev>
    <hostdev mode="subsystem" type="pci" managed="yes">
      <source>
        <address domain="0x0000" bus="0x06" slot="0x00" function="0x2"/>
      </source>
      <address type="pci" domain="0x0000" bus="0x08" slot="0x00" function="0x0"/>
    </hostdev>
    <hostdev mode="subsystem" type="pci" managed="yes">
      <source>
        <address domain="0x0000" bus="0x06" slot="0x00" function="0x3"/>
      </source>
      <address type="pci" domain="0x0000" bus="0x09" slot="0x00" function="0x0"/>
    </hostdev>
    <watchdog model="itco" action="reset"/>
    <memballoon model="none"/>
    <shmem name="looking-glass">
      <model type="ivshmem-plain"/>
      <size unit="M">256</size>
      <address type="pci" domain="0x0000" bus="0x10" slot="0x01" function="0x0"/>
    </shmem>
  </devices>
</domain>

Here’s the host log:

00:00:00.007 [I]              time.c:85   | windowsSetTimerResolution      | System timer resolution: 500.0 μs
00:00:00.008 [I]               app.c:867  | app_main                       | Looking Glass Host (B7)
00:00:00.009 [I]           cpuinfo.c:38   | cpuInfo_log                    | CPU Model: AMD Ryzen 9 5900X 12-Core Processor
00:00:00.011 [I]           cpuinfo.c:39   | cpuInfo_log                    | CPU: 1 sockets, 12 cores, 12 threads
00:00:00.013 [I]           ivshmem.c:132  | ivshmemInit                    | IVSHMEM 0* on bus 0xc, device 0x1, function 0x0
00:00:00.024 [I]               app.c:885  | app_main                       | IVSHMEM Size     : 256 MiB
00:00:00.024 [I]               app.c:886  | app_main                       | IVSHMEM Address  : 0x18E682F0000
00:00:00.024 [I]               app.c:887  | app_main                       | Max Pointer Size : 1024 KiB
00:00:00.025 [I]               app.c:888  | app_main                       | KVMFR Version    : 20
00:00:00.025 [I]               app.c:917  | app_main                       | Trying           : D12
00:00:00.025 [I]               d12.c:200  | d12_create                     | debug:0 trackDamage:1 indirectCopy:0
00:00:00.040 [I]               d12.c:1025 | d12_enumerateDevices           | Device Name       : \\.\DISPLAY1
00:00:00.040 [I]               d12.c:1026 | d12_enumerateDevices           | Device Description: NVIDIA GeForce GTX 1660
00:00:00.041 [I]               d12.c:1027 | d12_enumerateDevices           | Device Vendor ID  : 0x10de
00:00:00.041 [I]               d12.c:1028 | d12_enumerateDevices           | Device Device ID  : 0x2184
00:00:00.041 [I]               d12.c:1029 | d12_enumerateDevices           | Device Video Mem  : 5966 MiB
00:00:00.042 [I]               d12.c:1031 | d12_enumerateDevices           | Device Sys Mem    : 0 MiB
00:00:00.042 [I]               d12.c:1033 | d12_enumerateDevices           | Shared Sys Mem    : 16041 MiB
00:00:00.388 [I]                dd.c:167  | d12_dd_init                    | Feature Level     : 0xb100
00:00:00.393 [I]               d12.c:420  | d12_init                       | D12 Created Effect: Downsample
00:00:00.398 [I]               d12.c:420  | d12_init                       | D12 Created Effect: HDR16to10
00:00:00.399 [I]               app.c:451  | captureStart                   | ==== [ Capture Start ] ====
00:00:00.399 [I]               app.c:948  | app_main                       | Using            : D12
00:00:00.399 [I]               app.c:949  | app_main                       | Capture Method   : Synchronous
00:00:00.400 [I]               app.c:774  | lgmpSetup                      | Max Frame Size   : 126 MiB
00:00:00.400 [I]               app.c:461  | captureStop                    | ==== [ Capture Stop ] ====

(Is it normal for the capture to stop so immediately?)

And finally, the client log:

[ckx@sakura ~]$ looking-glass-client 
00:00:00.000 [I]              main.c:1867 | main                           | Looking Glass (B7-161-gfddcb7f2d4)
00:00:00.000 [I]              main.c:1868 | main                           | Locking Method: Atomic
00:00:00.000 [I]           cpuinfo.c:38   | cpuInfo_log                    | CPU Model: AMD Ryzen 9 5900X 12-Core Processor
00:00:00.000 [I]           cpuinfo.c:39   | cpuInfo_log                    | CPU: 1 sockets, 12 cores, 24 threads
00:00:00.012 [I]            config.c:630  | config_load                    | Loading config from: /home/ckx/.config/looking-glass/client.ini
00:00:00.021 [I]              main.c:1187 | lg_run                         | Using font: /usr/share/fonts/dejavu-sans-mono-fonts/DejaVuSansMono.ttf
00:00:00.022 [I]           ivshmem.c:137  | ivshmemOpenDev                 | KVMFR Device     : /dev/shm/looking-glass
00:00:00.024 [I]             audio.c:159  | audio_init                     | Using AudioDev: PipeWire
00:00:00.024 [I]                ps.c:246  | purespice_connect              | Connecting to socket 127.0.0.1:5900
00:00:00.030 [I]               rsa.c:179  | rsa_encryptPassword            | Using Nettle
00:00:00.030 [I]                ps.c:269  | purespice_connect              | Connected
00:00:00.030 [I]             agent.c:104  | agent_connect                  | Connected to the spice guest agent
00:00:00.030 [I]      channel_main.c:168  | onMessage_mainName             | Guest name: yumemi
00:00:00.030 [I]      channel_main.c:184  | onMessage_mainUUID             | Guest UUID: 5197965b-a45d-4c7e-97ef-2e34dcc4b21b
00:00:00.036 [I]                ps.c:645  | ps_connectChannel              | INPUTS channel connected
00:00:00.036 [I]           channel.c:324  | onMessage_notify               | [notify] keyboard channel is insecure
00:00:00.036 [I]               egl.c:289  | egl_initialize                 | Double buffering is off
00:00:00.036 [I]              main.c:1141 | tryRenderer                    | Using Renderer: EGL
00:00:00.036 [I]           wayland.c:120  | waylandInit                    | Compositor: kwin_wayland_wr
00:00:00.036 [I]           wayland.c:130  | waylandInit                    | Selected  : xdg
00:00:00.047 [I]                gl.c:58   | waylandGetEGLDisplay           | Using eglGetPlatformDisplay
00:00:00.062 [I]               egl.c:856  | egl_renderStartup              | Single buffer mode
00:00:00.072 [I]               egl.c:883  | egl_renderStartup              | EGL     : 1.5
00:00:00.072 [I]               egl.c:884  | egl_renderStartup              | Vendor  : AMD
00:00:00.072 [I]               egl.c:885  | egl_renderStartup              | Renderer: AMD Radeon RX 6950 XT (radeonsi, navi21, LLVM 20.1.8, DRM 3.64, 6.16.8-200.fc42.x86_64)
00:00:00.072 [I]               egl.c:886  | egl_renderStartup              | Version : OpenGL ES 3.2 Mesa 25.1.9
00:00:00.072 [I]               egl.c:887  | egl_renderStartup              | EGL APIs: OpenGL OpenGL_ES 
00:00:00.072 [I]               egl.c:958  | egl_renderStartup              | Debug messages disabled, enable with egl:debug=true
00:00:00.098 [I]           eglutil.c:35   | swapWithDamageInit             | Using EGL_KHR_swap_buffers_with_damage
00:00:00.101 [I]              main.c:1495 | lg_run                         | ================================================================================
00:00:00.101 [I]              main.c:1496 | lg_run                         | The host application seems to not be running
00:00:00.101 [I]              main.c:1497 | lg_run                         | Waiting for the host application to start...
00:00:00.374 [I]              main.c:1502 | lg_run                         | ================================================================================
00:00:00.374 [I]              main.c:1519 | lg_run                         | Check the host log in your guest at %ProgramData%\Looking Glass (host)\looking-glass-host.txt
00:00:00.374 [I]              main.c:1520 | lg_run                         | Continuing to wait...

Any clues in here? Ran through a couple search engines and robots but so far haven’t turned up anything that helps.

Some other stuff I’ve confirmed:

  • shmem file is readable, I tried values of 32 and 64 since those tend to be the most recommended, the config I posted above with 256 was just a “why not” test.
  • The guest’s dummy HDMI plug is working properly, and there is no Microsoft Basic Display Adapter or anything similar in device manager on the guest. Behavior is the same even with a real monitor plugged in to the passthrough GPU.
  • Like the log shows, the spice agent connects. When I try to connect with the looking-glass-client and watch the guest via vnc, I can see that it accepts input from the spice agent very briefly (like if I spam “a” key on the client that never connects, “a” will get sent to the guest a couple times before ceasing).

Apologies for double post, can’t find the edit button, lol.

1 Like

I didn’t install the Bleeding Edge client exe on the host. After doing so it works fine.

1 Like

Whenever I run into an issue on Fedora that I cannot explain, I first turn off SELinux. Often, that’s when things start working…

2 Likes

You must match the client and host application versions, they are a pair and communicate over still a evolving protocol (remember, LG is in beta, low level stuff like this changes across versions still)

Note you have other issues with your configuration though.

/dev/shm/looking-glass - You should be using the KVMFR module (see the LG documentation)

CPU: 1 sockets, 12 cores, 12 threads - Your guest isn’t aware of the threaded cores, you need to set the topoext cpu feature flag in QEMU, and at a maximum only configure qemu for:
CPUs=1, Cores=10, Threads=2 or you will starve your host of CPU time.

2 Likes