Как настроить рендеринг TTF в xterm?

3368
koniiiik

Последние пару дней я пытался заставить xterm отображать тот же шрифт, к которому я привык в konsole за последние несколько лет - он работает для меня довольно хорошо, даже при относительно небольшом размере лица. xterm, кажется, отображает шрифт так, что мне гораздо труднее его читать.

Вот пара скриншотов для сравнения.

Xterm:
xterm rendering

Konsole:
konsole rendering

Этот шрифт DejaVu Sans Mono 8. Очевидно, что оба сглаживаются. Я даже применил цветовую схему от konsole к xterm, думая, что это может быть причиной различия, но это не так. Кроме того, в konsole у меня установлен флажок «Рисовать насыщенные цвета жирным шрифтом», но разница очевидна как в жирном, так и в обычном шрифте.

Разница заключается в том, насколько агрессивно каждое приложение сглаживает шрифт. В xterm текст намного более размыт, а также значительно труднее для чтения, по крайней мере для меня. Это, вероятно, наиболее очевидно с символом m, у которого в не выделенной жирным шрифтом первой «ножке» разбросано по двум пикселям в xterm, тогда как в konsole это красиво и четко.

Я получаю одинаковые результаты как на Gentoo, так и на Ubuntu, и с помощью консервативной настройки /etc/fonts/conf.dна моем ноутбуке Gentoo, и с комплексной настройкой на Ubuntu.

Бонусные баллы, если вы можете выяснить, почему, черт возьми, xterm не отображает некоторые нелатинские символы, хотя я не против этого. Это просто не имеет никакого смысла для меня. Это может быть подсказка, хотя ...

Вот соответствующая часть моей .Xresources:

XTerm*faceName: DejaVu Sans Mono XTerm*faceSize: 8 XTerm*background: #000000 XTerm*foreground: #B2B2B2 XTerm*color0: #000000 XTerm*color1: #B21818 XTerm*color2: #18B218 XTerm*color3: #B26818 XTerm*color4: #1818B2 XTerm*color5: #B218B2 XTerm*color6: #18B2B2 XTerm*color7: #B2B2B2 XTerm*color8: #686868 XTerm*color9: #FF5454 XTerm*color10: #54FF54 XTerm*color11: #FFFF54 XTerm*color12: #5454FF XTerm*color13: #FF54FF XTerm*color14: #54FFFF XTerm*color15: #FFFFFF XTerm*boldColors: true 

Обновление: чтобы уточнить, заставить xterm использовать TTF тривиально; то, что я ищу, - это способ точной настройки способа визуализации TTF в xterm в соответствии с настройками, используемыми konsole (и в значительной степени любым другим приложением X11 в этом отношении). По какой-то причине xterm, кажется, игнорирует все, кроме имени и размера лица шрифта TTF, который я пытаюсь установить, либо в Xresources, либо в моих настройках fontconfig (которые правильно подобраны остальной системой).

3

3 ответа на вопрос

1
Chris Lawrence

В xterm (1) вы можете изменить тип шрифта, удерживая клавишу CTRL и щелкнув правой кнопкой мыши в окне. Я говорю вроде как, потому что у тебя нет большого выбора. Нажав на «TrueType» вариант даст вам результаты ближе к тому, что вы ищете. Вы можете получить больше контроля, отредактировав файл Xresources, как я уверен, что вы знаете - см. Https://wiki.archlinux.org/index.php/Xterm примеры того, как изменить это в соответствии с вашими потребностями.

xterm (1) не отображает большинство нелатинских символов по умолчанию. вы можете использовать опцию -u8 или использовать оболочку uxterm (1)

Попробуйте эту команду, вы можете изменить размер в соответствии с вашими потребностями или пропустить его и щелкнуть правой кнопкой мыши CTRL, чтобы изменить размер шрифта

xterm -u8 -fn 7x13 -fa "DejaVu Sans Mono: размер = 8: antialias = true"

