- Введение в GNU Screen
- Основы Screen
- Установка Screen
- Расширенные функции Screen
- Почему GNU Screen?
- GNU Screen (Русский)
- Contents
- Установка
- Основы
- Стандартные команды
- Запуск в окне 1
- Вложенные сессии screen
- Исправление проблемы с остатками текста
- Используем 256 цветов
- Используем 256 цветов в Rxvt-Unicode (urxvt)
- Информационный статус-бар
- Отключаем приветственное сообщение
- Превращаем строку хард-статуса в динамический заголовок окна urxvt|xterm|aterm
- Используем механизм прокрутки X
- Добавляем пункт в GRUB для загрузки в Screen
- Gnu screen on windows
- GNU Screen
- Introduction to GNU Screen
- Downloading GNU Screen
- Source Code
- Mailing Lists
- Documentation
- Report a Bug
- Записки программиста
- Краткая шпаргалка по использованию GNU screen
Введение в GNU Screen
Оригинал: An introduction to GNU Screen
Автор: Bob Murphy
Дата публикации: 2 марта 2017 года
Перевод: А. Кривошей
Дата перевода: февраль 2018 г.
GNU Screen (или просто Screen) — это полезная и универсальная, но несколько недооцененная утилита, которая, как часть проекта GNU, включена или доступна практически в каждом дистрибутиве Linux или UNIX. Screen — это терминальный мультиплексор, похожий на аналоги, которые можно найти в оконных менеджерах. Эта утилита особенно полезна, если вы работаете в виртуальной машине либо по SSH, либо в терминальной сессии. Две функции, которые я нахожу наиболее полезными, — это возможность открывать несколько окон в сеансе, и возможность отключать и повторно подключать Screen, не теряя текущий сеанс.
Screen запускается просто командой screen.
Основы Screen
Во-первых, немного о том, как управлять Screen. Программа работает с управляющей последовательностью Ctrl + a. Все символы, введенные в сессии screen, отправляются непосредственно в командную оболочку, за исключением Ctrl + a. Символ, введенный после Ctrl + a, определяет последовательность команд для screen. Например, Ctrl + a ? выводит страницу справки с привязками клавиш по умолчанию.
Screen позволяет создавать несколько окон в рамках одного терминала. Ввод Ctrl+a c запускает новое окно в Screen. Оно действует как независимое окно со своей командной оболочкой. Ctrl+a K убьет текущее окно.
Ctrl+a n и Ctrl+a p перемещают на следующий и предыдущий экраны соответственно. Альтернативно, Ctrl+a # переключает между сеансами экрана по очереди в том порядке, в котором они были запущены. Существует также команда, которая отображает список всех текущих окон и позволяет выбирать нужное с помощью клавиш курсора, это Ctrl+a «.
Одной из самых мощных функций Screen является возможность отключения и повторного подключения сеансов. Это может быть полезно, когда у вас нестабильное соединение, или если вы знаете, что будете переходить из одной сети в другую или из одного компьютера в другой. Ctrl+a d отключает сеанс screen. Затем вы можете выйти из сеанса SSH. Если вы хотите продолжить, снова войдите в систему и запустите screen с параметром -r (для возобновления).
Ваш сеанс screen возобновится с того места, где вы остановились, при этом все процессы выполняются, как до вашего выхода. Если ваша сессия была внезапно отключена, вы можете аналогичным образом повторно подключиться с помощью той же команды. Если хост не подтвердил, что ваш сеанс был отключен, вы можете использовать команду screen -r -d для возобновления и отключения, чтобы screen могла отключить сеанс и снова подключиться. Это может быть очень полезным при ненадежном сетевом соединении.
Установка Screen
Screen установлен по умолчанию в некоторых дистрибутивах, таких как SuSE и Slackware. Во всех дистрибутивах Linux, которые я пробовал, я мог установить Screen с помощью стандартного диспетчера пакетов из репозиториев по умолчанию. Например, в Red Hat Enterprise Linux или Fedora я мог использовать для установки yum или dnf, соответственно. В Debian и его производных, таких как Ubuntu, вы можете сделать то же самое с помощью apt-get. Я смог также установить Screen во FreeBSD, используя порты.
Расширенные функции Screen
Сеансы Screen можно разделить. Горизонтальное разделение выполняется с помощью Ctrl+a S. При этом ваше текущее окно будет разделено наполовину горизонтально. Переключение между областями осуществляется с помощью Ctrl+a Tab. Другие команды переключения между окнами также работают на разделенном экране. Разделенное окно можно удалить с помощью Ctrl+a X. В поздних версиях Screen горизонтальное разделение можно создать с помощью Ctrl+a |.
Ведение лога текущих сеансов screen можно запустить с помощью команды Ctrl+a H, которая создаст файл calledscreenlog.X, где X — номер вашего сеанса screen. Скриншот того, что сейчас находится в вашем окне screen, можно сделать с помощью Ctrl+a h, при этом будет создан файл hardcopy.X. Сеанс screen можно заблокировать с помощью команды Ctrl+a x, которая заблокирует экран с использованием пароля текущего пользователя.
Почему GNU Screen?
Меня часто спрашивают, почему я использую Screen вместо чего-то более нового, такого как tmux? Мой ответ прост: GNU Screen прост в использовании и вездесущ. Он уже установлен на серверах, с которыми я работаю, и отлично выполняет свои задачи. Если бы у него были недостатоки, которые мне мешали бы работать, я бы быстро нашел лучший инструмент, но Screen удовлетворяет все мои запросы. Надеюсь, вы найдете GNU Screen таким же полезным, как я, и воспользуетесь этой часто забываемой утилитой.
Подробнее о GNU Screen можно почитать на странице руководства или здесь .
GNU Screen (Русский)
GNU Screen — обертка, которая позволяет отделить консольную программу от терминала. Например, screen позволяется пользователям запустить консольную программу в одном из терминальных эмуляторов под X, закрыть его и продолжить работу с программой в другом терминале. В данной статье приведены различные советы и рекомендации по использованию screen.
Если вы ищете пошаговое руководство, то его можно найти на gentoo wiki: https://wiki.gentoo.org/wiki/Screen
Contents
Установка
GNU Screen можно установить из репозитория extra:
Основы
Команды вводятся после нажатия Ctrl+A. Данная комбинация настраивается опцией escape в
устанавливает 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 tab Переключить фокус ввода на следующий регион
- ctrl+a ctrl+a Переключение между текущим и предыдущим регионами
- ctrl+a Esc Перейти в режим копирования (используйте enter для выделения текста)
- ctrl+a ] Вставка текста
- ctrl+a Q Закрыть все регионы кроме текущего
- ctrl+a X Закрыть текущий регион
- ctrl+a d Отключиться от текущей сессии screen, оставив ее работающей. Для переподключения используйте screen -r
Запуск в окне 1
По умолчанию, первое окно screen имеет номер 0. Возможно, вы предпочтете начать с нумерацию с единицы, добавьте это в
Вложенные сессии screen
It’s possible to get stuck in a nested screen session. A common scenario: you start an ssh session from within a screen session. Within the ssh session, you start screen. By default, the outer screen session that was launched first responds to C-a commands. To send a command to the inner screen session, use C-a a, followed by your command. For example:
Detaches the inner screen session.
Kills the inner screen session.
Исправление проблемы с остатками текста
When you open a text editor like nano in screen and then close it, the text may stay visible in your terminal. To fix this, put the following in your
Используем 256 цветов
By default, screen uses an 8-color terminal emulator. Use the following line to enable more colors, which is useful if you are using a more-capable terminal emulator:
If this fails to render 256 colors in xterm, try the following instead:
Используем 256 цветов в Rxvt-Unicode (urxvt)
If you are using rxvt-unicode-256color from [community] , you may need to add this line in your
/.screenrc to enable 256 colors while in screen.
Информационный статус-бар
The default statusbar may be a little lacking. You may find this one more helpful:
Отключаем приветственное сообщение
Превращаем строку хард-статуса в динамический заголовок окна urxvt|xterm|aterm
This one’s pretty simple; just switch your current hardstatus line into a caption line with notification, and edit accordingly:
This will give you something like «screen (0 bash)» in the title of your terminal emulator. The caption supplies the date, current time, and colorizes your screen window collection.
Используем механизм прокрутки X
The scroll buffer of GNU Screen can be accessed with C-a. However, this is very inconvenient. To use the scroll bar of e.g. xterm or konsole, add the following line to
Добавляем пункт в GRUB для загрузки в Screen
If you mostly use X but occasionally want to run a Screen-as-window-manager session, here’s one way to do it by adding a GRUB entry for Screen on a virtual console (text terminal).
GRUB allows you to designate what runlevel you want so we’ll use runlevel 4 for this purpose. Clone an appropriate GRUB entry and add a ‘4’ to the kernel boot parameters list, like so:
Add some entries to /etc/inittab to indicate what should happen on runlevel 4, substituting your user name for :
The line uses mingetty to automatically login some user to a virtual console on startup. You will need to install the mingetty package [устаревшая ссылка 2020-08-02] (AUR). The inittab line segments are separated by colons. The first part (scr*) is simply an id. The second part is the runlevel: This should only happen on runlevel 4 (which isn’t used in any default setup — 3 is by default for a tty login and 5 is for X). ‘Respawn’ causes init to repeat the command (i.e. autologin) if the user logs out. We’ll need to see that nothing else happens on virtual console 1 when we use runlevel 4, so remove ‘4’ from the the first of the agetty lines:
Once logged in we want to ensure that screen is started. Add the following to the end of your .bash_profile:
This checks for the current runlevel and will launch a screen session immediately after the autologin if the runlevel is 4.
This can also be adapted to run screen on a virtual console next to X, simply checking for the current tty instead of the current runlevel. This check to see if we’re on virtual console 3:
Set inittab/mingetty to automaically log in to vc/3 on runlevel 5 and you’re set.
Gnu screen on windows
GNU Operating System
Supported by the Free Software Foundation
GNU Screen
Introduction to GNU Screen
Screen is a full-screen window manager that multiplexes a physical terminal between several processes, typically interactive shells. Each virtual terminal provides the functions of the DEC VT100 terminal and, in addition, several control functions from the ANSI X3.64 (ISO 6429) and ISO 2022 standards (e.g., insert/delete line and support for multiple character sets). There is a scrollback history buffer for each virtual terminal and a copy-and-paste mechanism that allows the user to move text regions between windows. When screen is called, it creates a single window with a shell in it (or the specified command) and then gets out of your way so that you can use the program as you normally would. Then, at any time, you can create new (full-screen) windows with other programs in them (including more shells), kill the current window, view a list of the active windows, turn output logging on and off, copy text between windows, view the scrollback history, switch between windows, etc. All windows run their programs completely independent of each other. Programs continue to run when their window is currently not visible and even when the whole screen session is detached from the users terminal.
Downloading GNU Screen
GNU Screen can be found on http://ftp.gnu.org/gnu/screen/ [via http] and ftp://ftp.gnu.org/gnu/screen/ [via FTP]. It can also be found on one of our FTP mirrors; please use a mirror if possible.
Source Code
You can get the source code from here.
Mailing Lists
GNU Screen has two mailing lists: and .
The main discussion list is , and is used for discussion and requests for help with using GNU Screen.
There is a separate list used for development discussions: .
Announcements about GNU Screen and most other GNU software are made on .
To subscribe to these or any GNU mailing lists, please send an empty mail with a Subject: header line of just «subscribe» to the relevant -request list. For example, to subscribe yourself to the Screen discussion list, you would send mail to with no body and a Subject: header line of just «subscribe». Or you can use the mailing list web interface.
Documentation
GNU Screen documentation can be found at http://www.gnu.org/software/screen/manual/. For other manuals, please see http://www.gnu.org/manual/.
Report a Bug
If you think you have found a bug in GNU Screen, then please file as complete a report as possible at the GNU Savannah bugtracker.
“The Free Software Foundation (FSF) is a nonprofit with a worldwide mission to promote computer user freedom. We defend the rights of all software users.”
Please send general FSF & GNU inquiries to . There are also other ways to contact the FSF. Broken links and other corrections or suggestions can be sent to .
Please see the Translations README for information on coordinating and submitting translations of this article.
Copyright © 2010 Free Software Foundation, Inc.
Записки программиста
Краткая шпаргалка по использованию GNU screen
Сегодня я хотел бы поделиться небольшой шпаргалкой по screen. Пользуюсь я этой утилитой крайне редко. Поэтому я постоянно забываю, что и как делается. Отсюда и потребность в шпаргалке. Напомню, что screen — это программа, которая позволяет открывать несколько терминалов в одном. Это очень удобно, если вы работаете по SSH или просто без иксов. Также в случае разрыва SSH-соединения screen позволяет возобновить работу там, где вы ее закончили, так как все программы будут продолжать работу в фоне без вас. Последнее часто используется для создания своего рода «демонов для бедных». Есть у screen и другие интересные возможности, например, мониторинг активности терминалов (или ее отсутствия) и ввод диграфов.
Итак, устанавливаем screen:
# В Debian / Ubuntu:
sudo apt-get install screen
# Во FreeBSD:
sudo pkg install screen
Так можно посмотреть список запущенных экземпляров screen:
А так — подключиться к одному из них:
Если в списке только один экземпляр, то можно просто:
startup_message off
hardstatus alwayslastline «%w»
# start windows numering from 1
# via https://wiki.archlinux.org/index.php/GNU_Screen
bind c screen 1
bind ^c screen 1
bind 0 select 10
screen 1
Здесь мы отключаем приветственное сообщение, а также добавляем статусную строку с выводом списка всех окон. Нумерацию окон начинаем с единицы, а не с нуля, как делается по умолчанию.
Интересно, что одним экземпляром screen могут пользоваться сразу несколько человек. Для этого первый должен выполнить:
В частности, используя этот прием, можно программировать в паре.
Скриншот, демонстрирующий некоторые возможности screen (кликабельно, PNG, 1366 x 768, 126 Кб):
Обратите внимание, как красиво во FreeBSD по умолчанию рисуется статусная строка.
Основные хоткеи в screen следующие.
Окна:
Ctr + A, C | Create, создать окно |
Ctr + A, K | Kill, прибить окно |
Ctr + A, W | Windows, показать список окон |
Ctr + A, Space | Переключитьcя на следующее окно |
Ctr + A, N | То же самое |
Ctr + A, Backspace | Переключиться на предыдущее окно |
Ctr + A, P | То же самое |
Ctr + A, Ctr + A | Вернутся на окно, с которого переключились |
Ctr + A, « | Выбрать из списка окно, на которое хотим переключиться |
Ctr + A, 0-9 | Переключиться на окно с таким-то номером |
Ctr + A, ‘ | Ввести номер окна, на которое хотим переключиться |
Ctr + A, Shift + A | Переименовать окно |
Ctr + A, :number 3 | Изменить номер окна |
Ctr + A, I | Info, информация о текущем окне |
Ctr + A, Shift + N | Number, номер и название текущего окна |
Регионы:
Ctr + A, Shift + S | Разделить текущий регион горизонтально |
Ctr + A, | | Разделить текущий регион вертикально |
Ctr + A, :resize +5 | Изменить размер региона вертикально (увеличить на 5) |
Ctr + A, :resize -h 80 | Изменить размер региона горизонтально (установить в 80) |
Ctr + A, Tab | Переключение между регионами |
Ctr + A, Shift + X | Прибить текущий регион |
Ctr + A, Shift + Q | Прибить все регионы кроме текущего |
Мониторинг:
Ctr + A, Shift + M | Включить/выключить мониторинг активности в окне |
Сек + A, _ | Мониторинг неактивности в течение 30 секунд |
Скролинг и копирование текста:
Ctr + A, [ | Перейти в режим copy/scrollback | |||||||||||||||||
Ctr + A, ] | Вставить содержимое paste buffer (регистр . — «точка») | |||||||||||||||||
Ctr + A, > | Записать paste buffer во временный файл (bufferfile) | |||||||||||||||||
Ctr + A, / и ? . Перейти к началу строки можно при помощи ^ , а к концу — при помощи $ . Нажатие Y выделяет всю строчку. Нажатие Shift+W копирует одно слово. В целом, в режим copy/scrollback обычно переходят для того, чтобы выделить кусок текста, выведенный ранее в окне. Начало и конец выделения помечаются нажатием на пробел. Попробуйте один раз и сразу все поймете. Разное:
Детали вы найдете в man screen . Ман подробнейший и вообще классный. А пользуетесь ли вы screen или, быть может, его аналог, tmux? |