Po około godzinie Googlingu nie mogę uwierzyć, że nikt wcześniej nie zadał tego pytania ...
Mam skrypt działający na TTY1. Jak sprawić, aby ten skrypt uruchamiał dowolny program na TTY2?
- Znalazłem
tty
, który mówi ci, na którym TTY jesteś obecnie. - Znalazłem
writevt
, który zapisuje pojedynczy wiersz tekstu na innym TTY. - Znalazłem
chvt
, które zmiany, który TTY jest obecnie wyświetlany.
Nie chcę wyświetlać TTY2. Chcę tylko, aby główny skrypt kontynuował normalne działanie, ale jeśli ręcznie przełączę się na TTY2, mogę wchodzić w interakcje z drugim programem.
[command] > /dev/tty2
(musisz się już zalogować do tty2)?Odpowiedzi:
Tak długo, jak nic innego nie używa drugiego TTY (
/dev/tty2
w tym przykładzie), powinno to działać. Obejmuje togetty
proces, który może oczekiwać na zalogowanie się; z więcej niż jednego procesu odczytu sygnał z terminalem będzie prowadzić do nieoczekiwanych wyników.setsid
zajmuje się uruchomieniem polecenia w nowej sesji.Należy pamiętać, że
command
trzeba będzie zadbać ostty
prawidłowe ustawienie ustawień, np. Włączyć „tryb gotowania”,onlcr
tak aby wypisanie nowego wiersza dodawało powrót karetki itp.źródło
/dev/stdin
,/dev/stdout
oraz/dev/stderr
.ps
łatwo pokazuje, żecommand
w twoim przypadku w ogóle nie ma terminala sterującego.sleep 1000
i nadal nie działa tutaj. Jednak użyłem pseudo-tty (chyba nie powinno mieć znaczenia).setsid sh -c 'exec sleep 1000 <>/dev/pts/4 >&0 2>&1'
okno emulatora terminala./dev/pts/4
to kolejne okno emulatora terminala (ten sam użytkownik, zbash
uruchomionym).W drugim tty będzie normalnie uruchomiony program, albo program do logowania, albo jakaś powłoka jak bash. Jeśli chcesz interakcji, musisz albo wymienić program logowania na swój, albo powiedzieć powłoce, aby uruchomiła program tak, jakby program został uruchomiony z wiersza poleceń.
Prostszym rozwiązaniem, IMO, byłoby rozpoczęcie
tmux
sesji po zalogowaniu się na drugim ekranie, a następnie użycie:aby uruchomić program w
tmux
sesji, która wyświetli się po przełączeniu na drugi terminal.źródło
Właśnie dokonałem odkrycia:
Jak mogę uruchamiać aplikacje od 2 tty podczas uruchamiania?
Jeden z komentarzy wspomina coś o nazwie
openvt
. To polecenie wydaje się robić dokładnie to, czego szukam!http://linux.about.com/library/cmd/blcmdl1_openvt.htm
Chyba że ktoś zna inny, myślę, że to prawdopodobnie jest „poprawny” sposób to zrobić.
(Właśnie go wypróbowałem i wydaje się, że działa dobrze - chociaż
getty
działa, wybiera następny nieużywany terminal. Myślę, że VT nie otwierają się, dopóki nie przełączysz się na inny, aby spróbować się zalogować ...)źródło
rozpoczynam nową sesję graficzną na vt5 za pomocą polecenia follow
na przykład :
Jeśli chcesz uruchomić aplikację graficzną w już aktywnej sesji graficznej, możesz:
źródło