Connect a DEC VT420 Terminal to a Raspberry Pi 5

Pi 5 USB port → USB-to-Serial adapter DB9 → Null modem adapter/cable → DB9-to-DB25 serial cable/adapter → DEC VT420 Comm1 DB25 RS-232 port.

1. What You Need

Item Purpose
Raspberry Pi 5 running Raspberry Pi OS Acts as the Linux host computer.
USB-to-Serial RS-232 adapter Creates a Linux serial device such as /dev/ttyUSB0.
DB9 null modem adapter or null modem cable Crosses transmit and receive lines so the Pi and terminal can talk.
DB9-to-DB25 serial adapter/cable Connects the DB9 serial side to the VT420 DB25 Comm1 RS-232 port.
DEC VT420 terminal and keyboard The physical text terminal.
Important: Use a real RS-232 USB serial adapter. Do not use a DB25 parallel-printer adapter. It must be serial.

2. Connection Illustration

2. Cable Path

Raspberry Pi 5 USB Port
USB-to-Serial RS-232 DB9 Adapter
Null Modem TX/RX Crossed
DB9-to-MMJ DEC Adapter
DEC MMJ Cable Offset Tab RJ12-style Cable
DEC VT420 MMJ Serial Port

3. Illustration

DEC VT420 MMJ serial cable connection diagram to Raspberry Pi 5
Setting Recommended Value
Session S1 = Comm1
Connector Comm1 DB25 RS-232
Transmit Speed 9600 to start; later try 19200 or 38400
Receive Speed Same as transmit speed
Data Bits 8
Parity None
Stop Bits 1
Flow Control Start with XON/XOFF or None. Avoid hardware flow control unless fully wired.
Terminal Type VT420, VT320, or VT220
After changing settings, save the setup in nonvolatile memory from the VT420 setup menu.

4. Check the USB Serial Adapter on the Pi

Plug the USB serial adapter into the Raspberry Pi 5 and run:

lsusb
dmesg | grep -i tty
ls -l /dev/ttyUSB* /dev/ttyACM* 2>/dev/null

You should see something like:

/dev/ttyUSB0

If you see /dev/ttyACM0 instead, use that device name in the commands below.

5. Install Serial Tools

sudo apt update
sudo apt install -y minicom screen setserial

Optional but useful: remove ModemManager if it grabs USB serial adapters.

sudo apt remove -y modemmanager

6. Quick Manual Test

Before enabling a login prompt, test the serial line.

sudo screen /dev/ttyUSB0 9600

Or use minicom:

sudo minicom -D /dev/ttyUSB0 -b 9600

To exit screen, press:

Ctrl-A  then  K  then  Y

7. Enable a Login Prompt on the VT420

Create a systemd override for the USB serial login service:

sudo mkdir -p /etc/systemd/system/[email protected]

sudo nano /etc/systemd/system/[email protected]/override.conf

Paste this:

[Service]
ExecStart=
ExecStart=-/sbin/agetty --keep-baud 9600,19200,38400 %I vt420
Environment=TERM=vt420

Enable and start the service:

sudo systemctl daemon-reload
sudo systemctl enable [email protected]
sudo systemctl start [email protected]

Check status:

systemctl status [email protected]

You should now see a Linux login prompt on the VT420.

8. Make Sure Your User Can Log In

If using Raspberry Pi OS Bookworm or newer, make sure your normal user has a password:

passwd

If you want to create a dedicated terminal user:

sudo adduser vtuser
sudo usermod -aG dialout,tty vtuser

9. Optional: Set Terminal Type After Login

Add this to the user’s ~/.bashrc if the terminal display acts odd:

export TERM=vt420
stty rows 24 cols 80
stty sane

For 132-column mode, use:

stty rows 24 cols 132

10. DB9 to DB25 Serial Reference

Typical PC-style serial adapter mapping:

Signal DB9 Pin DB25 Pin
TXD 3 2
RXD 2 3
GND 5 7
RTS 7 4
CTS 8 5
DTR 4 20
DSR 6 6
DCD 1 8
The null modem adapter is the part that crosses TXD and RXD. Without it, you may get no login prompt or no keyboard response.

11. Troubleshooting

Problem Likely Cause Fix
No text at all Wrong device, wrong cable, no null modem, wrong VT420 port Check /dev/ttyUSB0, use Comm1 DB25, add null modem adapter.
Garbled characters Baud rate mismatch Set both Pi and VT420 to 9600 8N1.
Login appears but keyboard does not work TX/RX not crossed or flow control issue Use null modem and set flow control to None or XON/XOFF.
Prompt appears, but full-screen apps look wrong Wrong terminal type Use export TERM=vt420 or try vt320 / vt220.
/dev/ttyUSB0 changes after reboot USB enumeration changed Use a udev rule, or keep the adapter in the same USB port.

12. Optional Stable Device Name

Find adapter details:

udevadm info -a -n /dev/ttyUSB0 | less

Create a rule:

sudo nano /etc/udev/rules.d/99-vt420.rules

Example rule:

SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", SYMLINK+="vt420"

Reload udev:

sudo udevadm control --reload-rules
sudo udevadm trigger

Then use:

/dev/vt420

13. Final Working Command Set

sudo apt update
sudo apt install -y minicom screen setserial

lsusb
dmesg | grep -i tty
ls -l /dev/ttyUSB* /dev/ttyACM* 2>/dev/null

sudo mkdir -p /etc/systemd/system/[email protected]

sudo tee /etc/systemd/system/[email protected]/override.conf > /dev/null <<'EOF'
[Service]
ExecStart=
ExecStart=-/sbin/agetty --keep-baud 9600,19200,38400 %I vt420
Environment=TERM=vt420
EOF

sudo systemctl daemon-reload
sudo systemctl enable [email protected]
sudo systemctl start [email protected]
systemctl status [email protected]

14. Recommended Starting Configuration

Note: The Raspberry Pi GPIO UART settings in raspi-config are not required for this USB adapter method. Those settings are only needed if you wire directly to the Pi GPIO serial pins.

Return to Main Page