Mac版のInkscapeが起動しなくなっちゃった時の対処法

MacにInkscapeをインストールして日本語化すると、二度と起動できなくなる困ったバグ(仕様?まさかね)があるようです。
この記事に書いた方法で復旧できたので、同様の現象でお困りの方は試してみてください。

スポンサーリンク

どんなエラー?

エラーウィンドウ

著者のMacで起きたのはこういう現象でした。

  1. Inkscapeをインストール
  2. 「Preferences…」で日本語設定
  3. Inkscape(XQuartz)を終了
  4. Inkscapeを起動しようとする
  5. エラーウィンドウが表示され、起動できない

日本語に設定したのが原因とわかっていても、再起動できないので設定を元に戻すことができません。どうしろって言うのよ!
再インストールも試しましたが状況は改善しませんでした。

こうなったら腰を据えて直すか、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」というファイルをお好きなテキストエディタで開いてください。

上でログを確認した時の「Inkscape」ファイルとは別のファイルなのでご注意ください。「Contents」フォルダまで戻って探し直してくださいね。

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も無事に直りますように!

コメント

スポンサーリンク