フォントを追加する簡単な方法はありますか?

フォントを追加する簡単な方法はありますか?

5年以上愛用していたGentooをハードウェア障害で失った後、私はFreeBSDに移行しました。これは、ソースベースのオペレーティングシステムの探求と使用における次の論理的なステップだと感じました。FreeBSD の関連ドキュメントXOrg Serverのインストール中に、5.6 - XOrg セクションでのフォントの使用私の注意を引いた。次の行を追加していなかったことに気づいた。

Section "Files"
   FontPath  "/usr/share/fonts/...."
EndSection

Gentoo インストール上のフォントについて、DE がひどい状態だった理由がわかりました。片手でタイピングできない障害者なので、Files Section手動で編集するのは困難です。最後の手段として手動でフォントを追加したいのです。そのため、まだ見つかっていない誰かが作成したツール、またはここの読者が作成するのが得意なシェル スクリプトなどを使用して、出力をfc-list : fileファイル セクションに追加する方法はありますか?xorg.conf

注記: 私はファイルnvidia-xconfigを生成するために使用していますxorg.confが、これは現在推奨されているモジュール方式とは程遠いものです。必要に応じて、conf.d 方式と生成された構成を組み合わせて使用​​することはできますか?

答え1

質問を理解していて、システムに vim がインストールされている場合 (これらはvi単なるコマンドなので、これも同様に機能しますex)
、ターミナルで以下のコマンドを実行すると、次のようになります。

  • ファイルに読み込まれます: xorg.conf- 明らかに、これを変更したいファイルに置き換えます。注: このファイルxorg.confないスクリプトに問題が発生した場合に備えて、変更する必要があります。
  • テキスト操作を行う
  • コマンドの出力は次のファイルに保存されます:/tmp/temp_xorg.conf

これらの操作を行った後、状態に満足したら、/tmp/temp_xorg.conf実際に機能している xorg 構成ファイルの場所にコピーできます。


コマンドを実行する

これをシェルプロンプトで実行すると、xorg conf ファイルに配置できる形式のフォントパス ディレクトリが生成されます (このコマンドを提供してくれた @meuh に感謝します)。

fc-list : file | sed -E 's#(.*)/.*#\tFontPath "\1"#' | sort -u > /tmp/filepaths.txt

次にこのコマンドを実行すると、上記のコマンドの出力が「ファイル」セクションに挿入されます。

$ vim -e xorg.conf << 'EOF' 
" move cursor to the line with the text: `Section "Files"`
/Section "Files"
" read in the output of `fc-list` at this point
r !fc-list
write /tmp/temp_xorg.conf
EOF

たとえば、xorg.conf次のようになります。

Section "InputClass"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection

Section "Files"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection


Section "InputClass"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection

上記のコマンドを実行すると、/tmp/temp_xorg.conf次のようになります。

Section "InputClass"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection

Section "Files"
    FontPath "/home/ubuntu/.fonts"
    FontPath "/usr/share/fonts/opentype/noto"
    FontPath "/usr/share/fonts/opentype/stix"
    FontPath "/usr/share/fonts/opentype/stix-word"
    FontPath "/usr/share/fonts/truetype"
    FontPath "/usr/share/fonts/truetype/abyssinica"
    FontPath "/usr/share/fonts/truetype/ancient-scripts"
    FontPath "/usr/share/fonts/truetype/dejavu"
    FontPath "/usr/share/fonts/truetype/fonts-guru-extra"
    FontPath "/usr/share/fonts/truetype/freefont"
    FontPath "/usr/share/fonts/truetype/kacst"
    FontPath "/usr/share/fonts/truetype/kacst-one"
    FontPath "/usr/share/fonts/truetype/lao"
    FontPath "/usr/share/fonts/truetype/lato"
    FontPath "/usr/share/fonts/truetype/liberation"
    FontPath "/usr/share/fonts/truetype/lohit-punjabi"
    FontPath "/usr/share/fonts/truetype/nanum"
    FontPath "/usr/share/fonts/truetype/openoffice"
    FontPath "/usr/share/fonts/truetype/padauk"
    FontPath "/usr/share/fonts/truetype/sinhala"
    FontPath "/usr/share/fonts/truetype/takao-gothic"
    FontPath "/usr/share/fonts/truetype/tibetan-machine"
    FontPath "/usr/share/fonts/truetype/tlwg"
    FontPath "/usr/share/fonts/truetype/ttf-khmeros-core"
    FontPath "/usr/share/fonts/truetype/ubuntu-font-family"
    FontPath "/usr/share/fonts/type1/gsfonts"
    FontPath "/usr/share/fonts/X11/Type1"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection


