Farklı bir tty üzerinden bir işlem başlatmak


31

Bu Google Googling'in yaklaşık bir saatinden sonra, kimsenin bu soruyu daha önce sormadığına inanamıyorum ...

Bu yüzden TTY1 üzerinde çalışan bir senaryom var. Bu betiğin TTY2'de bazı keyfi programları başlatmasını nasıl sağlayabilirim?

  • ttyHangi TTY'de olduğunuzu söyleyen buldum .
  • writevtFarklı bir TTY'ye tek bir satır metin yazan buldum .
  • chvtHangi TTY'nin görüntülendiğini değiştiren öğeyi buldum .

Ben istemiyorum ekran tty2. Sadece ana komut dosyasının normal şekilde çalışmaya devam etmesini istiyorum, ancak TTY2'ye manuel olarak geçersem ikinci programla etkileşime girebilirim.


TTY1'den denediniz mi [command] > /dev/tty2(zaten tty2'ye giriş yapmalısınız)?
Pandya

1
bu bir XYproblem olabilir ... ne elde etmeye çalışıyorsun? genel amaç nedir?
Olivier Dulac

Yanıtlar:


32
setsid sh -c 'exec command <> /dev/tty2 >&0 2>&1'

Diğer TTY'yi başka hiçbir şey kullanmıyorsa ( /dev/tty2bu örnekte) bu işe yaramalı. Bu, gettybirinin giriş yapmasını bekleyebilecek bir işlemi içerir ; Bir TTY onun girişini okuyarak birden fazla işlemi olan edecektir beklenmedik sonuçlara yol açar.

setsid komutu yeni bir oturumda başlatmaya özen gösterir.

Not commandayar bakmak zorunda kalacak sttyörneğin doğru ayarları "pişmiş modu" açmak ve onlcrböylece bir yeni satır çıkışı bir satır, vb katacak


2
Bu doğru değil. Sen ile kontrol terminali karıştırmak /dev/stdin, /dev/stdoutve /dev/stderr. psdurumunuzda commandkontrol terminalinin olmadığını kolayca gösterir .
Hauke,

1
@HaukeLaging, bir oturum lideri açılır açılmaz bir terminalin kontrolünü ele geçirir. Sorun, terminal cihazının oturum lideri tarafından açık olmamasıydı. Şimdi düzeltilmeli.
Stéphane Chazelas

@ StéphaneChazelas ile test ettim sleep 1000ve hala burada çalışmıyor. Yine de sahte bir tty kullandım (bir fark yaratmamalıyım sanırım).
Hauke,

@HaukeLaging Tam olarak nasıl yaptınız? Bu terminalin daha önce bir kontrol oturumu yoktu mu ( diğer TTY bölümünü başka bir şey kullanmadığı sürece )?
Stéphane Chazelas

1
@ StéphaneChazelas setsid sh -c 'exec sleep 1000 <>/dev/pts/4 >&0 2>&1'Terminal emülatör penceresinde çalıştım . /dev/pts/4Başka bir terminal emülatör penceresi ( bashçalışan , aynı kullanıcı ).
Hauke,

6

İkinci tty'de normalde çalışan bir program olacak, ya bazı giriş programları ya da bash gibi bir kabuk. Etkileşim istiyorsanız, ya oturum açma programını kendinizle değiştirmelisiniz ya da programı komut satırından başlatılmış gibi programa çalıştırmasını isteyin.

Daha basit bir çözüm olan IMO, tmuxikinci ekrana giriş yaptıktan sonra bir oturum başlatmak ve ardından kullanmak olacaktır:

tmux send yourcommand ENTER

Programı tmux, ikinci terminale geçtikten sonra görüntülenecek oturumda başlatmak için .


2

Sadece bir keşif yaptım:

Uygulamaları başlangıçta 2 tty'den nasıl başlatabilirim?

Yorumlardan biri denilen bir şeyden bahsediyor openvt. Bu komut, peşimden gelenin en iyisini yapıyor!

http://linux.about.com/library/cmd/blcmdl1_openvt.htm

Herkes farklı biliyor sürece, bence bu muhtemelen bunu yapmak için "doğru" yoludur.

(Sadece denedim ve iyi çalışıyor gibi görünüyor - çalışıyor olsa da getty, bir sonraki kullanılmayan terminali seçiyor. Sanırım giriş yapmak için birine geçene kadar VT'ler "açılmıyor" ...


0

follow komutuyla vt5'te yeni bir grafik oturumu başlatıyorum

xinit "/usr/bin/<binary_executable>" -- :1 vt5

Örneğin :

xinit "/usr/bin/playonlinux" -- :1 vt5

Zaten aktif olan grafiksel oturumda bir grafiksel uygulama başlatmak istiyorsanız, şunları yapabilirsiniz:

DISPLAY=:0 "/usr/bin/playonlinux"
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.