stty


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 มีการใช้งานที่แตกต่างกันไปตามสถานการณ์:

  1. 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 ได้อย่างแม่นยำ