Zachowanie kolorów zachęty podczas uruchamiania sesji ekranowej

11

Kiedy ssh w polu Ubuntu Lucid, monit jest ładny, z kolorami. O ile mi wiadomo, wszystko jest domyślne. Oto mój zewnętrzny ekran $ PS1:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@dev\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$

Przed połączeniem z ekranem

Ale potem, kiedy uruchamiam ekran, kolory znikają. Wszystko inne jest w porządku, a mój ekran może obsługiwać kolory (zauważ, że .i ..na tym ls -alsą niebieskie), ale monit nie jest. Teoretycznie wszystko powinno być dokładnie takie samo. Ekran wewnętrzny PS1 $:

${debian_chroot:+($debian_chroot)}\u@dev:\w\$

po kontroli

EDYCJA: To tylko zwykły ekran waniliowy.

chmullig
źródło
Czy to zwykły ekran waniliowy, czy masz zainstalowany byobu? (Chociaż to nie ma znaczenia.)
belacqua
2
Czy echo $PS1drukuje to samo na ekranie wewnętrznym i zewnętrznym?
Mikel
$ PS1 jest rzeczywiście inny. Edytowane pytanie, aby to uwzględnić.
chmullig

Odpowiedzi:

16

Możesz edytować następujący wiersz w swoim .bashrc (jest to nr 39 w moim .bashrc):

#force_color_prompt=yes

Zmień na:

force_color_prompt=yes

Może to być denerwujące, jeśli logujesz się z miejsca, w którym kolor nie jest obsługiwany, ale uważam to za bardzo mało prawdopodobne.

LasseValentini
źródło
Idealnie, to mi zrobiło. Widzę, że jest to problematyczne, jeśli zdarzy mi się zalogować gdzieś bez koloru, ale będzie to dość rzadkie. Dzięki!
chmullig
Zmian należy dokonać na komputerze serwera, a nie na kliencie.
Adam Ryczkowski
3

.screenrcPlik jest dla mnie zagadką. Mój jest gobbledygook, który skopiowałem z Internetu. Widzę jednak kilka wierszy, które wydają się być odpowiednie dla twojego problemu:

# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I" 
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

Myślę, że jeśli dodasz powyższe linie do swoich, uzyskasz kolor. Oto moja cała .screenrcinformacja:

jake@daedalus:~$ cat .screenrc 
startup_message off # skip splash screen
vbell off # Kill the annoying dog

# Voodoo
hardstatus alwayslastline
hardstatus string '%{= wk}%-Lw%{= KW}%50>%n%f* %t%{= dK}%+Lw%<'

# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I" 
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
# erase background with current bg color 
defbce "on"
djeikyb
źródło
2

Twoje PS1ustawienie powinno być umieszczone .bashrc, a nie .bash_profile.

Jeśli to nie jest problem, edytuj pytanie, aby zawierało ustawiony wiersz PS1.

Możesz także spróbować uruchomić te:

echo "$TERM"                                 # will probably print "screen"
tput setaf 2 | cat -vte                      # should print "^[[32m"
echo "$(tput setaf 2)"green"$(tput sgr0)"    # should print "green" in green
Mikel
źródło
2

Screen zwykle używa specjalnego typu terminala, takiego jak „screen”, lub jeśli ustawisz go w .screenrc, „screen-256color”.

Wystarczy poszukać w pliku .bashrc instrukcji wykrywania detekcji kolorów i dodać ekran do listy.

Na przykład coś takiego:

case "$TERM" in
    xterm)
        color_prompt=yes
        ;;
    screen)
        color_prompt=yes
        ;;
    *256*) 
        color_prompt=yes
        ;;
esac

Używam 256-kolorowych typów terminali, więc potrzebuję tylko instrukcji 256 , ponieważ przechwytuje ona xterm-256color, gnome-256color i screen-256color. Twój przebieg może się różnić. 🙂

m0j0
źródło
1

Dodaj to do swojego ~ / .screenrc

shell -$SHELL
Krzywka
źródło
+1. To przywróciło mi mój ładnie wyglądający monit bash na OS X.
funroll
0

Wywoływanie ekranu z -T xtermdziałaniem jest dla mnie, więc po prostu:

screen -T xterm

Nie trzeba modyfikować żadnych plików.

twildfarmer
źródło