Fix SSH Terminal Scrollback Issue in Ubuntu/Xen Environment: Missing Packages and Screen Configuration


2 views

When working with SSH sessions, terminal scrollback functionality primarily depends on two components:

  1. The terminal emulator's buffer (client-side)
  2. The server-side pager or terminal multiplexer configuration

In minimal Ubuntu installations (especially on Xen VPS like Slicehost), these packages are often missing:

less
most
screen (properly configured)
tmux

First check if core utilities are installed:

# Check for essential packages
dpkg -l | grep -E 'less|most|screen|tmux'

# If missing, install with:
sudo apt-get update
sudo apt-get install less most screen tmux

Your .screenrc needs proper scrollback settings. Try this configuration:

# ~/.screenrc
defscrollback 5000
termcapinfo xterm* ti@:te@
altscreen on

Ensure your TERM variable is set correctly:

# Check current TERM
echo $TERM

# For modern terminals
export TERM=xterm-256color

# For basic terminals
export TERM=xterm

If scrollback still fails, consider these workarounds:

  • Pipe output to less: long_command | less
  • Use tmux instead: sudo apt-get install tmux
  • Redirect to file: long_command > output.log

Some SSH clients limit scrollback. For PuTTY:

  1. Go to Window → Behaviour
  2. Increase "Scrollback lines" (try 20000)
  3. Check "System menu appears on ALT alone"

Xen virtual consoles sometimes have scrollback limitations. Try:

# Check kernel buffer size
sysctl kernel.printk_ringbuffer_size

# Temporary increase (requires root)
echo 1048576 > /proc/sys/kernel/printk_ringbuffer_size

When connecting via SSH to my Ubuntu Xen DomU instance (Slicehost legacy environment), terminal scrollback using Shift-PageUp fails completely. This persists even with GNU Screen's defscrollback 1024 setting configured in .screenrc. The terminal buffer appears truncated despite attempts to increase history limits.

Terminal scrollback functionality depends on several layers:

1. Terminal emulator (client-side: iTerm2, GNOME Terminal, etc.)
2. SSH client configuration
3. Server-side terminfo database
4. Readline/libedit implementations
5. Xen console driver (particularly for DomU)

First verify basic terminal capabilities:

# Check terminfo entry
$ infocmp $TERM

# Verify scrollback buffer size
$ stty size
$ tput lines

For Xen-specific checks:

# Examine Xen console settings
$ xm list
$ xm console

# Check kernel ring buffer
$ dmesg | grep -i console

Try these server-side adjustments:

# Force a better terminal type in .bashrc
export TERM=xterm-256color

# Increase tty buffer in /etc/sysctl.conf
kernel.printk_ratelimit = 0
kernel.printk_ratelimit_burst = 0

Client-side SSH configuration (~/.ssh/config):

Host myslice
    HostName slicehost.example.com
    RequestTTY force
    RemoteCommand screen -Rd
    SendEnv TERM
    ServerAliveInterval 60

When native scrollback fails, consider:

# Pipe output to less immediately
$ long_command | less -R

# Use tmux instead of screen
$ tmux new -s session_name
(set -g history-limit 10000 in .tmux.conf)

For persistent logging:

# Continuous logging to file
$ script -f /var/log/term_session.log

Xen paravirtualized consoles often have constrained buffers. To check:

# Xen store parameters
$ xenstore-read /console/ring-ref
$ xenstore-read /console/port

Kernel parameters that may help:

# Add to GRUB config
xencons=hvc console=hvc0 console=tty0 loglevel=all