ヘッドレスのGentooボックスがあり、その上でXアプリケーションを実行したいのですが、Windows PCで実行されているCygwin Xorgサーバーにディスプレイを渡したいと思います。
うまくいきますが、この場合、Xアプリケーションで使用するフォントをいくつか指定すると、実際にどのフォントが使用されているのかわかりません。 Gentooボックスにあるもの(Xアプリケーションが実行されている場所)?それとも私のCygwinにインストールされているもの(Xアプリケーションが表示される場所)ですか?
DejaVu Sans Mono
たとえば、urxvtでフォントを使用したい場合は、~/.Xresources
Gentooボックスは次のようになります。
URxvt*font: xft:DejaVu Sans Mono:size=12
Gentooボックスにフォントをインストールして有効にしました。以下は出力ですeselect fontconfig list
[1] 10-autohint.conf
[2] 10-no-sub-pixel.conf
[3] 10-scale-bitmap-fonts.conf *
[4] 10-sub-pixel-bgr.conf
[5] 10-sub-pixel-rgb.conf
[6] 10-sub-pixel-vbgr.conf
[7] 10-sub-pixel-vrgb.conf
[8] 10-unhinted.conf
[9] 11-lcdfilter-default.conf
[10] 11-lcdfilter-legacy.conf
[11] 11-lcdfilter-light.conf
[12] 20-unhint-small-dejavu-sans.conf
[13] 20-unhint-small-dejavu-sans-mono.conf
[14] 20-unhint-small-dejavu-serif.conf
[15] 20-unhint-small-vera.conf *
[16] 25-unhint-nonlatin.conf
[17] 30-metric-aliases.conf *
[18] 30-urw-aliases.conf *
[19] 40-nonlatin.conf *
[20] 45-latin.conf *
[21] 49-sansserif.conf *
[22] 50-user.conf *
[23] 51-local.conf *
[24] 57-dejavu-sans.conf
[25] 57-dejavu-sans-mono.conf *
次に、Gentooボックスでxrdbを実行してリソースを有効にします(これにより、Gentooボックスのフォントが使用されると信じられます)。
xrdb ~/.Xresources
urxvtを起動すると、次のように文句を言います。
urxvt:デフォルトのフォントセットを読み込めませんでした。 -fn を使用して有効なフォントセットを指定して中断します。
xdb -query
との出力はappres URxvt
同じです(下の2行のみ)。
URxvt*font: xft:DejaVu Sans Mono:size=12
URxvt*scrollBar: false
フォントのインストールに問題はないと思いますfc-list|grep "DejaVu Sans Mono"
。出力は次のとおりです。
/usr/share/fonts/dejavu/DejaVuSansMono-BoldOblique.ttf: DejaVu Sans Mono:style=Bold Oblique
/usr/share/fonts/dejavu/DejaVuSansMono.ttf: DejaVu Sans Mono:style=Book
/usr/share/fonts/dejavu/DejaVuSansMono-Bold.ttf: DejaVu Sans Mono:style=Bold
/usr/share/fonts/dejavu/DejaVuSansMono-Oblique.ttf: DejaVu Sans Mono:style=Oblique
の出力はstrace urxvt
かなり長いです。以下は、で指定されたフォントと関連があると思われる部分です~/.Xresources
。
poll([{fd=6, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=6, revents=POLLOUT}])
writev(6, [{"1\1\t\0\240\17\34\0", 8}, {"xft:DejaVu Sans Mono:size=12", 28}, {"", 0}], 3) = 36
poll([{fd=6, events=POLLIN}], 1, -1) = 1 ([{fd=6, revents=POLLIN}])
recv(6, "\1\0=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096, 0) = 32
recv(6, 0x817b310, 4096, 0) = -1 EAGAIN (Resource temporarily unavailable)
recv(6, 0x817b310, 4096, 0) = -1 EAGAIN (Resource temporarily unavailable)
write(1, "urxvt: ", 7urxvt: ) = 7
write(1, "unable to load base fontset, ple"..., 77unable to load base fontset, please specify a valid one using -fn, aborting.
) = 77
答え1
フォントを表示するための従来のX11インターフェースは、クライアントがXサーバーにメッセージを送信できるようにします。既定では、「この文字列をこのフォントで表示」します。したがって、フォントはXサーバーにあります。 Xサーバーはローカルまたは外部からフォントをロードします。XFontサーバー(例:xfs)。フォントサーバーは、主にディスクスペースがないかほとんどないモニターに適しています。これはニッチのユースケースとなりました。 X11フォント文字列(プレフィックスを含めるか除く)を指定すると、x:
Rxvtはレガシーインターフェイスを使用します。
既存のX11インターフェイスはビットマップフォントに制限されています。最新のシステムは、クライアント側でテキストをレンダリングし、結果のビットマップをサーバーに送信するアプローチを使用する傾向があります。プレフィックスを使用すると、xft:
URxvt は次を使用します。xftフォントレンダリングインターフェイス。クライアントコンピュータに読み込まれたフォントに基づいて、クライアント側でレンダリングが行われます。
xrdb -query
どのリソースがロードされているかを確認するには、実行してください。実行してappres URxvt
、appres urxvt
どのリソースが適用されるかを確認します(インスタンスのリソースがクラスurxvt
のリソースよりも優先されますURxvt
)。フォント設定が使用されない理由の1つは、他の設定(またはURxvt.font
)urxvt*font
がフォント設定を上書きすることです。
URxvtがXftサポートなしでコンパイルされている可能性があります(コンパイル時間オプションです)。リソースがリストされていることをurxvt --help 2>&1 | grep buffered:
確認するには、実行してください。これはXftサポートがある場合にのみ表示されます。buffered
Xft サポートがない場合、urxvt はリソース値をfn
無効な X フォント文字列として解釈します。
答え2
xorg-xfdパッケージのインストールの問題を修正しました。私はGilesが投稿した答えを読み、私のパッケージをリストすることにしました。 rxvt-unicode パッケージをビルドすると libxft がインストールされますが、動作しません。したがって、Xorgが使用するXftに割り当てられたオプションの依存関係をリストしました。 Xfdは、X11コアプロトコルまたはlibxftを使用してすべてのフォントを表示することを担当します。