macOS Mojaveの最新記事

Minecraftが起動しない:Unable to start Minecraft, if you are running from a dmgってなぜ?

macOSは時間制限や危ないサイトにアクセスさせない仕組みのペアレンタルコントロールがあるので安心です。MacBook Pro Retina Late2012はMinecraftをインストールしています。(Java版)

息子は気分転換にMinecraftやっています。Minecraftはたまにアップデートがあります。権限がないのでアップデートできません。そんな時は、「立ち上がらないから直して!」とお願いしてきます。

普段は、macyarounanoka(管理者権限)のアカウントでログインして、Minecraftを立ち上げるとアップデートが正常し、その後息子のアカウントでログインすると普段通りにMinecraftが立ち上がります。

今回、管理者権限で正常アップデートしてもMinecraftが起動できない問題が発生しました。深いところまで調べて原因を究明し、修正方法をご紹介しています。
Minecraftをペアレンタルコントロール下のユーザーで起動。Minecraft Launcher自体は起動するが、Unable to start Minecraft, if you are running from a dmg, please drag to Applications and try againエラーで失敗していることがわかる




修正方法


この方法は、今までMinecraftを遊べていたのにアップデートで上記のようなエラーで動かなくなった方が対象です。
管理権限のユーザーでターミナルを使ってアクセス権を修正します。ターミナルを開いてください。
ls -l /Applications/Minecraft.app/Contents/MacOS/launcher

このlauncherはMinecraftアイコンをクリックした際に呼び出される実際のプログラムです。
以下のような結果が出力されるかと思います。重要なのは先頭の部分です。
-rwxr-xr-x@ 1 あなたのユーザー名 admin サイズ 日付 時間 launcher

あなたのユーザー名の次にある文字列はグループ名です。グループは必ずadminっていうわけではないようなので、adminの場合、staffの場合、2つの場合で修正方法をご紹介しています。

launcherがadminグループの方向けの修正方法


グループ名が、adminの場合で-rwxr-xr-xとなっていたら、-rwxr-xrwxになるように修正することで子供のアカウントでも起動できるようになります。
以下コマンドで変更することができます。
chmod 757 /Applications/Minecraft.app/Contents/MacOS/launcher

このコマンドは、オーナー権限のユーザーで実行することで動作します。もし、先ほどのls -lの結果が「あなたのユーザー名」で表示されていない場合は、sudoで変更できます。
sudo chmod 757 /Applications/Minecraft.app/Contents/MacOS/launcher

sudoの実行には、管理者権限のパスワードが必要です。

アクセス権を修正することで正常に起動できるようになります。

launcherがstaffグループの方向けの修正方法


グループ名が、staffの場合で-rwxr-xr-xとなっていたら、-rwxrwxr-xになるように修正することで子供のアカウントでも起動できるようになります。
以下コマンドで変更することができます。
chmod 775 /Applications/Minecraft.app/Contents/MacOS/launcher

このコマンドは、オーナー権限のユーザーで実行することで動作します。もし、先ほどのls -lの結果が「あなたのユーザー名」で表示されていない場合は、sudoで変更できます。
sudo chmod 775 /Applications/Minecraft.app/Contents/MacOS/launcher

sudoの実行には、管理者権限のパスワードが必要です。
こちらのパターンは、実際の動作を確認したわけではないので、もしうまくいかないようならフルアクセスを与えて試してみてください。
sudo chmod 777 /Applications/Minecraft.app/Contents/MacOS/launcher



アクセス権の意味


ファイルやフォルダにはアクセス権が設定されています。一種のセキュリティですね。rwx表記はUNIX系OSでは定番です。「ファイル」は、そのファイルのオーナー、グループ、それ以外のユーザー・グループの3つのアクセス権を設定することができます。
先ほどの
-rwxr-xr-x@ 1 あなたのユーザー名 admin サイズ 日付 時間 launcher」
を例にすると
先頭のrwxがオーナーです。
=>オーナーはこのlauncherファイルに読み込み(r)、書き込み(w)、実行(x)権限があります。

次のr-xは、グループです。
=>adminグループに属するユーザーは、このlauncherファイルの読み込み、実行権限があります。

最後のr-xは、その他ユーザー・グループです。
=>オーナーではない、adminグループに属さないユーザーは、このlauncherファイルの読み込み、実行権限があります。

通常読み込み権限(r)と実行権限(r)さえあればアプリやプログラムを起動することができます。


macOSで作ったアカウントは、通常staffグループに所属します。
オーナー以外の別アカウントは、上記の例の場合、その他ユーザー・グループの権限に該当します。

Unable to start Minecraft, if you are running from a dmgの原因


すでにご紹介した修正方法でピンと来た方も多いかと思います。ペアレンタル対象のユーザー(制限ユーザー)での書き込み権限がないとMinecraft.appは判断しています。

なぜ書き込み権限がないと起動できないのか、その重要度がよくわかりませんがlauncher自体のプログラムの仕様です。

ここからは原因の究明のやり方をご紹介します。

Unable to start Minecraft, if you are running from a dmgの原因究明方法


今回の現象は、オーナー=>正常起動、制限ユーザー=>エラーで起動できない、と正常に起動できるパターンがあるので比較的簡単に解決できます。dtrussコマンドでシステム関数の呼び出しの違いを比較することで違いを明らかにできます。

