O encaminhamento do X11 não funciona com várias sessões do tmux


9

Se eu iniciar uma tmuxsessão localmente e deixá-la aberta, faça o ssh remotamente e inicie uma nova tmux sessão (sem anexar à antiga, uma nova marca). O encaminhamento do X11 parece quebrar. Eu tentei esta solução alternativa para um problema semelhante, screenmas sem sucesso ...

A mensagem de erro quando tento iniciar um aplicativo GUI (como xeyes) é algo para o efeito de can't open display: wrong authentication. Na verdade, eu não sei o que é certo, porque parece que ele está exibindo um retorno de carro e substituindo parte da mensagem de erro por uma nova ...

Por enquanto, apenas passo e fecho manualmente todas as sessões do tmux que eu havia iniciado localmente antes de iniciar minha nova sessão remota. Existe alguma maneira de fazer o encaminhamento do X11 funcionar com tmuxsessões locais / remotas mistas ?

Respostas:


12

Não tenho 100% de certeza de que funcionará para você, mas esse link também não funcionou para mim e apenas copiei a variável DISPLAY do terminal inicial e escrevi export DISPLAY=${copied from outside tmux}qual funcionou bem - ou seja,

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

a função desse link me deu um DISPLAY completamente diferente, que não funcionou


Ainda falhou devido a "Autenticação incorreta"
mgalgs 15/07/2013

Obrigado, isso me permitiu pdfs abertas a partir tmux com file.pdf xdg-open
pascalwhoop

Você tentou em ssh -Yvez de ssh -X?
Feedme

3

Eu tive um problema parecido. Na minha situação, o cenário DISPLAYnão era suficiente. Por padrão, parte do ambiente é configurada ao iniciar o servidor tmux (ao iniciar a primeira sessão), não apenas para qualquer nova sessão. O seguinte funciona para mim, mas duvido que seja ideal.

Em .tmux.conf, faça o tmux lembrar as variáveis ​​que você deseja manter do ambiente externo. Eu usei aqueles que diferiam localmente usando o Gnome Terminal e remotamente usando o Terminal.app. Alguns deles provavelmente não são necessários, mas não sei ao certo. O -gsinalizador pode não estar correto.

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

Apesar do nome "ambiente de atualização", a configuração não parece realmente alterar o ambiente. No entanto, você pode recuperá-lo usando tmux show-environment. Então eu usei para atualizar o ambiente no meu .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
}

Usar tmux show-environment -sprovavelmente teria sido melhor. Mas eu não sabia disso até reler parte do man tmuxtexto para escrever esta resposta.

Ainda assim, tenho que desanexar e reconectar algumas vezes, ao usar uma sessão existente. Embora seja muito menos irritante do que antes.

Divulgação completa: a ideia de usar tmux show-environmentos ganchos precmde preexecnão era minha, mas esqueço onde a vi. Obrigado a quem escreveu isso, onde quer que você tenha escrito.


Trabalhou para mim sem o script de shell. Muito satisfeito obrigado.
wbg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.