2010-03-19 1 views
18

я запускать несколько сеансов экрана каждых созданных с «экраном -S именем», и я хотел бы быть в состоянии отображать в строке состояния имени я использовал для создания текущего сеанса экрана.Как отобразить текущее имя «сеанса» или «sockname» сеанса экрана в строке состояния?

Однако я не могу этого добиться. Есть идеи?

+5

Смотрите это [Супер вопрос пользователя] (HTTP://superuser.com/questions/212392/how-to-include-screens-session-name-in-hardstatus). Также [здесь] (http://old.nabble.com/Re:-Session-name-in-status-line-p22456825.html). –

ответ

13

screen имеет две строки состояния, панель заголовка и панель жесткого диска, в обоих из которых используются escape-последовательности строк, указанные в разделе «STRING ESCAPES», man screen. К сожалению, нет выхода, который напрямую относится к имени сеанса.

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

screen передает имя сеанса оболочке с использованием переменной $STY. Когда оболочка пытается установить заголовок окна (используя one of these methods), screen фиксирует эту попытку и хранит ее в чем-то, что смутно вызывает «окно hardstatus», у которого есть побег, который вы можете использовать: %h.

Так что если у вас есть либо заголовок или hardstatus бар набор для включения %h и есть попытка оболочки, чтобы установить заголовок окна в $STY, то %h будет заменено на имя сеанса, когда отображается панель.

+0

Очень близко ... Отлично подходит для начального сеанса, однако, когда я нахожусь в сеансе экрана, если я не схожу на другой хост, STY больше не будет установлен. В любом случае, чтобы сохранить эту информацию или, возможно, сделать экран, прочитайте значение только один раз в начале сеанса? –

+1

@Neg_EV: Ну, в соответствии с разделом ENVIRONMENT 'man ssh', если sshd удаленного хоста разрешает его (по умолчанию это не так), вы можете установить окружение vars (например,' STY') в локальном '.ssh/(поэтому в вашем локальном '.bashrc', просто' cat STY = $ STY> .ssh/environment'), и когда вы ssh на удаленный компьютер, который установит соответствующие окружения vars. – rampion

+0

@Neg_EV: Если вы не хотите (или не можете) изменять настройки 'sshd' пульта, тогда вы можете указать местное' .bashrc' значение STY для файла, псевдоним ssh для первого scp этого файла на удаленный хост, и у вашего удаленного источника .bashrc этот файл, если STY не установлен (таким образом, тот же .bashrc можно использовать удаленно и локально). – rampion

30

Самый простой способ отображения имя_сеанса является

C-a : 
    sessionname 

(без указания имени после sessionname)

Смотрите раздел «ИЗГОТОВЛЕНИЕ» в man screen

+0

Не могли бы вы это немного разъяснить? Это отдельная команда или параметры? – DBX12

+1

Введите следующие три нажатия клавиш/команд один за другим: 'Ctrl-A', затем': 'then' sessionname' (Ctrl-A следует заменить тем, что вы установили для нажатия клавиши управления экраном, если вы его изменили от значения по умолчанию Ctrl-A.) После этого вы увидите вывод, похожий на: 'Этот сеанс называется '31438.Perlrocks''. –

2

Super User есть ответ на этот вопрос который не требует $STY, вместо этого используется команда конфигурации экрана и screen -ls: https://superuser.com/a/212520

0

Как max_cantor говорит в SuperUser Answer, escape-символ для имени сеанса должен быть добавлен в версию 4.1.0. It looks like функция escape-символа была добавлена ​​с относительно небольшим патчем в 2008 году. Поэтому, если вы чувствуете себя храбрым, вы можете создать копию версии 4.1.0 и попробовать ее.

Я попробую это с версией разработки, когда у меня появится шанс.

4

В текущих версиях screen, есть флаг %S для hardstatus линии.

MWE (.screenrc):

hardstatus on 
hardstatus alwayslastline 
hardstatus string "%S" 

Это отображает имя сеанса без идентификатора (как ${STY#*.}).

(Ответ на другие вопросы here и here для полноты).

0

Если ничего не работает (как для меня), как обходной путь вы можете создать окно с номером 0 и установить право собственности на свое имя экрана:

screen -S myscreen 
C^a :title "myscreen"