无法在 tmux 中启动应用程序

无法在 tmux 中启动应用程序

当我尝试从 tmux 启动 Sublime Text 或 SourceTree 时出现此错误:

$ subl
Unable to launch Sublime Text 2

$ stree
Unable to open SourceTree

看来我也无法打开 os x 应用程序:

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

我使用的是 Yosemite OS X 10.10 (14A388a)、带 zsh 的 iTerm 2、tmux 1.0a。使用 bash 时也遇到了同样的问题。知道发生了什么吗?

答案1

更新:使用 tmux >= 时,此过程是不必要的v2.6

我发现了一个作者:Brendon Rapp描述不需要大量别名的解决方案。

$ brew install reattach-to-user-namespace

将以下行添加到 ~/.tmux.conf 的末尾:

if-shell 'test "$(uname)" = "Darwin"' 'source ~/.tmux-osx.conf'

创建一个名为 ~/.tmux-osx.conf 的文件,内容如下:

set-option -g default-command "reattach-to-user-namespace -l bash"
  • 上述解决方案允许同一个 .tmux.conf 文件在 Linux 和 OS X 下正常工作。如果您只使用 OS X,则只需将“default-command”选项直接添加到您的 ~/.tmux.conf 中。

  • 如果您使用 bash 以外的 shell,请在“-l”开关后将“bash”替换为您的 shell。

答案2

我在使用 tmux 时遇到了同样的问题,并使用重新附加到用户命名空间和 shell 别名。

  1. $ brew install reattach-to-user-namespace
  2. $ vi ~/.bash_aliases

    alias subl='reattach-to-user-namespace subl'
    alias stree='reattach-to-user-namespace stree'
    alias open='reattach-to-user-namespace open'
    
  3. $ source ~/.bash_aliases

虽然不优雅,但是可以。

答案3

我发现,如果我尚未处于会话中,则将其添加到我的别名中对我来说不起作用(即,如果我只是处于一个裸的、无 iTerm 的会话tmux中,它会引发错误)。tmux

如果您只想在 tmux 会话中设置此别名,请尝试以下操作:

if [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; then
  alias stree="reattach-to-user-namespace stree"
fi

您可能需要echo $TERM在 tmux 会话中查看您的$TERM环境变量设置为何值。我的环境变量实际上是screen-256color,因此我适当地替换了上面的值。

祝你好运!

相关内容