Scroll inside Screen, or Pause Output
I use screen for my command-line tasks while managing the servers where I work. I usually run small commands (mostly file-system tasks) but sometimes I run more extensive tasks (like DBA).
The output of those tasks is important to me. Since I use Ubuntu and OS X (both Terminal Windows) for my tasks, yet I need to use screen, the scrolling is not available, so any long output (think a 500-row table from a select) is invisible for me. Mouse-wheel is out of the question.
When I say “scroll is invisible for me, I mean this:
I was thinking about two options:
-
Pause (think paginate) the output of a certain command. When the output begins, it would let me read what’s happening, then I press “Enter”, then the output continues until there’s nothing more to show.
-
Scroll inside screen. But I don’t know if this is possible.
Of course, I don’t know if those options are actually possible. If they are, how can achieve them? Other alternatives will be well received.
Screen has its own scroll buffer, as it is a terminal multiplexer and has to deal with several buffers.
Maybe there’s a better way, but I’m used to scrolling using the "copy mode" (which you can use to copy text using screen itself, although that requires the paste command too):
-
Hit your screen prefix combination (
C-a
/ control+A by default), then hit Escape or [. -
Move up and down with the arrow keys (↑ and ↓).
-
When you’re done, hit any key except arrow keys, numbers, and certain letters to get back to the end of the scroll buffer. Most people use q or Escape
(If instead of exiting you press Enter or Space and then move the cursor, you will start selecting text to copy, and pressing Enter or Space a second time will copy it. Then you can paste with C-a followed by ].)
Of course, you can always use more
and less
, two commonly used pagers, which may be enough for some commands.
Using the screen
buffer as pointed out by njsg is a good solution. You can also disable the alternate text buffer in the xterm termcap info inside screen. When disabled you can use the scroll bars (and mouse wheel) to scroll up and down.
Add this to your ~/.screenrc
.
# Enable mouse scrolling and scroll bar history scrolling
termcapinfo xterm* ti@:te@
You can read more discussion here.
I’ve had success getting basic paging by piping content to more
, for example:
ls -l | more
Or, if you want color output for use cases like syntax highlighting, you can use
ls -l --color=always | more
This results in output that I can easily page through one screen at a time. I haven’t tried @uther’s modification to ~/.screenrc
but that does seem preferable as a lasting solution when a mouse is available.
To try this out, you can go to this BusyBox emulator and then…
cd ~/bin
ls -l --color=always | more
Use the spacebar to page through the results of the ls -l
command or use the enter key to move through results line by line.
All these answers addressed how to navigate within a screen session, but there is a built-in functionality in screen command to store everything in a file through the -L
argument according to the manual which reads:
-L tells screen to turn on automatic output logging for the windows.
so you can do:
screen -L -S testscreen
and it will create a file in current directory, with the name screenlog.#
where the #
is a number for that screen starting from 0.
This has lots of advantages and the most important ones for me are:
- Keeping record of what i have done since I can save the log file in the project folder for future reference.
- You can inactively and passively monitor the process:
- use
tail -F
to monitor the progress in realtime without being attached to the screen. - use
grep
to check for certain term in the log and produce notifications (email, popup, voip, etc.). This can be applied on multiple screens without you actively looking at them.
- use
If you are on Windows
and using Bitvise SSH Client then you can easily scroll the output when using screen
. I use it all the time without any trouble. Even if you detach
the screen and attach
again, you can still scroll the previous output in that screen.
When using Putty or Mac Terminal, the suggestion by @njsg works great.
If you didn’t get it clear checkout
https://stackoverflow.com/questions/18489216/how-to-scroll-up-and-down-in-sliced-screen-terminal
Try Control+A, then Escape.
Then navigate with Up,Down or PgUp PgDown
And Escape to quit that mode.
Otherwise https://unix.stackexchange.com/a/40243/318478
answer on top ! Just explain all.
The command may be unclear! Well i missed it at first. Look at the portion about how to copy! It’s cool!
For Emacsians you can add this line in your ~/.screenrc
file to gain Emacs-style navigation:
markkeys "l=^F:h=^B:$=^E:^F=^V:^B=^U"
Here’re what changed by this line:
| Action | Default | Emacs |
|-------------+---------+-------|
| Forward | l | C-f |
| Backward | h | C-b |
| End of line | $ | C-e |
| Page down | C-f | C-v |
| Page up | C-b | C-U |
Note that "Page up" uses C-u
to replace M-v
because screen doesn’t support meta characters.