L'inoltro X11 non funziona con più sessioni tmux


9

Se inizio una tmuxsessione localmente e la lascio aperta, quindi ssh in remoto e inizio una nuova tmux sessione (non collegandomi a quella precedente, un marchio che sculaccia una nuova sessione), l'inoltro X11 sembra interrompersi. Ho provato questa soluzione alternativa per un problema simile con screenma senza risultati ...

Il messaggio di errore quando provo ad avviare un'app per la GUI (come xeyes) è qualcosa di efficace can't open display: wrong authentication. In realtà non so di cosa sia sicuro perché sembra che stia emettendo un ritorno a capo e sovrascrivendo parte del messaggio di errore con uno nuovo ...

Per ora ho appena passato e chiuso manualmente tutte le sessioni di tmux che avevo avviato localmente prima di iniziare la mia nuova sessione remota. Esiste un modo per far funzionare l'inoltro X11 con tmuxsessioni miste locali / remote ?

Risposte:


12

Non sono sicuro al 100% che funzionerà per te, ma quel collegamento non ha funzionato neanche per me e ho appena copiato la variabile DISPLAY dal terminale iniziale e ho scritto export DISPLAY=${copied from outside tmux}che funzionava bene - cioè

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

la funzione da quel link mi ha dato un DISPLAY completamente diverso che non ha funzionato


Ancora fallito a causa di "Autenticazione errata"
mgalgs

grazie, questo mi ha permesso di aprire pdf da tmux con xdg-open file.pdf
pascalwhoop

Hai provato ssh -Yinvece ssh -X?
feedMe

3

Ho avuto un problema simile. Nella mia situazione, l'impostazione DISPLAYnon era abbastanza. Per impostazione predefinita, parte dell'ambiente viene impostato all'avvio del server tmux (all'avvio della prima sessione), non solo a qualsiasi nuova sessione. Quanto segue funziona per me, ma dubito che sia ottimale.

In .tmux.conf, fai in modo che tmux ricordi le variabili che vuoi mantenere dall'ambiente esterno. Ho usato quelli che differivano tra localmente usando Gnome Terminal e in remoto usando Terminal.app. Alcuni di loro probabilmente non sono necessari, ma non sono sicuro di quale. La -gbandiera potrebbe non essere corretta.

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

Nonostante il nome "ambiente di aggiornamento", l'impostazione non sembra realmente modificare l'ambiente. È possibile, tuttavia, recuperarlo utilizzando tmux show-environment. Quindi l'ho usato per aggiornare l'ambiente nel mio .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
}

Usare tmux show-environment -sprobabilmente sarebbe stato meglio. Ma non lo sapevo fino a quando non ho letto di nuovo una parte man tmuxper scrivere questa risposta.

Tuttavia, devo staccare e ricollegare a volte, quando si utilizza una sessione esistente. Anche se è molto meno fastidioso di prima.

Divulgazione completa: l'idea di utilizzare tmux show-environmentin the precmde preexechook non era la mia, ma dimentico dove l'ho vista. Grazie a chiunque l'abbia scritto, ovunque tu l'abbia scritto.


Ha funzionato per me senza lo script della shell. Molto contento grazie.
mercoledì
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.