Sanal oturumlar arasında hızlı geçiş (ekran?)


19

Bir macun penceresinde birkaç sanal oturum yapmak ve bunlar arasında hızlı bir şekilde değiştirmek istiyorum. Bunu yapmanın en iyi yolu nedir? screen? ctrl+adFarklı bir seansla ayrılıp tekrar bağlayabileceğimi biliyorum , ama çok fazla yazıyor gibi görünüyor.

Yanıtlar:


22

Gnu ekranına çok aşina değilseniz Ansgar'ın söylediklerini genişletmek için, tek bir ekran oturumunda birden fazla "pencereye" sahip olmak muhtemelen ihtiyacınız olanı başaracaktır.

ctrl+ a, cetkin ekran oturumunuzda yeni bir "pencere" oluşturur. Sen (Ansgar belirtildiği gibi) ile birden pencereler arasında geçiş yapabilirsiniz ctrl+ a, nsonraki pencere için ve ctrl+ a, pönceki pencereye için.

ctrl+ a, "tüm açık pencerelerinizin bir listesini verir.

Bu kolay kısayolları kullanmak, farklı terminaller arasında çok hızlı ve kolay bir şekilde geçiş yapmanızı sağlayarak, birden fazla ekran oturumu kullanmadan hedefinize ulaşmanızı sağlar.

~ / .Screenrc dosyasına aşağıdaki satırı eklerseniz, her zaman açık pencerelerinizi ve hangisinin seçildiğini görüntüler, böylece hatırlayarak hatırlatarak hangi pencerede olduğunuzu izlemenize gerek yoktur.

hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'

