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?
tty
, qui vous indique sur quel ATS vous êtes actuellement.writevt
, qui écrit une seule ligne de texte sur un autre ATS.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.
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.
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.
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...)
Si vous souhaitez le faire dans un service systemd, consultez https://raymii.org/s/tutorials/Run_software_on_tty1_console_instead_of_login_getty.html et/ou https: // github. com/malcolmlewis/systemd-htop-service/blob/master/htop.service
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"