Мне нужно подключить вывод текущего запущенного терминала (tty1) из виртуального терминала и перехватить его (работает X-сервер).
Мне нужно подключить вывод текущего запущенного терминала (tty1) из виртуального терминала и перехватить его (работает X-сервер).
Ответы:
Я наткнулся на этот инструмент под названием ttylog
. Это программа Perl, доступная на CPAN здесь . У него есть пара предостережений, одно из которых заключается в том, что я могу только выяснить, как подключить терминал, который был создан как часть чьего-то действия в мою коробку. Другое дело, что вы должны запускать его с повышенными привилегиями (например, root или sudo).
Но это работает!
Первый ssh в вашу коробку в ТЕРМИНЕ № 1:
TERM#1% ssh saml@grinchy
Обратите внимание на tty этого нового терминала:
TERM#1% tty
/dev/pts/3
Теперь в другом терминале (TERM # 2) выполните эту команду:
TERM#2% ttylog pts/3
DEBUG: Scanning for psuedo terminal pts/3
DEBUG: Psuedo terminal [pts/3] found.
DEBUG: Found parent sshd pid [13789] for user [saml]
Теперь вернитесь к TERM # 1 и наберите вещи, они появятся в TERM # 2.
Все команды, которые я пробовал (top, ls и т. Д.), Работали без происшествий ttylog
.
gdb
был первый вариант, с которым я столкнулся, я использовал его сам в прошлом, но это, по крайней мере, для меня хакерство. Рад, что это помогло вам!
В самом деле. Устройства / dev / vcs * и / dev / vcsa * соответствуют устройствам / dev / tty * (виртуальные терминалы). F1 = tty1 = vcs1 / vcsa1 и так далее. Vcs / vcsa похож на tty для «текущего» виртуального терминала.
В качестве пользователя root вы можете просто отслеживать эти устройства (например, cat / dev / vcs2) и посмотреть, что находится на соответствующем VT (например, / dev / tty2 на F2), например, сделать снимок. vcsa * отличается от vcs * тем, что содержит информацию о размерах терминала (экрана). Имейте в виду, это просто необработанный снимок символов, отображаемых на экране, собранных из памяти, выделенной для терминала, так что не ожидайте хорошего, легко разбираемого вывода.
Недостатком является то, что, если информация слишком быстро проплывает мимо, ее может быть трудно уловить. Возможно, будет работать tail -f / dev / vcs1, если вам нужно следовать нескольким скринам (я сам не пробовал)? Возможно, проще всего сначала просто перенаправить его в файл. Также может быть хорошей идеей использовать VT (F1-F6), чтобы посмотреть на него, поскольку клеммы будут иметь одинаковые размеры. По моему опыту, лучше использовать устройства vcs *, а не vcsa *.
Если это не сработает, возможно, подойдет один из пакетов «старшего брата», который позволяет администратору следить за активностью терминала.
PS: я забыл спросить, какую ОС вы используете. Это для Linux, хотя подобные устройства, вероятно, существуют и в других ОС. Попробуйте найти «память виртуальной консоли» среди man-страниц для устройств.
wlan0
, у меня фактически возникает ситуация catch-22, пытающаяся отладить в случае сбоя этого сценария. Предположим, я не могу использовать USB-концентратор ... есть ли способ как-то передать символы в / dev / tty1?
/dev/tty1
качестве пользователя root, но все, что он делает, это отображает символы на экране, а не вводит их
Используйте tty
команду в каждом терминале, чтобы идентифицировать их:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
Предполагая, что эти TTY, чтобы перенаправить стандартный вывод первого на второй, запустите это в первом терминале:
exec 1>/dev/pts/1
Примечание: теперь каждый вывод команды будет отображаться в pts / 1
Чтобы восстановить стандартный вывод поведения pts / 0:
exec 1>/dev/pts/0
Смотрите это видео для демонстрации.
Это сработало для меня:
Используя клавиатуру на компьютере «A» (т.е. физическом компьютере, которым нужно управлять), запустите: screen -q
Подключитесь с ssh
компьютера "B" к компьютеру "A".
В сеансе ssh введите:, screen -ls
чтобы получить идентификатор сеанса для подключения (4 цифры в строке, содержащей tty ).
Подключитесь к указанному выше сеансу с помощью: screen -x <session id>
... используя идентификатор сеанса, полученный из приведенной screen -ls
выше команды.
Все, что набрано в любом из «сеансов», будет происходить в обоих «сеансах», поэтому, например, ввод текста screen -d
завершит ОБА сеансы.
Другой подход заключается в использовании screen
утилиты gnu на вашем локальном компьютере. Вызовите его с -L
параметром или запустите без него и используйте ^aH
последовательность команд. В любом случае все входные и выходные данные записываются в файл с именем, screenlog.x
где x - номер экрана.
Это удобно, потому что на удаленной машине не нужно устанавливать ничего лишнего.
Так как я не запустил tty1 с экрана, этот скрипт помог:
Я использовал ответ Баарда Копперуда выше. «128» - это 1 строка моего tty1. Сон может быть установлен на соответствующий номер.
#!/bin/bash
while true
do
sudo tail -c 128 /dev/vcs1 && echo ""
sleep 10
done
Я использовал это в терминаторе и определил размер столбца, чтобы прокрутка была одной строкой текста.
Откройте два терминала. Введите tty
каждый, и вы получите его идентификатор как/dev/pts/nº
Затем в первом вы вводите, script -f /dev/pts/nºofSecondTerminal
а во втором вы делаете противоположное, script -f /dev/pts/nºofFirstTerminal
чтобы они были связаны
Congrats! Оба терминала выводят и получают одинаковые вещи. Нужен третий? Ну, вы изучали комбинации? Вам понадобится 6 script -f
команд. Еще больше tty? Скоро...
screen
илиtmux
перед запуском команды, к которой вы, возможно, захотите получить доступ из другого терминала. ,