Приблизительно после часа поиска в Google, я не могу поверить, что никто не задавал этот вопрос раньше ...
Итак, у меня есть скрипт, работающий на TTY1. Как заставить этот скрипт запускать произвольную программу на TTY2?
- Я нашел
tty
, что говорит вам, на каком TTY вы сейчас находитесь. - Я нашел
writevt
, что пишет одну строку текста на другой TTY. - Я нашел
chvt
, какие изменения, какой TTY в настоящее время отображается.
Я не хочу показывать TTY2. Я просто хочу, чтобы основной скрипт продолжал нормально работать, но если я вручную переключусь на TTY2, я смогу взаимодействовать со второй программой.
[command] > /dev/tty2
(вы уже вошли в tty2)?Ответы:
Пока ничто другое не использует другой TTY (
/dev/tty2
в этом примере), это должно работать. Это включаетgetty
процесс, который может ждать, пока кто-то войдет в систему; имеющая более одного процесс чтения ввода из TTY будет приводить к неожиданным результатам.setsid
заботится о запуске команды в новом сеансе.Обратите внимание, что вам
command
придется позаботиться оstty
правильной настройке параметров, например, включить «режим приготовления»,onlcr
чтобы при выводе новой строки добавлялся возврат каретки и т. Д.источник
/dev/stdin
,/dev/stdout
и/dev/stderr
.ps
легко показывает, чтоcommand
в вашем случае совсем нет управляющего терминала.sleep 1000
и это все еще не работает здесь. Я использовал псевдотерминал (хотя, я полагаю, ничего не изменится).setsid sh -c 'exec sleep 1000 <>/dev/pts/4 >&0 2>&1'
в окне эмулятора терминала./dev/pts/4
другое окно эмулятора терминала (тот же пользователь, сbash
запущенным).На втором tty обычно будет запущена программа, либо какая-либо программа входа в систему, либо какая-либо оболочка, например bash. Если вы хотите взаимодействия, вам нужно будет либо заменить программу входа своей, либо указать оболочке запустить программу, как если бы программа запускалась из командной строки.
Более простым решением, IMO, было бы начать
tmux
сеанс после входа во второй экран и затем использовать:запустить программу в
tmux
сеансе, который будет отображаться после переключения на второй терминал.источник
Я только что сделал открытие:
Как я могу запускать приложения с 2 ттыс при запуске?
В одном из комментариев упоминается то, что называется
openvt
. Эта команда, кажется, делает именно то, что мне нужно!http://linux.about.com/library/cmd/blcmdl1_openvt.htm
Если никто не знает другого, я думаю, что это , вероятно, «правильный» способ сделать это.
(Я только что попробовал, и, похоже, он работает нормально - хотя
getty
он работает, он выбирает следующий неиспользуемый терминал. Я думаю, VT не открываются, пока вы не переключитесь на один, чтобы попытаться войти ...)источник
я начинаю новый графический сеанс на VT5 с помощью следующей команды
например :
Если вы хотите запустить графическое приложение в уже активном графическом сеансе, вы можете сделать с помощью:
источник