Chuyển tiếp X11 không hoạt động với nhiều phiên tmux


9

Nếu tôi bắt đầu một tmuxphiên cục bộ và để nó mở, sau đó ssh từ xa và bắt đầu một phiên mới tmux (không gắn với phiên cũ, một phiên mới đánh dấu thương hiệu) chuyển tiếp X11 dường như bị hỏng. Tôi đã thử cách giải quyết này cho một vấn đề tương tự screennhưng không có kết quả ...

Thông báo lỗi khi tôi cố gắng khởi chạy một ứng dụng GUI (như xeyes) là một cái gì đó có hiệu lực can't open display: wrong authentication. Tôi thực sự không biết điều gì là chắc chắn bởi vì có vẻ như nó xuất ra một khoản hoàn trả vận chuyển và ghi đè lên một phần của thông báo lỗi bằng một cái mới ...

Bây giờ tôi chỉ cần trải qua và đóng thủ công tất cả các phiên tmux mà tôi đã bắt đầu cục bộ trước khi bắt đầu phiên từ xa mới. Có cách nào để chuyển tiếp X11 hoạt động với các tmuxphiên cục bộ / từ xa không?

Câu trả lời:


12

Không chắc chắn 100% nó sẽ hoạt động với bạn, nhưng liên kết đó cũng không hoạt động với tôi và tôi chỉ sao chép biến HIỂN THỊ từ thiết bị đầu cuối ban đầu và viết export DISPLAY=${copied from outside tmux}nó hoạt động tốt - tức là

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

chức năng từ liên kết đó đã cho tôi một HIỂN THỊ hoàn toàn khác mà không hoạt động


Vẫn thất bại do "Xác thực sai"
mgasms

cảm ơn, điều này cho phép tôi mở pdf từ tmux với xdg-open file.pdf
pascalwhoop

Bạn đã thử ssh -Ythay vì ssh -X?
feedMe

3

Tôi đã có một vấn đề tương tự. Trong tình huống của tôi, thiết lập DISPLAYlà không đủ. Theo mặc định, một số môi trường được đặt khi khởi động máy chủ tmux (khi bắt đầu phiên đầu tiên), không chỉ bất kỳ phiên mới nào. Những điều sau đây làm việc cho tôi, nhưng tôi nghi ngờ nó là tối ưu.

Trong .tmux.conf, làm cho tmux nhớ các biến mà bạn muốn giữ từ môi trường bên ngoài. Tôi đã sử dụng những cái khác nhau giữa cục bộ sử dụng Gnome Terminal và từ xa bằng Terminal.app. Một số trong số chúng có thể không cần thiết, nhưng tôi không chắc chắn điều đó. Các -glá cờ có thể không chính xác.

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

Mặc dù tên "môi trường cập nhật", cài đặt dường như không thực sự thay đổi môi trường. Bạn có thể, tuy nhiên, lấy nó bằng cách sử dụng tmux show-environment. Vì vậy, tôi đã sử dụng nó để cập nhật môi trường trong .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
}

Sử dụng tmux show-environment -scó lẽ sẽ tốt hơn. Nhưng tôi đã không biết về điều đó cho đến khi tôi đọc lại một phần man tmuxđể viết câu trả lời này.

Tuy nhiên, đôi khi tôi phải tách ra và gắn lại, khi sử dụng một phiên hiện có. Mặc dù nó ít gây phiền nhiễu hơn trước.

Tiết lộ đầy đủ: Ý tưởng sử dụng tmux show-environmenttrong precmdpreexecmóc không phải là của riêng tôi, nhưng tôi quên mất nơi tôi nhìn thấy nó. Cảm ơn bạn, cho bất cứ ai đã viết nó, bất cứ nơi nào bạn viết nó.


Làm việc cho tôi mà không có kịch bản shell. Rất vui lòng cảm ơn bạn.
wbg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.