3270 设备

3270 是大型机的经典“绿屏”控制台(参见 维基百科 IBM 3270 条目)。

QEMU 内部不实现 3270 数据流;此设备仅提供 TN3270(一种 telnet 扩展,参见 RFC 854 和 RFC 1576),并将主要处理工作交给外部 3270 终端模拟器(例如 x3270),从而为客户机提供单个 3270 设备。注意,这仅支持基本功能。

要向客户机提供 3270 设备,请创建连接到 tn3270 字符设备的 x-terminal3270。客户机将看到一个 3270 通道设备。要实际使用它,还需将 x3270 模拟器连接到该字符设备。

配置示例

  • 确保客户机 Linux 内核已启用 3270 支持。需要 CONFIG_TN3270,以及 CONFIG_TN3270_TTY (用于附加 TTY)或 CONFIG_TN3270_CONSOLE (用于 3270 控制台)中的至少一个。

  • 在 QEMU 命令行中添加 tn3270 字符设备和 x-terminal3270:

    -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
    
  • 启动客户机。在客户机中使用 chccwdev -e 0.0.000a 启用该设备。

  • 在主机上启动 x3270 模拟器:

    x3270 <host>:2300
    
  • 在客户机的 /dev/3270/ 下找到 3270 设备节点(例如 tty1),并在其上启动 getty:

    systemctl start serial-getty@3270-tty1.service
    

    这样应当能获得一个额外的 TTY,用于登录客户机。

  • 如果希望将 3270 设备用作 Linux 内核控制台,而不是额外的 TTY,还可以在客户机内核命令行后添加 conmode=3270 condev=000a。下次启动后,内核应当使用 3270 作为控制台。

限制

3270 支持非常基础。具体而言:

  • 仅支持一个 3270 设备。

  • 仅使用 Linux 客户机和 x3270 模拟器进行了测试。

  • 不支持 TLS/SSL。

  • 不支持重新连接时调整大小。

  • 不支持单个入站缓冲区中的多条命令(例如网络较慢时按下复位键的情况)。