, последнее обновление:

Tdesktop - используем свои шрифты вместо вшитых

У Telegram Desktop (который написан на C++/Qt5) есть одна большая проблема - нет возможности использовать свои шрифты, только вшитый Open Sans. Это по-умолчанию. Но это можно исправить. Например, как это сделал я:

Pasted image 20211208151519.png

Сборка

Собираем с передачей cmake параметра -DDESKTOP_APP_USE_PACKAGED_FONTS=OFF.

Пользователи Arch Linux ставят этот пакет (или этот пакет, если хочется поконпелять).

Fontconfig

Далее используем кастомный конфиг fontconfig для использования с tdesktop:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<dir>/usr/share/fonts</dir>
<dir>/usr/local/share/fonts</dir>
<dir>~/.fonts</dir>
<dir>~/.local/share/fonts</dir>
<dir>/usr/X11R6/lib/X11/fonts</dir>
<dir prefix="xdg">fonts</dir>
 
<match target="pattern">
<test qual="any" name="family"><string>system ui</string></test>
<edit name="family" mode="assign" binding="same"><string>system-ui</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>mono</string></test>
<edit name="family" mode="assign" binding="same"><string>monospace</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>sans serif</string></test>
<edit name="family" mode="assign" binding="same"><string>sans-serif</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>sans</string></test>
<edit name="family" mode="assign" binding="same"><string>sans-serif</string></edit>
</match>
 
<alias>
<family>Go Mono</family>
<default><family>monospace</family></default>
</alias>
<alias>
<family>PT Sans Caption</family>
<default><family>sans-serif</family></default>
</alias>
<alias>
<family>PT Sans Expert</family>
<default><family>serif</family></default>
</alias>
 
<match>
<test name="family"><string>monospace</string></test>
<edit name="family" mode="assign" binding="strong"><string>Go Mono</string></edit>
</match>
<match>
<test name="family"><string>sans-serif</string></test>
<edit name="family" mode="assign" binding="strong"><string>PT Sans Expert</string></edit>
</match>
<match>
<test name="family"><string>serif</string></test>
<edit name="family" mode="assign" binding="strong"><string>PT Sans Expert</string></edit>
</match>
<match>
<test name="family"><string>DAOpenSansRegular</string></test>
<edit name="family" mode="assign" binding="strong"><string>PT Sans Caption</string></edit>
</match>
<match>
<test name="family"><string>DAOpenSansRegularItalic</string></test>
<edit name="family" mode="assign" binding="strong"><string>PT Sans Caption</string></edit>
<edit name="style" mode="assign" binding="strong"><string>italic</string></edit>
</match>
<match>
<test name="family"><string>DAOpenSansSemibold</string></test>
<edit name="family" mode="assign" binding="strong"><string>PT Sans Caption</string></edit>
</match>
<match>
<test name="family"><string>DAOpenSansSemiboldItalic</string></test>
<edit name="family" mode="assign" binding="strong"><string>PT Sans Caption</string></edit>
</match>
<cachedir>/var/cache/fontconfig</cachedir>
<cachedir prefix="xdg">fontconfig</cachedir>
<cachedir>~/.cache/fontconfig</cachedir>
<match target="font">
<edit mode="assign" name="antialias">
<bool>true</bool>
</edit>
<edit mode="assign" name="embeddedbitmap">
<bool>false</bool>
</edit>
<edit mode="assign" name="hinting">
<bool>true</bool>
</edit>
<edit mode="assign" name="hintstyle">
<const>hintfull</const>
</edit>
<edit mode="assign" name="lcdfilter">
<const>lcddefault</const>
</edit>
<edit mode="assign" name="rgba">
<const>rgb</const>
</edit>
</match>
</fontconfig>

Почините его под себя (в частности назначение шрифтов).

Запуск

Поменяйте команду запуска на:

FONTCONFIG_FILE=/path/to/fontconfig.conf telegram-desktop

Запуск из меню

В .desktop файле поменяйте команду запуска на:

env FONTCONFIG_FILE=/path/to/fontconfig.conf telegram-desktop -- %u