linuxshellgoterminalterminfo

Features obligatory for TERM=dumb terminal


I am looking to implement a remote client in which connects to Linux through nc and starts bash. So I need to tell bash what features I can parse from the stdout that it sends to me, and how I am going to send keycodes and other stuff to its stdin, so that it could parse them too.

This is done with TERM=something environment variable, which I need to set to some value. If I don't set it, then various programs start to complain:

$ mc
The TERM environment variable is unset!

I found that I can set TERM to dumb to say that my client is really limited. And still it seems that I am missing something.

$ export TERM=dumb
$ mc
Your terminal lacks the ability to clear the screen or position the cursor.

From here it looks like dumb terminal don't have these two abilities, but what abilities it is still expected to have? Is there a specification or some de-facto standard about it?


Solution

  • Going to the source can help. The terminal database has comments. Here is a slice from that:

    #### Specials
    #
    # Special "terminals".  These are used to label tty lines when you don't
    # know what kind of terminal is on it.  The characteristics of an unknown
    # terminal are the lowest common denominator - they look about like a ti 700.
    #
    
    dumb|80-column dumb tty,
            am,
            cols#80,
            bel=^G, cr=^M, cud1=^J, ind=^J,
    unknown|unknown terminal type,
            gn, use=dumb,
    

    The "dumb" and "unknown" terminal types are assumed, but rarely used:

    As for minimum requirements, that actually depends upon the individual application. ncurses can manage to move around the screen without actually having cup. It works with a half-dozen strategies. If you read the source for mvcur, you can get an idea of what it needs.

    However, applications such as mc do not simply rely upon ncurses to decide if it works, since (in this case) it may link with slang (which doesn't check that closely). So mc does its own checks, which may add restrictions.

    In practice, unless you choose a limited terminal description such as "dumb", most of the terminals you are likely to encounter will work.

    Further reading: