LINUX.ORG.RU

Вопрос по GNU Screen

 


0

3

Здравствуйте,
Использую Fedora 23 x86_64, GNU Screen 4.03.01 (из дистрибутива).
Настройки screen все по умолчанию из коробки.
Заметил следущее: даю имена окнам через C-a C-A, в списке выводимом по C-a C-" некоторое время выводятся эти имена,
а затем (например после перехода в данное окно и нажатия в нём Enter) в списке окон вместо данного мной имени
уже сбрасывается на user@host:~
Точно помню что в более ранних Fedora'х такого не было- присвоил имя окну и делай в нём что хочешь- имя в списке окон не менялось...
Такая ерунда началась где-то с Fedora 21... Не знаю, может быть какие-то настройки screen по умолчанию изменились?
Что смотреть, куда копать?
Поиск по Гуглю ничем мне не помог, чтение документации на screen тоже :(
Кто подскажет как вернуть прежнее поведение списка окон, неудобно искать нужное окно когда они все называются одинаково!

Возможно, это связано с shelltitle. Если в значении есть |, то надо убрать этот символ и всё, что идёт после него.

xaizek ★★★★★
()
Ответ на: комментарий от slon

в сторону tmux.

Чем же он лучше? В своё время я пытался на него перепрыгнуть, но из этого ничего не вышло, т.к. я не нашёл ни одного явного преимущества по сравнению со скрином. Говорят, он архитектурно лучше, не течёт, не глючит. Мне, как пользователю, начхать на кишки, а то, что что не течёт, не глючит — у меня и скрин не глючит, не течёт. Почему надо переходить на tmux?

anonymous
()
Ответ на: комментарий от xaizek

shelltitle в конфигах не обнаружен

Но у меня shelltitle нигде в конфиге не установлена. Ни в системном /etc/screenrc (он изкоробочный), ни в пользовательском ~/.screenrc (там вообще одна строчка vbell off). Может быть есть какое-то значение shelltitle по умолчанию? Как посмотреть это значение? Я так понял из мана на screen что команда shelltitle устанавливает «The default name for all shell windows». Читаю для просветления раздел «TITLES (naming windows)», но пока глухо :) Поиграюсь с разными кастомными shelltitle- м.б. поможет... Но раньше-то всё было ОК из коробки и что-то сломали, м.б. какой кривой дефолт в скрин вкомпилили...
P.S. А где по-русски про Fedora'у конструктивно пообщаться можно, здесь предсказуемо всё переходит к холивару screen vs tmux :)

SystemdArtagnan
() автор топика
Ответ на: комментарий от slon

Устаревший аргумент. Вертикальные сплиты есть с версии 4.2.0 (17.04.2014), т.е. два года как.

xaizek ★★★★★
()
Ответ на: shelltitle в конфигах не обнаружен от SystemdArtagnan

Можно просто сделать shelltitle foo и открыть новое окно, посмотреть, будет ли у него заголовок сбрасываться. Ещё можно глянуть в конфигурации оболочки, например, в $PROMPT_COMMAND, т.к. заголовок можно поменять через escape-последовательность, хотя если меняется не только для оболочки, то не оно.

Про Fedora не подскажу, а холиварщиков можно просто игнорировать.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от xaizek

Изменение shelltitile не помогает.
Похоже что заголовок сбрасывается только для оболочки, т.к. есть окно с запущенным htop- там заголовок не меняется.
Кстати, посмотрел $PROMPT_COMMAND, в Fedora 16,18,20 (то что у меня на старых сохранённых для истории виртуалках) и в Fedora 23, они отличаются:
Fedora release 16 (Verne):
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

Fedora release 18 (Spherical Cow):
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

Fedora release 20 (Heisenbug):
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

Fedora release 23 (Twenty Three):
printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"

Т.е. где-то после Fedora 20 поменялся $PROMPT_COMMAND и моя проблема началась примерно где-то после перехода на Fedora 21...

