--- title: "How-To: Побег из ада (rxvt, Unicode, 256color, termcap, terminfo и screen)" title_bar: 1 icon: "newspaper" tags: author: "digital-freak.ru" description: "Настройка терминала для поддержки 256 цветов в rxvt и screen" keywords: "rxvt,Unicode,termcap,terminfo" --- | После довольно продолжительной борьбы с настройками терминала для получения приятного внешнего вида с 256 цветами в `rxvt` и `screen` даже через SSH я подумал, что мои результаты могут быть полезны и другим пользователям. Первый шаг --- убедиться, что все ваши программы правильно скомпилированы. Для соответствующих портов имеется ряд опций, поэтому дважды проверьте их с помощью `make config`! При наличии `rxvt-unicode` и `screen`, собранных с поддержкой 256 цветов, у вас не должно быть проблем с использованием, например, `vim` в X11. Проблема возникла после попытки использовать `vim` через SSH с linux-машины из `rxvt-unicode`. Переменной среды `TERM` присваивается значение `rxvt-256color`, которое не может быть найдено в `/etc/termcap`. Это ловушка №1. Для решения этой проблемы создайте в домашнем каталоге файл с именем `.termcap`. Это можно сделать следующей командой (будьте осторожны, она перезапишет любой существующий файл): ``` bash % 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`): ``` bash if [ -f ${HOME}/.termcap ]; then TERMCAP=$(< ${HOME}/.termcap) export TERMCAP fi ``` Теперь выйдите из системы и зайдите снова, но вы увидите, что `screen` все еще вас не устраивает. Это ловушка №3 (и, наконец, последняя). В вашем `.screenrc` обратите внимание на запись `termcapinfo`, подобную этой: ``` bash termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' ``` Измените ее или создайте, если необходимо, чтобы она выглядела так: ``` bash termcapinfo xterm-color|xterm-16color|xterm-88color|xterm-256color|rxvt* 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' ``` Перезапустите `screen`, и теперь вы, наконец, сможете наслаждаться всеми 256 цветами. Я надеюсь, что это было полезным. Любые комментарии или замечания принимаются. [jrk](https://forums.freebsd.org/members/5713/), [Apr 16, 2010](https://forums.freebsd.org/threads/13345/) ---- Тем не менее есть то, что я бы назвал основной проблемой: отсутствие 256 цветов в некоторых приложениях. Во-первых `~/.termcap` следует исправить следующим образом: ``` bash % cat > $HOME/.termcap << EOF rxvt-256color|rxvt-256color terminal (X Window System):\ :Co#256:\ :tc=rxvt-unicode:\ :tc=rxvt: EOF ``` Затем, для полноты, указать urxvt-клиенту всегда использовать `rxvt-256color` как значение переменной `TERM`, исправив `~/.Xdefaults`: ``` bash urxvt*termName: rxvt-256color ``` Но все, для чего это действительно нужно, --- это обход проблемы, которая должна быть решена в `/etc/termcap`. Запись _termcap_ `rxvt-unicode` ломается сама по себе, так как для корректной работы `tc=rxvt` нужна функция `rxvt-256color`. Кроме того, `x11/rxvt-unicode` должен изменить жестко закодированное значение по умолчанию для переменной `termName`, если определена `XTERM_COLOR`, и ни в коем случае не должен допускать использование записи _termcap_ `rxvt` по умолчанию, поскольку для этого необходимо включить функции `rxvt-unicode`. [Andres](https://forums.freebsd.org/members/14081/), [Aug 5, 2010](https://forums.freebsd.org/threads/13345/#post-96184)