Video vs Serial for BMC based host console

Jeremy Kerr jk at
Tue Dec 12 12:11:52 AEDT 2017

Hi Adi,

> This coincides with Rackspace internal ask for a video based console
> ultimately via openBMC Web UI instead of serial console. To start with I
> want to work on patches for just the availability of feature and later
> worry about integrating into the UI.

I've been thinking about this one for a while, glad you asked :)

I think it boils down to this, at the core - is your underlying
requirement here:

 a) remote graphics for your server; or
 b) having an easy way to access the server's console over the web UI?

Keep in mind that they're somewhat orthogonal, and (b) does not
specifically require graphics support.

If I had a bit of spare time, this is what I'd do:

 1) Add a handler to obmc-console-server to expose its data over a
    simple websocket

 2) Find a javascript-based terminal emulator under an appropriate
    licence (like the one used by jslinux perhaps...)

 3) Add an interface in the web UI to present that terminal emulator,
    connected to the websocket from (1).

This way, we'd have an in-browser connection to the serial console,
without requiring any additional dependencies on the client machine
(like Java or a vnc viewer).

This means:

  - we'd get output much earlier than anything graphics-based
  - we don't have to pipe nearly as much data to the client's viewer
  - the user experience is entirely in-browser

Of course, if you are running an actual graphical environment on your
server, then this wouldn't be suitable. In that case, we would need
actual graphics support, which would require a bit more work. The rough
plan for that would be something like:

  - add kernel support to present the host VGA device's framebuffer data
    to userspace

  - compress that data into a format suitable for transmission to client

  - implement a network service to expose that compressed data, and
    allow input events to be returned (there'd likely be an existing
    standard for that, but we'd need to ensure it's suitable)

  - finding a suitable client - ideally javascript, but we could use a
    separate Java process, or require plain vnc. Hopefully we wouldn't
    need to implement this ourselves, but I'm not aware of existing
    solutions, other than a standard VNC client. Or something based on
    the spice work perhaps?

  - implement virtual keyboard and mouse USB devices for the BMC

  - develop an input layer between the client protocol and those
    virtual devices

In answer to your questions:

> a) Is this in your plan to implement in the near future ? If so, when ?

The graphical support isn't in my plan, but I can't speak for everyone
here :) The text-console-to-web-UI is something I'd like to do, but I do
have other priorities at the moment.

If the text-console-to-web-UI solution is something you'd be looking at,
I could certainly look at part of the above plan, particularly (1).

> b) Has any progress made this implementation easier by someone else? 

Not that I know of. However, other folks on the list may well have made
progress already.

> c) If answer is no to above questions, can one of you, please let us
> know steps in which we should go through about adding this feature, from
> scratch?

The above should cover that; if not, let me know.



More information about the openbmc mailing list