Re: How to use the framebuffer as primary video device instead of the nvidia passed-through graphic card in a bhyve/linux vm

From: Mario Marietto <marietto2008_at_gmail.com>
Date: Sun, 04 Dec 2022 13:33:33 UTC
Hello.

I know,but it does not work. If I use ONLY the framebuffer argument,it
works : the desktop manager is loaded within the vm window,but if between
the bhyve parameters I declare the framebuffer AND the nvidia slots,on the
vm window I see the blinking pointer because the output is redirected to
the screen that I have attached to the nvidia HDMI connector. The problem
is that at the moment I can't use that monitor,since I'm using my PC in a
different room.
I made an experiment : I have excluded all the parameters that may be used
in my old Ubuntu installation by installing Ubuntu (22.10) from scratch and
between the bhyve parameters I have added both the framebuffer and the 4
nVidia slots.

bhyve -S -c sockets=1,cores=2,threads=2 -m 4G -w -H -A \
-s 0,hostbridge \
-s
1,ahci-cd,/mnt/$vmdisk1'p2'/bhyve/iso/Linux/ubuntu-22.10-desktop-amd64.iso
\
-s 7:0,fbuf,tcp=0.0.0.0:5916,w=1600,h=950,wait \
-s 8:0,passthru,2/0/0 \
-s 8:1,passthru,2/0/1 \
-s 8:2,passthru,2/0/2 \
-s 8:3,passthru,2/0/3 \
-s 10,virtio-net,tap16 \
-s 11,virtio-9p,sharename=/ \
-s 30,xhci,tablet \
-s 31,lpc \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI_CODE.fd \
vm0:16 < /dev/null & sleep 2 && vncviewer 0:16

When I choose "try and install Ubuntu" I see the blinking pointer because
the output is redirected to the screen that I can't use. But if I choose
"safe graphics" maybe it makes the magic. Below you can see what are the
parameters used by Ubuntu to display the installer even if between the
bhyve parameters I have used the framebuffer and the nVidia adapters.

https://ibb.co/L9JqQbL

Instead below you can see what are the parameters used by Ubuntu to display
the installer if between the bhyve parameters I use both the framebuffer
and the nVidia adapters but without choosing "safe graphics" on the ubuntu
boot menu.

https://ibb.co/wNJxxkV

As you can see,the parameter that makes the difference is called
"nomodeset". So,I presume that in a certain ubuntu configuration file I
should add that parameter....


Il giorno dom 4 dic 2022 alle ore 10:41 Corvin Köhne <corvink@freebsd.org>
ha scritto:

