V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
livc
V2EX  ›  Linux

ubuntu 16 下 telegram 如何更换中文字体

  •  
  •   livc ·
    livc · 2017-11-11 12:22:50 +08:00 · 6439 次点击
    这是一个创建于 2556 天前的主题,其中的信息可能已经有所发展或是发生改变。
    默认的 tg 中文字体丑的一笔啊。。根本不能看,找到了一片文章: https://milkice.me/2017/05/ubuntu-telegram-cjk-font-optimization/ 但是按照这样禁用两个字体后,字体还是没有变化
    9 条回复    2017-11-14 22:02:15 +08:00
    ysc3839
        1
    ysc3839  
       2017-11-11 18:15:38 +08:00 via Android
    和 Windows 版同样的思路,Hook 字体相关的 API,然后换成自己的字体。
    不过我不懂 Linux 开发,帮不了你……
    ysc3839
        2
    ysc3839  
       2017-11-11 18:40:03 +08:00 via Android
    去搜索了一下,Qt 在 Linux 下可能用的是 FreeType。所以可以考虑 Hook FreeType,不过前提是动态加载 FreeType 的 so,静态编译进去的话就没办法了。
    还可考虑 Hook fopen?
    livc
        3
    livc  
    OP
       2017-11-11 19:54:58 +08:00
    @ysc3839 #2 尽量不想重新编译它。。。
    ysc3839
        5
    ysc3839  
       2017-11-11 22:33:39 +08:00
    #4 的方案不能确定是否有效。
    在 FT_New_Face 下断点,手动修改字体文件名,发现字体是会变的,所以可以使用 Hook 的方案。
    ysc3839
        6
    ysc3839  
       2017-11-11 23:10:46 +08:00
    搜了一下,Linux 下要 Hook 函数比 Windows 简单得多,直接设置 LD_PRELOAD 环境变量就可以了。
    https://blog.netspi.com/function-hooking-part-i-hooking-shared-library-function-calls-in-linux/

    找时间写一个试试吧。
    iwtbauh
        8
    iwtbauh  
       2017-11-12 08:52:07 +08:00 via Android
    以前我在 Ubuntu 上用过 tg,发现原因是 tg 静态连接的字体配置库版本太旧,无法与系统的配置文件兼容导致的
    解决方法:重新编译 tg,取消静态连接 //tg 客户端应该是开源的吧
    milkice
        9
    milkice  
       2017-11-14 22:02:15 +08:00 via Android
    有两个方案,一个是我的禁用字体,还有一个是 meto 的调整字体优先级 ( https://i-meto.com/telegram-ibus/),若干个月前在 Ubuntu 16.04 上测试通过,不过之前也有人报告过两个方案均不可行 现在等楼上 @ysc3839 出 Linux 版的字体劫持 或者把思源黑体塞入 tg 编译之 后这也是我一开始想尝试的方案不过不知道什么原因似乎失败了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2637 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:45 · PVG 18:45 · LAX 02:45 · JFK 05:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.