Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bug#1016553: Recently (since early 2022?), broken terminal handling in LXC consoles (lxc-attach inside screen or tmux)

53 views
Skip to first unread message

Andras Korn

unread,
Aug 2, 2022, 4:40:03 PM8/2/22
to
Package: joe
Version: 4.6-1+b1
Severity: important

Hi,

as of recently, if I start screen (or tmux, doesn't seem to matter) on a Linux host, then use lxc-attach to enter a running LXC container, and start joe inside that container, the terminal behaves in a hard to describe, but completely broken way, making the editor essentially unusable.

Some examples:

1. Subsequent lines appear concatenated and then broken at an off-by-one location. A file that contains

<<<
#
# foo
>>>

would be rendered as

<<<
# [... spaces up to the end of the terminal line ... ] #
foo
>>>

CTRL-R has no apparent effect. Enabling syntax highlighting seems to make it worse (mangling more lines), but not always.

2. When typing, the cursor keeps jumping back to column 2 or 3, and the typed characters are hidden, as if they were off-screen to the left. Pressing CTRL-R fixes this problem temporarily. After pressing CTRL-R, pressing END (but not ^E) repeatedly moves the cursor to somewhere around colum 40, but the column display in the upper right corner displays the correct position even after the first END press (or ^E press).

3. Similar to #2, but happens especially when editing a new file, or an empty line: instead of echoing the typed characters, either spaces echo, or the cursor stays at the leftmost position.

If you can suggest a way for me to record what I see on the screen and the keys I press concurrently, I suppose I can produce a "movie" of the breakage.

Other editors are unaffected (I tried vim, mcedit and nano).

I can't reproduce the problem without screen or tmux (ssh host, lxc-attach container, joe works).

I can't reproduce the problem if I start the container's joe binary by chrooting into the container's filesystem from the host.

I can't reproduce the problem if I ssh into the container instead of entering it via lxc-attach, not even if I subsequently start screen inside the container and joe inside screen.

I experimented with downgrading screen, ncurses, and joe itself, but either I wasn't systematic enough or it really didn't help.

I experimented with using different terminal applications to ssh into the LXC host (xterm, konsole), and it seemed to make no difference.

I *can* reproduce the problem by starting screen(1) locally, then ssh'ing into the LXC host, using lxc-attach, then starting joe inside the container.

screen(1) sets my TERM to screen.xterm-256color. Setting TERM to just "screen" apparently fixes problem #1 but not the others.

In tmux (whether started locally or on the LXC host doesn't matter), which sets TERM to "screen-256color", breakage #1 is less pronounced and slightly different: some lines are just visually missing their first character, but it's not rendered at the end of the previous line. The other two problems are just as in screen(1).

If I start tmux locally, then ssh into the LXC host and start screen there, TERM is set to just "screen" but after lxc-attach, problem #1 is present again.

As a demonstration, I opened a 150x47 terminal, reproduced problem #1, and used the X clipboard to copy and paste the contents of the window (with /etc/login.defs opened in joe) into this message below, disabling automatic line breaks:

--- 8< ---
IW /etc/login.defs Row 45 Col 1
Enable display of unknown usernames when login failures are recorded.
# # WARNING: Unknown usernames may become world readable.
# See #290803 and #298773 for details about how this could become a security
# concern
LOG_UNKFAIL_ENAB no

# # Enable logging of successful logins
# LOG_OK_LOGINS no

# # Enable "syslog" logging of su activity - in addition to sulog file logging.
# SYSLOG_SG_ENAB does the same for newgrp and sg.
# SYSLOG_SU_ENAB yes
SYSLOG_SG_ENAB yes

# # If defined, all su activity is logged to this file.
# #SULOG_FILE /var/log/sulog

# # If defined, file which maps tty line to TERM environment parameter.
# Each line of the file is in a format something like "vt100 tty01".
# #TTYTYPE_FILE /etc/ttytype

# # If defined, login failures will be logged here in a utmp format
# last, when invoked as lastb, will read /var/log/btmp, so...
# FTMP_FILE /var/log/btmp

# # If defined, the command name to display when running "su -". For
# example, if this is defined as "su" then a "ps" will display the
# command is "-su". If not defined, then "ps" would display the
# name of the shell actually being run, e.g. something like "-sh".
# SU_NAME su
--- >8 ---

I don't know how much this helps, but it's the best I could do. (I made no edits in login.defs, just scrolled around a bit.)

All experiments were carried out on reasonably recent sid boxes (a few weeks old at most, some up to date as of Sunday), hosts and containers alike.

I'm afraid I have no idea how to even begin troubleshooting this further.

András

-- System Information:
Debian Release: bookworm/sid
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Locale: LANG=en_US.UTF-8, LC_CTYPE=hu_HU.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8
Shell: /bin/sh linked to /bin/dash
Init: runit (via /run/runit.stopit)
LSM: AppArmor: enabled

Versions of packages joe depends on:
ii libc6 2.33-7
ii libncurses6 6.3+20220423-2
ii libtinfo6 6.3+20220423-2

joe recommends no packages.

joe suggests no packages.

-- no debconf information

--
Getting information from the Internet is like taking a drink from a hydrant.
0 new messages