Freebsd – Enable external display on FreeBSD console

bsdconsoledisplayfreebsd

tl;dr, I'd like to use the external display with FreeBSD 10.0 on an HP Pavilion g7-2270us. Don't care if it's mirrored or I have to select one or the other.

Here's the symptoms:

  • When a display is plugged into the external VGA display port, both the attached display and the external display are active on the BIOS screens.
  • Once FreeBSD begins to boot, the external VGA display is no longer active.
  • Once booted, the expected fnF4 keystroke to toggle the default display has no effect (nor does F4 alone), regardless of the state of the "Action Keys" in BIOS, i.e. whether or not one needs to use the modifier.

Other notes:

  • There are no options in the BIOS that would be relevant to this situation.
  • No graphical servers installed, so X/Wayland/etc. has no relevance to this question (e.g. xrandr).
  • The Intel Core i3-3110M integrated graphics appears to be supported in versions ≤ 9.1.

grepping around in pciconf I find:

vgapci0@pci0:0:2:0:     class=0x030000 card=0x1843103c chip=0x01668086 rev=0x09 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = '3rd Gen Core processor Graphics Controller'
    class      = display
    subclass   = VGA
    bar   [10] = type Memory, range 64, base 0x52000000, size 4194304, enabled
    bar   [18] = type Prefetchable Memory, range 64, base 0x80000000, size 268435456, enabled
    bar   [20] = type I/O Port, range 32, base 0x4000, size 64, enabled
    cap 05[90] = MSI supports 1 message 
    cap 01[d0] = powerspec 2  supports D0 D3  current D0
    cap 13[a4] = PCI Advanced Features: FLR TP

and here's some more useful stuff from dmesg:

vgapci0: <VGA-compatible display> port 0x4000-0x403f mem 0x52000000-0x523fffff irq 16 at device 2.0 on pci0
agp0: <IvyBridge mobile GT2 IG> on vgapci0
agp0: aperture size is 256M, detected 65532k stolen memory
vgapci0: Boot video device
pci0: <simple comms> at device 22.0 (no driver attached)
isab0: <PCI-ISA bridge> at device 31.0 on pci0
isa0: <ISA bus> on isab0
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0

Obviously vgapci0 is the attached screen. It seems then that vga0 is the culprit we're trying to make work. It's on the isa0 bus which is being served up by the isab0 ISA-PCI bridge attached to pci0. Indeed, digging around in devinfo we find:

        isab0 pnpinfo vendor=0x8086 device=0x1e59 subvendor=0x103c subdevice=0x1843 class=0x060100 at slot=31 function=0 handle=\_SB_.PCI0.LPCB
          isa0
            sc0
            vga0
                I/O ports:
                    0x3c0-0x3df
                I/O memory addresses:
                    0xa0000-0xbffff

which is consistent with the above from dmesg. This device is described by pciconf as such:

isab0@pci0:0:31:0:      class=0x060100 card=0x1843103c chip=0x1e598086 rev=0x04 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = 'HM76 Express Chipset LPC Controller'
    class      = bridge
    subclass   = PCI-ISA
    cap 09[e0] = vendor (length 12) Intel cap 1 version 0
                 features: AMT, 4 PCI-e x1 slots

dmidecode lists the physical port connector in question:

Handle 0x0012, DMI type 8, 9 bytes
Port Connector Information
        Internal Reference Designator: CN5001
        Internal Connector Type: None
        External Reference Designator: CRT
        External Connector Type: DB-15 female
        Port Type: Video Port

and the standard 0x0166 graphics:

Handle 0x001D, DMI type 41, 11 bytes
Onboard Device
        Reference Designation: Intel(R) Graphics 4000
        Type: Video
        Status: Enabled
        Type Instance: 1
        Bus Address: 0000:00:02.0

but nothing about the PCI-ISA bridge. So perhaps as David King suggests, the issue is that there is no driver being loaded for the ISA VGA device. This explains why we don't see it as a none entry in the pciconf listing— it's not a PCI device. What I don't know is how to get more information on this device in order to even figure out what driver to use, if that's the problem at hand.

Best Answer

Looking at this problem, you mention the following:

When a display is plugged into the external VGA display port, both the attached display and the external display are active on the BIOS screens. Once FreeBSD begins to boot, the external VGA display is no longer active.

This basically means that you need to edit your /boot/loader.conf.

I would try something like the following in /boot/loader.conf:

i915kms_load="YES" 
kern.vt.fb.default_mode="1024x768"

Assuming "1024x768" is the resolution you are after.

Sources: freebsd.org forums, some random blog - I was not 100% for the name/spelling of the module, and FreeBSD vt man page

Ahhh, the Fn keys not working, almost forgot that one ... you cannot usually detect Fn key presses, however, your keyboard interprets them and uses it as a key modifier. So when you hit, say Fn+F4, FreeBSD will get neither Fn, nor F5 key events but another, the one for enabling/disabling the external screen, which afaik, depends on the type of keyboard you use. Sadly, FreeBSD does not have the proper driver loaded for your keyboard, so you would have to find the proper module and load it in the same way as above <mod>_load="TRUE" in /boot/loader.conf. I do not have enough info on your keyboard to be able to help more, though.

Related Question