Как остановить скрин в терминале

от admin

GNU Screen (Русский)

GNU Screen — это полноэкранный оконный менеджер для терминала, который мультиплексирует его между несколькими процессами, обычно интерактивными оболочками. Программы, запущенные в Screen, продолжают работать, когда их окно в данный момент скрыто, и даже когда весь сеанс screen отсоединён от пользовательского терминала.

Обзор возможностей можно почитать в документации GNU Screen.

Установка

Использование

Для ввода команд нужно нажать escape-комбинацию (по умолчанию Ctrl+a ) и затем нужное сочетание клавиш.

Некоторым пользователям Ctrl+a кажется неудобным. Можно назначить другое сочетание клавиш, как описано в разделе #Изменение escape-комбинации.

Стандартные команды

  • ctrl+a ? Отображает список команд и их параметры по умолчанию
  • ctrl+a : Ввод команды для screen
  • ctrl+a » Список окон
  • ctrl+a 0 Открыть окно 0
  • ctrl+a A Переименовать текущее окно
  • ctrl+a a Отправить ctrl+a в текущее окно
  • ctrl+a c Создать новое окно
  • ctrl+a S Разделить текущий регион на два по горизонтали
  • Ctrl+a | Разделить текущий регион на два по вертикали
  • ctrl+a tab Переключить фокус ввода на следующий регион
  • ctrl+a ctrl+a Переключение между текущим и предыдущим регионами
  • ctrl+a Esc Перейти в режим копирования (используйте enter для выделения текста)
  • ctrl+a ] Вставка текста
  • ctrl+a Q Закрыть все регионы кроме текущего
  • ctrl+a X Закрыть текущий регион
  • ctrl+a d Отключиться от текущего сеанса screen, оставив его работающим в фоне. Для переподключения используйте screen -r

Вводимые команды

  • Ctrl+a :quit Закрывает все окна и завершает сеанс screen
  • Ctrl+a :source

Именованные сеансы

Создание сеанса с определённым названием:

Переименование текущего сеанса:

Ctrl+a :sessionname название_сеанса

Список всех существующих сеансов текущего пользователя:

Подключение к существующему сеансу по его имени:

Настройка Screen

