MacにInkscapeをインストールして日本語化すると、二度と起動できなくなる困ったバグ(仕様?まさかね)があるようです。
この記事に書いた方法で復旧できたので、同様の現象でお困りの方は試してみてください。
もくじ
どんなエラー?
著者のMacで起きたのはこういう現象でした。
- Inkscapeをインストール
- 「Preferences…」で日本語設定
- Inkscape(XQuartz)を終了
- Inkscapeを起動しようとする
- エラーウィンドウが表示され、起動できない
日本語に設定したのが原因とわかっていても、再起動できないので設定を元に戻すことができません。どうしろって言うのよ!
再インストールも試しましたが状況は改善しませんでした。
こうなったら腰を据えて直すか、Inkscapeを使うのを諦めるしかありません。
諦めたくないので直せるかやってみましょう。
ログを見てみよう
どこかに問題があるなら何か出ているはず!
次の方法でエラーログをみてみました。
1. Finder から見る
Inkscapeが置いてあるフォルダ(大体みんな「アプリケーション」に入れてると思います)をFinderで開きましょう。
見つかったら右クリックし、「パッケージの内容を表示」を選んでください。「Contents」と言うフォルダが表示されるはずです。
2. ターミナルから本体を起動
「Contents」、「MacOS」とフォルダを開いていくと「Inkscape」と言うファイルが見つかります。これをターミナルから起動したいと思います。
Go2Shellをインストールしている場合はボタンを押すだけで準備完了ですが、そうでない場合はターミナルを開いてから次のコマンドを実行する必要があります。
cd /Applications/Inkscape.app/Contents/MacOS
そもそもInkscapeがアプリケーション内にない場合は、「Inkscape」を右クリックして「情報を見る」で情報ウィンドウを開き、「場所」に書いてあるテキストをコピーすると良いでしょう。
cd (ここに「場所」をペースとしてください)
さて、ターミナルの準備ができたら「Inkscape」を起動してみましょう。
実行コマンドはこちらです。
open inkscape
実行すると別のターミナルウィンドウが開いて、ちょっと待ってたら…あ、やっぱり起動できませんでした。まだ何もしてませんので、直ってるはずがないんです、ハイ。
肝心のログは新しく開いた方のターミナルウィンドウに残っているはずです。見てみましょう。
3. エラーログを読む
著者の環境ではこんなかんじの内容でした。
(process:1661): GtK-WARNING **: Locale not supported by C library.
Using the fallback ‘C’ locale.
Fontconfig worning: ignoring sjis.UTF-8: not a valid launguage tag
libc++abi.dylib: terminating with uncaught exception of type Glib::ConvertError
よく見ると一箇所、明らかにおかしい部分があるんです。
ignoring sjis.UTF-8: not a valid launguage tag
(sjis.UTF-8を無視:有効なlaunguageタグではありません)
うん、そうだよね。だって Shift-JIS と UTF-8 って別の文字コードだもん。なんでその2つくっつけちゃったんだ…混ぜたら危険なやつだそれは…!
つまり、言語設定を変更したことによって文字コードまわりの処理が想定外の方向に暴走しちゃったのがエラーの原因らしいぞ、と言うことがわかりました。
なのでそのあたりの処理を軌道修正しちゃいましょう。
でしたらあなたのInkscapeは、この記事に書いた方法では直せない可能性が高いです。お役に立てなくて残念です。
サクッと解決!
1. Inkscapeのソースコードを開く
(たぶんアプリケーション内にある)Inkscape.appを右クリックし、「パッケージの内容を表示」を選択してください。
すると「Contents」というフォルダが表示されるので、「Contents」、「Resources」、「bin」とフォルダを開いていきます。そこにある「inkscape」というファイルをお好きなテキストエディタで開いてください。
2. 問題の箇所に処理を書き加える
ソースを開いたら、次は問題のある箇所を探しましょう。
と、これはもう探してあるのでお見せしますね。このあたりになります。
# NOTE: Have to add ".UTF-8" to the LANG since omitting causes Inkscape
# to crash on startup in locale_from_utf8().
if [ "x$LANGSTR" == "x" ]
then
# override broken script
[ $_DEBUG ] && echo "Overriding empty LANGSTR" 1>&2
export LANG="en_US.UTF-8"
else
tmpLANG="`grep \"\`echo $LANGSTR\`_\" /usr/share/locale/locale.alias | \
tail -n1 | sed 's/\./ /' | awk '{print $2}'`"
if [ "x$tmpLANG" == "x" ]
then
# override broken script
[ $_DEBUG ] && echo "Overriding empty LANG from /usr/share/locale/locale.alias" 1>&2
export LANG="en_US.UTF-8"
else
[ $_DEBUG ] && echo "Setting LANG from /usr/share/locale/locale.alias" 1>&2
export LANG="$tmpLANG.UTF-8"
fi
fi
[ $_DEBUG ] && echo "Setting Language: $LANG" 1>&2
export LC_ALL="$LANG"
バージョンによって多少位置が変わるかもしれませんが、だいたい135行目あたりから始まっているのではないでしょうか。
文字コードがおかしくなった時だけ調整してあげたいので、追加する処理はこんなかんじにしました。
if [ "$LANG" == "sjis.UTF-8" ]
then
LANG="ja_JP.UTF-8"
fi
これを、目印の位置にコピペしてください。
# NOTE: Have to add ".UTF-8" to the LANG since omitting causes Inkscape
# to crash on startup in locale_from_utf8().
if [ "x$LANGSTR" == "x" ]
then
# override broken script
[ $_DEBUG ] && echo "Overriding empty LANGSTR" 1>&2
export LANG="en_US.UTF-8"
else
tmpLANG="`grep \"\`echo $LANGSTR\`_\" /usr/share/locale/locale.alias | \
tail -n1 | sed 's/\./ /' | awk '{print $2}'`"
if [ "x$tmpLANG" == "x" ]
then
# override broken script
[ $_DEBUG ] && echo "Overriding empty LANG from /usr/share/locale/locale.alias" 1>&2
export LANG="en_US.UTF-8"
else
[ $_DEBUG ] && echo "Setting LANG from /usr/share/locale/locale.alias" 1>&2
export LANG="$tmpLANG.UTF-8"
### ここに入れてください ###
fi
fi
[ $_DEBUG ] && echo "Setting Language: $LANG" 1>&2
export LC_ALL="$LANG"
修正したら上書き保存してください。
もう一度Inkscapeを起動したら、日本語化された状態で開けるはずです。
まとめ
日本語化したあとにInkscapeが起動できなくなったら、文字コードの処理が悪さしている可能性があります。ソフトのコードに手を加えてみましょう。
それではみなさんのInkscapeも無事に直りますように!
この記事へのコメントはありません。