Screen

Screen on tekstiterminaalissa toimiva työkalu, joka mahdollistaa muun muassa ajossa olevan (tekstipohjaisen) ohjelman jättämisen taustalle käyntiin koneelta ulos kirjautuessa.

Miksi screen?

Oletetaan tilanne, jossa on otettu ssh-ohjelmalla testipohjainen yhteys etäkoneelle, jossa halutaan suorittaa jokin pitkäkestoinen operaatio. Haluamme esimerkiksi suorittaa jonkin vaativan laskennan Pari/GP:llä. Ongelmana on tällöin yhteyden muodostamiseen käyttämämme koneen ja etäkoneen välinen yhteys. Jos katkaisemme yhteyden, katkeaa myös ohjelman suoritus. Jos jätämme yhteyden katkaisematta, jää paikalliselle koneellemme yhteyden ottamiseen käytetty ssh-ohjelma auki ja joudumme varomaan, ettemme vahingossa sulje sitä. Jos paikallinen koneemme sammuu tai verkossa ilmenee häiriötä, katkeaa myös yhteys etäkoneelle ja samalla suoritus taas keskeytyy.

Tällaisessa tilanteessa voidaan käyttää apuna ohjelmaa nimeltä screen.

Screenin käynnistys

Ensin otetaan yhteys etäkoneelle, kuten tavallisesti. Tässä vaiheessa meillä on edessämme etäkoneen komentokehoite:

pesasa@etakone:~$

Tähän kehotteeseen kirjoitetaan screen ja tämä käynnistää screen-ohjelman.

pesasa@etakone:~$ screen

Ruudulle ilmestyy screenin asetuksista riippuen mahdollisesti jotain tiedotustekstejä ja edelleen etäkoneen komentokehote. Mitä tapahtui? Tapahtuiko mitään?

Screen käynnistyi ja käynnisti uuden komentotulkin, joka nyt on käytettävissä ja josta käsin voidaan käynnistää haluttu aikaa vievä ohjelma.

pesasa@etakone:~$ gp  
Reading GPRC: /home/pesasa/.gprc ...Done.  

                                   GP/PARI CALCULATOR Version 2.3.4 (released)  
                            i486 running linux (ix86/GMP-4.2.2 kernel) 32-bit version  
                 compiled: Nov  6 2008, gcc-4.3.3 20081030 (prerelease) (Ubuntu 4.3.2-2ubuntu1)  
                               (readline v5.2 enabled, extended help not available)  

                                      Copyright (C) 2000-2006 The PARI Group  

PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER.  

Type ? for help, \q to quit.  
Type ?12 for how to get moral (and possibly technical) support.  

parisize = 4000000, primelimit = 500000  
?

Nyt itse laskenta voidaan käynnistää.

Screenistä irtautuminen

Tämän jälkeen pääsemme käyttämään screenin erityisominaisuutta nimeltä detach. Detach tarkoittaa screen-istunnosta irtautumista. Toisin sanoen jätämme screen-ohjelman sekä sen sisälle käynnistetyt ohjelmat käyntiin taustalle, mutta olemme itse vapaita kirjautumaan ulos etäkoneelta. Tämä tapahtuu näppäinyhdistelmällä ctrl-a d. Ensin painetaan siis ctrl-näppäin pohjassa a-kirjainta, irrotetaan näistä näppäimistä ja painetaan d-kirjainta. (d=detach) Tämä oli ensimmäinen monesta screenin käyttäästä ctrl-a-alkuisesta näppäinkomennosta.

[detached]  
pesasa@etakone:~$

Näin “putoamme” ulos screenistä takaisin komentotulkkiin, josta screenin käynnistimme. Nyt voimme vaikka kirjautua ulos logout-komennolla.

pesasa@etakone:~$ logout

Kytkeytyminen takaisin käynnissä olevaan screeniin

Kun otamme uudelleen yhteyden etäkoneelle ja saamme eteemme komentokehotteen, voimme pyytää käynnissä olevaa screen-ohjelmaa palaamaan hallintaamme komennolla

pesasa@etakone:~$ screen -r

Näin saamme eteemme saman ohjelman, jonka jätimme suorittamaan tehtäväänsä. Näemme, että ohjelma on ollut koko ajan käynnissä ja suorittanut antamaamme tehtävää.