Вы можете изменить настройки Screen по умолчанию в соответствии с вашими предпочтениями в файле .screenrc , который содержит команды, которые выполнятся при запуске (например,

/.screenrc или на лету с помощью ввода команд (например, Ctrl+a :vbell off ).

Советы и рекомендации

Автозапуск с помощью systemd

Эта служба автоматически запускает screen для указанного пользователя (например, systemctl enable screen@florian ). Важно запускать эту службу как системную, так как systemd —user может не запуститься, а также будет завершён после закрытия последнего сеанса пользователя.

Изменение escape-комбинации

Изменение стандартной escape-комбинации может быть хорошей идеей не только потому, что «a» обычно набирается левым мизинцем, но также и потому, что Ctrl+a часто используется как команда beginning-of-line в GNU Readline и bash-совместимых командных оболочках.

Её можно изменить с помощью опции escape в

/.screenrc или параметра -e для команды screen .

Например, если вы заметите, что редко используете Ctrl+j в своей оболочке или редакторе, вы можете использовать escape ^Jj для изменения escape-последовательности на Ctrl+j . Второй «j» означает, что литерал Ctrl+j может быть отправлен на терминал путём нажатия Ctrl+j j . Для пользователей Dvorak более удобным может быть сочетание клавиш Ctrl+t ( escape ^Tt ).

Более экзотические варианты: escape « , который задаёт клавишу ` , или escape ^^^ , который задаёт Ctrl+^ .

Escape-комбинация также называется «командным символом» («command character») в документации Screen.

Запуск в окне 1

По умолчанию, первое окно screen имеет номер 0. Возможно, вы предпочтете начать с нумерацию с единицы, добавьте это в

Вложенные сеансы Screen

Можно случайно застрять во вложенном сеансе screen. Частый сценарий: вы запускаете сеанс SSH внутри сеанса screen. В сеансе SSH вы запускаете screen. По умолчанию первый сеанс screen будет перехватывать команды Ctrl+a . Чтобы отправить команду второму сеансу screen, используйте Ctrl+a a и затем свою команду. Например:

  • Ctrl+a a d Отсоединяется от внутреннего сеанса screen.
  • Ctrl+a a K Завершает (kill) внутренний сеанс screen.

Запуск Screen во всех командных оболочках

Для Bash и Zsh добавьте следующий фрагмент в ваш .bashrc or .zshrc перед псевдонимами:

Использование 256 цветов

По умолчанию Screen использует эмулятор 8-цветного терминала. Чтобы включить больше цветов, вам нужно использовать терминал, который их поддерживает, и установить правильное значение term. Будет использоваться terminfo для описания того, как будут интерпретироваться управляющие коды ANSI. Запись в структуре базы данных terminfo должна существовать, ncurses предоставляет много описаний в /usr/share/terminfo/ .

Сначала попробуйте общее значение:

Если это не работает, попробуйте установить значение, соответствующее вашему текущему терминалу. Например, при использовании терминала на основе xterm:

В крайнем случае попробуйте использовать termcapinfo:

Информативный статус-бар

Стандартный статус бар немного пустоват. Вы можете посчитать это полезным:

В Screen версии 5 (master-ветка) escape-коды изменились:

Отключение приветственного сообщения

Использование hardstatus в качестве динамического заголовка окна терминала

Это довольно просто: переделайте текущий hardstatus на caption с уведомлением и отредактируйте соответствующим образом:

Это отобразит что-то вроде screen (0 bash) в заголовке окна вашего терминала. Caption содержит дату, текущее время и раскрашивает коллекцию экранных окон.

Использование механизма прокрутки X

Доступ к буферу прокрутки GNU Screen можно получить с помощью Ctrl+a [ . Однако это очень неудобно. Чтобы использовать полосу прокрутки эмулятора терминала (например, в xterm или Konsole), добавьте следующую строку [1]:

Перемещение работающий программы в Screen

Если вы запустили программу вне Screen, но теперь хотите поместить её внутрь Screen, вы можете использовать reptyr, чтобы переназначить процесс с его текущего TTY на Screen.

Найдите PID нужного процесса (например с помощью ps ax ) и используйте его как аргумент для команды reptyr внутри нужного окна screen:

Использование другой строки приглашения bash внутри screen

Добавьте в .bashrc [2]:

Отключение визуального сигнала

По умолчанию при получении ASCII-символа Bell Screen некрасиво мерцает. Можно отключить это и вернуть звуковой сигнал с помощью этой опции:

Избавление от вертикальных и горизонтальных полос

Чтобы скрыть вертикальные полосы:

Чтобы скрыть горизонтальные полосы, установите в caption основной и фоновый цвета в default (d) и выведите пустоту (» «):

Если это не сработает, попробуйте caption string «% <00>» . Для стандартного чёрно-белого caption используйте caption string «%<00>%3n %t» .

Решение проблем

Исправление остатков текста после редактора

После открытия и последующего закрытия текстового редактора внутри screen (например nano) текст может оставаться видимым в терминале. Исправление:

Как пользоваться screen для управления терминалами Linux и отсоединения процессов от терминала

Screen — это программа для «уплотнения» (мультиплекса) физических консолей. Суть в том, что несколько процессов (как правило интерактивных шеллов) могут работать в одном окне консоли. То есть эта программа позволяет пользователю иметь несколько экземпляров терминалов внутри одного терминала этого менеджера окон. Речь идёт не о вкладках, а о перемещении терминалов в фон. Одним из эффектов работы screen является то, что при закрытии окна терминала, процесс продолжает работу.

Приложение screen очень полезно если вы имеете дело с несколькими программами из интерфейса командной строки, а также для отделения программ от оболочки терминала. Она также позволяет вам делиться вашими сессиями с другими пользователями и отсоединять/подсоединять сессии терминала.

Как установить screen

На некоторых системах пакет screen может быть уже установлен. Если у вас его нет, то установите его.

На Debian, Linux Mint, Ubuntu, Kali Linux и их производных:

На RedHat и производных:

На Arch Linux, BlackArch и их производных:

Чтобы установить screen на Solaris:

На самом деле, screen это очень полезная команда в Linux которая может пригодиться при различных обстоятельствах. Давайте начнём знакомство с функциями screen.

Запуск screen в первый раз

Просто наберите screen в приглашении командной строки:

Будет выведена информация о программе — нажмите ENTER, чтобы её скрыть. Затем приглашение командной строки вернётся в точно такое же, как было и ранее.

Справка по параметрам screen

Когда вы вошли в screen, вы можете делать вашу обычную работу как будто бы вы в обычном окружении командной строки. Программа screen расширяет функциольность за счёт своих команд (параметров).

Нажмите Ctrl-A, а затем ? (то есть Shift+/). Затем вы увидите все команды (параметры) screen.

Чтобы выйти из экрана справки, нажмите Пробел или Enter.

Отсоединение процесса от консоли в screen

Одним из преимуществ screen является возможность отсоединить от консоли процесс, который запущен внутри screen. Далее вы можете даже закрыть консоль (или отключиться от SSH) — процесс всё равно продолжит свою работу. Затем вы можете восстановить окно консоли — вы увидите, что программа всё это время работала и её данные не потеряны.

Пример сценария: вы работаете по SSH на вашем сервере. Вам нужно запустить программу, выполнение которой требует много времени. Это может быть скачивание большого патча для системы с помощью wget или любая длительная команда. В качестве примера я возьму обычный ping. Предположим мне нужно проверить качество связи с помощью ping на протяжении двух часов. Если я отключусь от SSH или связь будет потеряна случайно, то тогда процесс выполнения команды в консоли будет остановлен и нужно будет вновь начинать сначала. Чтобы этого избежать, мы можем использовать screen для отсоединения процесса от консоли.

Рассмотрим на примере конкретных команд.

Вначале входим в screen:

Затем я запускаю пинг:

В процессе работы программы, мы можем нажать Ctrl-a и d. Вывод от программы прекратиться, мы увидим примерно следующую информацию:

Повторное подсоединение консоли с запущенным процессом к screen

После отсоединения процесса и закрытия screens, вы можете отключиться от сервера, то есть закрыть SSH сессию и заняться другими делами. Затем вы можете подключиться к SSH снова — причём, возможно даже с другого компьютера. После этого вы можете увидеть прогресс выполнения вашего процесса (пинг, загрузка, что угодно). Чтобы это сделать, нужно восстановить screen. Для этого запустите следующую команду:

И вы увидите, что процесс, который вы здесь оставили, всё ещё запущен.

Когда у вас больше чем одна сессия screen, то вам нужно будет ввести ID (идентификатор) сессии screen. Используйте screen -ls чтобы показать, как много сессий доступно:

Если вы хотите восстановить сессию screen 13786.pts-2.HackWare, тогда наберите следующую команду:

Использование нескольких screen

Когда нужен больше чем один screen для выполнения работы, это возможно? Да, можно одновременно работать с несколькими screen. Вы можете запустить несколько окон screen одновременно — есть два способа сделать это.

Во-первых, вы можете отсоединить первый экран screen для запуска другого screen в реальном терминале.

Во-вторых, вы можете делать вложенные экраны screen.

Переключение между экранами

Когда вы делаете вложенные screen, вы можете переключаться между ними используя команду Ctrl-a и n. В этом случае вы перейдёте к следующему окну screen. Когда вам нужно перейти к предыдущем screen, то просто нажмите Ctrl-a и p.

Для создания нового окна screen нажмите Ctrl-a и c.

Как записать все действий в терминале

Иногда важно сохранить все действия в терминале, которые вы выполнили находясь в консоли, то есть вести журнал (логи) активности в консоли.

Читать:
Как сделать облако в автокаде

Допустим вы администратор Linux, который управляет множеством серверов Linux. С ведением журнала в screen, вам не нужно выписывать каждую команду, которую вы ввели. Для активации функции ведения журнала screen просто нажмите Ctrl-a и H. Пожалуйста, будьте осторожны — используется заглавная H (то есть Shift+h). Использование прописной ‘h’ только создаст скриншот экрана screen в файле с именем hardcopy.

В нижней левой части экрана будет уведомление, которое говорит что-то вроде Creating logfile «screenlog.0» (производится ведение журнала экрана). В своей домашней директории вы найдёте файл screenlog.0.

Эта функция будет добавлять в файл всё, что вы делаете в окне screen. Для закрытия активности по ведению журнала screen, вновь нажмите Ctrl-a и H.

Другой способ активировать функцию ведения журнала: вы можете добавить параметр -L во время запуска screen. Команда будет выглядеть примерно так:

Блокировка screen

Screen также имеет комбинацию клавиш для блокировки окна screen. Вы можете нажать Ctrl-a и x для блокировки screen. Это полезно, если вы хотите быстро заблокировать ваш screen. Пример вывода после блокировки:

Вы можете использовать ваш пароль в Linux чтобы разблокировать его.

Добавление пароля на заблокированный screen

Для дополнительной безопасности, вы можете установить пароль на вашу сессию screen. Пароль будет спрашиваться каждый раз, когда вы хотите подсоединить screen. Этот пароль отличается от пароля в описанным выше механизме блокировки окна Screen.

Чтобы защитить паролем screen, вы можете отредактировать файл «$HOME/.screenrc». Если файл не существует, создайте его. Синтаксис будет примерно таким:

ВАШ_ПАРОЛЬ нужно указать в виде хеша, а не в виде обычного текста. Если там указано none, то пароль не будет спрашиваться. Если не указать пароль, то screen покажет приглашение для ввода пароля и его подтверждения и поместит хеш в буфер обмена.

Чтобы сгенерировать хеш, нужно выполнить следующую последовательность действий:

  • запустить сессию screen:
  • нажать Ctrl+a
  • там ввести:
  • появится приглашение ввести пароль и его подтвердить.
  • затем нажать Ctrl+a и ] — пароль будет скопирован на экран.

После того, как вы установите пароль password и нажмёте Ctrl-a и x, то у вас программа будет спрашивать пароль два раза: первым будет пароль пользователя, а затем пароль от screen . При подсоединении задач пароль будет спрашиваться только от screen.

Как выйти из Screen

Есть два способа покинуть screen. Первый это использовать Ctrl-a и d для отсоединения экрана. Второй — мы можем использовать команду exit для закрытия сессии screen. Вы также можете использовать Ctrl-a и K для остановки screen.

Как запустить скрипт, процесс которого отделён от терминала

С помощью screen также возможно запуск файла скрипта, который изначально будет отделён от терминала, например:

Это запустит отделённый (независящий) от терминала процесс. Можно отделить любую команду или процесс с помощью программы screen.

Как просмотреть предыдущие результаты (вывод)

Если вывод программы очень большой, то у вас могут возникнуть затруднения при скроллинге вверх.

Вы можете нажать Ctrl-a и Esc для входа в Copy mode (режим копирования). Когда вы окажитесь в режиме копирвоания, вы можете использовать для пролистывания экранов кнопки PageUp и PageDown.

Для выхода из Copy Mode, нажмите ещё раз Esc.

Как разделить экран на несколько вкладок в screen

В screen вы можете разделить окно на несколько виртуальных терминалов, которые будут одновременно присутствовать на экране. Для этого нажмите Ctrl-a и S.

Именные окна screen

Вы можете использовать несколько именных окон screen. Для этого запустите сессию screen с опцией -S, после которой укажите желаемое имя, например:

эта команда создаст screen с именем testing.

покажет текущие сессии screen с их именами:

Чтобы подключиться к именной сессии screen используйте опцию -x с именем сессии:

в результате предыдущей команды, вы подключитесь к testing screen.

Альтернатива для screen

Если вы ищите альтернативу для screen, то присмотритесь к tmux.

Это азы использования screen которые вам пригодятся практически при каждом её использовании. У программы ещё множество функций, с которыми вы можете ознакомится в её справке или на странице man.

How to stop a screen process in linux?

I am running a script on a remote server. I ran the script in screen , however I need to stop it before it completes since I need to update the script. I can easily detach from screen , however, is there a way to kill a screen process?

5 Answers 5

CTRL+a and then ‘k’ will kill a screen session.

/ Enter" �� There’s no place like cd

There are a couple of ‘screen’ ways to kill a specific screen session from the command line (non-interactively).

1) send a ‘quit’ command:

2) send a Ctrl-C to a screen session running a script:

In both cases, you would need to use ‘screen -ls’ to find the session name of the screen session you want to kill . if there is only one screen session running, you won’t need to specify the -S «sessionname» parameter.

I used this to quit hundreds of erroneous screen sessions created by a buggy command:

for s in $(screen -ls|grep -o -P «1\d+.tty»); do screen -X -S $s quit; done;

where: the grep -o -P «1\d+.tty» is the command to get session names with Perl-like name regex «1\d+.tty» which captures all sessions start with number 1 , has some other numbers ( \d ) and end with .tty

Warning: You should test with this command first to see you get the exact list of sessions you want before apply the above command. This is to avoid quitting unwanted sessions:

for s in $(screen -ls|grep -o -P «1\d+.tty»); do echo $s; done;

I always to this echo test whenever the list in for loop is not clear, for example, the one generated by sub-command in $() expansion.

Как остановить скрин в терминале

Screen — это полноэкранная программа, работающая в текстовом режиме, которая позволяет в одной консоли (или ssh-сессии) иметь несколько виртуальных экранов с независимо выполняющимися в них программами. Т.е. программа screen позволяет открыть несколько терминальных сеансов в одном окне терминала. Программа screen может быть очень полезной в том случае, если, например, вы работаете с несколькими программам в интерфейсе командной строки и вам необходимо чтобы они выполнялись одновременно, в независимых сессиях и требуется возможность переключения между ними. Также, программа screen дает возможность передать одну сессию другому пользователю.

Во многих дистрибутивах команда screen установлена по-умолчанию, однако, если в вашей системе это не так, вы можете установить её вручную достаточно просто (т.к. она есть в стандартных репозиториях большинства дистрибутивов).

Для rpm-based дистрибутивов (RedHat, CentOS, Fedora, итп) выполните:

Для deb-based дистрибутивов (Debian, Ubuntu, итп) выполните:

# apt-get install screen (On Debian based Systems)

Запуск screen в первый раз

Для запуска команды screen просто выполните:

Вывод информации о клавиатурных сокращениях

После запуска команды screen вы можете работать совершенно обычным образом в интерфейсе командной строки. Но, поскольку команда screen сама является программой, у неё есть свои команды и параметры.

Нажмите «Ctrl+A» и, затем, «?» (без кавычек). На экран будут выведены клавиатурные сокращения:

Многозадачность в терминале - команда screen

Для выхода нажмите «пробел» или «Enter»

Отключение экрана screen

Важнейшим преимуществом команды screen является функция отсоединения экрана с последующей возможностью подключения (при этом выполнение программ не прерывается).

Например, это может понадобится в том случае, если вы работаете по ssh на удаленной машине, и вам необходимо скачать объемный файл с помощью команды wget, на что потребуется, например, 2 часа. В том случае, если вы закроете ssh-сессию по собственному желанию или случайно по причине разрыва соединения процесс загрузки также прервется. Соответственно, вам придется вручную запускать загрузку заново. Избежать такой проблемы как раз поможет команда screen.

В первую очередь, запустите команду screen:

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

Во время процесса загрузки нажмите комбинацию клавиш «Ctrl+A» и затем «d» (также можно «Ctrl+D»). При нажатии этих клавиш на экран ничего выведено не будет, только после того, как будет выполнено отключение экрана вы увидите подобное:

[detached from 7724.pts-0.howtoitru]
[istupak@howtoitru

Подключение отключенного экрана screen.

После того, как вы отключили экран screen вы закрыть сессию ssh. Подключившись позднее, например, удаленно из другого места вы можете подключить экран опять и проверить, была ли завершена загрузка. Для этого выполните команду:

Вы увидите, что процесс, который вы запустили все еще работает.

В том случае, если вы запустили и оставили отключенными более чем одну сессию screen вам будет необходимо указать ID этой сессии. Для того, чтобы посмотреть, сколько сессий было запущено выполните:

Вывод будет примерно таким:

There are screens on:
7938.pts-0.howtoitru (Detached)
7724.pts-0.howtoitru (Detached)
2 Sockets in /var/run/screen/S-howtoitru

Если вы хотите восстановить сессию 7724.pts-0.howtoitru выполните:

Использование нескольких сессий screen

Как уже стало понятно, вы можете работать с несколькими сессиями screen для выполнения множества задач одновременно. Переключение между экранами можно выполнить двумя способами:

  • отключение экрана и подключение к другому (как описано выше)
  • переключение между «вложенными» экранами, не завершая команду screen

Для второго способа необходимо запустить команду screen и нажать «Ctrl-A» и «c» для создания следующего вложенного экрана. Переключение между экранами производится командами «Ctrl-A» и «n»(следующий экран) и «Ctrl-A» и «p»(предыдущий экран).

Запись (логирование) выполняемых команд.

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

Для запуска функции логирования нажмите «Ctrl-A» и «H» (обратите внимание на регистр символа «H», т.к. если вы выполните команду «h» будет создан скриншот экрана вместо записи действий). Все ваши действия и выводы на экран будут записаны в файл screenlog.0 в вашей домашней директории.

Для прекращения записи опять выполните «Ctrl-A» и «H».

Также можно активировать запись запусти команду с параметром -L:

Блокировка экрана

Существует возможность блокировки экрана с помощью сочетания клавиш «Ctrl-A» и «x». При блокировке на экран будет выведено:

Screen used by howtoitru <howtoitru> onhowtoitru.
Password:

Завершение сессии screen

Для завершения сессии (полного, а не отключения, выполняемого командой «Ctrl+A» и «d») выполните обычную команду выхода:

Также можно использовать сочетание клавиш «Ctrl+A» и «k» для завершения сесии.

Похожие статьи