Using Virtual Serial Ports on Linux (Ubuntu)

A virtual serial port is a redirector without network software support which is usually used to create a pair of back-to-back virtual COM ports on the same computer. Two legacy applications can then communicate using virtual serial ports instead of conventional inter-process communication mechanisms such as named pipes.

This type of software is capable of emulating all serial port functionality, including Baud rate, data bits, parity bits, stop bits, etc. Additionally, it allows the data flow to be controlled, emulating all signal lines (DTR/DSR/CTS/RTS/DCD/RI) and customizing pinout.

Often I write software for embedded devices, and they have to exchange data with a PC. Since the devices often, if we don't want to say "always", aren't available during the development phase I have to simulate the connection in other ways. When I have to use UARTs to communicate, I use a tool which generates 2 virtual ports and then joins them back to back.


The software I use on Linux is socat, it is a very complex software and it can do a lot of other things, maybe in another article I'll show other functionalities of socat.

Socat Man Page: "Socat  is  a  command  line based utility that establishes two bidirectional byte streams and transfers data between them. Because the streams can be constructed from a large set of  different  types  of  data  sinks  and  sources (see address types), and because lots of address options may be applied to the streams, socat can be used for many different purposes."

However let’s try socat:

Installation on Ubuntu

To install socat on Ubuntu (I'm using 12.04) just run the following command:

Setting up two serial lines

now on a terminal window run socat

The output should look like the following one:

Now you have two "serial" ports connected back to back

Testing the ports

open a new terminal and issue the following command

open a new terminal and issue the following command

On the first terminal you should see the string “Hello World”.

That’s all, nothing more.


Related Posts

5 thoughts on “Using Virtual Serial Ports on Linux (Ubuntu)

  1. Hi Moka,
    due to the change of the syntax highlighter there were problems showing escape sequences.
    Let’s try now.

  2. Thanks for the tip.

    On my machine (Ubuntu 14.04), running the socat pty creation command threw error –
    E PTY: wrong number of parameters (1 instead of 0)

    Replacing PTY: PTY: by PTY PTY solved the issue.

  3. This is something I am also trying to use to test a modbus application which communicates with a slave over a UART. Basically the master sends a command to the slave over the UART and the slave responses to confirm the command.

    So I would like to know that can I also transmit from the other port or not ? Or does that port only recieves.

    Sorry if it is a dumb question but I am really new to this and learning.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.