Working remotely (via SSH) poses numerous challenges:
- running programs are killed if the session is terminated or connection is lost
- you need to open many connections if you want to run more things at the same time
- you cannot resume the session from different machine
All above problems have a simple solution in Linux, called screen. Screen provides virtual terminals that can be disconnected & resumed later.
- Install screen
- Prepare configuration file
- Create new virtual terminal
- Reattach to previous session
sudo apt-get install screen
Below you can find example configuration file. This will enable changing the windows with F5/F6, scrolling and it will display some useful information in the bottom of your screen terminal. To enable it, just paste below text to file: ~/.screenrc
#para tener scroll-back termcapinfo xterm|xterms|xs|rxvt ti@:te@ defscrollback 5048 ## ### detach on hangup autodetach on ## ### don't display the copyright page startup_message off ## ### emulate .logout message pow_detach_msg "Screen session of $LOGNAME $:cr:$:nl:ended." ## # # BARRA DE ESTADO v1 #### alternative caption, gives window list, LOGNAME and current date: caption always "%u%{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw %= %{mk}host:%H Load:%l %{ck}%M%{wk} %{ck}%d %{gk}%c" # BARRA DE ESTADO v2 #hardstatus alwayslastline #hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %d/%m %C%a Load: %l" #caption always "%3n %t%? @%u%?%? [%h]%?"a # termcapinfo xterm ti@:te@ defscrollback 1000 # Scroll up bindkey -d "^[[5S" eval copy "stuff 5\025" bindkey -m "^[[5S" stuff 5\025 # Scroll down bindkey -d "^[[5T" eval copy "stuff 5\004" bindkey -m "^[[5T" stuff 5\004 # Scroll up more bindkey -d "^[[25S" eval copy "stuff \025" bindkey -m "^[[25S" stuff \025 # Scroll down more bindkey -d "^[[25T" eval copy "stuff \004" bindkey -m "^[[25T" stuff \004 bindkey -k k5 prev # F5 for previous window bindkey -k k6 next # F6 for next window
screen -S sessionName # create new window: Ctlr-A and C # detach session: Ctrl-A and D
screen -dr sessionName # list existing session: screen -dr