WSL上のXサーバで、Windows 10にインストールされているフォントを利用するTech TIPS

WSL環境でGUIのアプリを利用するためにXサーバを導入した場合、Windows 10側にインストールされているフォントを全てそのまま利用できると便利だ。これは、フォント用の設定ファイルを用意すれば簡単に実現できる。その方法を紹介する。

» 2018年12月27日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 10 Fall Creators Update(バージョン1709)以降(64bit版のみ)


 Windows 10に「WSL(Windows Subsystem for Linux)」をインストールすると、Linux向けのプログラム(バイナリファイル)をそのまま実行できるようになる。現在では、UbuntuやDebian、SUSE Linux、WLinux(これはDebianベースの有償製品)など、数種類のLinuxディストリビューションを導入できるようになっている。またXサーバを導入すると、GUIのアプリケーションも利用できるようになる。WSLの導入方法や、Xサーバを利用する方法については、以下の記事を参照していただきたい。

WSLでWindowsフォントを利用する WSLでWindowsフォントを利用する
これはUbuntu上のgnome-terminalというターミナルアプリで、Windows 10側にインストールされている「MigMix」というフォントを選択しているところ。WSLに個別にフォントをインストールしなくても、Windows 10にインストールされているフォントをそのまま利用できる。

WSL+Xサーバ環境でも、いろいろなフォントを使いたい

 Xサーバを導入すると、次はターミナルエミュレータや各種のGUIアプリも導入することになるが、その前に、フォントも整備しておこう。WSL(とXサーバ)を導入すると、ターミナルやアプリなどでデフォルト以外のフォントを利用したくなるはずだ。しかし、インストールしたばかりのWSLでは、非常に限られたフォントしか利用できない。WSLはWindows 10とは独立した実行環境であり、フォントも独立して管理されているからだ。例えばデフォルトのUbuntu環境だと、以下のようなフォントしか含まれていない。

Ubuntuの初期フォントセット Ubuntuの初期フォントセット
インストール直後のUbuntuのフォント一覧。「sudo apt install x11-apps」などとして基本的なX11関連のツールなどを導入すると、これらのフォントがインストールされるが、最初はこれしかない。

 Windows OSでは、標準状態でももっと多くのフォントがインストールされているし、アプリによっては(Officeアプリなど)、フォントが追加インストールされることもある。WSL側にフォントを追加インストールしてもよいが、手間がかかるし、ディスク領域も余分に消費する。だがWindows 10側のフォントをWSL側から利用できると便利だ。本TIPSでは、WSL(のXサーバ)からWindows OS側のフォントを利用する方法を紹介する。

WSLでWindows 10側のフォントを参照する

 WSL上にインストールされたXサーバのアプリが利用するフォントの情報は、「/etc/fonts」フォルダの下にまとめられている。この中に/etc/fonts/fonts.confというXML形式の設定ファイルがあり、フォントに関する情報が書き込まれている。よって、ここにWindows 10側のフォント情報を追加すればよいのだが、このfonts.confファイルはシステムの更新などで上書き更新されることがあるので、このファイルに直接設定を書き込んではいけない。

 代わりに、この場所に「local.conf」というファイル(XML形式のテキストファイル)を作成し、そこにWindows 10側のフォントの情報(フォントフォルダの場所)を記述する。WSL環境ではWindows 10のC:ドライブは「/mnt/c」で参照できるので(TIPS「Windows 10のWSLの自動マウントやfstabによるマウント処理をwsl.confファイルで制御する」参照)、Windows 10側のデフォルトのフォントフォルダ「C:\Windows\Fonts」は、WSLからは「/mnt/c/Windows/Fonts」で参照できる。このパスをlocal.confファイルに設定する。

 このフォルダはルートユーザーでないと書き込めないので、「sudo vim /etc/fonts/local.conf」などとしてルート権限でテキストエディタを起動し、次のような内容を記述する。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>/mnt/c/Windows/Fonts</dir>
</fontconfig>

local.confの設定内容
/etc/fonts/local.confにWindows OS側のフォントパス情報を記述する。このファイルが存在しない場合は、同じ場所にあるfonts.confファイルの内容をコピーして編集すると簡単だ。

 すでにこのファイルが存在している場合や、他のフォントフォルダも使いたい場合は、「<dir>〜〜</dir>」の行を追加すればよい。Windows 10のバージョン1809以降では、フォントはユーザーフォルダの下にもインストールされることがあるため(管理者権限なしにインストールできるようになっている)、そのような場所にインストールされているフォントを利用したい場合は、その場所を追加してもよいだろう(具体的な方法については、今後別TIPSで紹介予定)。

 このファイルを設定すれば、以後はWindows 10側のフォントが利用できるようになっているはずだ。WSLで利用できるフォントの一覧は「fc-list」コマンドで確認できる。

local.conf設定後のフォントの確認 local.conf設定後のフォントの確認
利用できるフォント名の一覧はfc-listコマンドで確認できる。このシステムでは、Windows 10側に1000以上のフォントをインストールしているが、それがWSLからも利用できる。

 もしフォントが正しく列挙できなければ、「fc-cache -fv」コマンドで、一度フォントキャッシュをクリアして再ロードさせてみよう(フォント数が多いと少し時間がかかる)。

 なお、フォント情報を確認するfc-listやfc-cacheコマンド(および/etc/fontsフォルダなど)が見つからない場合は、「sudo apt install fontconfg」などとして、fontconfigパッケージ(やX11関連のパッケージ)をインストールしておくこと。

 いったんフォントが追加できれば、後は、例えば「uxterm -fa 'migmix 2m'」などのようにフォント名を指定してアプリを起動したり、アプリの中からフォントを選択したりできるようになっているはずだ。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。