Saturday, January 29, 2011

What is the best TERM type on AIX for use with PuTTY, and which PuTTY settings should be tweaked?

I manage many AIX machines, generally version 5.3.

Basic terminal function works just fine, but it seems like some things don't. For example nmon displays lqqx instead of the line drawing characters.

lqnmonqqqqqqqqr=ResourcesqqqqqqqqHost=sigloprodqqqqqqRefresh=2 secsqqq11:29.
1 Memory qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqx
x          Physical  PageSpace |        pages/sec  In     Out | FileSystemCx
x% Used       97.4%      1.3%  | to Paging Space   0.0    0.0 | (numperm) 5x
x% Free        2.6%     98.7%  | to File System    0.5    1.5 | Process   2x
xMB Used    7980.3MB    26.2MB | Page Scans        0.0        | System    1x
xMB Free     211.7MB  2021.8MB | Page Cycles       0.0        | Free       x
xTotal(MB)  8192.0MB  2048.0MB | Page Steals       0.0        |           -x
x                              | Page Faults       3.0        | Total    10x
x------------------------------------------------------------ | numclient 5x
xMin/Maxperm     781MB( 10%)  3904MB( 48%) <--% of RAM        | maxclient 4x
xMin/Maxfree     248   1088       Total Virtual   10.0GB      | User      7x
xMin/Maxpgahead    2    128    Accessed Virtual    3.2GB 31.8%  Pinned    1x
x                                                                          x
xqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqx
x                                                                          x
x                                                                          x
x                                                                          x
x                                                                          x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

I am currently using the xterm terminal type on AIX, specifying utf8 encoding in putty, Using unicode line drawing code points in putty, and using the Deja Vu Sans Mono font, which should include all line drawing characters

nmon does display correctly when I run it from an xterm on that same machine.

Current terminfo entry for TERM=xterm is as follows:

sigloprod ~ $ echo $TERM
xterm
sigloprod ~ $ infocmp
#       Reconstructed via infocmp from file: /usr/share/lib/terminfo/x/xterm
xterm|vs100|xterm terminal emulator,
    am, km, msgr, xenl,
    cols#80, it#8, lines#25,
    batt1=f1, batt2=f1md, bel=^G, bold=\E[1m,
    box1=lqkxjmwuvtn, box2=lqkxjmwuvtn, civis=\E[?25l,
    clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
    csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b,
    cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
    cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
    cvvis=\E[?25h, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
    dl1=\E[M, ed=\E[J, el=\E[K, font0=\E(B, font1=\E(0,
    home=\E[H, ht=\t, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
    il=\E[%p1%dL, il1=\E[L, ind=\n, kbs=\b, kcub1=\E[D,
    kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=^?,
    kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
    kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~,
    kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
    khome=\E[H, kich1=\E[2~, knl=\r, knp=\E[6~, kpp=\E[5~,
    ktab=\t, mc4=\E[4i, mc5=\E[5i, nel=\n, rc=\E8,
    rev=\E[7m, rf=/usr/share/lib/tabset/vt100, ri=\EM,
    rmcup=\E[?7h, rmkx=\E>, rmso=\E[m, rmul=\E[m$<2>,
    rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, sc=\E7,
    sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m%?%p9%t\E(0%e\E(B%;,
    sgr0=\E[m\E(B, smcup=\E[?7h\E[?1l\E(B\E=, smkx=\E=,
    smso=\E[7m, smul=\E[4m$<2>, tbc=\E[3g,
  • Edit:

    Aix uses two capabilities called box1 and box2. Try modifying the commands below to look for them instead of acsc.

    Previously:

    Try this command:

    for t in $(find /lib/terminfo -type f -print); do echo; echo -n "$t "; tput -T$(basename $t) acsc; done
    

    or:

    for t in $(find /lib/terminfo -type f -print); do echo $t; infocmp $(basename $t)| grep acsc; done
    

    Replace "/lib/terminfo" with the path to your terminfo files. Look for lines that do not look like this:

    ``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~

    One of those terminals has a good chance of working for you.

    You can set that terminal type using TERM=termtype at a Bash prompt or in your ~/.bashrc or by doing this:

    TERM=termtype nmon
    

    To have it set only for that invocation. If you'd like to set it for an ssh session from the local end, you can do:

    TERM=termtype ssh ...
    

    if AcceptEnv in the remote system's /etc/ssh/sshd_config is set to allow it. And SendEnv in the local system's /etc/ssh/ssh_config or the user's local ~/.ssh/config is set to send it.

    Joe Koberg : I am reluctant to add entries to the systemwide terminfo or termcap files, or to include files in my home directory or login scripts, because it's a collection of a dozen or more machines who's 'customization complexity' I want to keep to a minimum (and it would take weeks to roll systemwide changes through change control, assuming they were even permitted.)
    Joe Koberg : 1.) -printf is not a valid option to find on this AIX. 2.) xterm meets the above criteria and is not currently working properly.
    Dennis Williamson : I modified the command to use `basename` instead of `printf`.
    Joe Koberg : Syntax still incorrect; i added the hyphen to the `-type` option to find. No output produced.
    Dennis Williamson : I don't think it matters, but what are your remote system's `$LANG` and `$LC_ALL` Bash variables set to?
    Dennis Williamson : "No output produced" Did you check to make sure that the path in the `find` command is correct? It is sometimes in `/usr/share/terminfo`. Does `tput -Txterm acsc` produce "``aaffgg..."?
    Joe Koberg : I understood the original intent of your commands and made them work before I posted a reply. The original path is correct. "No output produced" means I got my shell prompt back without any intervening output. tput -Txterm acsc produces nothing. And there is no acsc capability in the infocmp output.
    Joe Koberg : LANG=C, LC_ALL is unset.
    Joe Koberg : Presumably if this AIX had a UTF-8 locale, using it would have fixed the problem.
  • Try setting TERM=xterm

    Joe Koberg : Term type is already set to `xterm` as stated in question.
    From Not Now
  • Try Putty's Configuration menu: Window -> Translation -> Received data assumed to be in which character set -> UTF-8

    If UTF-8 isn't it, try some of the other values.

    Joe Koberg : Turns out setting it to ISO-8859-1 works! I presumed the remote end was sending escape codes to put the terminal in line drawing mode, then sending the alternate character set `lqqk` for line drawing (http://www.vt100.net/docs/vt102-ug/table5-13.html)... and adjusting PuTTY shouldn't change that aspect of emulation. But I guess PuTTY ignores that when set to UTF-8 and looks for line drawing characters ONLY as unicode code points. Browsing the PuTTY 0.6 source seems to verify this at line 2573 of TERMINAL.C

0 comments:

Post a Comment