• ใช้ tmux มานาน แต่ช่วงหลังเริ่มรู้สึกกังขากับความซับซ้อนและข้อจำกัดของ tmux (ความเข้ากันได้ของสี, scrollback, การคัดลอกด้วยเมาส์, การไม่รองรับโปรโตคอลบางอย่าง ฯลฯ)
  • ฟีเจอร์หลักของ tmux อย่าง การคงอยู่ของเซสชัน (detach/attach) หรือ การแบ่ง/จัดการหน้าต่าง ไม่ได้จำเป็นต้องทำได้ด้วย tmux เท่านั้น
  • หากใช้เครื่องมือขนาดเบาตามแนวคิด Unix อย่าง dtach, abduco, shpool ก็สามารถโฟกัสเฉพาะการจัดการเซสชัน พร้อมได้ทั้ง native scrollback และความเรียบง่าย
  • โดยเฉพาะการจับคู่ shpool + ssh ทำให้สามารถ จัดการหลายรีโมตเซสชันจากตัวจัดการหน้าต่างได้โดยตรง และยังใช้ฟีเจอร์เนทีฟต่าง ๆ (การแจ้งเตือน, การเลื่อนดู, ไตเติล ฯลฯ) ได้เหมือนเดิม
  • แม้จะไม่สมบูรณ์แบบ แต่สำหรับผู้เขียนแล้วสามารถแทน tmux ได้ทั้งหมด และให้ความพึงพอใจกับ เวิร์กโฟลว์ที่เรียบง่ายและดูแลง่าย

ข้อดีและข้อเสียของ tmux

  • ฟีเจอร์อย่าง การคงเซสชัน (detach/attach), การจัดการหน้าต่าง (แท็บ, split) คือแกนหลักของเวิร์กโฟลว์เดิมที่ tmux มอบให้
  • แต่ถ้าไม่ได้ตั้งค่า TERM อย่างถูกต้อง ก็จะเกิดปัญหาการแสดงผลสี และต้องคำนึงถึงปฏิสัมพันธ์ระหว่างเทอร์มินัลกับ tmux เพิ่มความซับซ้อนเข้าไปอีก
  • การใช้บัฟเฟอร์เลื่อนดูก็ต้องเรียนรู้วิธีเฉพาะของ tmux และการคัดลอกพื้นที่ด้วยเมาส์ก็ใช้งานลำบากในสภาพแวดล้อมที่มีหลาย split
  • ยังรองรับ ฟีเจอร์เทอร์มินัลสมัยใหม่ ได้ไม่ดี เช่น kitty graphics protocol รวมถึงมีปัญหาไม่รองรับโปรโตคอลเชิงทดลอง
  • ยังมีคำวิจารณ์ด้วยว่า การตีความ escape code ซ้ำซ้อนและการเพิ่มแนวคิดเรื่องเซสชัน/หน้าต่าง ทำให้มัลติเพล็กเซอร์ ขัดขวางพัฒนาการของระบบนิเวศเทอร์มินัล

การสำรวจแนวทางแทนที่ tmux

  • การคงอยู่ของเซสชัน:
    • วิธีง่าย ๆ อย่าง ctrl-z + fg, nohup, disown ก็พอช่วยได้ แต่แทนที่ทั้งหมดได้ยาก
    • มีเครื่องมือหลายตัวที่ออกแบบมาโดยเน้น การคงเซสชันเท่านั้น (dtach, abduco, shpool)
      • ใช้การผสานกันของ fork() และ UNIX socket เพื่อเชื่อมต่อระหว่าง daemon กับ client
      • ต่างจาก tmux ตรงที่ไม่มี virtual split จึงรองรับ native scrollback และบางตัวมีความสามารถกู้คืนบัฟเฟอร์ด้วย
    • จากประสบการณ์ใช้งาน เครื่องมือทดแทนส่วนใหญ่ยังมีบั๊ก และมีปัญหาเรื่องปุ่ม detach ใช้งานไม่ได้ใน nvim เป็นต้น จึงยัง ไม่ค่อยสมบูรณ์
    • มีเพียง shpool ที่ให้ความรู้สึกว่าสมบูรณ์ที่สุด ทั้งในแง่คำสั่ง detach/attach และการปรับแต่ง keymap
  • การจัดการหน้าต่าง:
    • บนเครื่องโลคัล ใช้ตัวจัดการหน้าต่างในการแบ่งและจัดวาง
    • ในสภาพแวดล้อมรีโมต (SSH) ก็สามารถใช้ ssh_config ร่วมกับ shpool เพื่อคงหลายเซสชันแยกกันในหน้าต่างคนละบานได้
    • ใช้ร่วมกับ autossh เพื่อรักษาเซสชันแม้ในสภาพแวดล้อมที่มีการเชื่อมต่อเครือข่ายใหม่

เวิร์กโฟลว์ใหม่

  • โดยส่วนตัวใช้ ghostty (โน้ตบุ๊ก), sway+foot (พีซีส่วนตัว) สำหรับจัดการหน้าต่าง ส่วนเซิร์ฟเวอร์เป็น VM แบบ headless บน Proxmox และคงสภาพแวดล้อมพัฒนาผ่าน SSH ไว้ตลอด
  • เชื่อมต่อหลาย shpool session อัตโนมัติผ่านทางลัด ssh และควบคุมแยกกันจากตัวจัดการหน้าต่างบนเครื่องโลคัล
    • ตั้งค่าให้ ssh_config แนบเข้า shpool session ของแต่ละโฮสต์โดยอัตโนมัติ
    • แต่ละเทอร์มินัลสามารถเข้าใช้งาน IRC, จัดการ dotfiles, หรือใช้สภาพแวดล้อม neovim แยกกันได้แบบ เข้าใช้งานหลายเซสชันแยกอิสระ
  • ฟีเจอร์อย่างการเลื่อนดูแบบเนทีฟ, การแจ้งเตือน, ไตเติลของเทอร์มินัล ที่ tmux รองรับได้ไม่เสถียร กลับทำงานได้เป็นธรรมชาติกว่าเดิม
  • ก็ยังมีข้อเสียอยู่: เมื่อเชื่อมต่อ vim ใหม่จะมีอาการหน่วงในการกู้คืนสถานะเทอร์มินัล และเมื่อใช้ nvim จะมีปัญหาเรื่องการ resize
    • ไม่รองรับการใช้งานหลายผู้ใช้พร้อมกัน (หากมี autossh จากหลายไคลเอนต์พร้อมกัน จะเกิดการชนกันของเซสชัน)
  • แต่สำหรับผู้เขียนแล้ว ถือว่า แทน tmux ได้อย่างสมบูรณ์

บทสรุป

  • แม้จะไม่เหมือนเดิมทุกอย่าง แต่ก็สามารถเปลี่ยนไปสู่ เวิร์กโฟลว์การจัดการเซสชันที่เรียบง่ายและยืดหยุ่นกว่า โดยหลุดพ้นจากความซับซ้อนและข้อจำกัดของ tmux ได้
  • ขึ้นอยู่กับเวิร์กโฟลว์ของแต่ละคน เครื่องมือทางเลือกอย่าง shpool ก็น่าลองพิจารณา

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น