絵文字を含むコミットを表示すると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 --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

フラグを持って、あちこちを見下ろすと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-emojiapt remove --purge fonts-noto-color-emoji)を削除することです。

答え4

git-guiFedoraでは、パッケージを削除してgoogle-noto-emoji-color-fonts発生した同様のエラーを修正できました。

関連情報