查看包含表情符号的提交时 gitk 崩溃:X 请求失败错误:BadLength(多请求太大或内部 Xlib 长度错误)

查看包含表情符号的提交时 gitk 崩溃:X 请求失败错误:BadLength(多请求太大或内部 Xlib 长度错误)

我可以打开gitk,但一旦打开更改包含表情符号(而不是提交消息)的提交,它就会崩溃。

错误

❯ gitk --all
X Error of failed request:  BadLength (poly request too large or internal Xlib length error)
  Major opcode of failed request:  139 (RENDER)
  Minor opcode of failed request:  20 (RenderAddGlyphs)
  Serial number of failed request:  6687
  Current serial number in output stream:  6706

环境

❯ cat /etc/os-release --plain
NAME="Linux Mint"
VERSION="20 (Ulyana)"
ID=linuxmint
ID_LIKE=ubuntu
PRETTY_NAME="Linux Mint 20"
VERSION_ID="20"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=ulyana
UBUNTU_CODENAME=focal

git

❯ git --version git 版本 2.25.1

例子

6e05ecd 添加 v3->v4 迁移脚本以更新变量 https://github.com/rafaelrinaldi/pure/pull/271/commits/6e05ecdad0e4f623050e154e16c0af0315767940

问题

我尝试了各种方法:

  • 删除~/.Xresources与字体相关的配置
  • 编辑然后删除~/.config/fontconfig/conf.d/30-icons.conf

如果没有成功,大多数问题我发现与st终端。但是,我没有使用它,但是,guake并且问题也发生在yakuakegnome-terminalhyper

我该如何解决这个问题?

答案1

正如建议的https://bugs.launchpad.net/ubuntu/+source/git/+bug/1852985/comments/11,我可以通过安装 unifont 来阻止 gitk 崩溃:

sudo apt install unifont

就像评论中一样,表情符号在 gitk 中显示为空方块,但 gitk 不再崩溃。

答案2

用flag挖掘后XFT_DEBUG我发现了一些奇怪的东西。我使用该标志运行命令并导航到有问题的提交:

❯ XFT_DEBUG=1 gitk --all
XFT_DEBUG=1
XftFontInfoFill: /usr/share/fonts/truetype/noto/NotoSans-Medium.ttf: 0 (15.9999 pixels)
XftFontInfoFill: /usr/share/fonts/truetype/noto/NotoSans-Medium.ttf: 0 (15.9999 pixels)
XftFontInfoFill: /usr/share/fonts/truetype/noto/NotoSans-Medium.ttf: 0 (17.5999 pixels)
XftFontInfoFill: /usr/share/fonts/truetype/noto/NotoSans-Bold.ttf: 0 (17.5999 pixels)
XftFontInfoFill: /usr/share/fonts/truetype/noto/NotoSansSymbols2-Regular.ttf: 0 (17.5999 pixels)
XftFontInfoFill: /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: 2 (17.5999 pixels)
XftFontInfoFill: /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf: 0 (17.5999 pixels)
XftFontInfoFill: /usr/share/fonts/truetype/noto/NotoColorEmoji.ttf: 0 (109 pixels)
X Error of failed request:  BadLength (poly request too large or internal Xlib length error)
  Major opcode of failed request:  139 (RENDER)
  Minor opcode of failed request:  20 (RenderAddGlyphs)
  Serial number of failed request:  6687
  Current serial number in output stream:  6706

然后发现失败之前的最后一行有偏心像素大小

XftFontInfoFill:/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:0(17.5999 像素)

XftFontInfoFill: /usr/share/fonts/truetype/noto/NotoColorEmoji.ttf: 0 (109像素

删除Noto-color-emoji字体解决了问题

apt remove --purge fonts-noto-color-emoji

不再发生崩溃,并且使用一致的字体大小进行渲染

XftFontInfoFill:/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc:2(17.5999 像素)

版本

❯ apt show fonts-noto-color-emoji
Version: 0~20200408-1

答案3

根据我的研究,这似乎是 xorg 库“libXft”中的一个错误(请参阅问题libxft#6和待处理的合并请求libxft!1)。

相关讨论:

根据 Édouard 的回答,解决方法是卸载软件包fonts-noto-color-emoji( apt remove --purge fonts-noto-color-emoji)。

答案4

在 Fedora 上,我可以git-gui通过删除google-noto-emoji-color-fonts软件包来修复遇到的类似错误。

相关内容