Obecnie używam terminala gnome Fedory 18 , a następnie uruchomiłem w nim multiplekser. Po połączeniu się z serwerem CentOS 5 za pomocą polecenia znajduję:tmux
ssh
ls
wynik nie ma kolorutmux
,screen
,hexedit
,htop
Wszystko powiodło się z komunikatem o błędzie, takich jak:awaria otwartego terminalu: brakujący lub nieodpowiedni terminal: screen-256color
Wygląda na to, że ssh
przekazuje zmienną środowiskową $ TERM na serwer, ale nie mogę jej znaleźć w /etc/ssh/ssh_config
pliku Fedory 18.
Chociaż mogę ręcznie zmienić zmienną $ TERM na serwerze, za każdym razem, gdy się łączę, dzieje się to ponownie. Jak więc temu zapobiec?
źródło
infocmp
itic
po skompilowaniu nie ma potrzeby tymczasowej zmiany$TERM
. przy okazji, właśnie skopiowałem (rsync)/usr/share/terminfo/s/screen-256color
z Fedory 18 do CentOS, wydaje się, że działa dobrze (rsync -tv /usr/share/terminfo/s/screen-256color root@the_host:/usr/share/terminfo/s
).tmux
gnome-terminal Fedory 18,tmux
zmieniłem$TERM
wartość nascreen-256color
zxterm-256color
.infocmp | ssh -t root@remote-host 'cat > "$TERM.info" && tic "$TERM.info"'
można skrócić doinfocmp | ssh root@remote-host "tic -"
. Działa to, ponieważ gdy masz potok, można uzyskać do niego dostęp jako plik za pomocą - i na szczęście potoki działają w SSH.tic
plików generowanych (kompilator terminfo) będzie taki sam z jednego systemu do drugiego lub że ich lokalizacja będzie taka sama.tic
może również upewnić się, że uprawnienia są prawidłowe lub utworzyć katalogi pośredniczące, jeśli to konieczne.W moim przypadku po prostu dodałem alias do mojego
.zshrc
(.bashrc
jeśli używasz bash) na moim lokalnym pulpicie:Jeśli już używasz aliasu, dostosuj go, aby uwzględnić przypisanie Środowisko.
źródło
Umieszczam to w moim
.bashrc
na zdalnym hoście:W ten sposób, zarówno
xterm-256color
iscreen-265color
są obsługiwane prawidłowo. Mam też komunikat wyjściowy, aby jeśli serwer został później zaktualizowany i obsługiwał 256 kolorów, nie uderzam głową o ścianę, zastanawiając się, dlaczego zmienna TERM ulega zmianie podczas SSHing.źródło
export TERM=${TERM%%-256color}
Zmiana
$TERM
może działać, ale nie sugeruję tego, jest to tylko obejście zamiast rozwiązania.Gdy napotykam ten problem w moich systemach, naprawiam go, instalując obsługę najpopularniejszych typów terminali w systemie zdalnym:
yum install ncurses-base
dlascreen-256color
CentOSyum install ncurses-term
dlascreen-256color-bce
CentOSapt install ncurses-base
dla obuscreen-256color
iscreen-256color-bce
na Debiana, Ubuntu i MintPakiety związane z ncurses zapewniają także obsługę wielu innych terminali i są również dostępne we wszystkich innych dużych dystrybucjach. (Ale dla mojego przypadku użycia i twojego pytania powinno to wystarczyć)
źródło
Zobacz man ssh_config:
i man sshd_config:
Zgodnie z tym domyślnie nie powinno się wysyłać żadnych zmiennych, ale TERM wydaje się być wyjątkowy. Mimo to jest wysyłany.
Dlatego możesz albo zmienić TERM podczas wywoływania ssh (jak
TERM=xterm ssh ...
), zmienić go po zalogowaniu (jak w.bash_profile
) lub zdefiniować nieznany typ TERM po stronie serwera (zakładając, że masz tam dostęp root). Zobacz inne odpowiedzi, aby uzyskać szczegółowe informacje.źródło
$TERM
nie będzie jednak lepszy niż ustawienie nieobsługiwanej wartości.$TERM
tymczasowa może być obejściem, ale muszę to zrobić za każdym razem. nawiasem mówiąc, wydaje się, że obie CentOS 5 i Fedora 18 Zebrane ENV wszystkie zmienne środowiskowe locale (LANG
,LC_*
...)