Как вы можете видеть на скриншоте, xterm уже использует TTF, и Unicode также включен - на скриншоте показана группа символов Unicode, которые, насколько я знаю, не вписываются в одну 8-битную кодировку (кириллица) , Греческий, центральноевропейские акценты и куча сценариев, я понятия не имею, что они есть). Не удается отобразить только несколько конкретных сценариев. Кроме того, меню ctrl + RMB делает доступными только несколько дополнительных конфигураций шрифтов, которые могут быть установлены ресурсами `font1` -` font6`. koniiiik 9 лет назад 0
0
Jens

Это связано с тем, что приложения GTK и xterm используют совершенно разные способы настройки шрифтов. GTK использует font-config, а xterm / Xft использует ресурсы X.

Чтобы настроить шрифты Xft с использованием ресурсов X, добавьте это в ~/.Xresources:

 Xft.rgba: rgb 

Этот параметр изменяет вид сглаживания. Вот примеры XTERM скриншоты, снятые xmagбез какого - либо параметра RGBA, и rgb, grb, vrgb. Все они имеют различную четкость, верность цвета и кажущуюся яркость.

enter image description here enter image description here enter image description here enter image description here

Есть также ручки для Xft.antialias, Xft.hinting, Xft.hintstyle, Xft.lcdfilterи других. Подробности смотрите в документации по fontconfig .

Спасибо, но ... Во-первых, я считаю, что xterm фактически использует fontconfig, потому что я получаю некоторые сообщения от fontconfig на stderr при запуске xterm. Что касается использования ресурсов Xft вместо Xterm упорно игнорирует все ресурсы Xft, а также дополнительные параметры, передаваемые внутри `faceName` ресурса. (В `faceName` он распознает только` размер`.) koniiiik 9 лет назад 0
@koniiiik Это может быть связано с использованием разных параметров `. / configure`. Я всегда компилирую xterm из исходного кода (мои скриншоты взяты из xterm-314). Есть несколько параметров конфигурации, связанных с freetype, с которыми вы можете поиграть. Я использовал для них значения по умолчанию (т.е. не использовал `--disable-freetype`). Я нахожусь на FreeBSD 10 и 11. Jens 9 лет назад 0
0
Cliff L. Biffle

Разница в рендеринге, которую вы видите между Konsole и xterm, заключается в настройках подсказок fontconfig. Вы можете сказать, что подсказка включена, если вы сравните формы глифов между двумя скриншотами; в Konsole ноль имеет несколько иную форму, потому что он привязан к пиксельной сетке (что входит в число подсказок шрифтов).

Konsole, вероятно, выбирает настройки из некоторого дополнительного уровня конфигурации KDE, в то время как xterm учитывает только настройки низкоуровневого fontconfig.

Я недавно работал над этим в моей системе Arch, и комбинация параметров, которые наиболее точно повторяют то, что вы видите в Konsole, (вставьте это в свой .Xresources):

Xft.antialias: 1 Xft.autohint: 1 Xft.hintstyle: hintslight 

Некоторые шрифты содержат информацию подсказок от разработчиков шрифта. Некоторые нет. Функция freetype autohinter ( Xft.autohint: 1) будет генерировать подсказки для шрифта, а уровень подсказки hintslightбудет возвращаться к включенным подсказкам, если они присутствуют. Возможно, стоит попробовать hintfull; зависит от ваших предпочтений, плюс качество подсказок, присутствующих в шрифте, который вы используете.

(Вы не используете субпиксельное сглаживание на этих скриншотах, и другой комментатор уже объяснил, как начать использовать его, если хотите.)

Вот мои скриншоты до и после на каждом уровне подсказок. (7pt Anonymous Pro на дисплее 192 точек на дюйм.)

Значения по умолчанию:

ASCII character set with default hinting

Конфиг выше:

ASCII character set with slight hinting

Похожие вопросы