Entäpä, jos olemmekin käynnistäneet useita ohjelmia useisiin screen-istuntoihin? Mihin näistä antamamme screen -r-komento kytkeytyy? Hyvä kysymys ja tähän ei tiedä vastausta myöskään screen. Siksipä se kysyykin sitä käyttäjältä:

pesasa@etakone:~$ screen -r  
There are several suitable screens on:  
        30852.pts-3.etakone        (09/16/2009 04:25:27 PM)        (Detached)  
        8604.pts-3.etakone (09/16/2009 03:59:10 PM)        (Detached)  
Type "screen [-d] -r [pid.]tty.host" to resume one of them.  
pesasa@etakone:~$

Screen luettelee kaikki käynnistämämme screen-sessiot numeroituina ja ohjeistaa kertomaan, mihin näistä haluamme kytkeytyä. Valitettavasti tulosteesta ei näe, mitä kussakin screen-sessiossa on käynnissä, mutta päivämäärästä ja kellonajasta, jotka kertovat session käynnistämisen ajankohdan, on mahdollista päätellä mihin sessioista halutaan kytkeytyä. Jos kytkeydymme väärään, se ei ole vaarallista. Irtaudumme vain uudelleen ja yritämme toista sessiota.

pesasa@etakone:~$ screen -d 8604

Tämä ongelma voidaan välttää, jos jo screeniä käynnistäessä annamme sessiolle nimen.

pesasa@etakone:~$ screen -S Pari

Tällöin useammat screen-sessiot näkyvät tulostuksessa seuraavasti:

pesasa@etakone:~$ screen -r  
There are several suitable screens on:  
        21691.Pari      (09/16/2009 04:54:08 PM)        (Detached)  
        15152.Mathematica    (09/16/2009 04:47:43 PM)        (Detached)  
Type "screen [-d] -r [pid.]tty.host" to resume one of them.  
pesasa@etakone:~$

Näistä voimme valita, mihin kytkeydymme:

pesasa@etakone:~$ screen -S Pari -r

Mitä tapahtuu, jos olemmekin jo toisessa ikkunassa kytkeytyneenä screeniin ja yritämme kytkeytyä uudelleen esimerkiksi toisen ssh-yhteyden kautta?

pesasa@etakone:~$ screen -r  
There is a screen on:  
        8604.pts-3.etakone (09/16/2009 03:59:10 PM)        (Attached)  
There is no screen to be resumed.  
pesasa@etakone:~$

Screen ilmoittaa, että löytynyt sessio on jo kytkettynä (Attached), eikä ole irrallisia screen-sessioita, joihin kytkeytyä.

Jos välttämättä haluamme kytkeytyä tuohon sessioon, jostain syystä, voidaan se tehdä ainakin seuraavilla kahdella tavalla.

pesasa@etakone:~$ screen -d -r

Lisäämällä “vivun” -d kerromme, että screenin saa irrottaa aiemmasta yhteydestä ja kytkeä tähän käyttämäämme terminaaliin. Tällöin aiempaan yhteysikkunaan tulee ilmoitus:

[remote detached]  
pesasa@etakone:~$

Screen siis irroitettiin “etäkomennolla”.

Toinen keino kytkeytyä varattuun screen-sessioon on komennolla:

pesasa@etakone:~$ screen -x

Tällä komennolla screen-sessiota ei irroteta aiemmasta terminaalista vaan kytketään myös uuteen terminaaliin. Nyt jos kirjoitamme jotain jompaan kumpaan ikkunaan, näemme saman molemmissa. Screenin koko (rivit ja sarakkeet) määräytyy ensin kytkeytyneen terminaalin mukaan. Tätä tapaa voi jossain tapauksissa käyttää myös saman tapahtuman esittämiseen useamman tietokoneen ruudulla yhtäaikaisesti.

Alueet ja ikkunat screenin sisällä

Screenin yleisin käyttötarkoitus on varmasti edellä kuvattu mahdollisuus jättää ohjelmia käyntiin taustalle. Tämän lisäksi screenistä löytyy myös muita ominaisuuksia. Eräs näistä on mahdollisuus jakaa terminaali-ikkuna osiin, joita kutsutaan alueiksi (region).

