Как сделать так, чтобы терминал отображался на втором экране в настройке с двумя мониторами?

25

Я учу использовать установку с двумя мониторами, поэтому то, что я вижу на своем рабочем столе, отличается от того, что видит моя аудитория. Это хорошо работает для презентаций: пока студенты видят слайды, я вижу свои заметки.

Но я хочу использовать терминал для запуска оболочки. Однако терминал должен быть на моем рабочем столе ИЛИ на внешнем экране.

Есть ли способ показать содержимое терминала на обоих экранах одновременно? Я не хочу отражать экраны, но придерживаюсь режима двух мониторов.

Есть намеки?

Я использую Ubuntu с Gnome.

Jander
источник
Ну, вы можете отразить свой рабочий стол и показать эмулятор терминала, это один из способов, если вы просто хотите показать терминал любым способом, пока он работает. Вы говорите конкретно о TTY? Тогда два уже существующих ответа для screen и tmux могут работать. Реально зависит от ваших потребностей
Сергей Колодяжный
Не дубликат, потому что этот вопрос конкретно о терминалах, что означает, что есть другие доступные опции (например, screen, tmux), но этот вопрос очень тесно связан, и ответ там должен работать и для этой проблемы.
psmears
@ Сергей Колодяжный: Я не хочу отражать рабочий стол, потому что он портится с презентацией. Когда я переключаюсь обратно на отдельные экраны, слайды больше не соответствуют экрану; иногда слайды попадают на мой рабочий стол. у меня нормально работает tmux
Jander

Ответы:

15

Портативное решение

Используйте script! Например:

Персональный терминал:

> script -f /tmp/lecture1.scrpt #use -F instead on MacOS
> ... #start doing things here!

Презентационный терминал:

> #after this, terminal will continuously print whatever's written to personal terminal
> tail -F /tmp/lecture1.scrpt

Как это работает

Команда scriptкопирует все, что написано на экране терминала (включая то, что вы вводите!) В файл, который он принимает в качестве параметра. Обычно все записывается в файл после того, как вы завершили скрипт (набрав exit). Однако, -fопция заставляет scriptочищать свой буфер после каждой записи (в MacOS это будет -Fили -t 0). Затем в терминале презентации вы можете использовать tail -Fдля непрерывного просмотра содержимого в том виде, как оно написано.


Что стоит отметить

  • Поскольку один терминал выполняет запись в файл, а другой - чтение, это может быть сделано разными пользователями! Это означает, что вы можете иметь кого-то ssh с очень ограниченными правами доступа, и пока вы размещаете файл сценария в месте, которое он может прочитать, вы все равно сможете представить его. (то есть: если у вас есть сервер, к которому у ваших учеников есть доступ, вы можете создать файл .scrpt, который будет доступен только для чтения, чтобы они могли следить за ним на своих экранах)

  • Учитывая характер этого метода, один терминал управляет, а другой только наблюдает.

  • Этот метод также имеет дополнительный бонус, позволяющий вам легко прекратить зеркалирование, выполнить некоторую секретную работу и снова начать зеркалирование, не выходя из личного терминала. Это можно сделать с помощью следующего:

Персональный терминал:

> exit #end script session; stop writing to /tmp/lecture1.scrpt
> ... #do secret things not safe for student eyes!
> script -f -a /tmp/lecture1.scrpt #begin writing again with -a to append

Больше веселья с script!

Цель script- записать сеанс терминала, чтобы он мог быть воспроизведен позже (у нас просто есть особый случай воспроизведения во время записи). Чтобы помочь с этим, scriptесть -tвозможность записывать время вместе с тем, что написано на экране. Чтобы использовать его, начните сеанс скрипта с:

> script -f -t 2>/tmp/lecture1.timing /tmp/lecture1.scrpt

И воспроизведите его (со временем!) С помощью:

> scriptreplay -t /tmp/lecture1.timing -s /tmp/lecture1.scrpt

