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.