تنظیمات فونت در لینوکس بر عهده برنامه fontconfig میباشد. این برنامه فونتهای سیستم را بر اساس الویت بندیهایی که قابل تنظیم میباشد مرتب میکند و در اختیار سایر برنامه ها قرار می دهد. مشکل اصلی که اکثر کاربران فارسی زبان لینوکس در ارتباط با fontconfig دارند عدم نمایش صحیح حروف فارسی می باشد که معمولا به دو دلیل زیر اتفاق میافتد:
- نصب نبودن فونت مناسب بر روی سیستم که حروف فارسی را ساپورت کند
- عدم وجود فایل تنظیمات fontconfig برای انتخاب فونت مناسب برای نمایش حروف فارسی
نصب فونت در لینوکس به دو روش انجام میگیرد:
- از طریق مدیر بسته توزیع
- به صورت دستی توسط کاربر
ttf
یا otf
را در مسیرهای خاصی در سیستم کپی نماییم که قابل استفاده توسط fontconfig باشند. این روش به دو صورت قابل انجام است:
در این روش فایلها در دایرکتوری home
کاربر در مسیر
~/.local/share/fonts/
کپی می شوند. با این روش فونتها فقط توسط کاربر فعلی قابل استفاده می باشند و کاربران دیگر سیستم به آنها دسترسی ندارند.
بعد از نصب فونتها برای تازه سازی cache
دستور زیر را باید اجرا نمایید:
$ fc-cacheدر این روش فایلها در مسیر
/usr/local/share/fonts/
کپی می شوند. با این روش فونتها توسط تمام کاربران سیستم قابل دسترسی و استفاده می باشند.
بعد از نصب فونتها برای تازه سازی cache
دستور زیر را باید اجرا نمایید:
$ sudo fc-cache -s
بعد از نصب فونتهای لازم کاربر میتواند در تنظیمات برنامه های مختلف در صورت امکان فونت مورد نظر خود را انتخاب کرده و از آن استفاده نماید ولی عیب این روش این است که اولا ممکن هست تمام برنامه ها امکان تنظیم فونت را نداشته باشند و از فونتهای پیش فرض سیستم استفاده کنند و ثانیه چون با انتخاب یک فونت از آن برای نمایش تمام کاراکترها استفاده می شود ممکن است کاراکترهای لازم برای زبانهای دیگر و عناصر دیگر مثل اموجی در فونت شما وجود نداشته باشد ویا اینکه از آنها خوشتان نیاد که در این صورت امکان انتخاب وجود ندارد.
با استفاده از fontconfig این امکان برای ما بوجود می آید که تنظیمات یکدستی برای کل سیستم داشته باشیم و سلسله مراتبی برای فونتهای پیش فرض سیستم مشخص کنیم که بر اساس آن از فونتهای مختلف برای نمایش کارکترهای مختلف استفاده شود.
روشی که برای تنظیمات بکار می بریم به این صورت است که برای ۳ خانواده کلی فونت یعنی خانواده های:
- sans-serif
- serif
- monospace
فونتهای مورد نظر خود را به ترتیب اولویت مشخص میکنیم. به این ترتیب هر زمان برنامه ای نیاز به استفاده از یکی از این خانواده فونتها مثلا sans-serif
داشت، به ترتیب اولویت از فونتهای مشخص شده استفاده می شود و هرگاه کاراکتری مورد نیاز بود که در آن فونت موجود نبود از فونت بعدی در لیست اولویت فونتهای آن خانواده استفاده می شود. در نتیجه با انتخاب یکی از این خانواده های فونت کلی به عنوان فونت پیش فرض برنامه های مختلف، می توانیم در تمام برنامه ها تنظیمات فونت یکدستی داشته باشیم.
انجام تنظیمات هم به صورت لوکال و هم به صورت گلوبال قابل اعمال است. در روش لوکال فایل تنظیمات در مسیر
~/.config/fontconfig/fonts.conf
کاربر قرار میگیرد و فقط برای کاربر اعمال می شود ولی در روش گلوبال فایل تنظیمات در مسیر
/etc/fonts/local.conf
قرار میگیرد و به کل سیستم اعمال می شود.
فرمت فایل تنظیمات از نوع XML
می باشد که المانهای خاص خود را برای تنظیمات مختلف دارد. فایل تنظیمات مورد نظر ما به صورت زیر می باشد:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Default font for the Persian language (no fc-match pattern) -->
<match>
<test compare="contains" name="lang">
<string>fa</string>
</test>
<edit mode="prepend" name="family">
<string>Vazirmatn NL</string>
</edit>
</match>
<!-- preferred fonts (first match will be used) -->
<alias>
<family>sans-serif</family>
<prefer>
<family>Source Sans Pro</family>
<family>Source Han Sans</family>
<family>Vazirmatn NL</family>
<family>Noto Sans</family>
<family>DejaVu Sans</family>
<family>JoyPixels</family>
</prefer>
</alias>
<alias>
<family>serif</family>
<prefer>
<family>Source Serif Pro</family>
<family>Source Han Serif</family>
<family>Noto Serif</family>
<family>DejaVu Serif</family>
<family>JoyPixels</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Source Code Pro</family>
<family>Source Han Mono</family>
<family>Noto Sans Mono</family>
<family>DejaVu Sans Mono</family>
<family>JoyPixels</family>
</prefer>
</alias>
<!-- hinting/antialiasing settings -->
<match target="font">
<edit mode="assign" name="antialias">
<bool>true</bool>
</edit>
<edit mode="assign" name="hinting">
<bool>true</bool>
</edit>
<edit mode="assign" name="hintstyle">
<const>hintslight</const>
</edit>
<edit mode="assign" name="lcdfilter">
<const>lcddefault</const>
</edit>
<edit mode="assign" name="rgba">
<const>rgb</const>
</edit>
</match>
</fontconfig>
sans-serif
و serif
و monospace
فونتهای مورد نظر برای آن خانواده را به ترتیب اولویت از بالا به پایین مشخص میکنیم.
به عنوان نمونه خانواده
sans-serif
به این صورت در تنظیمات من مشخص شده است:
<alias>
<family>sans-serif</family>
<prefer>
<family>Source Sans Pro</family>
<family>Source Han Sans</family>
<family>Vazirmatn NL</family>
<family>Noto Sans</family>
<family>DejaVu Sans</family>
<family>JoyPixels</family>
</prefer>
</alias>
Source Sans Pro
به عنوان فونت اصلی خانواده sans-serif
مورد استفاده قرار میگیرد و بعد از آن فونت Source Han Sans
قرار دارد که برای نمایش کاراکترهای زبانهای آسیای شرقی شامل چینی و ژاپنی و کره ای مورد استفاده قرار میگیرد که در فونت Source Sans Pro
موجود نمی باشند. بعد از آن فونت Vazir WOL
قرار گرفته که نسخه بدون کاراکترهای لاتین فونت وزیر می باشد و چون در دو فونت قبلی کاراکترهای فارسی وجود ندارد از این فونت برای کاراکترهای فارسی استفاده می شود. در انتها هم فونتهای Noto Sans
و DejaVu Sans
را قرار داده ام که در صورتیکه کاراکتری در یکی از فونتهای قبلی موجود نبود به احتمال زیاد در این فونتها وجود دارد و از آنها استفاده شود.ولی اما فونت آخر که فونت
JoyPixels
می باشد را در انتهای فونتهای هر سه خانواده قرار داده ام. این فونت یک فونت اموجی است که اموجی های رنگی زیادی دارد و کاراکترهای اموجی را برای برنامه ها فراهم میکند.فونتهای اموجی دیگری هم وجود دارد که میتوانید از آنها استفاده کنید مثل فونت Noto Color Emoji
و Twemoji
.بدین ترتیب برای خانواده های دیگر فونت هم فونتهای مورد نظر را مشخص میکنیم
- در انتخاب فونتها دقت کنید که حتما فونت مورد استفاده از نوع خانواده مورد نظر باشد.مثلا از فونت serif در خانواده monospace استفاده نکنید چون خانواده monospace برای محیطهایی استفاده می شود که نیاز به فونتهای هم عرض دارد مثل محیط ترمینال یا ویرایشگر کد.
- بعد از انجام این تنظیمات بایستی در تنظیمات برنامه ها و سیستم خود فونت مورد استفاده را از یکی از این خانواده های کلی فونت قرار دهید تا بتوانید از این تنظیمات استفاده کنید.
دمت گرم (: 👍