Blink/Mozillaブラウザの表示乱れと、BlinkブラウザのSEGVについて

LinuxにおけるBlink系ブラウザ(Google Chrome, Chromium, Opera, Vivaldi)においてページクラッシュする(場合によっては全ページがクラッシュする)という問題に長く悩まされていた。 SEGVが発生しており、エラーメッセージとしては:

../../third_party/tcmalloc/chromium/src/free_list.h:118] Memory corruption detected.

というものだ。

  • 発生がランダムである(ページによって発生しやすさには偏りがある)
  • 特定ユーザーでしか発生しない
  • 新規ユーザーを作っても発生するが、2番目のユーザーだけは決して発生しない
  • 以前にも同様の事象が発生したことがある
  • 再インストールやブラウザのバージョンによっても解決しない
  • プロファイルやソフトウェアによらず発生する

といった問題かが見られ、解決方法が見えず長く苦しむこととなった。

だが、ようやく解決が見られた。

この問題のほかに、ブラウザでのフォント表示の乱れという問題があった。ビックマップフォントと思わしき汚いフォントが表示されたり、フォントが破断しまともに読めないといった状態が発生していた。 これは拡大率を変更することで改善したりするが、別の箇所でまた発生したりもする。

これについて検証していると、フォント指定が次のようなものの場合に発生するということがわかった。

font-family: Meiryo, メイリオ, ArialMT, "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴ Pro W3", Osaka, Verdana, "MS Pゴシック";

これはねとらぼのものだ。autoblogは以下

font-family: “ヒラギノ角ゴ Pro W3″,”Hiragino Kaku Gothic Pro”,”Osaka”,”メイリオ”,”Meiryo”,”MS Pゴシック”,”MS PGothic”,sans-serif !important;

アスキーは以下

font: 13px/1.231 'Hiragino Kaku Gothic ProN',Meiryo,"メイリオ",'MS PGothic',sans-serif;

これらのスタイルを削除すると正常に表示される。 このPCはMSフォントファミリーと、Osakaフォントのクローンが認識されている。そのため、ブラウザ設定によらずこのどちらかを使おうとするようなのだが、するとフォントが異常表示されるのだ。 これは、どちらか片方を削除しても解決しない。

フォント自体を削除しなくても、これらのフォントを置き換えれば解決する。

<match target="pattern">
  <test qual="any" name="family">
    <string>MS PGothic</string>
  </test>
  <edit name="family" mode="assign" binding="same">
    <string>Ume P Gothic S5</string>
  </edit>
</match>
<match target="pattern">
  <test qual="any" name="family">
    <string>MS Pゴシック</string>
  </test>
  <edit name="family" mode="assign" binding="same">
    <string>Ume P Gothic S5</string>
  </edit>
</match>
<match target="pattern">
  <test qual="any" name="family">
    <string>Osaka</string>
  </test>
  <edit name="family" mode="assign" binding="same">
    <string>Ume P Gothic S5</string>
  </edit>
</match>

単一のtest内にstringを複数置けなくなったけれど、もうちょっとスマートな書き方はできないのだろうか?

また、この問題に対処してから、ブラウザが落ちることはなくなった。 確証はないが、SEGV(Memory corruption)の原因がフォントにある、というのはちょっと想像がつかなかったし、しかも信頼できるMSフォントファミリーやOsakaフォントというのは全く想像が及ばなかった。

なんでそうなるのか、ということはわからないが、とにかく原因がわかってほっとしている。 わうやくまともなブラウジングができるようになって本当によかった。

purple-line(pidgin)を使ってのLINEがエラーになる

purple-lineで突如、相手によってやりとりは空白テキストになり、送ろうとすると

Failed to send message: can not send using plain mode

と言われるという問題が発生していた。

調べてもなんの情報も出なかったので、issue報告した。

これは、Letter Sealingを有効にすると、Letter Sealingを有効にしている相手とはpurple-lineでやりとりできない、ということらしい。
く慰安とレベルの実装だと思ったのだが、サーバー側が有効にしているか知っていて、plainで送ることを受け付けないようだ。

purple-lineを使う場合はLetter Sealingを無効にすること。

Firefoxによるbtrfsの破壊トラブル

