Переадресація X11 не працює з декількома сеансами tmux


9

Якщо я розпочну tmuxсеанс локально і залиште його відкритим, потім віддаліть дистанційну передачу і запустити новий tmux сеанс (не приєднуючись до старого, бренд, що розгортає новий сеанс) Передача X11, здається, зламається. Я спробував цей обхідний шлях для подібної проблеми з , screenале безрезультатно ...

Повідомлення про помилку, коли я намагаюся запустити додаток GUI (як xeyes), є чимось ефектом can't open display: wrong authentication. Я насправді не знаю, що це напевно, тому що здається, що він видає повернення каретки та замінює частину повідомлення про помилку новим ...

На даний момент я просто проходжу і вручну закриваю всі сеанси tmux, які я розпочав локально перед початком нового віддаленого сеансу. Чи є спосіб змусити переадресацію X11 працювати зі змішаними локальними / віддаленими tmuxсесіями?

Відповіді:


12

Не на 100% впевнений, що він буде працювати для вас, але це посилання не працювало і для мене, і я просто скопіював змінну DISPLAY з початкового терміналу і написав, export DISPLAY=${copied from outside tmux}що працює добре - тобто

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

Функція цього посилання дала мені зовсім інший дисплей, який не працював


Досі не вдалося через "Неправильну автентифікацію"
mgalgs

дякую, це дозволило мені відкрити pdfs з tmux за допомогою xdg-open
file.pdf

Ви намагалися ssh -Yзамість цього ssh -X?
feedMe

2

У мене була схожа проблема. У моїй ситуації налаштування DISPLAYбуло недостатньо. За замовчуванням деяке середовище встановлюється при запуску сервера tmux (при запуску першого сеансу), а не будь-який новий сеанс. Наступне працює для мене, але я сумніваюся, що це оптимально.

У .tmux.confзмушуйте tmux запам’ятати змінні, які ви хочете зберегти від зовнішнього середовища. Я використовував ті, які відрізнялися між локальним використанням терміналу Gnome та віддаленим використанням Terminal.app. Деякі з них, мабуть, не потрібні, але я не знаю, які. -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гачках не була моєю власною, але я забуваю, де я це бачив. Дякую тому, хто це написав, де б ви це не написали.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.