Die X11-Weiterleitung funktioniert nicht mit mehreren tmux-Sitzungen

9

Wenn ich eine tmuxSitzung lokal starte und offen lasse, ssh in der Ferne und starte eine neue tmux Sitzung (nicht an die alte angehängt, eine brandneue Sitzung) Die X11-Weiterleitung scheint zu brechen. Ich habe diese Problemumgehung für ein ähnliches Problem mit versucht, screenaber ohne Erfolg ...

Die Fehlermeldung, wenn ich versuche, eine GUI-App (wie xeyes) zu starten , wirkt sich wie folgt aus can't open display: wrong authentication. Ich weiß eigentlich nicht, was es sicher ist, weil es so aussieht, als würde es einen Wagenrücklauf ausgeben und einen Teil der Fehlermeldung mit einem neuen überschreiben ...

Im Moment gehe ich einfach alle tmux-Sitzungen durch und schließe sie manuell, die ich lokal gestartet hatte, bevor ich meine neue Remote-Sitzung startete. Gibt es eine Möglichkeit, die X11-Weiterleitung mit gemischten lokalen / Remote- tmuxSitzungen zum Laufen zu bringen?

mgalgs
quelle

Antworten:

12

Ich bin mir nicht 100% sicher, ob es für Sie funktioniert, aber dieser Link hat auch für mich nicht funktioniert, und ich habe einfach die DISPLAY-Variable vom ursprünglichen Terminal kopiert und geschrieben, export DISPLAY=${copied from outside tmux}was gut funktioniert hat - dh

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

Die Funktion von diesem Link gab mir ein völlig anderes DISPLAY, das nicht funktionierte

Apfel
quelle
Immer noch fehlgeschlagen wegen "Falsche Authentifizierung"
mgalgs
danke, dies erlaubte mir, pdfs von tmux mit xdg-open file.pdf zu öffnen
pascalwhoop
Hast du es ssh -Ystattdessen versucht ssh -X?
feedMe
3

Ich hatte ein ähnliches Problem. In meiner Situation war die Einstellung DISPLAYnicht genug. Standardmäßig wird ein Teil der Umgebung beim Starten des tmux-Servers (beim Starten der ersten Sitzung) festgelegt, nicht nur eine neue Sitzung. Das Folgende funktioniert für mich, aber ich bezweifle, dass es optimal ist.

In .tmux.confmachen die Variablen tmux daran erinnern , dass Sie von der äußeren Umgebung halten wollen. Ich habe solche verwendet, die sich zwischen der lokalen Verwendung von Gnome Terminal und der Remote-Verwendung von Terminal.app unterschieden. Einige von ihnen sind wahrscheinlich nicht notwendig, aber ich bin mir nicht sicher, welche. Die -gFlagge ist möglicherweise nicht korrekt.

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

Trotz des Namens "Update-Umgebung" scheint die Einstellung die Umgebung nicht wirklich zu verändern. Sie können es jedoch mit abrufen tmux show-environment. Also habe ich es verwendet, um die Umgebung in meinem zu aktualisieren .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
}

Verwenden tmux show-environment -swäre wahrscheinlich besser gewesen. Aber das wusste ich erst, als ich einen Teil von erneut las man tmux, um diese Antwort zu schreiben.

Trotzdem muss ich mich manchmal trennen und wieder anbringen, wenn ich eine vorhandene Sitzung verwende. Obwohl es viel weniger nervig ist als zuvor.

Vollständige Offenlegung: Die Idee, tmux show-environmentin den precmdund preexecHooks zu verwenden, war nicht meine eigene, aber ich vergesse, wo ich sie gesehen habe. Vielen Dank an alle, die das geschrieben haben, wo immer Sie es geschrieben haben.

Jakar
quelle
Arbeitete für mich ohne das Shell-Skript. Sehr erfreut danke.
wbg