btrfsが頻繁に壊れるトラブルに見舞われた。
デスクトップがフリーズし、再起動するもディスクへのアクセスで非常に長い時間がかかる。
くりかえし再現したが、いずれもFirefoxの、特定のプロファイルでYouTubeを見ている最中だった。

btrfs scrubすると、ある特定のポイントに集中的にエラーが発見される。
結局、他のブラウザや、他のプロファイルでは発生しないが、
「問題のあるプロファイルを.mozillaごとリネームしても発生するし、問題のないプロファイルを同じファイル名にリネームしても発生する」という状態だった。

究明はできなかったが、とりあえず報告まで。

ManjaroでCinnamonが破損 + Plasmaのセットアップ

Cinnamonが起動しない

Manjaro 2015-10-19 Stableを適用後の2015-10-22に、Cinnamonが起動しない、というトラブルに見舞われた。
正確には起動はしているように見えるのだが、表示されない。マウスカーソルがウィンドウ位置に合わせて変わるものの、一切の表示がない。

別ユーザーでも生じるため、自力で解明できず、結局Manjaro Forumに助けを乞うこととなった。

crazyg4merzさんにお答えいただき解決した。

2015-10-21に追加でアップデートされたcoglパッケージ(cogl-1.22.0-1.1-x86_64)がダメであったらしい。
これがDEを破壊する毒入りパッケージであったということだ。

sudo pacman -U /var/cache/pacman/pkg/cogl-1.22.0-1-x86_64.pkg.tar.xz

で解決した。

Plasma Workspace

Cinnamonが起動しない間、Plasma 5を使っていた。

ManjaroにPlasma 5がきたばかりの頃は、Plasma Workspaceコンポーネンツ自体のエラーが非常に多く、使い物にならなかった。

そこからすればだいぶ安定したとは思うが、まだkAlarmなど勝手に落ちるプログラムは多い。
また、kcmの内容をみても、まだまだKDE4の品質には追い付いていない、という印象だ。

とはいえ、追加された機能もあり、「完全に機能すれば」かなり素晴らしいDEであるとは思う。
UI自体はPlasma 5よりものしぃKDE 4のほうが好きだし、KDE 3はもっと好きだが。

Plasma 5で追加された機能のうち、私にとって重要だったのは、QuicktileにTopとBottomが追加されたことだ。
これまでは四隅と左右の6方向だったが、ようやくCinnamon同様に8方向に対するタイリングが可能になった。

このほか、強化された点を含め、Plasma 5の魅力が

  • 通知が制限された多段で表示される。Cinnamonは通知がひとつずつなので通知に領域を占領されてしまうし、XFceは大量に表示されてしまいデスクトップがうめつくされてしまう。
  • 8方向にタイルできる
  • KDE関連のアプケーションを含めて統合的にショートカットを設定できる
  • リマインダ機能がある
  • KDEに統合されているアプリケーションは非常に便利に使うことができる。
  • 通知領域への表示・非表示が任意に設定できる
  • DPI設定を忠実に反映してくれる(UIも含めて)
  • タスクスイッチャに使いやすいBreezeがある

Cinnamonのほうがいいのが

  • 通知の非表示が可能
  • PulseAudioアプレットの機能が貧弱
  • systrayでなくsniによる実装で、systrayに入ってくれなかったりする
  • WINEの文字表示が汚い
  • 全体にフォントレンダリングがCinnamonのほうが綺麗

SylpheedとTomboyを使っているが。KMailとKOrganizerを使っていたらもっと便利だろうと思う。

Systray問題

xembed-sni-proxyをインストールし、起動すれば解決するといえばするが、アイコンが表示されない。

私はTrayerを使い

trayer --edge bottom --align right --widthtype request 

のようにしている。右下にしているのは、デュアルディスプレイだから。
ちなみに、Trayerは領域を確保せず、stalonetrayは確保する。
最大化した時にかぶるかどうかが違う。

タスクマネージャを外してtintを使う、というのも方法かもしれない。

WINEにおけるLINEのフォントの問題

XFceでもPlasmaでもWINEのLINEの文字は汚い、というかCinnamon/GNOMEだけが綺麗に表示できる。

XFce, PlasmaはWindowsっぽいレンダリング(むしろビットマップっぽい)、CinnamonとGnomeは通常通りInfinarityのそれだ。

