2

I'm trying to get console output on both the onboard iGPU (Intel i915, HDMI output) and the AST BMC (IPMI remote display) on my headless server setup.

Hardware and OS

  • Motherboard: ASUS Pro WS W680-ACE IPMI
  • CPU: Intel i9-14900
  • OS: Ubuntu 24.04.2 LTS (Pro), kernel 6.8.0-60-generic, UEFI boot
  • systemd is in use and default GRUB is installed

BIOS Settings

All relevant GPU-related options are enabled:

Primary Display       [CPU Graphics]
iGPU Multi-Monitor    [Enabled]
DVMT Pre-Allocated    [64M]
RC6 (Render Standby)  [Enabled]

When I boot into the BIOS firmware setup, both HDMI and IPMI outputs mirror the BIOS screen correctly, confirming that hardware-level multi-display support is working.

Framebuffer Devices

After booting Linux:

$ ls /dev/fb*
/dev/fb0  /dev/fb1

$ cat /sys/class/graphics/fb*/name
i915drmfb
astdrmfb

So:

  • /dev/fb0 = Intel iGPU (HDMI)
  • /dev/fb1 = AST BMC (IPMI)

What I’ve Tried

I’ve tried modifying /etc/default/grub with various combinations of fbcon=map: and console=ttyX:

  1. GRUB_CMDLINE_LINUX_DEFAULT="fbcon=map:1,0 console=tty1 console=tty2"Only IPMI (fb1) works, HDMI stays black.

  2. GRUB_CMDLINE_LINUX_DEFAULT="fbcon=map:0,1 console=tty1 console=tty2"Only HDMI (fb0) works, IPMI stays black.

  3. GRUB_CMDLINE_LINUX_DEFAULT="fbcon=map:both console=tty1 console=tty2"Nothing appears on either display.

(Yes, I realize fbcon=map:1,0 maps tty1 to fb1 and tty2 to fb0 — that behavior is expected.)

I also enabled [email protected] and confirmed it’s running.


What I Want

  • Ideally: Same console output mirrored on both HDMI and IPMI
  • Acceptable: Separate virtual terminals (e.g., tty1 on IPMI, tty2 on HDMI)

But so far I can only get one to work at a time, depending on how I order fbcon=map.

Any suggestions? Is this a limitation in fbcon, the kernel, or something I can work around with udev, early KMS, or a boot service?

0

2 Answers 2

5
  1. GRUB_CMDLINE_LINUX_DEFAULT="fbcon=map:1,0 console=tty1 console=tty2"Only IPMI (fb1) works, HDMI stays black.

  2. GRUB_CMDLINE_LINUX_DEFAULT="fbcon=map:0,1 console=tty1 console=tty2"Only HDMI (fb0) works, IPMI stays black.

  3. GRUB_CMDLINE_LINUX_DEFAULT="fbcon=map:both console=tty1 console=tty2"Nothing appears on either display.

In configurations 1) and 2), I think the active display might switch as you switch from one virtual console to another (e.g. Ctrl-Alt-F1 / Ctrl-Alt-F2). But this won't help you achieve what you want, and you would have to wait a few seconds for the new display to wake up and sync each time you switch between the two.

In configuration 3), both does not seem to be a valid parameter for fbcon=map: (in function fb_console_setup() located in drivers/video/fbdev/core/fbcon.c).

Also, Documentation/admin-guide/serial-console.rst goes into detail on various console= option values and tells me "The behavior is well defined when each device type (i.e. virtual console, serial port, parallel port,... USB serial?) is mentioned only once" and further explains that specifying two virtual consoles (tty1 and tty2) as consoles simultaneously is likely to not behave as expected.

What I Want

Ideally: Same console output mirrored on both HDMI and IPMI

Acceptable: Separate virtual terminals (e.g., tty1 on IPMI, tty2 on HDMI)

As far as I know, the Linux kernel's virtual console subsystem is designed to use just one display device (either a framebuffer or a classic VGA text mode) at a time. There seems to be no abstraction layer that would allow sending the console output to two different video devices simultaneously, or even making the console extend to two video displays usable in parallel using just kernel functionality.

You might get the kernel's virtual console on one framebuffer display, and a separate user-space terminal emulator like fbterm on another, but it seems to me that what you want to do is simply not possible using just the kernel's current virtual console and framebuffer functionalities. Sorry.

3

To mirror console output across both the Intel iGPU (HDMI) and the BMC/IPMI AST framebuffer on Ubuntu 24.04, I discovered that native Linux console (fbcon) support is limited to one active framebuffer at a time thanks to @telcoM. However, a hybrid solution using kmscon allows simultaneous usage of both displays.

What worked for me

1. Set GRUB to initialize both framebuffers

Edit /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="fbcon=map:0,1 console=tty1 console=tty2"

Explanation:

  • This maps:

    • tty1/dev/fb0 (i915, iGPU HDMI)
    • tty2/dev/fb1 (astdrmfb, IPMI)

Update GRUB:

sudo update-grub

2. Install kmscon

This lightweight terminal emulator can render on framebuffer devices outside of the kernel’s default console.

sudo apt install kmscon

3. Create a systemd service for kmscon

Create /etc/systemd/system/[email protected]:

[Unit]
Description=Kmscon Terminal on %I
After=systemd-user-sessions.service plymouth-quit-wait.service
Before=getty@%I.service
Conflicts=getty@%I.service

[Service]
ExecStart=/usr/bin/kmscon --vt %I
Restart=always
RestartSec=1
StandardInput=tty
StandardOutput=tty
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes

[Install]
WantedBy=multi-user.target

4. Enable and start the service

To launch kmscon on tty2 (mapped to fb1 = IPMI):

sudo systemctl enable [email protected]
sudo systemctl start [email protected]

Result

  • tty1 (iGPU/HDMI) shows the standard Linux kernel console.
  • tty2 (IPMI/AST) shows a fully working userland console via kmscon.

While it’s not true framebuffer mirroring, this achieves two fully working simultaneous text consoles, one per framebuffer — which is as close as possible with current Linux console infrastructure.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.