Linux වල සිංහල font නිිවැරදි ව display කිරීම

විසඳුම කෙලින් ම කියනවා වෙනුවට හොඳට විස්තර ඇතුව කියන්නම්, ඒකෙන් වැඩි දැනුමක් මට ඔයත් එක්ක බෙදා ගන්න පුළුවන් වෙයි.
(හදිස්සිකාරයින්ට පුළුවන් පහළට scroll කරද්දි තියන code එක /etc/fonts/conf.d/50-si-custom.conf කියලා save කරලා ප්රශ්නෙ විසඳගන්න. Noto Sans Sinhala font එක මෙතනින් download කරගන්න.)
ගැටළුවේ පසුබිම් කතාව
System font වෙනස් කරන එකනම් මහ ලොකු දෙයක් නෙමෙයිනෙ, තමන්ගෙ desktop environment එකට ගැලපෙන්න settings වෙනස් කරන්නනෙ තියෙන්නෙ. ඒත් system font කොයි විදියට වෙනස් කළත් සිංහල අකුරු display වෙන විදිය වෙනස් කරගන්න මට බැරි වුණා.
පරිගණකය ඉතින් හැමදේම දකින්නෙ ඉලක්කම් විදියටනෙ. අකුරු කියන්නෙත් රූප ජාතියක්නෙ. Font file වල තමයි ඉලක්කමට ගැලපෙන රූපෙ තියෙන්නෙ. පරිගණකය 75 කියන සංඛ්යාව දැක්ක ම font file එකෙන් බලනවා 75ට තියන රූපෙ මොකක්ද කියල. 75ට තියෙන රූපෙ තමයි u අකුර. ඉතින් පරිගණකය u අකුරෙ රූපෙ පෙන්නනවා. Font file වල ඔහොම තියන රූප වලට කියනවා glyphs කියලා.
Unicode වල ඉලක්කම් 143,859 තියනවා. ඉතින් ලෝකෙ තියන කිසිම font එකක් ඔය characters ලක්ෂ එක හමාරට ම ගැලපෙන්න glyphs හදලා නෑ. ඕක තමයි දැන් මෙතන තියන ගැටළුව.
ඉංග්රීසි font වල සිංහල අකුරු වලට glyphs නෑ, සිංහල font වල ඉංග්රීසි අකුරු වලට glyphs නෑ.
ඒ නිසා තමයි system font එක ඉංග්රීසි font එකක් නම් සිංහල අකුරු කැත. ඒ font එකේ සිංහල
අකුරු වලට glyphs නැති නිසා OS එක මොකක් හරි විදියකට සිංහල අකුරු පෙන්නනවා. System font එක සිංහල නම් ඉංග්රීසි අකුරු කැත වෙන්නෙත් ඕකයි.
මම මේකට විසඳුමක් හොයන්න ගොඩක් මහන්සි වුණා. Forums වල අහලා බැලුවා, Reddit post වල, Linux youtube channel වල, Blog වල මාස ගාණක් තිස්සෙ විසඳුමක් හෙව්වා. සිංහල font install කරලා බැලුවා, තියන font අයින් කරලා බැලුවා. ඒත් ඒ මුකුත් හරි ගියේ නෑ. මම කොච්චර මේකට මහන්සි වුණා ද කියනවා නම්, ඉංග්රීසි font එකකින් ඉංග්රීසි අකුරු වල glyphsනුයි, සිංහල font එකකින් සිංහල අකුරු වල glyphsනුයි අරන් ඒ දෙකම දාලා අළුත් font එකක් හදලා ඒක system font එක විදියට භාවිත කළා. ඒකෙදිනම් යම් සාර්ථකත්වයක් ලැබුණා. ඒත් සමහර අකුරු වලට ඉස්පිලි පාපිලි වැදුනෙ වැරදියට.
ගැටළුවට පිළියම
Linux වල අපි භාවිත කරන sofware වලින් text එකක් පෙන්නන්න ඕනේ වෙද්දි ඒකට භාවිත කරන library එක තමයි fontconfig library එක. හැම software එකක් ම වගේ text display කරන්නෙ fontconfig library එක ආධාරයෙන් නිසා fontconfig library එකේ settings වෙනස් කළොත් ඒක මුළු system එකේ ම text display වෙන විදිය වෙනස් කරන්න හේතු වෙනවා.
(library කියන්නෙ මොකක්ද කියලා දන්නෙ නැත්නම්, ඒකත් සාමාන්ය software එකක් කියල හිතන්න. හැබැයි සාමාන්ය software වගේ හැබැයි library වලට තනියම run වෙන්න බෑ. library වලින් කරන්නෙ අනිත් software වල වැඩ කටයුතු වලට උදවු කරන එක.)
දැන් අපි කරන්න ඕනෙ text අතරෙ සිංහල text එකක් තිබ්බොත් ඒක සාමාන්ය system font එකෙන් display කරන්න එපා, ඒක සිංහල font එකකින් display කරන්න කියලා operating system එකට උපදෙස් දෙන එක. එතකොට සිංහල අකුරු සිංහලෙනුත් අනිත් හැම අකුරක් ම system font එකෙනුත් බලාගන්න පුළුවන්.
fontconfig library එකේ configuration file එක edit කරලා අපිට මේක කරන්න පුළුවන්. මම පහළ දාලා තියන code එකෙන් font config library එකට උපදෙස් දෙනවා සිංහල භාෂාවෙන් තියන දේවල් "Noto Sans Sinhala" කියන font එකෙන් display කරන්න කියලා. Fontconfig library එකේ config files තියෙන්නෙ xml syntax එකෙන්. ඒ නිසා code එක පොඩ්ඩක් වෙලා බැලුවොත් ඔයාටත් තේරෙයි ඔය code එක. ඔයා xml ගැන දන්නෙ නැත්නම් ඒක ඉගෙන ගන්න. ඒක බොහොම සරල file format එකක්.
<fontconfig> | |
<!-- Sinhala (si) --> | |
<match target="pattern"> | |
<test name="lang" compare="contains"> | |
<string>si</string> | |
</test> | |
<alias> | |
<family>sans-serif</family> | |
<prefer> | |
<family>Noto Sans Sinhala</family> | |
</prefer> | |
</alias> | |
</match> | |
<match target="pattern"> | |
<test name="lang" compare="contains"> | |
<string>si</string> | |
</test> | |
<alias> | |
<family>serif</family> | |
<prefer> | |
<family>Noto Sans Sinhala</family> | |
</prefer> | |
</alias> | |
</match> | |
<match target="pattern"> | |
<test name="lang" compare="contains"> | |
<string>si</string> | |
</test> | |
<alias> | |
<family>monospace</family> | |
<prefer> | |
<family>Noto Sans Sinhala</family> | |
</prefer> | |
</alias> | |
</match> | |
</fontconfig> |
ලිපිය දිග වෙන නිසා font config වල භාවිතා කරන xml properties ගැන එහෙම මේ ලිපියෙන් මම කතා කරන්නෙ නෑ. ඔයා කැමති නම් fontconfig වලට අදාල Manual page එක `man fonts-conf` කියලා terminal එකේ type කරලා කියවගන්න පුළුවන්.
මෙතනින් "Noto Sans Sinhala" font එක download කරගෙන install කරගන්න. ඔයා වෙන සිංහල
font එකක් use කරනව නම් ඒ font එකට ගැලපෙන්න code එක වෙනස් කරගන්න.
ඊලඟට වැදගත් ම ප්රශ්නෙ, ඔය config file එක කොහෙන්ද save කරන්නෙ? font config වල config file තැන් කීපයක තියන්න පුළුවන්. ඒ ඔක්කොම තැන් ටික fontconfig manual page එකේ තියනවා. දැනට මම ඔයාට recommend කරන්නෙ ඕක /etc/fonts/conf.d/50-custom-si.conf කියලා save කරන්න. මම දාලා තියෙන්නෙ 50-custom-si කියන file name එකනෙ. ඒක ඔයාට කැමති විදියට වෙනස් කරගත්තට කමක් නෑ හැබැයි 50- කියලා මුලට තියෙන්න ඕනෙ. ඒ වගේම මතක තියාගන්න /etc/fonts/conf.d/ folder එක ඇතුලෙ තියන අනිත් files ඔක්කොම symlinks කියලා.
/etc folder එක ඇතුලෙ වැඩ කරද්දි නම් root privilages ඕනෙ වෙනවා. හැබැයි ඔයාට ඕක ~/.config/fontconfig/conf.d/50-custom-si.conf කියලා save කරන්නත් පුළුවන්. ඒකට root privilages ඕනෙ වෙන්නෙ නෑ. ඔයාට root privilages ගැන අදහසක් නැත්නම් මේ ලිපියෙ තියෙන දේවල් කරන්න කලින් linux basics ගැන හරියට ඉගෙන ගන්න එක තමයි නුවණට හුරු.
උපදෙස් පැහැදිලි ඇති කියලා හිතනවා. මම දාල තියන sample code එක /etc/fonts/conf.d/ වල හරි ~/.config/fontconfig/conf.d/ වල save කරන්න. save කරද්දි file extension එක .conf වෙන්න ඕනෙ සහ file name එක 50- කියලා පටන් ගන්න ඕනෙ.
මේ ලිපිය ගැන ඔයා හිතන්නෙ මොනවද කියල comment කරන්නත් අමතක කරන්න එපා. මම හැම ඉරිදා ම අළුත් post ලියනවා. මේ ලිපියෙන් වටිනාකමක් ලැබුණා නම් මම ඔයාට ආරාධනා කරනවා මේ වගේ තවත් ලිපි කියවන්න ඉරිදා ට https://slrootkit.blogspot.com/ වලට ඇවිත් යන්න. Subscribe කළොත් අළුත් ලිපියක් ආපු ගමන් email පණිවිඩයක් ලබා ගන්නත් පුළුවන්.
වාව් මේකනම් නියම post එකක්, ගොඩක් ගැඹුරු දෙයක් ගොඩක් සරලව විස්තර කරල තියෙනව දිගටම කරගෙන යන්න සුබපතනව❤️
ReplyDeleteමාත් මේ solution එක දැන් try කරල බලන්නයි යන්නෙ
Perfect Solution, its working on linux mint, i really appreciate your work for linux sri lankan community, #respect
ReplyDelete