OS X Yosemite における LSOpenURLsWithRole エラーの解決
これまで自分はアプリケーションを起動したりファイルを開いたりするのにopen
コマンドを多用していたのですが、OS X Yosemiteにアップグレードしてから
LSOpenURLsWithRole() failed for the application /Applications/TextEdit.app with error -10810 for the file /some/file
というエラーが起こって困っていました。
このエラーはTmux上でopen
コマンドを使用した場合にのみ起こり、通常では問題なく使えていました。
open
コマンドじゃなくてアプリケーションなどでこのエラーが出ている人でも、tmux上で起動した時だけ上記エラーが出るようなら下の解決策が有効かもしれません。
ReattachToUserNamespaceのインストール
結論から言うと、ReattachToUserNamespaceというアプリケーションをインストールして、Tmuxのウィンドウ作成時にはそのコマンドを噛ませたシェルを起動するように変更すると問題がなくなりました。
恥ずかしながら自分は全く知らなかったのですが、このアプリケーションはTmux上でコピーしたものをMac OS Xのクリップボードにもコピーするための結構有名なものだそうです。
だからあんまりこのエラーで詰まっている人が見つからなかったのかな...
インストールはHomebrewでできます。とてもべんり。
$ brew install reattach-to-user-namespace
.tmux.confの変更
Tmuxのウィンドウ作成時に起動するアプリケーションは.tmux.conf
内でdefault-command
オプションを設定することで変更できます。
set-option -g default-command "which reattach-to-user-namespace > /dev/null && reattach-to-user-namespace -l $SHELL || $SHELL"
default-command
オプションはデフォルトでは空になっており、からの場合はログインシェルがデフォルトコマンドになります。
今回はreattach-to-user-namespace
コマンドがない場合でも正常に起動できるよう、which
コマンドの結果によってシェルの起動にReattachToUserNamespaceを噛ませるかどうかを変更するようにしました。
.tmux.conf
の変更が反映されない場合
ずっと前にもこれでハマってすっかり忘れていたのですが、.tmux.conf
の変更を反映させるためにはTmuxのプロセスを一度全て終了させる必要があるため、デタッチしたセッションがある場合には一度すべて殺さなければいけません。
Tmuxセッションが残っているかどうかはps
コマンドで確認します。
$ ps aux | grep taux
自分は以上でopen
コマンド使用時にエラーが起こることはなくなりました。
ついでに Mac OS X の tmux でクリップボードを使えるようにした(pbcopyとか) - 戦場のプログラマー とか tmuxとMacのクリップボードを共有する(copy-mode, vim) - Qiita を見てクリップボード共有の設定もして、今では穏やかにTmuxを使いまくっています。