Переадресация X11 не работает с несколькими сеансами tmux

если я начну tmux сессия локально и оставить его открытым, то ssh в удаленно и начать new tmux сессия (не привязываясь к старой, совершенно порка новой сессии) X11 переадресация кажется сломанной. Я пробовал этой решение аналогичной проблемы с screen но безрезультатно...

сообщение об ошибке при попытке запустить приложение с графическим интерфейсом (например,xeyes) что-то к эффекту can't open display: wrong authentication. Я на самом деле не знаю, что это точно так похоже, что он выводит возврат каретки и перезаписывает часть сообщения об ошибке новым...

на данный момент я просто пройти и вручную закрыть все сеансы tmux, которые я начал локально, прежде чем начать свой новый удаленный сеанс. Есть ли способ получить переадресацию X11, работающую со смешанным локальным / удаленным tmux сеансы?

27
задан Dan D.
17.12.2022 11:29 Количество просмотров материала 2600
Распечатать страницу

2 ответа

не на 100% уверен, что это сработает для вас, но эта ссылка тоже не сработала для меня, и я просто скопировал переменную DISPLAY из начального терминала и написал export DISPLAY=${copied from outside tmux} который работал нормально-т. е.

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

функция из этой ссылки дала мне совершенно другой дисплей, который не работал

11
отвечен Apple 2022-12-18 19:17

у меня была похожая проблема. В моей ситуации установка DISPLAY не хватает. По умолчанию некоторые параметры среды задаются при запуске сервера tmux (при запуске первого сеанса), а не только нового сеанса. Следующие работы для меня, но я сомневаюсь, что это оптимально.

In .tmux.conf, сделайте tmux запоминающим переменные, которые вы хотите сохранить из внешней среды. Я использовал те, которые отличались локально с помощью терминала Gnome и удаленно с помощью терминала.приложение. Некоторые из их возможно, в этом нет необходимости, но я не уверен, что именно. The -g флаг может быть неправильным.

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

несмотря на название "update-environment", настройка, похоже, на самом деле не изменяет среду. Вы можете, однако, получить его с помощью tmux show-environment. Поэтому я использовал его, чтобы обновить среду в моем .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
}

используя tmux show-environment -s наверное, было бы лучше. Но я не знал об этом, пока не перечитал часть man tmux чтобы написать этот ответ.

тем не менее, иногда мне приходится отсоединяться и присоединяться при использовании существующего сеанса. Хотя это гораздо менее раздражает, чем раньше.

полное раскрытие: идея использовать tmux show-environment наprecmd и preexec крючки были не мои, но я забыл, где я их видел. Спасибо, тому, кто это написал, тому, кто это написал.

1
отвечен jakar 2022-12-18 21:34

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх