GNU Screen (Русский)
GNU Screen — это полноэкранный оконный менеджер для терминала, который мультиплексирует его между несколькими процессами, обычно интерактивными оболочками. Программы, запущенные в Screen, продолжают работать, когда их окно в данный момент скрыто, и даже когда весь сеанс screen отсоединён от пользовательского терминала.
Обзор возможностей можно почитать в документации GNU Screen.
Установка
Установите пакет screen.
Использование
Для ввода команд нужно нажать escape-комбинацию (по умолчанию Ctrl+a
) и затем нужное сочетание клавиш.
Некоторым пользователям Ctrl+a
кажется неудобным. Можно назначить другое сочетание клавиш, как описано в разделе #Изменение escape-комбинации.
Стандартные команды
ctrl+a
?
Отображает список команд и их параметры по умолчаниюctrl+a
:
Ввод команды для screenctrl+a
Список оконctrl+a
Открыть окно 0ctrl+a
Переименовать текущее окноctrl+a
Отправитьctrl+a
в текущее окноctrl+a
c
Создать новое окноctrl+a
S
Разделить текущий регион на два по горизонталиCtrl+a
Разделить текущий регион на два по вертикалиctrl+a
Переключить фокус ввода на следующий регионctrl+a
ctrl+a
Переключение между текущим и предыдущим регионамиctrl+a
Перейти в режим копирования (используйте enter для выделения текста)ctrl+a
Вставка текстаctrl+a
Закрыть все регионы кроме текущегоctrl+a
Закрыть текущий регионctrl+a
Отключиться от текущего сеанса screen, оставив его работающим в фоне. Для переподключения используйте
Вводимые команды
Ctrl+a
Закрывает все окна и завершает сеанс screenCtrl+a
:source ~/.screenrc
Перезагружает файл настроек screenrc (также можно использовать )
Именованные сеансы
Создание сеанса с определённым названием:
$ screen -S название_сеанса
Переименование текущего сеанса:
Ctrl+a
Список всех существующих сеансов текущего пользователя:
$ screen -list
Подключение к существующему сеансу по его имени:
$ screen -x название_сеанса
или
$ screen -r название_сеанса
Настройка Screen
Вы можете изменить настройки Screen по умолчанию в соответствии с вашими предпочтениями в файле , который содержит команды, которые выполнятся при запуске (например, ~/.screenrc
или на лету с помощью ввода команд (например, Ctrl+a
).
Советы и рекомендации
Автозапуск с помощью systemd
Эта служба автоматически запускает screen для указанного пользователя (например, ). Важно запускать эту службу как системную, так как systemd --user может не запуститься, а также будет завершён после закрытия последнего сеанса пользователя.
Изменение escape-комбинации
Изменение стандартной escape-комбинации может быть хорошей идеей не только потому, что «a» обычно набирается левым мизинцем, но также и потому, что Ctrl+a
часто используется как команда в GNU Readline и bash-совместимых командных оболочках.
Её можно изменить с помощью опции в ~/.screenrc
или параметра для команды screen
.
Например, если вы заметите, что редко используете в своей оболочке или редакторе, вы можете использовать для изменения escape-последовательности на . Второй "j" означает, что литерал может быть отправлен на терминал путём нажатия . Для пользователей Dvorak более удобным может быть сочетание клавиш (escape ^Tt
).
Более экзотические варианты: , который задаёт клавишу , или , который задаёт .
Escape-комбинация также называется "командным символом" ("command character") в документации Screen.
Запуск в окне 1
По умолчанию, первое окно screen имеет номер 0. Возможно, вы предпочтете начать с нумерацию с единицы, добавьте это в ~/.screenrc:
~/.screenrc
bind c screen 1 bind ^c screen 1 bind 0 select 10 screen 1
Вложенные сеансы Screen
Можно случайно застрять во вложенном сеансе screen. Частый сценарий: вы запускаете сеанс SSH внутри сеанса screen. В сеансе SSH вы запускаете screen. По умолчанию первый сеанс screen будет перехватывать команды Ctrl+a
. Чтобы отправить команду второму сеансу screen, используйте Ctrl+a
и затем свою команду. Например:
Ctrl+a
Отсоединяется от внутреннего сеанса screen.Ctrl+a
Завершает (kill) внутренний сеанс screen.
Запуск Screen во всех командных оболочках
Для Bash и Zsh добавьте следующий фрагмент в ваш or перед псевдонимами:
Использование 256 цветов
По умолчанию Screen использует эмулятор 8-цветного терминала. Чтобы включить больше цветов, вам нужно использовать терминал, который их поддерживает, и установить правильное значение term. Будет использоваться terminfo для описания того, как будут интерпретироваться управляющие коды ANSI. Запись в структуре базы данных terminfo должна существовать, ncurses предоставляет много описаний в .
Сначала попробуйте общее значение:
Если это не работает, попробуйте установить значение, соответствующее вашему текущему терминалу. Например, при использовании терминала на основе xterm:
Для rxvt-unicode:
/usr/share/terminfo/r/rxvt-unicode-256color
предоставляется пакетом rxvt-unicode-terminfo, который устанавливается как зависимость пакета rxvt-unicode. Однако, если вы подключаетесь к серверу по SSH и на нём запускаете screen, нужный файл terminfo может не найтись на сервере. В таком случае можно скопировать /usr/share/terminfo/r/rxvt-unicode-256color
на сервер в каталог ~/.terminfo/
.В крайнем случае попробуйте использовать termcapinfo:
Информативный статус-бар
Стандартный статус бар немного пустоват. Вы можете посчитать это полезным:
Ещё вариант из frodfrog's blog:
В Screen версии 5 (master-ветка) escape-коды изменились:
Статус-бар наверху:
Использование hardstatus в качестве динамического заголовка окна терминала
Это довольно просто: переделайте текущий hardstatus
на с уведомлением и отредактируйте соответствующим образом:
Это отобразит что-то вроде в заголовке окна вашего терминала. Caption содержит дату, текущее время и раскрашивает коллекцию экранных окон.
Использование механизма прокрутки X
Доступ к буферу прокрутки GNU Screen можно получить с помощью Ctrl+a
[
. Однако это очень неудобно. Чтобы использовать полосу прокрутки эмулятора терминала (например, в xterm или Konsole), добавьте следующую строку :
Перемещение работающий программы в Screen
Если вы запустили программу вне Screen, но теперь хотите поместить её внутрь Screen, вы можете использовать reptyr, чтобы переназначить процесс с его текущего TTY на Screen.
Установите пакет .
Найдите PID нужного процесса (например с помощью ) и используйте его как аргумент для команды reptyr внутри нужного окна screen:
$ reptyr pid
Отключение визуального сигнала
По умолчанию при получении ASCII-символа Bell Screen некрасиво мерцает. Можно отключить это и вернуть звуковой сигнал с помощью этой опции:
Избавление от вертикальных и горизонтальных полос
Чтобы скрыть вертикальные полосы:
Чтобы скрыть горизонтальные полосы, установите в основной и фоновый цвета в default (d) и выведите пустоту (" "):
Если это не сработает, попробуйте . Для стандартного чёрно-белого caption используйте caption string "%{00}%3n %t"
.
Решение проблем
Исправление остатков текста после редактора
После открытия и последующего закрытия текстового редактора внутри screen (например nano) текст может оставаться видимым в терминале. Исправление:
Исправление столбца Name в windowlist, который отображает только "bash"
Добавьте в ~/.screenrc
:
Смотрите также
- Wikipedia:GNU Screen
- GNU Screen User's Manual
- Gentoo:Screen
- Arch Forums - коллекция настроек .screenrc со скриншотами
- Arch Forums - Про проблему с 256 цветами в urxvt
- MacOSX Hints - Automatically using screen in your shell