การส่งต่อ X11 ไม่ทำงานกับเซสชัน tmux หลายเซสชัน


9

ถ้าฉันเริ่มtmuxเซสชันภายในเครื่องแล้วเปิดทิ้งไว้ ssh จากระยะไกลแล้วเริ่มเซสชันใหม่ 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}

ฟังก์ชั่นจากลิงค์นั้นให้ DISPLAY ที่แตกต่างไปจากเดิมอย่างสิ้นเชิงซึ่งไม่ได้ผล


ยังคงล้มเหลวเนื่องจาก "การตรวจสอบสิทธิ์ผิด"
mgalgs

ขอบคุณสิ่งนี้ทำให้ฉันสามารถเปิดไฟล์ PDF จาก tmux ด้วย xdg-open file.pdf ได้
pascalwhoop

คุณลองssh -Yแทนssh -Xไหม
feedMe

3

ฉันมีปัญหาที่คล้ายกัน ในสถานการณ์ของฉันการตั้งค่าDISPLAYไม่เพียงพอ โดยดีฟอลต์สภาพแวดล้อมบางส่วนถูกตั้งค่าเมื่อเริ่มต้นเซิร์ฟเวอร์ tmux (เมื่อเริ่มเซสชันแรก) ไม่ใช่เฉพาะเซสชันใหม่ ต่อไปนี้เหมาะกับฉัน แต่ฉันสงสัยว่ามันดีที่สุด

ใน.tmux.confทำให้ tmux จดจำตัวแปรที่คุณต้องการเก็บไว้จากสภาพแวดล้อมภายนอก ฉันใช้สิ่งที่แตกต่างกันในพื้นที่โดยใช้ Gnome Terminal และใช้ 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และpreexechooks ไม่ใช่ของฉันเอง แต่ฉันลืมที่ฉันเห็น ขอบคุณทุกคนที่เขียนสิ่งนั้นทุกที่ที่คุณเขียน


ทำงานให้ฉันโดยไม่มีเชลล์สคริปต์ ยินดีเป็นอย่างยิ่งขอบคุณ
wbg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.