Bu, kullanmak istediğim zor durum satırı, ancak tamamen özelleştirilebilir (man sayfasına bakın veya google'da "gnu ekran hardstatus" için arama yapın).

Onunla yapabileceğiniz bir sürü başka şey var (örneğin farklı açık pencereleri adlandırmak), bu yüzden bazı öğreticileri okumaya değer.

İşte hızlı bir arama ile bulduğum bir çift:

http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml

http://www.ibm.com/developerworks/aix/library/au-gnu_screen/

Ve elbette en faydalısı:

# From your terminal:
$ man screen

Umarım yardımcı olur.

Matthew


2

Evet, screenbüyük olasılıkla gidilecek yol. Ctrl+ a, nsizi bir sonraki pencereye, Ctrl+ a, bir pönceki pencereye götürür . Ctrl+ a, 0.. 9belirli bir ekrana geçmenizi sağlar.


Önceki için F11, sonraki pencere için F12 gibi çok daha hızlı tuş bağlamaları ayarlayabilirsiniz. Ve ekran kaçış karakterini ^abaşka bir şeye dönüştürün, bu yüzden basac'ta emacs tarzı çizgi düzenlemeyi, başka bir şeyi kullanmak gülünç derecede can sıkıcı değil. Ben kullanıyorum ^t.
Peter Cordes

1

Diğerlerinin söyledikleri doğrudur. Sadece bahsetmek istiyorum tmuxbir alternatif screen. Çok benzer komutları var.

Her ikisi de screenve tmuxçalışan bir oturum için birden çok pencere sunar ve bu muhtemelen istediğiniz şeydir. tmuxek olarak birden fazla oturum arasında atlama (her biri kendi pencereleri vardır) sunuyor. Buna çok nadiren ihtiyacınız olacak.

Ekranın belgelerine ve tmux ile ilgili bir kilitlenme kursuna bazı bağlantılar .


1

Çok zaman geçtikten sonra tamamen eksik olan bu özellik üzerinde çalışmak için bir Script yaptım. Her şeyden önce bir fifoya ihtiyacı var:

mkdir ~/.screen
mkfifo ~/.screen/pipe

Bu adlandırılmış kanal, ayrılmış oturum ile "Ekransız ana" oturumu arasındaki iletişim için kullanışlıdır.

Sc dosyası ($ PATH içinde):

#!/bin/bash
CONFIGFILE=~/.screen/"$1""rc"

if [ ! -r $CONFIGFILE ] ; then
   echo "Configurazione per $1 Assente" >&2
   exit 1
fi

exec 3<> ~/.screen/pipe

if [ "$STY" != "" ] ; then
   screen -d "$STY"
   echo "$1" >&3
else
   screen -r "$1" 2>/dev/null || screen -S "$1" -c $CONFIGFILE
   while true ; do
      read line <&3
      screen -r "$line" 2>/dev/null || screen -S "$line" -c ~/.screen/"$line""rc"
   done
fi

Bir "CONFIGFILE" örneği: ~ / .screen / Monitorrc

layout new Monitor

screen -t "bash" bash --login
split -v
focus next
split 
focus bottom
screen -t "cv" sh -c "watch /usr/bin/cv -w"
split
focus bottom
screen -t "sys.log" sh -c "tail -F /var/log/sys.log"
focus up
focus up
resize 25
screen -t "top" sh -c "top"
focus left

Sonuç: ekran türünü başlatmak istediğinizde:

sc Monitor

veya icat etmek istediğiniz başka bir sessionrc, oturum çalışmasını çeşitli şeyler için kullanıyorum

Örn: ~ / .screen / Workrc

layout new Work  
screen -t "bash" bash --login  

Şimdi yazarken Oturum Monitörü'ndeyiz:

sc Work

Monitor, kendisini ayırır ve adlandırılmış boruya "İş" yazar. Sonuç olarak ilk sc komut dosyası ileri gider ve oturumu "Work" ekler.
Oturum İzleyicisi'nden çağrılan sc kapatılır.

Tüm Oturumları ayırdığımızda sonsuz bir döngü içerisindeyiz, bu yüzden çıkmak için Ctrl-c yapmamız gerekir.


1

Bunu, basit bir kabuk komut dosyası ile yapabilirsiniz.

    for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done 
  1. Açık olan birkaç ekranınız olduğunu varsayalım. Ayrıca, bunları iş ve veri olarak sınıflandırdığınızı varsayalım.

    for i in {10..13}; do screen -S `printf data%02d $i`; done;
    for i in {0..5}; do screen -S `printf work%02d $i`; done;
    ...
    
  2. Uygulayarak screen -ls, ekranlarınız böyle olmalıdır

    There are screens on:
        81592.data13    (Detached)
        81539.work04    (Detached)
        81527.work02    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81533.work03    (Detached)
        81488.work00    (Detached)
        81607.ttys014.Mo    (Attached)
        81545.work05    (Detached)
        81580.data11    (Detached)
        81521.work01    (Detached)
        81515.work00    (Detached)
    12 Sockets in /var/folders/qs/cvlbhpr54fnb96vtx01bs9k00000gn/T/.screen.
    
  3. Şimdi müstakil ekranları kullanarak izole edelim grep.

    screen -ls | grep Detached
    

Böyle bir şey almalısın

        81592.data13    (Detached)
        81539.work04    (Detached)
        81527.work02    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81533.work03    (Detached)
        81488.work00    (Detached)
        81545.work05    (Detached)
        81580.data11    (Detached)
        81521.work01    (Detached)
        81515.work00    (Detached)
  1. Şimdi tekrar istediğinizi (örn. Veri) seçelim grep.

    screen -ls | grep Detached | grep data
    

Bu sadece veri ekranlarını izole edecektir. Aramanızı özelleştirmek için grep anahtar kelimesini normal ifadelerle değiştirebilirsiniz.

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. Neyse ki sonuç iyi yapılandırılmış ve sekmeyle ayrılmış. Şimdi sütunları alanlara ayıralım ve kullanarak 2. alanı seçelim cut.

    screen -ls | grep Detached | grep data | cut -d'       ' -f2
    

Sınırlayıcı parametresinden sonra ctrl+va eklemek için önce tuşuna, sonra sekmesine basmanız gerekir . Sonuçlar böyle olmalıdır.tab-d

81592.data13
81586.data12
81574.data10
81580.data11
  1. Şimdi, ...tırnak işaretlerini kullanarak bunu bir komuta paketleyin ve bunun gibi sonuçlar üzerinde döngü yapın. Gerçekte çalıştırmadan önce daima formüle edilmiş komutları kontrol edin. kullandımecho screen -r

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        echo screen -r $s; \
    done
    
  2. Her şey yolunda giderse, onsuz deneyin echo.

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        screen -r $s; \
    done
    
  3. Voila. Çıkardığınız her ekran sizi bir sonrakine götürür.

Mutlu tarama !!


Bu GERÇEKTEN hoş bir cevaptır ve bu sitenin genel kalitesini yükseltir.
123456789123456789123456789

1

Kullanıcının ok tuşlarını kullanarak listeden eklenecek ekran oturumunu seçmesine izin vermek için bir düğüm komut dosyası yazdım. Bir npm paketi yaptım. Buradan kontrol edebilirsiniz: screen-command . Ya da sadece npm i -g screen-commanddenemek için, zaten node.js'nin kurulu olduğunu varsayarsak. Paketi kurduktan sonra sc, ekran listesini çağırmak için command komutunu kullanın.

Umarım bu tam istediğiniz ekrana geçişi kolaylaştırır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.