しかも、PlasmaやXFceにおいては、フォント幅が適切に保たれず、フォントが重なって欠けて見えるため可読性が非常に低い。

これについては、regedit.exeHKEY_CURRENT_USER\Control Panel\Desktop以下

FontSmoothing REG_SZ 2
FontSmoothingGamma REG_DWORD 0x000003e8(1000)
FontSmoothingOrientation REG_DWORD 0x00000001(1)
FontSmoothingType REG_DWORD 0x00000002(2)

のように設定。これで幅は確保される。
だが、アンチエイリアスは効かないので、HKEY_CURRENT_USER\Software\Wine\X11 Driver\ClientSideWithRenderという値を作る。これできくようになる。

ただ、英字フォントについてはAAが効かないので違和感は結構ある。
これは、regeditの表示など、LINE以外のいくつかにも有効に働き、そこでは英字に対してもきいている。
しかし、Freetypeのものと比べると随分汚い。

色々ためしてみたのだが、うまく行かなかった。

携帯万能の「送信メールが取り込めない」問題をなんとかする

私はWILLCOMのW11Kを使っているのだが、このメールデータを取り込むのに、「携帯万能」以外の道がない。

そのため、Amazonで携帯万能を購入して使っているのだが(昨日のエントリの通り)、これがまた曲者で、対応するドライバがWindows 2000/XP/Vista/7の32bitのみという。

Windows 8でもWindows 7 64bitでもダメというのは、今時相当きつい。
うちではWindows XPマシンが1台あるだけだ。

さて、Windows XPはトリスターサポートの「まっさらにしろ」という指示により苦労しつつも初期化したのだが、取り込んだところ結局同じ問題だ。
送信メールが正常に取り込めない。

トリスターの人は、Outlookがどうとか、全く違うところに話を持って行ってしまうのだが、明らかに「アップデータでバグを埋め込んだ」話だ。

で、エクスポートしたCSVを実際に見てみた。

lvで見てみると、ある時期を境に文字化けが分かれている。これはまぁ、わかる。
そして、Mousepadで開こうとすると、不正なシーケンスがあるとして開けない。

Shift-JISならShift-JISで開けるソフトなので、これは恐らく違う文字エンコーディングがバイト列をそのままに吐き出している、ということだろう。
だとしたら、まだ手はある。

試しに、headtailcutで文字化けしているところとしていないところだけを切り出してnkf -gしてみると

$ tail send-text.csv | cut -f 5 -d "," | nkf -g
Shift_JIS
$ head send-text.csv | tail -n 9 | cut -f 5 -d "," | nkf -g
UTF-8
$ head send-text.csv | cut -f 4 -d "," | nkf -g
Shift_JIS

やっぱり

  • 以前は全てShift-JISだった
  • 現在は、Subjectまでの4フィールドはShift-JISだが、本文だけUTF-8である

ということが分かった。

さすがにこの混在はきついので、分離する。

$ head -n 3825 send-text.csv >| sendmail-UTF8sec.csv
$ head -n+3826 send-text.csv >| sendmail-SJISsec.csv

通常は後半部分は考えなくていいはずだ。
後半部分は単に結合すれば良いように変換しておく。

$ nkf -w -Lu sendmail-SJISsec.csv sendmail-SJISsec.utf8.csv

で、困ったことにこの状態だとRubyでCSVを切り出すことができない。RegExpが使えないために、CSVライブラリも使えないのだ。

Perlで試したところ

  • perl -nなら黙っていてもできる
  • while (<>)だとuse utf8の必要あり

というわけで、結局こういうコードになった。

#!/usr/bin/zsh

head -n1 "$1" | nkf -w -Lu >| out.csv

tail -n+2 "$1" | perl -n -e 'if ($_ =~ /"(?:[^"]*|"")*"\s*$/) { print STDOUT $&; print STDERR $`; print STDERR "\n" }' >| out.l 2>| out.f
nkf -w -Lu out.l > out.lu
nkf -w -Lu out.f > out.fu

ruby -e 'File.foreach(ARGV[0]).zip(File.foreach(ARGV[1])) {|i,j| puts(i.chomp + "," + j) }' out.fu out.lu | sort -u >> out.csv

単純に,で区切るとエンベロープやSubjectに入っている可能性があるため、せめてこうした。多分これでいけるはずだ。

