Мені потрібно підключитися до виходу поточного запущеного терміналу (tty1) з віртуального терміналу і захопити його (запуск X-сервера).
Мені потрібно підключитися до виходу поточного запущеного терміналу (tty1) з віртуального терміналу і захопити його (запуск X-сервера).
Відповіді:
Я натрапив на цей один інструмент під назвою ttylog
. Це програма Perl, доступна на CPAN тут . У ньому є декілька застережень, одне з яких, я можу лише зрозуміти, як приєднатись до терміналу, який був створений як частина того, хто хтось сшиває в мій ящик. Інша справа, що вам доведеться запускати його з підвищеними привілеями (наприклад, root або sudo).
Але це працює!
Спочатку ssh у свій ящик через термін №1:
TERM#1% ssh saml@grinchy
Зверніть увагу на цей новий термінал:
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 для "поточного" віртуального терміналу.
Як корінь, ви можете просто промацати ці пристрої (наприклад, cat / dev / vcs2) і побачити, що знаходиться у відповідному VT (наприклад, / dev / tty2 на on F2), як зробити знімок. vcsa * відрізняється від vcs * тим, що вони включають інформацію про розміри терміналу (екрана). Зауважте, що це лише необроблений знімок персонажів, як вони відображаються на екрані - зібрані з пам'яті, виділеної терміналу, - тому не сподівайтеся на приємний, легко розбірливий вихід.
Недолік полягає в тому, що якщо інформація промайне надто швидко, це може бути важко зафіксувати. Можливо, хвостик -f / dev / vcs1 спрацює, якщо вам потрібно буде дотримуватися декількох скрийнфулів (не пробував себе)? Можливо, найпростіше спочатку просто перенаправити його на файл. Також може бути хорошою ідеєю використовувати VT (F1-F6) для перегляду, оскільки клеми будуть мати однакові розміри. На мій досвід, найкраще використовувати пристрої vcs * - не vcsa * -.
Якщо це не працює, можливо, один з "великих братських" пакетів, що дозволяє адміністратору стежити за активністю на терміналі, може працювати.
PS: Я забув запитати, яку ОС ви використовуєте. Це для Linux, хоча подібні пристрої, ймовірно, є і на інших ОС. Спробуйте знайти "віртуальну пам'ять консолі" серед підручних сторінок для пристроїв.
wlan0
, у мене фактично виникає ситуація вловлювання 22, яка намагається налагодити те, де цей сценарій не працює. Припустимо, я не можу використовувати концентратор usb ... Чи є спосіб, щоб я якось передати символи в / dev / tty1?
/dev/tty1
як root, але все це - це відображення символів на екрані, а не введення їх
Використовуйте tty
команду в кожному терміналі, щоб ідентифікувати їх:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
Припускаючи ці TTY, щоб перенаправити stdout першого на другий, запустіть це в першому терміналі:
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
кожну, і ви отримаєте id як/dev/pts/nº
Тоді в першому ви вводите, script -f /dev/pts/nºofSecondTerminal
а в другому ви робите навпаки, script -f /dev/pts/nºofFirstTerminal
щоб вони зв'язалися
Вітаю! Обидва термінали виводять і отримують однакові речі. Потрібна третя? Ну, ви вивчали комбінації? Вам знадобиться 6 script -f
команд. Ще більше тти? Так що ...
screen
абоtmux
перед запуском команди, до якої, можливо, ви хочете отримати доступ з іншого терміналу .