Назад | Перейти на главную страницу

Скрытые возможности `screen`

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

я люблю используя его для подключения к последовательным консолям, т.е.

screen /dev/ttyS0 19200

Эта команда просто открывает соединение с последовательным портом 0 (ttyS0) со скоростью передачи 19200 бод.

Лучшая особенность screen - это Byobu (ранее - профили экрана), который по умолчанию поставляется с Ubuntu, начиная с Jaunty: https://launchpad.net/byobu

Это менеджер конфигурации с очень хорошими настройками по умолчанию, множеством уведомлений о состоянии и полезными сочетаниями клавиш (например, f2 для нового экрана, f3-f4 для предыдущего / следующего и т. Д.)

Я уж без него уже никуда не пойду :)

Из ответа KTamas: Несколько человек могут использовать один и тот же экран, т.е. если ваш друг ssh в ваш компьютер, затем он сможет подключиться к вашему экрану. Здорово, когда два-три человека работают над одними и теми же проектами.

Не совсем «скрытая функция»; но правильно настроенный файл .screenrc может иметь огромное значение. Один из лучших примеров можно найти, выполнив поиск в Google screenrc и "brad sims" - у него есть отличный файл, с которым можно поработать.

Тем не менее, моя любимая настройка - bindkey:

# bind F7  to detach screen session from this terminal
# bind F8  to kill current screen window.
# bind F9  to create a new screen
# bind F10 to rename current screen window
# bind F11 to move to previous window
# bind F12 to move to next window
bindkey -k k7 detach
bindkey -k k8 kill
bindkey -k k9 screen
bindkey -k k; title
bindkey -k F1 prev
bindkey -k F2 next

Я не могу вспомнить, у кого я это украл (кто-то на dotfile.org). Я немного изменил его для ssh:

#!/bin/sh
# scr - Runs a command in a fresh screen
#
# Get the current directory and the name of command

wd=`pwd`
cmd=$1
shift

# We can tell if we are running inside screen by looking
# for the STY environment variable.  If it is not set we
# only need to run the command, but if it is set then
# we need to use screen.

if [ -z "$STY" ]; then
        $cmd $*
else
        # Screen needs to change directory so that
        # relative file names are resolved correctly.
        screen -X chdir $wd

        # Ask screen to run the command
        if [ $cmd == "ssh" ]; then
                screen -X screen -t ""${1##*@}"" $cmd $*
        else
                screen -X screen -t "$cmd $*" $cmd $*
        fi
fi

Затем я установил следующие псевдонимы bash:

vim() {
        scr vim $*
}

man() {
        scr man $*
}

info() {
        scr info $*
}

watch() {
        scr watch $*
}

ssh() {
        scr ssh $*
}

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

Приветствую z0mbix

Я считаю полезным то, что экран может имитировать большую ширину, чем ваш терминал. Я считаю это полезным, если использую less в настоящие файлы журнала, и я не хочу, чтобы строки переносились. С помощью:

Ctrl-A:width -w 999

Я могу установить screenдолжен быть шире, чем мой терминал, и строки журнала в less не оборачивается.

Возможность изменить контрольную клавишу с -et при запуске экрана. Я использую его, чтобы вкладывать сеансы экрана друг в друга. Пример: «screen -e ^ w ^ x» превращает управляющую клавишу ctr-w.

Одна приятная особенность: вы можете использовать backtick для вывода дополнительной информации для отображения в подписи. Например, у меня есть сценарий, который выводит однострочную сводку количества новых писем в различных папках, и у меня это появляется в нижней строке, если мой сеанс экрана вместе с именем хоста с конфигурацией выглядит следующим образом:

backtick 1 15 15 /home/waltermundt/bin/newmail

caption always
caption string "%{.kW}%1` example.com %{.bW}%-w%{.rW}%n %t%{-}%+w %{.gW}%h%{-}"

Ключ - это бит% 1`, который относится к выходу задания обратной апострофы 1.

(Я использую hardstatus в качестве строки заголовка xterm и установить по-другому, таким образом, использование caption вместо того hardstatus alwayslastline.)

Не «скрытая» функция, но возможность поделиться сеансом экрана с другим активным пользователем очень полезна.

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

  1. Войдите в систему, о которой идет речь, в новом окне.
  2. Разрешить кому угодно писать на мой терминал: chmod 777 $(tty)
  3. Sudo в свой аккаунт: sudo su <username>
  4. Поделитесь своим экраном: screen -x <session>

Это не требует предварительной настройки или совместного использования пароля.

Маленькая шпаргалка, которую я распечатал для себя;

(Примечание: всему предшествует Ctrl-A)

A: rename a window   
": show a list of windows   
d: detatch session

И screen -D -R для отключения и повторного подключения текущего сеанса (на случай, если вы каким-то образом потеряете доступ к сеансу).

На самом деле ни одна из этих функций не является скрытой, но это те функции, которые я считаю наиболее полезными.

Это основная функция, но, конечно, самое лучшее Ctrl-A: разговаривать прямо с экраном. : screen -t title ssh hostname и т.п.