O anda çalışan terminalin (tty1) sanal terminalinden çıkışına bağlanmalı ve onu yakalamam gerekiyor (X sunucusu çalışıyor).
O anda çalışan terminalin (tty1) sanal terminalinden çıkışına bağlanmalı ve onu yakalamam gerekiyor (X sunucusu çalışıyor).
Yanıtlar:
Ben denilen bu araçla karşılaştım ttylog
. Bu CPAN geçerli bir Perl programı burada . Birkaç uyarısı var, biri kutuma giren birinin bir parçası olarak yaratılan bir terminale nasıl bağlanacağını bulabildim. Öteki varlık, bunu yüksek ayrıcalıklarla (yani kök veya sudo) çalıştırmanız gerektiğidir.
Ama işe yarıyor!
İlk olarak TERM # 1’deki kutucuğuna ssh:
TERM#1% ssh saml@grinchy
Bu yeni terminalin numarasını not edin:
TERM#1% tty
/dev/pts/3
Şimdi başka bir terminalde (TERM # 2) bu komutu çalıştırın:
TERM#2% ttylog pts/3
DEBUG: Scanning for psuedo terminal pts/3
DEBUG: Psuedo terminal [pts/3] found.
DEBUG: Found parent sshd pid [13789] for user [saml]
Şimdi TERM # 1'e geri dönün ve bir şeyler yazın, bunlar TERM # 2'de görünecektir.
Çalıştığım tüm komutlar (top, ls, vb.) Olayı kullanmadan çalıştı ttylog
.
gdb
ilk seçenek buydu, geçmişte kendim kullandım, ama en azından benim için sakıncalı. Bunun sana yardım etmesine sevindim!
Gerçekten öyle. / Dev / vcs * ve / dev / vcsa * aygıtları / dev / tty * aygıtlarına (sanal terminaller) karşılık gelir. F1 = tty1 = vcs1 / vcsa1 vb. Vcs / vcsa "geçerli" sanal terminal için tty gibidir.
Kök olarak, sadece bu aygıtları yakalayabilirsiniz (örn. Cat / dev / vcs2) ve anlık görüntü alma gibi karşılık gelen VT'de (örneğin, F2'deki / dev / tty2'deki gibi) ne olduğunu görebilirsiniz. vcsa *, terminalin boyutları (ekran) hakkında bilgi içerdiğinden vcs * 'dan farklıdır. Unutmayın, sadece ekranda göründüğü gibi karakterlerin ham bir anlık görüntüsü - terminale ayrılan hafızadan toplanmış - bu yüzden hoş, kolayca ayrıştırılabilir çıktılar beklemeyin.
Dezavantajı eğer bilgi çok hızlı bir şekilde geçmişe yanıp sönerse, yakalanması zor olabilir. Muhtemelen kuyruk -f / dev / vcs1 çalışacaktır, birkaç ekrana uymanız gerekiyorsa (kendimi denemedim)? Önce bir dosyaya yönlendirmek en kolay yol olabilir. Terminaller aynı boyutlara sahip olacağından, ona bakmak için bir VT (F1-F6) kullanmak da iyi bir fikir olabilir. Tecrübelerime göre vcsa * - cihazları kullanmamak en iyisidir.
Bu işe yaramazsa, belki de yöneticinin bir terminaldeki aktiviteye göz kulak olmasını sağlayan "büyük kardeşim" paketlerinden biri işe yarayabilir.
Not: Hangi işletim sistemini kullandığınızı sormayı unuttum. Bu Linux için, benzer cihazlar muhtemelen diğer işletim sistemlerinde de mevcut olsa da. Aygıtların kılavuz sayfaları arasında "sanal konsol belleği" aramayı deneyin.
wlan0
aslında bu komut dosyasının başarısız olduğu yerde hata ayıklamaya çalışırken bir catch-22 durumum var. Bir usb hub'ı kullanamayacağımı varsayalım ... bir şekilde / dev / tty1'e kömür atmamın bir yolu var mı?
/dev/tty1
kök olarak ekleyebiliyorum , fakat bunların hepsi ekrana karakterleri görüntülemek, girmemek.
Kullan tty
onları tanımlamak için her terminal komutunu:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
Bu TTY'lerin varsayıldığı gibi, ilkin stdout'unu ikinciye yönlendirmek için, bunu ilk terminalde çalıştırın:
exec 1>/dev/pts/1
Not: Şimdi her komut çıkışı pts / 1 ile gösterilecektir.
Pts / 0'ın varsayılan davranışını geri yüklemek için:
exec 1>/dev/pts/0
Bir gösteri için bu videoya bakın .
Bu benim için çalıştı:
"A" bilgisayarındaki bir klavyeyi kullanarak (yani kontrol edilecek fiziksel bilgisayar), şunları çalıştırın: screen -q
ssh
"B" bilgisayarından "A" bilgisayarına bağlanın .
Ssh oturumunda şunu yazın: screen -ls
bağlanılacak oturum kimliğini almak için ( tty içeren satırdaki 4 hane ).
Yukarıdaki komutla şununla bağlanın: screen -x <session id>
... screen -ls
yukarıdaki komuttan alınan oturum kimliği numarasını kullanarak .
Her iki "oturumda" da yazılan her iki "oturumda" da gerçekleşir, bu nedenle örneğin yazma screen -d
BOTH oturumlarından çıkar.
Başka bir yaklaşım da screen
yerel makinenizde gnu yardımcı programını kullanmaktır . -L
Seçenekle çağırın veya bu seçenek olmadan başlayın ve ^aH
komut sırasını kullanın . Her iki yaklaşım da tüm giriş ve çıkışların, screenlog.x
x'in ekran numarası olduğu bir dosyaya kaydedilmesini sağlar .
Bu kullanışlıdır, çünkü uzaktaki makineye başka bir şey kurmanız gerekmez.
Ekranda tty1'i başlatmadığımdan bu komut dosyası yardımcı oldu:
Yukarıdaki Baard Kopperud'un cevabını kullandım. "128", tty1’imin 1 satırı. Uyku uygun bir sayıya ayarlanabilir.
#!/bin/bash
while true
do
sudo tail -c 128 /dev/vcs1 && echo ""
sleep 10
done
Bunu sonlandırıcıda kullandım ve sütunu boyutlandırdım, böylece kaydırma bir metin satırı olacaktı.
İki terminali açın. Tip tty
her birinde ve sen 's alırsınız kimliği olarak/dev/pts/nº
Sonra ilk yazdığınızda script -f /dev/pts/nºofSecondTerminal
ve ikinci yazarken bunun tam tersini yapın, script -f /dev/pts/nºofFirstTerminal
böylece birbirleriyle bağlantı kurun.
Tebrikler! Her iki terminal de aynı şeyleri çıkarıp alıyor. Üçüncü bir ihtiyacınız var? Peki, kombinasyonları çalıştın mı? 6 script -f
komuta ihtiyacınız olacak . Daha fazla tty? Yakında...
screen
veya kullanmaya başlamayı düşününtmux
.