Kun screen on käynnissä, näppäinyhdistelmä ctrl-a S (huomaa iso S) jakaa (split) terminaalin vaakasuunnassa kahtia yläosaan ja alaosaan. Käytössä ollut komentotulkki jatkaa eloaan ylemmässä alueessa, mutta alempi alue on tyhjänä. Alueiden välillä voi liikkua näppäinkomennolla ctrl-a tab. Tyhjään alueeseen voi käynnistää uuden komentotulkin näppäimillä ctrl-a c (screen). Näin saavutetussa tilassa voidaan kummassakin alueessa ajaa eri ohjelmia. Esimerkiksi toisessa voidaan ajaa laskentaohjelmaa ja toisessa luoda sille tekstieditorilla komentojonotiedostoa tai syötetiedostoa.

Split-komentoa voi käyttää yhä uudelleen terminaalin jakamiseen useampaan alueeseen.

Alueita voi poistaa näppäinkomennolla ctrl-a X (remove), joka poistaa aktiivisena olleen alueen. Toinen vaihtoehto on yhdistelmä ctrl-a Q (only), joka jättää jäljelle vain aktiivisen alueen ja poistaa muut alueet.

Mitä tapahtuu poistetuissa alueissa käynnissä olleille ohjelmille? Ei itse asiassa mitään. Kukin ohjelma on käynnissä omassa ikkunassaan (window) ja alueet ovat vain näkymiä näihin ikkunoihin. Eri alueissa voi siis olla näkyvissä eri ikkunoita tai samoja ikkunoita. Kaikkien ikkunoiden ei tarvitse olla näkyvissä yhtä aikaa. Uusia ikkunoita voidaan luoda jo mainitulla ctrl-a c-näppäinyhdistelmällä. Lista käynnissä olevista ikkunoista näkyy kunkin alueen alareunassa ja niiden välillä voi vaihtaa näppäinyhdistelmällä ctrl-a " esiin tulevasta listasta.

Jotta ikkunat eivät menisi sekaisin, voidaan aktiivisena olevalle ikkunalle antaa oletusnimeä kuvaavampi nimi näppäilemällä ctrl-a A.

Historian selaaminen

Screen ikkunan sisällä ruudulla juosseita tekstejä voi tarkastella kopiointi- ja vieritystilassa (copy/scrollback mode), johon pääsee näppäimillä ctrl-a esc (copy). Tämän näppäilyn jälkeen screen siirtyy tilaan jossa voi nuolinäppäimillä selata ikkunan sisältöä taakse päin. Selaamisen lisäksi tässä tilassa voi myös kopioida tekstiä. Ensimmäinen enter-näppäimen painallus merkitsee kopioinnin aloituskohdan ja toinen lopetuskohdan, jonka jälkeen kontrolli palaa takaisin ikkunassa ajettavalle ohjelmalle. Kopioidun tekstin voi liittää näppäilemällä ctrl-a ].

Tärkeimmät näppäinkomennot

Näppäinyhdistelmä nimi merkitys
C-a " (windowlist -b) Esitä valintalista kaikista ikkunoista.
C-a tab (focus) Vaihda kohdistus seuraavaan alueeseen. (Katso myös split, remove ja only)
C-a a (meta) Lähetä ohjelmalle ctrl-a -näppäily. Tarvitaan, joska screen nappaa todellisen ctrl-a:n.
C-a A (title) Nimeä nykyinen ikkuna
C-a c (screen) Luo uusi ikkuna, käynnistä siihen komentotulkki ja siirry siihen.
C-a d (detach) Irrota screen tästä terminaalista.
C-a space (next) Vaihda seuraavaan ikkunaan.
C-a backspace (prev) Vaihda edelliseen ikkunaan.
C-a Q (only) Sulje muut alueet ja jätä vain tämä.
C-a S (split) Jaa alue kahtia vaakasuunnassa. (Katso myös only, remove ja focus.)
C-a X (remove) Poista nykyinen alue. (Katso myös split, only ja focus.)
C-a C-\ (quit) Sulje kaikki ikkunat ja lopeta screen.
C-a [, C-a esc (copy) Siirry kopiointi- ja vieritystilaan.
C-a ] (paste) Liitä kopioitu teksti.

Lisää näppäinkomentoja ja ohjeita löytyy screen-ohjelman man-sivuilta.

pesasa@etakone:~$ man screen