El reenvío X11 no funciona con múltiples sesiones tmux

9

Si comienzo una tmuxsesión localmente y la dejo abierta, entonces ssh en forma remota e inicio una nueva tmux sesión (sin adjuntarla a la anterior, una sesión completamente nueva) El reenvío X11 parece interrumpirse. He intentado esta solución para un problema similar con screenpero fue en vano ...

El mensaje de error cuando trato de iniciar una aplicación GUI (como xeyes) es algo relacionado can't open display: wrong authentication. En realidad, no sé de qué se trata con seguridad porque parece que está generando un retorno de carro y sobrescribiendo parte del mensaje de error con uno nuevo ...

Por ahora solo paso y cierro manualmente todas las sesiones de tmux que había comenzado localmente antes de comenzar mi nueva sesión remota. ¿Hay alguna manera de hacer que el reenvío X11 funcione con tmuxsesiones mixtas locales / remotas ?

mgalgs
fuente

Respuestas:

12

No estoy 100% seguro de que funcione para usted, pero ese enlace tampoco funcionó para mí y simplemente copié la variable DISPLAY del terminal inicial y escribí export DISPLAY=${copied from outside tmux}cuál funcionó bien, es decir

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

la función de ese enlace me dio una PANTALLA completamente diferente que no funcionó

manzana
fuente
Todavía falló debido a "Autenticación incorrecta"
mgalgs
gracias, esto me permitió abrir archivos
PDF
¿Intentaste en ssh -Ylugar de ssh -X?
feedMe
3

Tuve un problema similar. En mi situación, la configuración DISPLAYno fue suficiente. De manera predeterminada, parte del entorno se establece al iniciar el servidor tmux (al iniciar la primera sesión), no cualquier sesión nueva. Lo siguiente funciona para mí, pero dudo que sea óptimo.

En .tmux.conf, haga que tmux recuerde las variables que desea mantener del entorno externo. Usé unos que diferían entre el uso local de Gnome Terminal y el uso remoto de Terminal.app. Algunos de ellos probablemente no sean necesarios, pero no estoy seguro de cuál. La -gbandera puede no ser correcta.

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 \
  "

A pesar del nombre "update-environment", la configuración no parece cambiar realmente el entorno. Sin embargo, puede recuperarlo usando tmux show-environment. Entonces lo usé para actualizar el entorno en mi .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
}

Usar tmux show-environment -sprobablemente hubiera sido mejor. Pero no sabía sobre eso hasta que releí una parte man tmuxpara escribir esta respuesta.

Aún así, a veces tengo que separar y volver a conectar, cuando uso una sesión existente. Aunque es mucho menos molesto que antes.

Revelación completa: la idea de usar tmux show-environmenten los ganchos precmdy preexecno era mía, pero olvido dónde lo vi. Gracias a quien escribió eso, donde sea que lo hayas escrito.

jakar
fuente
Me funcionó sin el script de shell. Muy contento gracias.
wbg