X11转发不适用于多个tmux会话


9

如果我tmux在本地启动一个会话并使其保持打开状态,然后远程ssh并启动一个 tmux会话(不附加到旧会话上,这是一个跨越新会话的品牌),X11转发似乎已中断。我已经尝试过这种解决方法来解决类似的问题,screen但无济于事...

当我尝试启动GUI应用程序(如xeyes)时出现的错误消息与的效果有关can't open display: wrong authentication。我实际上不知道这是什么,因为它似乎正在输出回车并用新的错误消息覆盖了错误消息的一部分...

现在,我只需要经历并手动关闭在本地启动的所有tmux会话,然后再开始新的远程会话。有什么方法可以使X11转发与本地/远程tmux会话混合工作?

Answers:


12

不是100%的确定它对您有用,但是该链接对我也不起作用,我只是从初始终端复制了DISPLAY变量,并写出了export DISPLAY=${copied from outside tmux}很好的效果-即

log in ...
echo $DISPLAY # remember this
tmux a
export DISPLAY=${variable from memory}

该链接提供的功能为我提供了完全不同的DISPLAY,但无法使用


仍然由于“身份验证错误”而失败
mgalgs 2013年

谢谢,这使我可以使用xdg-open file.pdf从tmux打开pdf
pascalwhoop,

您尝试ssh -Y代替ssh -X吗?
feedMe '18

3

我有一个类似的问题。在我的情况下,设置DISPLAY还不够。默认情况下,启动tmux服务器时(启动第一个会话时)会设置一些环境,而不仅仅是任何新会话。以下内容对我有用,但我怀疑这是最佳选择。

在中.tmux.conf,使tmux记住要从外部环境保留的变量。我使用的是本地使用Gnome Terminal和远程使用Terminal.app之间的区别。其中一些可能不是必需的,但我不确定是哪个。该-g标志可能不正确。

set -g update-environment "\
  CLUTTER_IM_MODULE \
  DBUS_SESSION_BUS_ADDRESS \
  DBUS_SESSION_BUS_ADDRESS \
  DEFAULTS_PATH \
  DESKTOP_AUTOSTART_ID \
  DESKTOP_SESSION \
  DISPLAY \
  GDMSESSION \
  GNOME_DESKTOP_SESSION_ID \
  GPG_AGENT_INFO \
  GTK_IM_MODULE \
  GTK_MODULES \
  SESSION_MANAGER \
  SSH_AGENT_PID \
  SSH_ASKPASS \
  SSH_AUTH_SOCK \
  SSH_CONNECTION \
  WINDOWID \
  WINDOWPATH \
  XAUTHORITY \
  XDG_CONFIG_DIRS \
  XDG_CURRENT_DESKTOP \
  XDG_DATA_DIRS \
  XDG_MENU_PREFIX \
  XDG_RUNTIME_DIR \
  XDG_SEAT \
  XDG_SESSION_DESKTOP \
  XDG_SESSION_ID \
  XDG_SESSION_TYPE \
  XDG_VTNR \
  XMODIFIERS \
  "

尽管名称为“ update-environment”,但该设置似乎并没有真正改变环境。但是,您可以使用进行检索tmux show-environment。所以我用它来更新我的环境.zshrc

zshrc_restore_x11_vars()
{
  if [[ -z $TMUX ]]
  then
    return 0
  fi

  local tmux_env="$(tmux show-environment)"

  for var_line in ${(f)tmux_env}
  do
    if [[ $var_line == -[A-Za-z_]* ]]
    then
      local var=${var_line#-}
      unset $var

    elif [[ $var_line == [A-Za-z_]*'='* ]]
    then
      export $var_line

    fi
  done
}

precmd()
{
  zshrc_restore_x11_vars
}

preexec()
{
  zshrc_restore_x11_vars
}

使用tmux show-environment -s可能会更好。但直到重新阅读部分内容man tmux以撰写此答案之前,我才知道这一点。

不过,在使用现有会话时,有时我仍必须分离并重新连接。尽管它比以前少了很多烦人的事。

完全公开:tmux show-environmentprecmdpreexec钩子中使用的想法不是我自己的,但是我忘记了在哪里看到它。谢谢,无论写在哪里的人。


在没有shell脚本的情况下为我工作。非常高兴谢谢您。
wbg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.