web-dev-qa-db-fra.com

Démarrer un processus sur un autre terminal

Après environ une heure de recherche sur Google, je ne peux pas croire personne n'a réellement posé cette question avant ...

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, qui change le TTY 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.

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

Tant que rien d'autre n'utilise l'autre ATS (/dev/tty2 dans cet exemple), cela devrait fonctionner. Cela inclut un processus getty qui peut attendre que quelqu'un se connecte; avoir plus d'un processus lisant son entrée à partir d'un ATS va entraîner des résultats inattendus.

setsid s'occupe de démarrer la commande dans une nouvelle session.

Notez que command devra veiller à définir correctement les paramètres stty, par exemple activez le "mode cuit" et onlcr pour que la sortie d'une nouvelle ligne ajoute un retour chariot, etc.

33
wurtel

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 session tmux après vous être connecté au deuxième écran, puis d'utiliser:

tmux send yourcommand ENTER

pour démarrer le programme dans la session tmux qui s'affichera après que vous passiez au deuxième terminal.

6
Anthon

Je viens de faire une découverte:

Comment puis-je lancer des applications à partir de 2 ttys au lancement?

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 ne sache différent, je pense que ceci est probablement la manière "correcte" de le faire.

(Je viens de l'essayer, et cela semble fonctionner correctement - même si getty est en cours d'exécution, il sélectionne le prochain terminal inutilisé. dans...)

3
MathematicalOrchid
0
Bl00dh0und

je démarre une nouvelle session graphique sur le vt5 avec la commande follow

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

par exemple :

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

Si vous souhaitez lancer une application graphique sur une session graphique déjà active, vous pouvez le faire avec:

DISPLAY=:0 "/usr/bin/playonlinux"
0
inukaze