Section "InputClass"
    Identifier  "trackpoint catchall"
    MatchIsPointer  "true"
    MatchProduct    "TrackPoint|DualPoint Stick"
    MatchDevicePath "/dev/input/event*"
    Option  "Emulate3Buttons"   "true"
    Option  "EmulateWheel"  "true"
    Option  "EmulateWheelButton"    "2"
    Option  "XAxisMapping"  "6 7"
    Option  "YAxisMapping"  "4 5"
EndSection

答え2

質問の構成の「組み合わせ」の部分については、答えは「ある程度」です。

マニュアルxorg.confページには、設定ソースが優先順位に従ってリストされており、「同じ情報が複数の方法で提供される場合、最も優先順位の高いメカニズムが使用されます」と記載されています。

観察してみると (「同じ情報」と「複数の方法」はマニュアル ページで明確に定義されていないように思いますが)、これは、優先順位が低いファイルでセクションxorg.conf(Section "Files"フォントなど) を上書き/更新できないことを意味しますxorg.conf.d。優先順位の低いファイルは読み込まれて解析されますが、優先順位の高いセクションがすでに存在する場合、セクションの内容は黙って無視されます。

現在の Nvidia ドライバー (396、Linux のみ)する現在はフラグメントを使用していますが、これは Linux DRM Xorg ドライバーの場合のみであり、インストール中にxorg.conf.dほぼモノリシックが作成されます。xorg.conf

幸いなことに、nvidia-xconfigこのセクションは変更されないので、役立つ場合はコメントアウトしxorg.confて1つ以上のxorg.conf.dファイルに移行することができます。同じ優先順位の複数の重複セクション、つまりすべて1つのxorg.conf.dディレクトリ内にあります。する期待どおりに値が結合されます。

ディレクティブを生成する簡単な方法は次のとおりです。

fc-list -f 'Fontpath "%{file|dirname}"\n' : | sort -u

これは、必要な設定行を作成するためにフォーマットされた出力(-f)を使用し、各フォントのファイル名であり、fc-list%{file}|dirnameフィルターディレクトリ名を出力します (シェル コマンドとまったく同じdirname)。次に、sort -u一意のパスを出力します。フォントが多数ある場合はパスを並べ替える必要があるかもしれません。ビットマップ バージョンがある場合は、次のようにして並べ替えることができます。

fc-list -f '    Fontpath "%{file|dirname}"\n' :scalable=true | sort -u
fc-list -f '    Fontpath "%{file|dirname}"\n' :scalable=false | sort -u

必要に応じてその出力を貼り付けるか、すべての手順の例として(ルートとして)貼り付けることができます。

# extract Files section from xorg.conf to a separate conf
sed -n '/^Section..Files/,/^EndSection/p' \
  < /etc/X11/xorg.conf > /etc/x11/xorg.conf.d/10-section-files.conf
# comment out Files section in xorg.conf
sed -i.bak '/^Section..Files/,/^EndSection/ s/^/#/' /etc/X11/xorg.conf

# paths for scalable fonts
( echo 'Section "Files"'; 
  fc-list -f '    Fontpath "%{file|dirname}"\n' :scalable=true | sort -u;
  echo 'EndSection' ) > /etc/X11/xorg.conf.d/20-fontpath.conf

# paths for non-scalable fonts
( echo 'Section "Files"'; 
  fc-list -f '    Fontpath "%{file|dirname}"\n' :scalable=False | sort -u;
  echo 'EndSection' ) > /etc/X11/xorg.conf.d/30-fontpath-fixed.conf

必要に応じて順序を変更し、重複を削除して、X を再起動します。

完全を期すために、次のようにしてフォントパスをその場で変更することもできますxset

xset +fp /usr/local/share/fonts/TTF

で現在のパスを確認しますxset q。これを簡単に変更してスクリプトにこのようなコマンドを追加すれば.xinitrc、フォント パスがその後の X 構成の変更とは無関係に保持され、X を再起動する必要もなくなります。

関連情報