今回原因究明に役立ったコマンド、アプリです。
  1. dtrussコマンド

    システムコールの呼び出しをコンソールに出力できます。これでどんなファイルにアクセスしているのか、そのアクセスは成功したのか、失敗したのかなどがわかります。


  2. Visual Studio Code

    テキストファイルを賢く比較してくれる機能が標準で使えます。Visual Studio Codeは、Microsoftがリリースしている無料のテキスト・ソースコードエディタです。WIndowsのほか、macOS、Linuxなどで動作させることができます


  3. man :

    macOSに内蔵されているコマンド、関数のマニュアルを参照することができます。



プログラムを起動してすぐに停止させる


dtrussコマンド自体は、man dtrussで詳細を知ることができます。厄介なポイントは、dtrussコマンドを実行するためには管理者権限が必要になるところです。
例えば、sudo dtruss launcherで確認することができますが、これは管理者がlauncherを起動した場合の動作になってしまい本来のオーナー、制限ユーザーの違いをあぶり出すことができません。

dtrussは、プロセスIDでも調べることができます。プロセスIDはプログラムを起動することで初めて知ることができます。launcherコマンドはあっという間に処理が進んでしまうので、このままではエラーになる前の状況を調べることができません

そのため、プログラムを起動してすぐに停止させることが必要になります。

はじめに「オーナーユーザー」で結果を記録します
以下の方法でプログラムを起動した直後に停止することができます。ターミナルは2つ開いておきます。
ターミナル1:
 /Applications/Minecraft.app/Contents/MacOS/launcher & kill -STOP $! 

ターミナルには、プロセスIDも出力されます(1)。launcherプログラムをバックグラウンド起動し、そのプロセスID($!)へ停止シグナルを発行しています。


ターミナル2:
sudo dtruss -p (1)

ターミナル1にあるプロセスIDを指定してdtrussを実行しています。

システム関数の呼び出しをチェックするための準備が整いました。ターミナル1のプログラムを再開させます。
ターミナル1:
kill -CONT $! 

CONTシグナルで停止したプロセスを再開させています。

ターミナル1、ターミナル2ともに何かテキストが出力されているかともいます。

Minecraftが起動、またはエラー画面が表示されたところで記録を終了します。
ターミナル2でControl+Cを押す
ターミナル1でControl+Cを押す

ターミナル2をアクティブにしてCmd+Sを押し、「正常」であることがわかるファイル名でdtrussの結果を保存します。

次に「制限ユーザー」(ペアレンタルコントロール対象ユーザー)で結果を記録します。
同様の手順で進めて、ターミナル2を保存する際は、「失敗」であることがわかるファイル名で保存してください。

比較する


ターミナルの出力結果をファイル保存済みです。テキストファイル同士の比較です。ある程度高機能な比較ツールを使った方が簡単です。今回はVisual Codeのデフォルトの比較機能を使用しています。最後から特徴的な違いをチェックすることでエラー要因を特定することができます。

こんな感じで違いをあぶり出すことができます。
macOS Mojave上でVisual Studo Codeを立ち上げ、標準の比較機能を使ってターミナルのログを比較していることがわかる


比較した結果、access関数でエラーになっていました。


比較した結果、以下の違いがあり、制限ユーザーは失敗していることがわかりました。
オーナーでMinecraftを実行した場合、
access("/Applications/Minecraft.app/Contents/MacOS/launcher\0", 0x6, 0x0) = 0 0
制限ユーザー(ペアレンタルコントロール対象)でMinecraftを実行した場合、access("/Applications/Minecraft.app/Contents/MacOS/launcher\0", 0x6, 0x0) = -1 Err#13

access関数は指定したファイルのアクセス権をチェックできる関数です。
0x6はチェックしたいアクセス権です。この値はヘッダファイルで宣言されています。
ファイルの存在確認 0x0、実行ビット確認 0x1、書き込みビット確認 0x2、読み込みビット確認 0x4
0x6は、ファイルの存在確認+書き込みビット確認(W)+読み込みビット確認 (R)を意味しています。

制限ユーザー(ペアレンタルコントロール対象)でMinecraftを動作させるためには、
/Applications/Minecraft.app/Contents/MacOS/launcherに書き込み権限が必要ってことがわかりました。

今回はこうやって原因を突き止め、修正し、Minecraftが動作するようになりました。


まとめ


Minecraftが起動しない:Unable to start Minecraft, if you are running from a dmgってなぜ?launcherに書き込み権限ないためです

今回ご紹介した原因究明方法は自分は動くけど、別ユーザーでは動かないって時に役立つ方法だと思っています。

 

 

Minecraftが起動しない:Unable to start Minecraft, if you are running from a dmgってなぜ?
サブコンテンツ

コメント

comments powered by Disqus

2018.12.15 macyarounanoka(管理者)のメールアドレスを失って、disqusにログインできなくなっていました。 そのためmacyarounanoka-2で返信するように変わっています。 エキサイトのフリーメールアドレス使っていたことに気がつけませんでした。 ちょっとやってしまいました感がありますOrz。 記事へのコメントはいままで通りdisqusでお願いします。 個別のお問い合わせはお問い合わせからお願いします。
2013.8.19 DISQUS(外部コメントサービス)の利用を開始しました。
Facebook, google, Twitter等のアカウントで投稿可能です。


↓↓Office365 Soloは年間契約がお得です↓↓
Microsoft Public Affiliate Program (JP)

  • 祝!初マック(mac book retina 13インチ)!retina美しいです^^マックに関係するTips、情報、はまったことの解決策等
  • Mac野郎なのか
  • プロフィール

このページの先頭へ