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 ?

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ł


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ś.


Pracował dla mnie bez skryptu powłoki. Bardzo miło dziękuję.
wbg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.