1. คำสั่ง stty คืออะไร และหน้าที่หลัก
สำหรับนักพัฒนาและ SysAdmin การทำความเข้าใจการทำงานของ Terminal Input/Output (I/O) เป็นสิ่งสำคัญอย่างยิ่ง คำสั่ง stty ย่อมาจาก “Set TTY” คือเครื่องมือบรรทัดคำสั่งที่ใช้ในการกำหนดค่าพารามิเตอร์ต่างๆ ของอุปกรณ์เทอร์มินัล (Terminal) หรือ Pseudo-Terminal (PTY) โดยเฉพาะการควบคุมโหมดการรับส่งข้อมูลของสาย Serial Port หรือ Terminal Session ปัจจุบัน
หน้าที่หลักของ stty คือการจัดการ “Line Settings” ซึ่งรวมถึงอัตราความเร็วในการสื่อสาร (Baud Rate), การควบคุม Flow Control, และวิธีการที่ระบบปฏิบัติการตีความอินพุตจากผู้ใช้ (เช่น การเปิด/ปิด Echo หรือ Canonical Mode) หากคุณกำลังทำงานกับอุปกรณ์ภายนอกผ่าน Serial Port เช่น GPS Module หรือเครื่องพิมพ์แบบเก่า stty คือคำสั่งแรกที่คุณต้องรู้
2. ไวยากรณ์ (Syntax) และพารามิเตอร์สำคัญ
stty [OPTION]... [FILE]...
- -speed
: กำหนดอัตราความเร็วในการสื่อสาร (Baud Rate) เช่นstty -F /dev/ttyS0 speed 9600 - -echo: ควบคุมการแสดงผลอักขระที่พิมพ์ลงบนหน้าจอ (Echo) หากปิดจะทำให้คำสั่งทำงานเงียบขึ้น เหมาะสำหรับการเขียนสคริปต์ที่ต้องการซ่อนอินพุต
- -icanon: ควบคุม Canonical Mode (Input Interpretation) โดยปกติระบบจะรอให้ผู้ใช้กด Enter ก่อนส่งข้อมูล แต่ถ้าปิดโหมดนี้ (
stty -icanon off) ระบบจะอ่านอินพุตทันทีที่ได้รับ ทำให้เหมาะกับการเขียนโปรแกรมที่ต้องรับ Stream ข้อมูลแบบ Real-time - -raw: ตั้งค่า Terminal ให้ทำงานในโหมด Raw ซึ่งเป็นการยกเลิกการตีความอินพุตทั้งหมด ทำให้ข้อมูลถูกส่งผ่านไปตามที่ได้รับมาโดยไม่มีการปรับแต่งใดๆ
- -g: ใช้เพื่อแสดงค่า Current Settings ของ Terminal (
stty -g) หรือบันทึกค่าปัจจุบันไว้ใช้ในภายหลัง
3. ตัวอย่างการใช้งานจริง (Code Examples & Use Cases)
stty มีการใช้งานที่แตกต่างกันไปตามสถานการณ์:
- Serial Port Setup (SysAdmin): เมื่อต้องเชื่อมต่อกับอุปกรณ์ภายนอกผ่านพอร์ต Serial เช่น
/dev/ttyUSB0คุณต้องกำหนด Baud Rate ให้ตรงกับอุปกรณ์นั้นๆ เสมอ
# กำหนดค่าพอร์ต Serial เป็น 9600 baud rate และตั้งค่าให้ใช้งานได้ทันที
stty -F /dev/ttyUSB0 speed 9600 cs8 clocal crtscts
cs8 หมายถึง Character Size 8 บิต, clocal คือการเปิดใช้งาน Local Mode และ crtscts คือการใช้ Hardware Flow Control (RTS/CTS) การตั้งค่าเหล่านี้เป็นมาตรฐานสำหรับการสื่อสารแบบ Serial
- การ Debugging (Developer): หากคุณต้องการเขียนสคริปต์ที่ต้องอ่านข้อมูล Stream ทันทีโดยไม่รอ Enter ให้ใช้โหมด Raw/Non-canonical
stty -icanon off stty raw
4. ข้อควรระวังและ Best Practices
- สิทธิ์การเข้าถึง (Permissions): การเปลี่ยนแปลงค่า Terminal Settings มักต้องใช้สิทธิ์ระดับ Root หรือ Superuser ดังนั้นควรระมัดระวังในการรันคำสั่งนี้โดยไม่จำเป็น
- การบันทึกสถานะเดิม (Saving State): ก่อนที่จะเปลี่ยนค่า
sttyสำหรับเซสชันปัจจุบัน ควรใช้stty -gเพื่อบันทึกค่าเริ่มต้นไว้เสมอ หากเกิดข้อผิดพลาด คุณสามารถเรียกคืนค่าเหล่านั้นได้ - การยกเลิก (Reverting): เมื่อเสร็จสิ้นภารกิจที่ต้องเปลี่ยนโหมด Terminal แล้ว ควรตั้งค่ากลับไปเป็นค่าเริ่มต้นหรือค่าที่ปลอดภัยเสมอ เพื่อไม่ให้กระทบต่อโปรแกรมอื่นที่รันในเซสชันเดียวกัน
โดยสรุป stty เป็นเครื่องมือระดับล่าง (Low-level tool) ที่ทรงพลังอย่างยิ่งในการควบคุมพฤติกรรมของ I/O Stream หากคุณเข้าใจการทำงานของมัน คุณจะสามารถแก้ไขปัญหาที่เกี่ยวข้องกับการสื่อสารข้อมูลแบบ Serial หรือการ Debugging Terminal Session ได้อย่างแม่นยำ