Próbuję screen
ustawić xterm
tytuł. Mam to działające poza screen
, ale screen
zachowuje każdy tytuł, który był na miejscu, kiedy go uruchomiłem. Oto moje .bashrc
:
funkcja bash_prompt_command () { # Ile znaków $ PWD powinno być zachowanych lokalne pwdmaxlen = 25 # Wskaż, że nastąpiło obcięcie reż local trunc_symbol = ".." katalog lokalny = $ {PWD ## * /} pwdmaxlen = $ (((pwdmaxlen <$ {# katalog})? $ {# katalog}: pwdmaxlen)) NEW_PWD = $ {PWD / # $ HOME / \ ~} lokalny pwdoffset = $ (($ {# NEW_PWD} - pwdmaxlen)) if [$ {pwdoffset} -gt „0”] następnie NEW_PWD = $ {NEW_PWD: $ pwdoffset: $ pwdmaxlen} NEW_PWD = $ {trunc_symbol} / $ {NEW_PWD # * /} fi eksportuj NEW_PWD } PROMPT_COMMAND = polecenie bash_prompt_command # Karta kolorów @ http://wiki.archlinux.org/index.php/Color_Bash_Prompt przypadku „$ {TERM}” w „xterm”) TITLEBAR = '\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]' PS1 = "$ {TITLEBAR} \ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \] @ \ e [1; 33m \] \ h \ e [ 1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m ” ;; "ekran") TITLEBAR = '\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]' ESC = „\ [\ ek \ e \\\]” PS1 = "$ {TITLEBAR} \ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ $ {ESC} \ [\ e [0m " ;; *) PS1 = "\ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \] @ \ e [1; 33m \] \ h \ e [1; 32m \ ]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m ” ;; esac
A oto moje .screenrc
:
hardstatus alwayslastline hardstatus string '% {= kg} [% {Y}% H% {g}] [% =% {= kw}%?% - Lw%?% {= b kR} (% {W}% n-% t%? (% u)%?% {= b kR})% {= kw}%?% + Lw%?%?% =% {g}] [% {Y}% l% {g}]% {g} [% {B}% m.% d.% Y% {G}% c% {g}] ” termcapinfo xterm | xterms | xs | rxvt ti @: te @ termcapinfo xterm 'hs: ts = \ E] 2;: fs = \ 007: ds = \ E] 2; screen \ 007' altscreen włączony shelltitle „$ | bash”
Co robię niepoprawnie?
Aktualizacja (19 sierpnia 2010 r.):
Problem polega na tym, że po ustawieniu nie można zaktualizować tytułu terminala z poziomu ekranu alwayslastline
. Więc moim rozwiązaniem było po prostu poddać się i zadowolić z góry ustalonym, użytecznym tytułem dla moich sesji ekranowych. Mój zaktualizowany .bashrc
i .screenrc
można go znaleźć na stronie http://bitbucket.org/jsumners/rcfiles/src .
źródło
hardstatus alwayslastline
tak, jak robię to, abyscreen
uniemożliwićscreen
ustawieniexterm
tytułu. Teraz, jeśli mogę po prostu dowiedzieć się, jak to zrobić jednocześnie.screen
który ustawia tytuł okna, a następnie uruchomi program. A potem po prostu zrezygnuj z dynamicznych tytułów terminalowych podczas używaniascreen
. :(W rzeczywistości istnieje sposób na wysłanie sekwencji ucieczki bezpośrednio do xtermu, przechodząc przez ekran. Nie było łatwo go znaleźć, ale z kodu ekranowego (src / ansi.c) Myślę, że jest tam od 2005 roku. Mam go w Xterm, Gnome Terminal i Kit. Znalazłem notatkę w miętowym źródle wskazującą, że tam nie działa po prostu dlatego, że nie obsługują DCS (chyba że zostało to ostatnio naprawione).
Z dokumentacji ekranu poniżej (pod adresem http://www.gnu.org/software/screen/manual/html_node/Control-Sequences.html )
ANSI DCS (Device Control String) to kod ucieczki, który jest używany do wysyłania bezpośrednio do terminala (myślę, że był to pierwotny cel sprzed wielu lat). Taki ciąg jest zakończony kodem ucieczki ST (String Terminator).
Zawiń ciąg, aby ustawić tytuł okna terminala w bloku DCS..ST, a on przejdzie przez ekran i zaktualizuje poprawnie, nawet przy hardstatus alwayslastline.
DCS = \ 033P, ST = \ 033 \
Przykład - aby zaktualizować tytuł okna z bieżącym katalogiem roboczym, użyj
Lepiej późno niż wcale! Mam nadzieję, że to komuś pomoże.
Na wszelki wypadek mylę się co do zmian źródła ekranu: uruchamiam najnowszą wersję z git-screen-session, która z kolei używa prawie najnowszej wersji z git-screen (z pewnymi zmianami specyficznymi dla sesji screen). Ale komunikaty dziennika są datowane na ekranie z 2005 roku (możesz zobaczyć zmiany dokonane w tym zatwierdzeniu dotyczące obsługi DCS, jeśli sklonujesz ekran git repo i użyjesz polecenia poniżej).
źródło
crb ma rację, ale
a) kod ucieczki, którego używa, nie działa dla mnie. Powinno być
\033k
zamiast\033_
. Patrzscreen (1)
poniżej"TITLES (naming windows)"
. Tak powinno być:b) ten rodzaj ucieczki służy wyłącznie do ustawiania tytułu okna ekranowego. Jedna instancja ekranie może mieć wiele okien, każde z nich ma swoją nazwę, to jest to, co jest wyświetlane w
hardstatus
icaption
zt
sekwencji ucieczki.c) normalne ucieczkowanie bash działa, jeśli ustawisz właściwe terminfo dla xterm w
.screenrc
:(dotyczy to również
works on my machine
szpachli)Aby więc ustawić odpowiedni tytuł zarówno dla okna ekranowego, jak i dla putty / xterm, używam czegoś takiego:
w celach informacyjnych: http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x395.html
źródło
Nie zamierzam odpowiedzieć całkowicie na pytanie, ale pozwól mi zasugerować sposób rozwiązania problemu. Wiele menedżerów okien obsługuje specyfikację EWMH . Istnieje również narzędzie wiersza poleceń,
wmctrl
które może z nimi współdziałać. Za pomocą tego narzędzia można łatwo zmienić tytuł aktywnego okna za pomocą następującego polecenia:Można również zmienić ikonę okna, układ i inne właściwości. Narzędzie prawdopodobnie nie będzie działać dla PuTTY, ponieważ Windows nie obsługuje EWMH, ale większość systemów Linux powinna to zaakceptować.
Dzięki tej metodzie nie ma znaczenia, czy używasz
screen
czy nie.źródło
W ciągu ostatnich 2 tygodni przeszukałem wiele forów i nie znalazłem odpowiedzi na pytanie:
Jak uzyskać wszystkie dane wyjściowe polecenia do tytułu Putty?
Potrzebne, aby inne programy wiedziały, kiedy niektóre zadania na serwerze są wykonywane i czy wykonano je dobrze, czy źle. Plink stdout i stdin nie działały, użyłem wielu poprawek z opóźnieniami oczekiwania i dla niektórych poleceń, które działały dla innych nie. XSEL i XCLIP nie mogły zostać zainstalowane na tym serwerze.
Oto rozwiązanie:
Na kitach i serwerach Suse wygląda to tak:
Mam nadzieję, że ktoś będzie mógł z tego skorzystać. Oczywiście nie będzie działać dla wszystkich typów serwerów i ustawień klienta szpachli, ale pomysł powinien działać dobrze.
źródło