[systemd-devel] vt220 default for serial console still relevant?

Lennart Poettering lennart at poettering.net
Wed Jul 15 16:08:04 UTC 2020


On Di, 14.07.20 19:48, Daan De Meyer (daan.j.demeyer at gmail.com) wrote:

> I just tried vt241 and didn't get colorized output in konsole. I looked
> around a bit and it doesn't really seem supported at all by terminal
> emulators (or at least none that I found). I also tried TERM=xterm-256color
> with 8 different terminal emulators and got colors with all of them. My
> workflow is simply "mkosi qemu -nographic" (with a modified mkosi that adds
> console=ttyS0 and overrides TERM for serial-getty at ttyS0 in the vm)." That
> connects my terminal emulator to the serial console of the vm. I then
> execute "ls -l --color /" in the vm and get colored output every time in
> whatever terminal emulator that I try.

Well, --color means you request color no matter what, so this is not surprising.

> I'm probably missing something but I'm wondering what an example terminal
> emulator would be where xterm-256color would not work at all (even st
> worked perfectly and that is supposed to be pretty barebones
> afaik). Or is

xterm-256color is a relatively "recent" definition, actually.

The thing is that xterm has ton of extensions in the set of ANSI/CSI
sequences that for example the Linux console does not have. Hence it
sucks advertising the Linux console as xterm. Similar, the Linux
console has a lot of different semantics and features beyond
xterm. And even besides the command set there's other stuff context
derived from the terminal setting. For example in systemd we disable
emojis if TERM=linux is set, since we know that the linux console has
only mininmal unicode support, i.e. 512 glyphs at max, and emojis are
almost certainly not among them. Terminals after all don't advertise
the set of glyphs they can display, so the second best thing is to
trust TERM=linux. (We also turn off emojis on TERM=dumb)

> it just that color is a commonly supported subset of xterm and stuff breaks
> down with other escape codes instead? Or maybe qemu is doing some kind of
> translation that magically makes every TERM setting work in whatever
> terminal emulator I try? Apologies if this seems ignorant, I have no
> experience at all with this domain.

Pretty much all current terminal emulators support color just
fine. It's really old legacy hw terminals that don't support that.

In systemd we don't really care much about super old terminal support,
i.e. we never consult termcap/terminfo about terminals, because we
don't want to require that to be installed. Instead, we assume that
terminals can do color, except if TERM=dumb is set, it's 2020 after
all. We also assume they can do full Unicode, except if LC_CTYPE is
configured and explicitly indicates otherwise. We assume they can do
emojis, except if TERM=linux or TERM=dumb is set where we know it's
not supported. And we assume that hyperlinks work (except if "less" is
involved). I think assuming this all to just work on any recent
terminal is pretty safe in 2020. Of course this means we might
mistakenly output color sequences to a 1980's terminal if you actually
connect that, but besides some exotic hackers noone does that anymore,
hence we don't really care (and noone ever filed a bug about
that). You can turn off color, unicode, emoji support individually via
env vars btw, if people really want compat with such old terminals.

Lennart

--
Lennart Poettering, Berlin


More information about the systemd-devel mailing list