Przekazywanie X11 nie działa z wieloma sesjami tmux

9

Jeśli rozpocznę tmuxsesję lokalnie i pozostawię ją otwartą, następnie ssh wejdzie zdalnie i rozpocznę nową tmux sesję (nie łącząc się ze starą, marką lecącą nowej sesji) przekazywanie X11 wydaje się zepsuć. Próbowałem tego obejścia dla podobnego problemu, screenale bezskutecznie ...

Komunikat o błędzie podczas próby uruchomienia aplikacji GUI (podobnej xeyes) jest efektem can't open display: wrong authentication. Właściwie to nie wiem na pewno, ponieważ wydaje się, że generuje powrót karetki i zastępuje część komunikatu o błędzie nowym ...

Na razie po prostu przeglądam i ręcznie zamykam wszystkie sesje tmux, które rozpocząłem lokalnie przed rozpoczęciem mojej nowej sesji zdalnej. Czy jest jakiś sposób, aby przekazywanie X11 działało z mieszanymi tmuxsesjami lokalnymi / zdalnymi ?

mgalgs
źródło

Odpowiedzi:

12

Nie jestem w 100% pewien, że to zadziała dla ciebie, ale ten link też nie działał dla mnie i właśnie skopiowałem zmienną DISPLAY z początkowego terminala i napisałem, export DISPLAY=${copied from outside tmux}który działał dobrze - tj.

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

funkcja z tego linku dała mi zupełnie inny WYŚWIETLACZ, który nie działał

jabłko
źródło
Nadal nie powiodło się z powodu „
Błędnego
dzięki, to pozwoliło mi otworzyć pdf z tmux z xdg-open file.pdf
pascalwhoop
Próbowałeś ssh -Yzamiast ssh -X?
feedMe
3

Miałem podobny problem. W mojej sytuacji ustawienie DISPLAYnie wystarczyło. Domyślnie niektóre środowiska są ustawione podczas uruchamiania serwera tmux (podczas rozpoczynania pierwszej sesji), a nie tylko każda nowa sesja. Poniższe działa dla mnie, ale wątpię, aby było optymalne.

W .tmux.conf, spraw, aby tmux zapamiętywał zmienne, które chcesz zachować ze środowiska zewnętrznego. Użyłem tych, które różniły się między lokalnie za pomocą Gnome Terminal i zdalnie za pomocą Terminal.app. Niektóre z nich prawdopodobnie nie są konieczne, ale nie jestem pewien, które. -gFlaga nie może być prawidłowa.

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

Pomimo nazwy „update-environment” ustawienie wydaje się nie zmieniać środowiska. Możesz go jednak odzyskać za pomocą tmux show-environment. Użyłem go więc do aktualizacji środowiska w moim .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
}

Korzystanie tmux show-environment -sprawdopodobnie byłoby lepsze. Ale nie wiedziałem o tym, dopóki nie przeczytałem ponownie części, man tmuxaby napisać tę odpowiedź.

Mimo to muszę czasami odłączać i ponownie podłączać, korzystając z istniejącej sesji. Chociaż jest to znacznie mniej irytujące niż wcześniej.

Pełne ujawnienie: Pomysł wykorzystania tmux show-environmentw precmdi preexechaki nie był mój własny, ale nie pamiętam gdzie to widziałem. Dziękuję każdemu, kto to napisał, gdziekolwiek to napisałeś.

jakar
źródło
Pracował dla mnie bez skryptu powłoki. Bardzo miło dziękuję.
wbg