И (для коллекции :) ), Fedora release 9 (Sulphur):
echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007" Я не очень понимаю в этих escape-последовальностях, попробую установить $PROMPT_COMMAND как в Fedora 20 и посмотрю осталась ли проблема.
Но, конечно, интересно разобраться, если поясните в чём разница между
"\033]0;%s@%s:%s\007" и
"\033k%s@%s:%s\033\\" буду благодарен :) Ну или ссылка на хорошую доку по escape-последовальностям тоже приветствуется.

UPD: Установил переменную окружения PROMPT_COMMAND как в Fedora 20- проблема , похоже, решена!
Правда теперь заголовок окна при создании по умолчанию «bash», а не «user@host~» (припоминаю что так и было до Fedora 21).
Но мне важней чтобы названия окон не сбрасывались.
Спасибо за наводку на PROMPT_COMMAND ! :)

SystemdArtagnan
() автор топика
Ответ на: комментарий от SystemdArtagnan

«\033]0;%s@%s:%s\007»

Это xterm-совместимая последовательность, насколько я понимаю. Документация тут (Operating System Controls), случай «Ps = 0».

«\033k%s@%s:%s\033\\»

Это screen-совместимая последовательность. Возможно, конкретные специальные значения можно вытянуть из описания типа терминала, которое находится в terminfo/termcap, но не уверен, что там всё (man terminfo содержит большую таблицу, а вот форматы может и не содержит).

Правда теперь заголовок окна при создании по умолчанию «bash», а не «user@host~» (припоминаю что так и было до Fedora 21).
Но мне важней чтобы названия окон не сбрасывались.

Достаточно добавить в .bashrc что-то вроде:

case $TERM in
    screen*)
        printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"
        ;;
    *) ;;
esac
Таким образом оно установит заголовок единожды при запуске оболочки из под screen.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от xaizek

«\033]0;%s@%s:%s\007»

Это xterm-совместимая последовательность, насколько я понимаю. Документация тут (Operating System Controls), случай «Ps = 0».

«\033k%s@%s:%s\033\\»

Это screen-совместимая последовательность.

Ага, т.е. из-под xterm (у меня putty, но $TERM xterm) и из-под screen ($TERM screen) значения $PROMPT_COMMAND разные, а я, дурак, смотрел их как попало- в Fedora 9,16,18 из $TERM=xterm, а в F23 из $TERM=screen :)
Посмотрел везде из-под screen и заметил что screen-совместимые последовательности там тоже разные
Fedora 18: printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}" Fedora 23: printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"

Достаточно добавить в .bashrc что-то вроде:
case $TERM in screen*) printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}" ;; *) ;; esac

esac

Так не работает (PROMPT_COMMAND в screen не меняется), я добавил в ~/.bashrc:
case $TERM in screen*) export PROMPT_COMMAND='printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' ;; *) ;; Помогает (заголовок окна по-умолчанию «bash») Теперь надо думать в чём разница между:
"\033k%s@%s:%s\033\\" и
"\033]0;%s@%s:%s\033\\" ?
:)

SystemdArtagnan
() автор топика
Ответ на: комментарий от SystemdArtagnan

Так не работает (PROMPT_COMMAND в screen не меняется)

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

Теперь надо думать в чём разница между:

У меня в screen работает только та, что с k.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Я думаю, ТС не просто так Fedora упомянул. Во всех дистрибутивах содержимое файлов /etc/profile и /etc/bashrc разное из-за чего связка bash+screen настраивается не всегда без глюков. Я тоже сталкивался с этим, но до столь глубокого погружения как редактирование xterm-последовательности меня не хватит. Почему никто не додумался объединять shell и screen в одном пакете? Ну или хотя бы архив сделать, приходится работать с разными дистрибутивами, а тут распаковал - и удобная командная строка уже настроена.

sunny1983 ★★★★★
()
Ответ на: комментарий от sunny1983

Во всех дистрибутивах содержимое файлов /etc/profile и /etc/bashrc разное

Это да, и способа сбросить их в локальном конфиге тоже нет.

Почему никто не додумался объединять shell и screen в одном пакете?

В данном случае вроде определяют наличие screen по $TERM и устанавливают $PROMPT_COMMAND, чтобы эмулировать это. Сильно их связывать особо не нужно, кроме заголовков окон точек соприкосновения мало.

xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.