Nach ungefähr einer Stunde Googeln kann ich nicht glauben, dass noch niemand diese Frage gestellt hat ...
Also habe ich ein Skript auf TTY1 ausgeführt. Wie bringe ich dieses Skript dazu, ein beliebiges Programm auf TTY2 zu starten?
- Ich habe gefunden
tty
, was dir sagt, auf welchem TTY du gerade bist. - Ich habe gefunden
writevt
, das eine einzelne Textzeile auf ein anderes TTY schreibt. - Ich habe festgestellt
chvt
, welche Änderungen welches TTY aktuell anzeigt.
Ich möchte TTY2 nicht anzeigen . Ich möchte nur, dass das Hauptskript normal weiter ausgeführt wird, aber wenn ich manuell zu TTY2 wechsle, kann ich mit dem zweiten Programm interagieren.
[command] > /dev/tty2
(Sie müssen sich bereits bei tty2 angemeldet haben)?Antworten:
Solange nichts anderes das andere TTY verwendet (
/dev/tty2
in diesem Beispiel), sollte dies funktionieren. Dies beinhaltet einengetty
Prozess, der möglicherweise darauf wartet, dass sich jemand anmeldet. Wenn mehr als ein Prozess seine Eingabe von einem TTY liest, führt dies zu unerwarteten Ergebnissen.setsid
kümmert sich darum, den Befehl in einer neuen Sitzung zu starten.Beachten Sie, dass Sie
command
diestty
Einstellungen korrekt vornehmen müssen, z. B. den "Gekochten Modus"onlcr
einschalten müssen, damit bei der Ausgabe einer neuen Zeile ein Zeilenumbruch usw. eingefügt wird.quelle
/dev/stdin
,/dev/stdout
und/dev/stderr
.ps
zeigt leicht, dasscommand
in Ihrem Fall überhaupt kein steuerndes Terminal vorhanden ist.sleep 1000
und es hier immer noch nicht funktioniert. Ich habe allerdings eine Pseudotty verwendet (sollte wohl keinen Unterschied machen).setsid sh -c 'exec sleep 1000 <>/dev/pts/4 >&0 2>&1'
in einem Terminalemulatorfenster gelaufen ./dev/pts/4
ist ein anderes Terminal-Emulator-Fenster (derselbe Benutzer, der geradebash
läuft).Auf dem zweiten Tty wird normalerweise ein Programm ausgeführt, entweder ein Anmeldeprogramm oder eine Shell wie Bash. Wenn Sie eine Interaktion wünschen, müssen Sie entweder das Anmeldeprogramm durch das Ihre ersetzen oder eine Shell anweisen, das Programm so auszuführen, als ob das Programm über die Befehlszeile gestartet worden wäre.
Eine einfachere Lösung, IMO, besteht darin, eine
tmux
Sitzung zu starten , nachdem Sie sich auf dem zweiten Bildschirm angemeldet haben, und dann Folgendes zu verwenden:um das Programm in der
tmux
Sitzung zu starten, die angezeigt wird, nachdem Sie zum zweiten Terminal gewechselt haben.quelle
Ich habe gerade eine Entdeckung gemacht:
Wie kann ich Anwendungen von 2 ttys beim Start starten?
In einem der Kommentare wird etwas genannt
openvt
. Dieser Befehl scheint genau das zu tun, wonach ich suche!http://linux.about.com/library/cmd/blcmdl1_openvt.htm
Wenn niemand etwas anderes weiß, denke ich, ist dies wahrscheinlich der "richtige" Weg, dies zu tun.
(Ich habe es gerade ausprobiert und es scheint gut zu funktionieren - obwohl
getty
es ausgeführt wird, sucht es das nächste unbenutzte Terminal. Ich denke, VTs werden nicht "geöffnet", bis Sie zu einem wechseln, um sich anzumelden ...)quelle
Ich starte eine neue grafische Sitzung auf dem VT5 mit dem Befehl folgen
beispielsweise :
Wenn Sie eine grafische Anwendung in einer bereits aktiven grafischen Sitzung starten möchten, haben Sie folgende Möglichkeiten:
quelle