Après environ une heure de recherche sur Google, je ne peux pas croire que personne n'ait posé cette question auparavant ...
J'ai donc un script en cours d'exécution sur TTY1. Comment faire pour que ce script lance un programme arbitraire sur TTY2?
- J'ai trouvé
tty
, qui vous indique sur quel ATS vous êtes actuellement. - J'ai trouvé
writevt
, qui écrit une seule ligne de texte sur un autre ATS. - J'ai trouvé
chvt
, ce qui change quel TTY est actuellement affiché.
Je ne veux pas afficher TTY2. Je veux juste que le script principal continue de s'exécuter normalement, mais si je passe manuellement à TTY2, je peux interagir avec le deuxième programme.
[command] > /dev/tty2
(vous devez déjà être connecté à tty2)?Réponses:
Tant que rien d'autre n'utilise l'autre ATS (
/dev/tty2
dans cet exemple), cela devrait fonctionner. Cela inclut ungetty
processus qui peut attendre que quelqu'un se connecte; ayant plus d'un processus de lecture de son entrée à partir d' un ATS va conduire à des résultats inattendus.setsid
prend soin de démarrer la commande dans une nouvelle session.Notez que vous
command
devrez prendre soin de réglerstty
correctement les paramètres, par exemple activer le "mode cuit" et deonlcr
sorte que la sortie d'une nouvelle ligne ajoute un retour chariot, etc.la source
/dev/stdin
,/dev/stdout
et/dev/stderr
.ps
montre facilement qu'ilcommand
n'a pas de terminal de contrôle du tout dans votre cas.sleep 1000
et ça ne marche toujours pas ici. J'ai utilisé un pseudo tty, cependant (cela ne devrait pas faire de différence, je suppose).setsid sh -c 'exec sleep 1000 <>/dev/pts/4 >&0 2>&1'
dans une fenêtre d'émulateur de terminal./dev/pts/4
est une autre fenêtre d'émulateur de terminal (même utilisateur, enbash
cours d' exécution).Sur le deuxième terminal, il y aura normalement un programme en cours d'exécution, soit un programme de connexion, soit un shell comme bash. Si vous souhaitez une interaction, vous devrez soit remplacer le programme de connexion par le vôtre, soit demander à un shell d'exécuter le programme comme si le programme avait été démarré à partir de la ligne de commande.
Une solution plus simple, IMO, serait de démarrer une
tmux
session après vous être connecté au deuxième écran, puis d'utiliser:pour démarrer le programme dans la
tmux
session qui s'affichera après le passage au deuxième terminal.la source
Je viens de faire une découverte:
Comment puis-je lancer des applications à partir de 2 ttys au lancement?
L'un des commentaires mentionne quelque chose appelé
openvt
. Cette commande semble faire exactement ce que je recherche!http://linux.about.com/library/cmd/blcmdl1_openvt.htm
À moins que quelqu'un sait différent, je pense que c'est probablement la « bonne » façon de le faire.
(Je viens de l'essayer, et cela semble bien fonctionner - même s'il
getty
est en cours d'exécution, il choisit le prochain terminal inutilisé. Je suppose que les VT ne sont pas "ouverts" jusqu'à ce que vous passiez à l'un pour essayer de vous connecter ...)la source
je démarre une nouvelle session graphique sur le vt5 avec la commande follow
par exemple :
Si vous souhaitez lancer une application graphique sur une session graphique déjà active, vous pouvez le faire avec:
la source