How-To: Побег из ада (rxvt, Unicode, 256color, termcap, terminfo и screen)
После довольно продолжительной борьбы с настройками терминала для получения
приятного внешнего вида с 256 цветами в rxvt
и screen
даже через SSH я
подумал, что мои результаты могут быть полезны и другим пользователям.
Первый шаг --- убедиться, что все ваши программы правильно скомпилированы. Для
соответствующих портов имеется ряд опций, поэтому дважды проверьте их с помощью
make config
!
При наличии rxvt-unicode
и screen
, собранных с поддержкой 256 цветов, у вас
не должно быть проблем с использованием, например, vim
в X11.
Проблема возникла после попытки использовать vim
через SSH с linux-машины из
rxvt-unicode
.
Переменной среды TERM
присваивается значение rxvt-256color
, которое не
может быть найдено в /etc/termcap
. Это ловушка №1.
Для решения этой проблемы создайте в домашнем каталоге файл с именем
.termcap
. Это можно сделать следующей командой (будьте осторожны, она
перезапишет любой существующий файл):
% cat > $HOME/.termcap << EOF
rxvt-256color|rxvt-256color terminal (X Window System):\
:tc=rxvt-unicode:\
:tc=rxvt:
EOF
Теперь vim
или любая другая программа (например, ls -G
) должны радовать
вас цветным выводом. Но после запуска screen
вы увидите, что цвета снова
исчезли. Это ловушка №2.
Вполне возможно, что screen
будет доволен во время своей работы. Он расскажет
вам о записи termcap для rxvt-256color
, и вы просто добавили ее в
$HOME/.termcap
.
Чтобы заставить screen
распознать вашу новую запись termcap, вам нужно
поместить содержимое .termcap
в переменную окружения TERMCAP
. Для этого
добавте что-то подобное в rc-файл вашей оболочки (например, в .bashrc
):
if [ -f ${HOME}/.termcap ]; then
TERMCAP=$(< ${HOME}/.termcap)
export TERMCAP
fi
Теперь выйдите из системы и зайдите снова, но вы увидите, что screen
все еще
вас не устраивает. Это ловушка №3 (и, наконец, последняя). В вашем .screenrc
обратите внимание на запись termcapinfo
, подобную этой:
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
Измените ее или создайте, если необходимо, чтобы она выглядела так:
termcapinfo xterm-color|xterm-16color|xterm-88color|xterm-256color|rxvt* 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
Перезапустите screen
, и теперь вы, наконец, сможете наслаждаться всеми 256
цветами.
Я надеюсь, что это было полезным. Любые комментарии или замечания принимаются.
Тем не менее есть то, что я бы назвал основной проблемой: отсутствие 256 цветов в некоторых приложениях.
Во-первых ~/.termcap
следует исправить следующим образом:
% cat > $HOME/.termcap << EOF
rxvt-256color|rxvt-256color terminal (X Window System):\
:Co#256:\
:tc=rxvt-unicode:\
EOF
Затем, для полноты, указать urxvt-клиенту всегда использовать rxvt-256color
как значение переменной TERM
, исправив ~/.Xdefaults
:
urxvt*termName: rxvt-256color
Но все, для чего это действительно нужно, --- это обход проблемы, которая
должна быть решена в /etc/termcap
. Запись termcap rxvt-unicode
ломается
сама по себе, так как для корректной работы tc=rxvt
нужна функция
rxvt-256color
. Кроме того, x11/rxvt-unicode
должен изменить жестко
закодированное значение по умолчанию для переменной termName
, если определена
XTERM_COLOR
, и ни в коем случае не должен допускать использование записи
termcap rxvt
по умолчанию, поскольку для этого необходимо включить
функции rxvt-unicode
.