一時ファイルなしでいきたかったが、そうするとnkfから1行ずつ読む必要があり、ちょっと面倒だった。

ちなみに、これ

  • 1行目はCSVヘッダーでShift-JIS
  • sortしている関係で日付順になる。sort -ruにすればオリジナルと同じ配列

この状態だとまともなCSVなので、MHやemlに変換するのも、それほど難しくない。

ほんとにひどい品質のソフトだと思う。

LinuxBeanのアップデート不能問題

LinuxBeanのアップデートができなくなっていた。

E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/geekconnection.org_remastersys_ubuntu_dists_quantal_main_i18n_Translation-en
E: パッケージリストまたは状態ファイルを解析または開くことができませんでした

Remastersysのリポジトリ閉鎖に伴い、geekconnection.orgに変更されていたが、geekconnection.orgも閉鎖された模様。

暫定的処置としては、ソフトウェアソースからgeekconnection.org_remastersysを外す。
LinuxBean スクリプトの更新で対応される模様。

「update-grubがコケる」問題、ついに解決か

ブログでは4月14日のアーティクルでレポートし、 先日のアーティクルで再インストールという解決方法に至ったことを紹介した。

実際には2月には問題は発生しており、実に4ヶ月以上に渡って、Grubのトラブルということでいえば7ヶ月に渡って悩まされてきた。

この問題はManjaro Forumに、LinuxQuestionに、そしてGoogle+でと訊いていくことになったが、誰ひとりとして解決策を提示することはできなかった。 状況変化に合わせてManjaro Forumで再質問し、再インストールという解決策をとったものの、 結局アップデート時に問題は再発、絶望的な気分を味わった。

だが、そこで気づいたことがあったので、試してみることにした。

  • 再インストール
  • update-grub -> 成功
  • LVM snapshot作成
  • update system -> 失敗
  • LVM snapshotのマージ
  • update-grub -> 成功
  • LVM snapshot作成
  • update-grub -> 失敗
  • LVM snapshot削除
  • update-grub -> 成功
  • update system -> 成功

system upgradeでの失敗によるシステム損傷に備え、巻き戻しを可能にしてきたLVMスナップショット。 実際にこの巻き戻しによってとても救われてきた。 それによってここまで環境を崩壊させず「ダメでした」で済んでいた。

だが、それが原因だったというのか。 LVM snapshotが原因でupdate grubが失敗するなんていうことがありうるのか。 全く関係ないように見えるのに。

とりあえず、完全に解決したのか分からないが、解決したように見える。

これは難題だった…

AURメーリングリストに投稿しました

Arch LinuxのAURリポジトリにあるfcitx-mozc-ut(とmozc-ut関連全般)がビルドできなくなっていた。日本語を使う人にとっては致命的な問題だ。

そこでその問題の解決を望んでAURのメーリングリストにビルドできないよ、ということを返すとsvnを手動で取るといいよ、とのお答え。せっかく答えていただいたので、自力解決に向けて試行錯誤を繰り返した。

かなり時間もかかったし、色々聞いてみたりもしたが、結局は次のことが重なっていたのだった。

  1. googlecode.comがIPv6でアクセスできない
  2. mzocdic-ut, edictが更新されており、ソースを取得できない
  3. Japanese Usage Dictionaryのrevision 0を要求しているが、revision 0はない

アクセスできてないんじゃない?hostしてみれば?という指摘を受けて気がついたのだが、これでIPv6でアクセスできていない(DNSはAAAAレコードを返してくるが、pingも通らない)そのため簡単な解決策として、/etc/hostsにIPv4アドレスのみを記述した。

しかし、Japanese Usage Dictionaryはrevision 0を要求しているので、これがないと拒否される。単純にrevision指定なしとするとrevision 10が取得されるので、指定なしでもいいと思ったのだが、010に変更。

それでSubversionのエラーはなくなるが、Mozcdic UTがNot fountになるのでサーバーからファイルリストを獲得すると、更新されファイル名が変わっている(日付が新しくなっている)。そのため、mozcdirとedictのアドレスを変更、当然チェックサムが通らず失敗するので、失敗したままそのソースファイルからsha512sumでチェックサムを取得してPKGBUILDを修正。

これで成功した。一応、それをパッチとして投稿した。反応はないが。とはいえ、Mozc-UTは日本人にとっては極めて重要だろう。