- GNU Screen (Русский)
- Установка
- Использование
- Стандартные команды
- Вводимые команды
- Именованные сеансы
- Настройка Screen
- Советы и рекомендации
- Автозапуск с помощью systemd
- Изменение escape-комбинации
- Запуск в окне 1
- Вложенные сеансы Screen
- Запуск Screen во всех командных оболочках
- Использование 256 цветов
- Информативный статус-бар
- Отключение приветственного сообщения
- Использование hardstatus в качестве динамического заголовка окна терминала
- Использование механизма прокрутки X
- Перемещение работающий программы в Screen
- Использование другой строки приглашения bash внутри screen
- Отключение визуального сигнала
- Избавление от вертикальных и горизонтальных полос
- Решение проблем
- Исправление остатков текста после редактора
- Исправление столбца Name в windowlist, который отображает только «bash»
- Смотрите также
GNU Screen (Русский)
Состояние перевода: На этой странице представлен перевод статьи GNU Screen. Дата последней синхронизации: 15 января 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
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 ~/.screenrc Перезагружает файл настроек screenrc (также можно использовать /etc/screenrc )
Именованные сеансы
Создание сеанса с определённым названием:
$ screen -S название_сеанса
Переименование текущего сеанса:
Ctrl+a :sessionname название_сеанса
Список всех существующих сеансов текущего пользователя:
Подключение к существующему сеансу по его имени:
$ screen -x название_сеанса
$ screen -r название_сеанса
Настройка Screen
Вы можете изменить настройки Screen по умолчанию в соответствии с вашими предпочтениями в файле .screenrc , который содержит команды, которые выполнятся при запуске (например, ~/.screenrc или на лету с помощью ввода команд (например, Ctrl+a :vbell off ).
Советы и рекомендации
Автозапуск с помощью systemd
Эта служба автоматически запускает screen для указанного пользователя (например, systemctl enable screen@florian ). Важно запускать эту службу как системную, так как systemd —user может не запуститься, а также будет завершён после закрытия последнего сеанса пользователя.
/etc/systemd/system/screen@.service
[Unit] Description=screen After=network.target [Service] Type=simple User=%i ExecStart=/usr/bin/screen -DmS autoscreen ExecStop=/usr/bin/screen -S autoscreen -X quit [Install] WantedBy=multi-user.target
Изменение 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. Возможно, вы предпочтете начать с нумерацию с единицы, добавьте это в ~/.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 a и затем свою команду. Например:
- Ctrl+a a d Отсоединяется от внутреннего сеанса screen.
- Ctrl+a a K Завершает (kill) внутренний сеанс screen.
Запуск Screen во всех командных оболочках
Для Bash и Zsh добавьте следующий фрагмент в ваш .bashrc or .zshrc перед псевдонимами:
if [[ -z "$STY" ]]; then screen -xRR название_сеанса fi
Использование 256 цветов
По умолчанию Screen использует эмулятор 8-цветного терминала. Чтобы включить больше цветов, вам нужно использовать терминал, который их поддерживает, и установить правильное значение term. Будет использоваться terminfo для описания того, как будут интерпретироваться управляющие коды ANSI. Запись в структуре базы данных terminfo должна существовать, ncurses предоставляет много описаний в /usr/share/terminfo/ .
Сначала попробуйте общее значение:
Если это не работает, попробуйте установить значение, соответствующее вашему текущему терминалу. Например, при использовании терминала на основе xterm:
Примечание: Файл /usr/share/terminfo/r/rxvt-unicode-256color предоставляется пакетом rxvt-unicode-terminfo , который устанавливается как зависимость пакета rxvt-unicode . Однако, если вы подключаетесь к серверу по SSH и на нём запускаете screen, нужный файл terminfo может не найтись на сервере. В таком случае можно скопировать /usr/share/terminfo/r/rxvt-unicode-256color на сервер в каталог ~/.terminfo/ .
В крайнем случае попробуйте использовать termcapinfo:
attrcolor b ".I" # allow bold colors - necessary for some reason termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' # tell screen how to set colors. AB = background, AF=foreground defbce on # use current bg color for erased chars
Информативный статус-бар
Стандартный статус бар немного пустоват. Вы можете посчитать это полезным:
hardstatus off hardstatus alwayslastline hardstatus string '%[ %%H %][%= %%?%-Lw%?%(%%n*%f%t%?(%u)%?%)%%?%+Lw%?%?%= %][% %m-%d % %c %]'
hardstatus alwayslastline '%[ %%H %][%= %%?%-Lw%?%%n*%f %t%?%(%u)%?%%+Lw%?%= %][ %Load: %l %][%%Y-%m-%d %%c:%s %]'
В Screen версии 5 (master-ветка) escape-коды изменились:
truecolors on hardstatus off backtick 0 5 5 "/bin/date" '+%Y-%m-%d' backtick 1 5 5 "/bin/date" '+%H:%M' hardstatus alwayslastline '%[ %H ][%%= %%?%-Lw%?%%(%%n%f%t%?(%u)%?%%)%%?%+Lw%?%? %=%][ %%%0` %%%1`% ]'
Отключение приветственного сообщения
Использование hardstatus в качестве динамического заголовка окна терминала
Это довольно просто: переделайте текущий hardstatus на caption с уведомлением и отредактируйте соответствующим образом:
backtick 1 5 5 true termcapinfo rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;\007' hardstatus string "screen (%n: %t)" caption string "%%Y-%m-%d;%c %%-Lw%%[%n %t]%%%+Lw%1`" caption always
Это отобразит что-то вроде screen (0 bash) в заголовке окна вашего терминала. Caption содержит дату, текущее время и раскрашивает коллекцию экранных окон.
Использование механизма прокрутки X
Доступ к буферу прокрутки GNU Screen можно получить с помощью Ctrl+a [ . Однако это очень неудобно. Чтобы использовать полосу прокрутки эмулятора терминала (например, в xterm или Konsole), добавьте следующую строку [1]:
termcapinfo xterm*|rxvt*|kterm*|Eterm* ti@:te@
Перемещение работающий программы в Screen
Если вы запустили программу вне Screen, но теперь хотите поместить её внутрь Screen, вы можете использовать reptyr, чтобы переназначить процесс с его текущего TTY на Screen.
Найдите PID нужного процесса (например с помощью ps ax ) и используйте его как аргумент для команды reptyr внутри нужного окна screen:
Использование другой строки приглашения bash внутри screen
if [ -z $STY ] then PS1="ОБЫЧНЫЙ PROMPT" else PS1="PROMPT ДЛЯ SCREEN" fi
Отключение визуального сигнала
По умолчанию при получении ASCII-символа Bell Screen некрасиво мерцает. Можно отключить это и вернуть звуковой сигнал с помощью этой опции:
Избавление от вертикальных и горизонтальных полос
Чтобы скрыть вертикальные полосы:
Чтобы скрыть горизонтальные полосы, установите в caption основной и фоновый цвета в default (d) и выведите пустоту (» «):
Если это не сработает, попробуйте caption string «% » . Для стандартного чёрно-белого caption используйте caption string «%%3n %t» .
Решение проблем
Исправление остатков текста после редактора
После открытия и последующего закрытия текстового редактора внутри screen (например nano) текст может оставаться видимым в терминале. Исправление: