- ใช้ 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 ก็น่าลองพิจารณา
ยังไม่มีความคิดเห็น