The 3270 is the classic ‘green-screen’ console of the mainframes (see the IBM 3270 Wikipedia article).
The 3270 data stream is not implemented within QEMU; the device only provides
TN3270 (a telnet extension; see RFC 854
and RFC 1576) and leaves the heavy
lifting to an external 3270 terminal emulator (such as
x3270) to make a
single 3270 device available to a guest. Note that this supports basic
To provide a 3270 device to a guest, create a
x-terminal3270 linked to
tn3270 chardev. The guest will see a 3270 channel device. In order
to actually be able to use it, attach the
x3270 emulator to the chardev.
Make sure that 3270 support is enabled in the guest’s Linux kernel. You need
CONFIG_TN3270and at least one of
CONFIG_TN3270_TTY(for additional ttys) or
CONFIG_TN3270_CONSOLE(for a 3270 console).
tn3270chardev and a
x-terminal3270to the QEMU command line:
-chardev socket,id=ch0,host=0.0.0.0,port=2300,wait=off,server=on,tn3270=on -device x-terminal3270,chardev=ch0,devno=fe.0.000a,id=terminal0
Start the guest. In the guest, use
chccwdev -e 0.0.000ato enable the device.
On the host, start the
In the guest, locate the 3270 device node under
tty1) and start a getty on it:
systemctl start firstname.lastname@example.org
This should get you an additional tty for logging into the guest.
If you want to use the 3270 device as the Linux kernel console instead of an additional tty, you can also append
conmode=3270 condev=000ato the guest’s kernel command line. The kernel then should use the 3270 as console after the next boot.
3270 support is very basic. In particular:
Only one 3270 device is supported.
It has only been tested with Linux guests and the x3270 emulator.
TLS/SSL is not supported.
Resizing on reattach is not supported.
Multiple commands in one inbound buffer (for example, when the reset key is pressed while the network is slow) are not supported.