Есть ли студент, который написал вам, что он будет болен и не сможет читать лекции? Или просто хотите дать своим студентам больше лекционного материала? Если вы записываете свой голос во время лекции (и запускаете сценарий примерно в то же время, что и запись), тогда ваши студенты могут воспроизвести вашу терминальную сессию своим голосом и получить полный опыт лекции!

Есть студент, который любит играть все свои видео в 2х скоростях? scriptreplayпринимает "делитель", который умножает скорость воспроизведения на! Просто перейдите -d 2к игре с 2-кратной скоростью (обратите внимание, что это двойное значение, так что вы могли бы сделать даже -d .5половину скорости!).

scohe001
источник
Вау, интересно! Удивительно то, что это, кажется, обрабатывает просмотр истории, удаления, цвета ... безупречно. Не думал бы, что это возможно с tail. (Я думаю tmux, что на практике все еще лучше, потому что у него также нет проблем, например, с сессией редактора.)
leftaroundabout
Действительно интересный подход! Насколько я могу судить, он может обрабатывать изменения размера окна, tmuxа screenможет и не может.
январь
@leftaroundabout магия здесь на самом деле просто, как мало tailна самом деле делает. Если вы посмотрите на файл сценария с чем-то вроде этого vimили lessувидите, что он добавляет ужасные экранированные символы, поскольку он пытается управлять прокруткой экрана и размещением символов.
scohe001
@ leftaroundabout под "сессией редактора" ты имеешь в виду что-то вроде vim? Насколько я могу судить, похоже, это работает нормально (до тех пор, пока презентационный терминал больше, чем персональный терминал)
scohe001
35

Один элегантный способ заключается в использовании tmuxдля выполнения этой задачи: sudo apt install tmux. Вот пример:

  • Создайте сеанс с именем my_session(удалить, -dчтобы прикрепить во время создания):

    tmux new-session -d -s my_session
    
  • Откройте одно или несколько новых окон терминала и присоедините к тому же сеансу:

    tmux attach -t my_session
    
  • Чтобы отсоединиться от сеанса, введите:

    tmux detach
    

    Или нажмите Ctrl+b , затем отпустите Ctrlи нажмите d.

  • Чтобы отправить команду сеансу, не подключаясь к нему:

    отправка ключей tmux -t my_session "echo Hello World!" ВОЙТИ  Enter
  • Обратите внимание, что exitкоманда, выполненная изнутри, закроет сеанс.

pa4080
источник
27

Не могу придумать способ напрямую достичь того, чего ты хочешь - возможно, другие могут. Но я могу придумать обходной путь.

Установить screenс sudo apt install screen. Запустите два терминала. В первом из них введите screenи нажмите ввод на появившемся экране. Во втором введите screen -x.

Они будут эффективно показывать один и тот же контент. Это не то же самое окно терминала, но это будет тот же контент.

Экран может делать больше трюков, таких как несколько окон, между которыми вы можете переключаться. Это краткое руководство по доступным функциям.

vidarlo
источник
Извините, я не могу выбрать два правильных ответа ...
Январь
1
Это совершенно нормально :) Я сам проголосовал за другой ответ :)
vidarlo
4

Помимо ответа pa4080 выше, чтобы использовать tmux, я хотел бы предложить расширенную версию:

Дайте tmate попробовать. Он также доступен в виде пакета Ubuntu. Хотя его можно использовать в качестве замены tmux, он может сделать больше: я могу реплицировать ваш сеанс терминала, используя общедоступный сервер tmate, доступный через ssh или http (только для чтения или полный общий доступ). Таким образом, ваши учащиеся могут использовать либо проекцию вашего проектора, либо иметь возможность просмотра сеанса терминала только для чтения прямо в браузере на своем ПК / планшете и т. Д.

прецизионный самописец
источник
tmateвыглядит интересно. Вот простая демонстрация: youtube.com/watch?v=is_VpIx3Z4M
pa4080