> On December 3, 2022 7:14:29 PM GMT+01:00, Mario Marietto <
> marietto2008@gmail.com> wrote:
>>
>> ok. I tried like this,but it didn't work :
>>
>> bhyve -S -c sockets=1,cores=2,threads=2 -m 4G -w -H -A \
>> -s 0,hostbridge \
>> -s 2,virtio-blk,/mnt/$vmdisk1'p2'/bhyve/img/Linux/ubuntu2210.img,bootindex=1 \
>> -s 3,virtio-blk,/dev/$vmdisk4 \
>> -s 4,virtio-blk,/dev/$vmdisk2 \-s 7,fbuf,tcp=0.0.0.0:5919,w=1600,h=950,wait \
>> -s 8:0,passthru,2/0/0 \
>> -s 8:1,passthru,2/0/1 \
>> -s 8:2,passthru,2/0/2 \
>> -s 8:3,passthru,2/0/3 \
>> -s 10,virtio-net,tap19 \
>> -s 11,virtio-9p,sharename=/ \
>> -s 30,xhci,tablet \
>> -s 31,lpc \
>> -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI_CODE.fd \
>> vm0:19 < /dev/null & sleep 2 && vncviewer 0:19
>>
>> I tried specifying the bus ID of the framebuffer and I have used this
>> xorg.conf file :
>>
>> Section "Files"
>>     ModulePath   "/usr/lib/xorg/modules"
>>     FontPath     "/usr/share/fonts/X11/misc"
>>     FontPath     "/usr/share/fonts/X11/cyrillic"
>>     FontPath     "/usr/share/fonts/X11/100dpi/:unscaled"
>>     FontPath     "/usr/share/fonts/X11/75dpi/:unscaled"
>>     FontPath     "/usr/share/fonts/X11/Type1"
>>     FontPath     "/usr/share/fonts/X11/100dpi"
>>     FontPath     "/usr/share/fonts/X11/75dpi"
>>     FontPath     "built-ins"
>> EndSection
>>
>> Section "Module"
>>     Load  "vnc"
>>     Load  "glx"
>> EndSection
>>
>>
>> Section "InputDevice"
>>     Identifier  "Keyboard0"
>>     Driver      "kbd"
>> EndSection
>>
>> Section "InputDevice"
>>     Identifier  "Mouse0"
>>     Driver      "mouse"
>>     Option        "Protocol" "auto"
>>     Option        "Device" "/dev/input/mice"
>>     Option        "ZAxisMapping" "4 5 6 7"
>>
>> EndSection
>>
>> Section "Monitor"
>>     Identifier   "Monitor0"
>>     VendorName   "Monitor Vendor"
>>     ModelName    "Monitor Model"
>> EndSection
>>
>> Section "Device"
>>    Identifier  "Card0"
>>    Driver      "modesetting"
>>    BusID       "PCI:0:7:0"
>>
>> EndSection
>>
>> Section "Screen"
>>     Identifier "Screen0"
>>     Device     "Card0"
>>     Monitor    "Monitor0"
>>     SubSection "Display"
>>         Viewport   0 0
>>         Depth     1
>>     EndSubSection
>>     SubSection "Display"
>>         Viewport   0 0
>>         Depth     4
>>     EndSubSection
>>     SubSection "Display"
>>         Viewport   0 0
>>         Depth     8
>>     EndSubSection
>>     SubSection "Display"
>>         Viewport   0 0
>>         Depth     15
>>     EndSubSection
>>     SubSection "Display"
>>         Viewport   0 0
>>         Depth     16
>>     EndSubSection
>>     SubSection "Display"
>>         Viewport   0 0
>>         Depth     24
>>     EndSubSection
>> EndSection
>>
>> The error reported has been :
>>
>> https://ibb.co/1KX2h26
>> https://ibb.co/Cv5FffB
>>
>> thanks.
>>
>> Il giorno sab 3 dic 2022 alle ore 17:34 Corvin Köhne <corvink@freebsd.org>
>> ha scritto:
>>
>>> On December 3, 2022 4:49:46 PM GMT+01:00, Mario Marietto <
>>> marietto2008@gmail.com> wrote:
>>>>
>>>> Hello to everyone.
>>>>
>>>> what Im trying to do is to set the framebuffer video adapter as primary
>>>> graphic card on my bhyve-ubuntu vm instead of the nvidia RTX 2080 ti card
>>>> that I have passed through. What I want to do really is to use both the
>>>> graphic adapters,but the primary should be the framebuffer and the
>>>> secondary the nvidia. I tried different Xorg configurations,but what I've
>>>> got is that Xorg failed to display some errors. So,the controller that you
>>>> see below should be used as primary inside the ubuntu vm :
>>>>
>>>> 00:1d.0 VGA compatible controller: Device fb5d:40fb
>>>>
>>>> while the ones you see below as secondary :
>>>>
>>>> 08:00.0 VGA compatible controller: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti] (rev a1)
>>>> 08:00.1 Audio device: NVIDIA Corporation TU102 High Definition Audio Controller (rev a1)
>>>> 08:00.2 USB controller: NVIDIA Corporation TU102 USB 3.1 Host Controller (rev a1)
>>>> 08:00.3 Serial bus controller: NVIDIA Corporation TU102 USB Type-C UCSI Controller (rev a1)
>>>>
>>>>
>>>> The script that I use to launch the vm is the following :
>>>>
>>>> #!/bin/sh
>>>> setxkbmap it
>>>> vms="$(ls /dev/vmm/*)"
>>>> vncs="$(ps ax | awk '/vncviewer [0]/{print $6}')"
>>>>
>>>> for vm in $vms; do
>>>>                 session="${vm##*/}"
>>>>                 echo "bhyve session = $session"
>>>>                 echo "vnc session = $vncs"
>>>>                 if ! printf '%s\n' "${vncs}" | grep "${session}"; then
>>>>                                 printf 'VNC session not found,destroying ghost vms\n'
>>>>                                 bhyvectl --vm=$session --destroy
>>>>                 else
>>>>                                 printf 'Found VNC session %s\n' "${session},no ghost vms found,not destroying them"
>>>>                 fi
>>>> done
>>>>
>>>> vmdisk1=`geom disk list | awk '/^Geom name: /{d=$NF} /^ *ident: (2015020204055E)/ && d{print d}'`
>>>> echo "TOSHIBA External USB 3.0 1.8 TB ; $vmdisk1"
>>>>
>>>> mount -t ufs /dev/$vmdisk1'p2' /mnt/$vmdisk1'p2'
>>>>
>>>> bhyve -S -c sockets=1,cores=2,threads=2 -m 4G -w -H -A \
>>>> -s 0,hostbridge \
>>>> -s 2,virtio-blk,/mnt/$vmdisk1'p2'/bhyve/img/Linux/ubuntu2210.img,bootindex=1 \
>>>> -s 3,virtio-blk,/dev/$vmdisk4 \
>>>> -s 4,virtio-blk,/dev/$vmdisk2 \
>>>> -s 8:0,passthru,2/0/0 \
>>>> -s 8:1,passthru,2/0/1 \
>>>> -s 8:2,passthru,2/0/2 \
>>>> -s 8:3,passthru,2/0/3 \
>>>> -s 10,virtio-net,tap19 \
>>>> -s 11,virtio-9p,sharename=/ \
>>>> -s 29,fbuf,tcp=0.0.0.0:5919,w=1600,h=950,wait \
>>>> -s 30,xhci,tablet \
>>>> -s 31,lpc \
>>>> -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI_CODE.fd \
>>>> vm0:19 < /dev/null & sleep 2 && vncviewer 0:19
>>>>
>>>> For sure ,on /boot/loader.conf I've added :
>>>>
>>>> /boot/loader.conf
>>>>
>>>> pptdevs="2/0/0 2/0/1 2/0/2 2/0/3"
>>>>
>>>> As I said before,I tried two xorg conf files to achieve the goal. On the
>>>> first one I tried to add only the framebuffer,like this :
>>>>
>>>>
>>>> Section "Files"
>>>>     ModulePath   "/usr/lib/xorg/modules"
>>>>     FontPath     "/usr/share/fonts/X11/misc"
>>>>     FontPath     "/usr/share/fonts/X11/cyrillic"
>>>>     FontPath     "/usr/share/fonts/X11/100dpi/:unscaled"
>>>>     FontPath     "/usr/share/fonts/X11/75dpi/:unscaled"
>>>>     FontPath     "/usr/share/fonts/X11/Type1"
>>>>     FontPath     "/usr/share/fonts/X11/100dpi"
>>>>     FontPath     "/usr/share/fonts/X11/75dpi"
>>>>     FontPath     "built-ins"
>>>> EndSection
>>>>
>>>> Section "Module"
>>>>     Load  "vnc"
>>>>     Load  "glx"
>>>> EndSection
>>>>
>>>>
>>>> Section "InputDevice"
>>>>     Identifier  "Keyboard0"
>>>>     Driver      "kbd"
>>>> EndSection
>>>>
>>>> Section "InputDevice"
>>>>     Identifier  "Mouse0"
>>>>     Driver      "mouse"
>>>>     Option        "Protocol" "auto"
>>>>     Option        "Device" "/dev/input/mice"
>>>>     Option        "ZAxisMapping" "4 5 6 7"
>>>>
>>>> EndSection
>>>>
>>>> Section "Monitor"
>>>>     Identifier   "Monitor0"
>>>>     VendorName   "Monitor Vendor"
>>>>     ModelName    "Monitor Model"
>>>> EndSection
>>>>
>>>> Section "Device"
>>>>    Identifier  "Card0"
>>>>    Driver      "modesetting"
>>>>    BusID       "PCI:0:29:0"
>>>>
>>>> EndSection
>>>>
>>>> Section "Screen"
>>>>     Identifier "Screen0"
>>>>     Device     "Card0"
>>>>     Monitor    "Monitor0"
>>>>     SubSection "Display"
>>>>         Viewport   0 0
>>>>         Depth     1
>>>>     EndSubSection
>>>>     SubSection "Display"
>>>>         Viewport   0 0
>>>>         Depth     4
>>>>     EndSubSection
>>>>     SubSection "Display"
>>>>         Viewport   0 0
>>>>         Depth     8
>>>>     EndSubSection
>>>>     SubSection "Display"
>>>>         Viewport   0 0
>>>>         Depth     15
>>>>     EndSubSection
>>>>     SubSection "Display"
>>>>         Viewport   0 0
>>>>         Depth     16
>>>>     EndSubSection
>>>>     SubSection "Display"
>>>>         Viewport   0 0
>>>>         Depth     24
>>>>     EndSubSection
>>>> EndSection
>>>>
>>>>
>>>> but it didn't work. This is the log file that shows the errors reported : https://pastebin.ubuntu.com/p/Gv7wgsDR4K/
>>>> I have also removed the xorg.conf file,but it didn't work either. This is the log file that shows the errors reported :
>>>>
>>>>
>>>> https://pastebin.ubuntu.com/p/wNcfQTByQm/
>>>>
>>>> Can someone give me some suggestions that can help me to understand where the mistake is,please,thanks.
>>>>
>>>> --
>>>> Mario.
>>>>
>>>
>>> Try to assign a lower pci slot number to the framebuffer device than to
>>> the nvidia gpu in your bhyve command.
>>> --
>>> Best regards,
>>> Corvin
>>>
>>
>>
> I'm unfamiliar with X but according to your logs it looks like it selects
> the framebuffer device as primary graphics in the first place:
>
>
> (--) PCI:*(0@0:7:0) ...
> (--) PCI: (0@0:8:0) ...
>
> --
> Best regards,
> Corvin
>


-- 
Mario.