web-dev-qa-db-ja.com

xtermでTTFレンダリングを微調整する方法は?

私はここ数日、xtermに、ここ数年konsoleで慣れているのと同じフォントを表示させようと試みてきました。これは、顔のサイズが比較的小さい場合でも非常にうまく機能します。 xtermは、私が読むのがはるかに難しい方法でフォントをレンダリングしているようです。

比較のために、いくつかのスクリーンショットを示します。

xterm:
xterm rendering

konsole:
konsole rendering

問題のフォントはDejaVuSans Mono8です。どちらも明らかにアンチエイリアス処理されています。違いの理由かもしれないと思って、konsoleからxtermまでの配色を適用しましたが、そうではありませんでした。また、konsoleでは、「太字で濃い色を描く」チェックボックスを有効にしていますが、太字と通常のフォントの違いは明らかです。

違いは、各アプリケーションがフォントをどれだけ積極的にアンチエイリアスするかにあるようです。 xtermでは、少なくとも私にとっては、テキストははるかにぼやけており、読むのもかなり困難です。おそらく、文字mで最も明白です。これは、太字ではないバージョンではxtermの2つのピクセルに最初の「脚」が広がっていますが、konsoleではそれは素晴らしくシャープです。

GentooとUbuntuの両方で同じ結果が得られ、Gentooラップトップの/etc/fonts/conf.dでの控えめなセットアップと、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は、Xresourcesまたはfontconfig設定(システムの他の部分によって正しく取得される)のいずれかで設定しようとしているTTFフォントの面名と面サイズ以外のすべてを無視しているようです。

3
koniiiik

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:size = 8:antialias = true"

1
Chris Lawrence

これは、GTKアプリとxtermがフォントを構成するために大きく異なる方法を使用しているためです。 GTKはfont-configを使用しますが、xterm/XftはXリソースを使用します。

Xリソースを使用してXftフォントを構成するには、これを~/.Xresourcesに追加します。

  Xft.rgba: rgb

この設定は、アンチエイリアスの種類を変更します。これは、rgba設定なしでxmag、およびrgbgrbvrgbで撮影されたxtermスクリーンショットの例です。それらはすべて、異なる鮮明さ、色の忠実度、および見かけの明るさを持っています。

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

Xft.antialiasXft.hintingXft.hintstyleXft.lcdfilterなどのノブもあります。詳細については、いくつかの fontconfigドキュメント を参照してください。

0
Jens

Konsoleとxtermで見られるレンダリングの違いは、fontconfigのヒント設定にあります。 2つのスクリーンショットの間でグリフの形状を比較すると、ヒントが含まれていることがわかります。 Konsoleでは、ピクセルグリッドにスナップされているため、ゼロの形状が少し異なります(これは、フォントヒンティングが行うことの1つです)。

KonsoleはKDE構成の追加レイヤーから設定を取得する可能性がありますが、xtermは低レベルのfontconfig設定のみを尊重します。

私は最近Archシステムでこれに取り組んでおり、Konsoleで見ているものを最もよく再現する設定の組み合わせは次のとおりです(これを.Xresourcesに入れてください):

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

一部のフォントには、フォントの設計者からのヒント情報が含まれています。しない人もいます。 FreeType Autohinter(Xft.autohint: 1)はフォントのヒントを生成し、ヒントレベルhintslightは、含まれているヒントにフォールバックします(存在する場合)。おそらくhintfullを試す価値もあります。好みに加えて、使用しているフォントに存在するヒントの品質に依存します。

(これらのスクリーンショットではサブピクセルアンチエイリアスを使用していません。必要に応じて、別のコメント投稿者がサブピクセルアンチエイリアスの使用を開始する方法をすでに説明しています。)

これが、各ヒントレベルでの前後のスクリーンショットです。 (192dpiディスプレイの7pt Anonymous Pro。)

デフォルト:

ASCII character set with default hinting

上記の構成:

ASCII character set with slight hinting

0
Cliff L. Biffle