LSOpenURLsWithRole() が tmux 内から Yosemite 上でエラー -10810 で失敗する

LSOpenURLsWithRole() が tmux 内から Yosemite 上でエラー -10810 で失敗する

コマンドライン (Terminal.app) からアプリケーションを開こうとするとtmux(MacPorts、バージョン 1.9a 経由でインストール)、次の結果が得られます。

$ open /Applications/Adobe\ Reader.app/
LSOpenURLsWithRole() failed with error -10810 for the file /Applications/Adobe Reader.app.

同じコマンドは正常に動作します。同じターミナルから、tmux の外部で実行された場合。

環境はホストから読み取る必要があります。tmux.conf には次の内容が含まれています。set -g update-environment -r

ターミナルアプリまたはtmuxを再起動すると、別のメッセージが表示されてエラーが発生することがあります。初めに、(下記参照) 再度試行すると、代わりに上記のエラー -10810 が表示されます。

$ open /Applications/Adobe\ Reader.app/
The window server could not be contacted.  open must be run with a user logged in at the console, either as that user or as root.

私は Apple 独自のアプリ (Preview、Font Book、Contacts) とサードパーティのアプリ (Adobe、Evernote など) の両方を試しました。違いはありませんでした。機能していると思われる唯一のアプリは Finder です。(open [dirname]たとえば、)

答え1

これには解決策/回避策があります:

  • のバージョンを更新しますreattach-to-user-namespace。これは、tmux がプログラムを実行するために使用されます。私は macports ではなく brew を使用しているため、次のようにしましたbrew update; brew upgrade reattach-to-user-namespace。Macports でも同様のことができる可能性があります。
  • ファイルに次の内容を追加します.tmux.conf

    set -g default-command "reattach-to-user-namespace -l /bin/bash"

tmux セッションを再起動すると、コマンド ラインからプログラムを起動できるようになります。

詳しい情報は以下をご覧ください。この github の問題。

答え2

問題は、tmuxがブートストラップをシステムドメインに変更してしまうことです(https://trac.macports.org/ticket/18357)。古いバージョンの launchd では tmux のこのバグを回避できましたが、OS X Yosemite で書き直された launchd ではこの tmux のバグを回避できません。

Apple が tmux のバグを回避するアップデートをリリースするまで待つか、少なくとも 6 年間知られている tmux のこのバグを修正するように tmux 開発者に要求する必要があります。

関連情報