14.1 Getty (ใช้ใน / etc / inittab)
ข้อมูลเบื้องต้นเกี่ยวกับ Getty
เพื่อให้กระบวนการล็อกอินทำงานบนพอร์ตอนุกรม (และเทอร์มินัลที่เชื่อมต่ออยู่) เมื่อคอมพิวเตอร์เริ่มทำงาน (หรือเปลี่ยนระดับการทำงาน) คำสั่ง getty ต้องถูกใส่ลงในไฟล์ / etc / inittab การเรียกใช้ getty จากบรรทัดคำสั่งอาจทำให้เกิดปัญหา (ดูว่า getty ทำงานจากบรรทัดคำสั่ง: โปรแกรมหยุดทำงานเพื่อดูว่าเหตุใด) Getty ได้รับ TTY (terminal) ไป แต่ละเทอร์มินัลต้องการคำสั่ง getty ของตัวเอง นอกจากนี้ยังมีคำสั่ง getty อย่างน้อยหนึ่งคำสำหรับคอนโซลในทุกไฟล์ / etc / inittab ค้นหาคำสั่งนี้และใส่คำสั่ง getty สำหรับขั้วต่อจริงข้างๆ ไฟล์นี้อาจมีตัวอย่างบรรทัด getty สำหรับเทอร์มินัลข้อความที่แสดงความคิดเห็นออกมาเพื่อให้สิ่งที่คุณต้องทำคือการยกเลิกการติดตั้ง (ลบผู้นำ #) และเปลี่ยนอาร์กิวเมนต์ไม่กี่ตัว
อาร์กิวเมนต์ที่ได้รับอนุญาตขึ้นอยู่กับ getty ที่คุณใช้:สอง gettys ที่ดีที่สุดสำหรับขั้วต่อที่เชื่อมต่อโดยตรงคือ: สอง gettys ที่ดีที่สุดสำหรับโมเด็ม dial-in (หลีกเลี่ยงสำหรับขั้วต่อที่เชื่อมต่อโดยตรง) คือ: gettys ง่ายที่จะใช้ถ้าคุณไม่ได้ใช้ terminal ข้อความจริง ผู้ใช้ลินุกซ์ส่วนใหญ่ใช้ข้อมูลเหล่านี้ที่จอภาพ: การกระจาย Linux ของคุณอาจมี ps_getty หรือ agetty สำหรับเทอร์มินัลข้อความ การแจกแจงบางส่วนไม่สามารถใช้ได้ แต่น่าเสียดายที่พวกเขามักจะเรียกว่า "getty" ดังนั้นคุณอาจจำเป็นต้องกำหนดที่คุณมีตั้งแต่อาร์กิวเมนต์ที่คุณใส่หลังจากที่ใน / etc / inittab แตกต่างกัน Debian ใช้ Agetty (ในแพคเกจ util-linux) RedHat และ Fedora ใช้ ps_getty ซึ่งอยู่ที่: ps_getty เป็นวิธีสุดท้ายที่จะลองตรวจสอบ getty คุณมีอยู่คุณอาจตรวจสอบรหัสปฏิบัติการ (โดยปกติใน / sbin) ps_getty มี / etc / gettydefs ฝังอยู่ในโค้ดนี้ เมื่อต้องการค้นหาให้ไปที่ / sbin และพิมพ์:สตริง getty | grep getty ถ้า Getty เป็นจริง agetty ข้างต้นจะทำให้ไม่มีอะไร อย่างไรก็ตามถ้าคุณพิมพ์ agetty:getty -hควรแสดงตัวเลือก -hiLmw หากคุณไม่มี getty คุณต้องการตรวจสอบการกระจายอื่น ๆ และ มนุษย์ต่างดาว โปรแกรมเพื่อแปลงระหว่าง RPM และ Debian packages รหัสแหล่งที่มาสามารถดาวน์โหลดได้จาก Getty Software ถ้าคุณไม่ได้ใช้สายควบคุมของโมเด็ม (ตัวอย่างเช่นถ้าคุณใช้จำนวนตัวนำขั้นต่ำ 3 ตัวเท่านั้น: รับส่งและรับสัญญาณและพื้นสัญญาณทั่วไป) คุณควรแจ้งให้ getty ทราบโดยใช้ค่าสถานะ "local" รูปแบบนี้ขึ้นอยู่กับ getty ที่คุณใช้ หลังจากที่คุณเข้าสู่ระบบคุณจะสังเกตเห็น (โดยใช้ "top", "ps -ax" หรือ "ptree") ว่ากระบวนการ getty ไม่ทำงานอีกต่อไป เกิดอะไรขึ้นกับมัน? ทำไม Getty เริ่มใหม่อีกครั้งถ้าเปลือกของคุณถูกฆ่าตาย? นี่คือเหตุผล หลังจากที่คุณพิมพ์ชื่อผู้ใช้ getty จะเรียกใช้และเรียกโปรแกรมเข้าสู่ระบบว่าชื่อผู้ใช้ของคุณ กระบวนการ getty จะถูกแทนที่ด้วยขั้นตอนการเข้าสู่ระบบ ขั้นตอนการเข้าสู่ระบบขอรหัสผ่านของคุณตรวจสอบและเริ่มกระบวนการใด ๆ ที่ระบุไว้ในไฟล์รหัสผ่านของคุณ กระบวนการนี้มักจะเป็นเปลือก bash ถ้าใช่ทุบตีเริ่มและแทนที่กระบวนการล็อกอิน โปรดสังเกตว่ากระบวนการหนึ่งแทนที่กระบวนการอื่นและกระบวนการ bash shell เริ่มต้นเป็นกระบวนการ getty ความหมายของข้อนี้จะอธิบายไว้ด้านล่างนี้ ตอนนี้ในแฟ้ม / etc / inittab, getty ควรจะ respawn (รีสตาร์ท) ถ้าฆ่า มันบอกว่าในบรรทัดที่เรียก getty แต่ถ้าเปลือก bash (หรือกระบวนการเข้าสู่ระบบ) ถูกฆ่าตาย getty respawns (restarts) ทำไม? ดีทั้งกระบวนการเข้าสู่ระบบและทุบตีเป็นแทนสำหรับ getty และสืบทอด * Text-How-To Index ข้อความ การเชื่อมต่อสัญญาณที่สร้างโดยรุ่นก่อน ๆ ในความเป็นจริงถ้าคุณสังเกตรายละเอียดคุณจะสังเกตเห็นว่าขั้นตอนการเปลี่ยนจะมีรหัสกระบวนการเดียวกันกับกระบวนการเดิม ดังนั้นทุบตีเป็นประเภท getty ปลอมตัวด้วยรหัสหมายเลขกระบวนการเดียวกัน ถ้าทุบตีถูกฆ่าก็เหมือนกับ getty ถูกฆ่า (แม้ว่า getty จะไม่ทำงานอีกต่อไป) นี้ส่งผลให้ getty respawning เมื่อออกจากระบบกระบวนการทั้งหมดที่อยู่ในพอร์ตอนุกรมนั้นจะถูกฆ่ารวมทั้งเปลือก bash กรณีนี้อาจเกิดขึ้นหากมีการส่งสัญญาณแฮงเอาท์ไปยังพอร์ตอนุกรมโดยการลดแรงดันไฟฟ้า DCD ลงโดยใช้โมเด็ม การออกจากระบบหรือการวาง DCD จะส่งผลให้ getty respawning หนึ่งอาจบังคับ getty เพื่อ respawn ด้วยตนเองฆ่า bash (หรือเข้าสู่ระบบ) ทั้งโดยการกดปุ่ม k เป็นต้นในขณะที่ "top" หรือมีคำสั่ง "kill" คุณอาจต้องฆ่าด้วยสัญญาณ 9 (ซึ่งไม่สามารถละเลยได้) ปกติแล้วคุณควรเรียกใช้ Getty จากภายใน / etc / inittab และไม่ได้มาจากบรรทัดคำสั่งหรือบางโปรแกรมที่รันบนเครื่องเทอร์มินัลอาจถูกระงับโดยไม่คาดคิด (หยุดลง) นี่เป็นเหตุผล (ข้ามไปยังส่วนถัดไปหากเหตุผลที่คุณไม่สำคัญ) ถ้าคุณเริ่ม getty เพื่อพูด ttyS1 จากบรรทัดคำสั่งของ terminal อื่นให้พูด tty1 แล้วมันจะมี tty1 เป็น "terminal ควบคุม" แม้ว่า terminal จริงมันทำงานเป็น ttyS1 ดังนั้นจึงมีสถานีควบคุมที่ไม่ถูกต้อง แต่ถ้ามันเริ่มต้นภายในไฟล์ inittab แล้วมันจะมี ttyS1 เป็นสถานีควบคุม (ถูกต้อง) ถึงแม้ว่า terminal ควบคุมไม่ถูกต้องการเข้าสู่ระบบที่ ttyS1 ทำงานได้ดี (เนื่องจากคุณได้ให้ ttyS1 เป็นอาร์กิวเมนต์เพื่อ getty) อินพุตและเอาต์พุตมาตรฐานถูกตั้งค่าเป็น ttyS1 แม้ว่าเทอร์มินัลการควบคุมจะยังคงอยู่ tty11 โปรแกรมอื่นที่รันที่ ttyS1 อาจได้รับอินพุต / เอาท์พุตมาตรฐานนี้ (ซึ่งเชื่อมต่อกับ ttyS1) และทุกอย่างก็โอเค แต่บางโปรแกรมอาจทำผิดพลาดในการพยายามอ่านจาก terminal การควบคุม (tty1) ซึ่งผิดพลาด ตอนนี้ tty1 อาจคิดว่าโปรแกรมเหล่านี้กำลังทำงานอยู่ในแบ็กกราวน์โดย tty1 ดังนั้นความพยายามที่จะอ่านจาก tty1 (ควรเป็น ttyS1) ส่งผลในการหยุดกระบวนการที่พยายามจะอ่าน (กระบวนการพื้นหลังไม่ได้รับอนุญาตให้อ่านจากสถานีควบคุม) คุณอาจเห็นข้อความบางอย่างเช่น "1 + หยุด"บนหน้าจอ ณ จุดนี้คุณติดอยู่เนื่องจากคุณไม่สามารถโต้ตอบกับกระบวนการที่กำลังพยายามสื่อสารกับคุณผ่าน terminal ผิดแน่นอนเพื่อหนีจากนี้คุณสามารถไปที่ terminal อื่นและฆ่ากระบวนการ ฯลฯ . ตัวอย่างบรรทัดใน / etc / inittab:
S1 มาจาก ttyS1 23 หมายความว่า getty ทำงานเมื่อเข้าสู่ระดับ run 2 หรือ 3 respawn หมายความว่าถ้า getty (หรือกระบวนการที่ถูกแทนที่เช่น bash) ถูกฆ่า getty จะเริ่มทำงานใหม่ (respawn) อีกครั้ง / sbin / getty เป็นคำสั่ง getty -L หมายถึง Local (ละเว้นสัญญาณควบคุมของโมเด็ม) -h (ไม่แสดงในตัวอย่าง) ช่วยให้สามารถควบคุมฮาร์ดแวร์ได้ (เช่นเดียวกับ stty crtscts) 19200 เป็นอัตราการรับส่งข้อมูล ttyS1 หมายถึง / dev / ttyS1 (COM2 ใน MS-DOS) vt102 เป็นชนิดของเทอร์มินัลและ getty นี้จะตั้งตัวแปรสภาพแวดล้อม TERM ให้เป็นค่านี้ ไม่มีไฟล์การกำหนดค่า พิมพ์ "init q" ในบรรทัดคำสั่งหลังจากแก้ไข getty แล้วคุณจะเห็นข้อความเข้าสู่ระบบ agetty โปรแกรมจะพยายามตรวจหาชุดความเท่าเทียมกันภายในเทอร์มินัลโดยอัตโนมัติ (รวมทั้งไม่มีพาริตี) ไม่สนับสนุนไบต์ข้อมูล 8 บิตพร้อมความเท่าเทียมกันแบบ 1 บิต ดูไบต์ข้อมูล 8 บิต (บวกพาริตี้) ถ้าคุณใช้ stty เพื่อกำหนดความเท่าเทียมกัน, agetty จะยกเลิกการตั้งค่าโดยอัตโนมัติตั้งแต่เริ่มต้นต้องการให้บิตพาริตีมาผ่านเหมือนว่าเป็นบิตข้อมูล นี่เป็นเพราะต้องใช้บิตสุดท้าย (อาจเป็นบิตพาริตี) ในขณะที่คุณพิมพ์ชื่อล็อกอินของคุณเพื่อให้สามารถตรวจจับความเท่าเทียมกันแบบอัตโนมัติได้ ดังนั้นหากคุณใช้ parity ให้เปิดใช้งานเฉพาะภายในเทอร์มินัลเทอร์มินัลและปล่อยให้ agetty ตรวจหาโดยอัตโนมัติและตั้งค่าไว้ที่เครื่องคอมพิวเตอร์ ถ้าเทอร์มินัลสนับสนุนค่าพา ธ ที่ได้รับพรอมต์การเข้าสู่ระบบจะดูไม่ถูกอ่านจนกว่าคุณจะพิมพ์บางอย่างเพื่อให้ getty สามารถตรวจจับได้ ความเท่าเทียมกัน. พรอมต์ที่อ่านไม่ออกจะยับยั้งผู้เยี่ยมชม ฯลฯ จากการพยายามเข้าสู่ระบบ นั่นอาจเป็นแค่สิ่งที่คุณต้องการ มีบางครั้งปัญหาเกี่ยวกับการตรวจสอบความเท่าเทียมกันแบบอัตโนมัติ เกิดขึ้นเนื่องจากหลังจากที่คุณพิมพ์ชื่อล็อกอินครั้งแรก agetty เริ่มต้น เข้าสู่ระบบ โปรแกรมเพื่อเสร็จสิ้นการบันทึกคุณเข้า เข้าสู่ระบบ โปรแกรมไม่สามารถตรวจจับความเท่าเทียมกันได้ดังนั้นถ้า เก็ตตี้ โปรแกรมล้มเหลวในการกำหนดความเท่าเทียมกันแล้ว เข้าสู่ระบบ จะไม่สามารถกำหนดได้เช่นกัน หากการเข้าสู่ระบบครั้งแรกล้มเหลว เข้าสู่ระบบ จะช่วยให้คุณลองอีกครั้ง ฯลฯ (ทั้งหมดนี้มีการตั้งค่าความเท่าเทียมกัน) ในที่สุดหลังจากจำนวนครั้งที่ล้มเหลวในการเข้าสู่ระบบ (หรือหลังจากหมดเวลา) agetty จะเริ่มขึ้นอีกครั้งและเริ่มลำดับการล็อกอินอีกครั้ง เมื่อ Getty กำลังทำงานอีกครั้งอาจจะสามารถตรวจจับความเท่าเทียมกันในการลองครั้งที่สองได้ดังนั้นทุกอย่างอาจทำงานได้ดี มีความเท่าเทียมกันไม่ถูกต้อง เข้าสู่ระบบ ไม่สามารถอ่านสิ่งที่คุณพิมพ์ได้อย่างถูกต้องและคุณไม่สามารถล็อกอินได้ถ้าเทอร์มินอลสนับสนุนค่าพา ธ ที่เท่าเทียมกันคุณจะยังคงเห็นหน้าจอที่อ่านไม่ออก หาก getty ไม่สามารถตรวจพบ parity ได้ไฟล์ / etc / issue มักถูกทิ้งไปที่หน้าจอก่อนที่ prompt จะทำให้คำที่อ่านไม่ออกอาจปรากฏขึ้นบนหน้าจอ เหตุใดจึงไม่สามารถตรวจจับความเท่าเทียมกันของตัวอักษรตัวแรกได้? นี่คือตัวอย่าง: สมมติว่าจะตรวจพบไบต์ 8 บิตพร้อมด้วยบิตพาริตี้บิต 0 (บิตลำดับสูง) และมีเลขคี่ 1 บิต ความเท่าเทียมกันคืออะไร? ดีเลขคี่ 1 บิตแสดงว่าเป็นความเท่าเทียมกันแบบคี่ แต่ก็อาจเป็นเพียงแค่อักขระ 8 บิตที่ไม่มีความเท่าเทียมกัน ไม่มีทางใดที่จะทำให้ได้ แต่จนถึงขณะนี้เราได้กำจัดความเป็นไปได้ที่จะมีความเท่าเทียมกันได้ การตรวจสอบความเท่าเทียมกันจึงดำเนินการโดยกระบวนการกำจัด ถ้าไบต์ถัดไปพิมพ์เหมือนกันกับคำแรกและยังช่วยลดความเป็นไปได้ในการเท่าเทียมกันแม้จะยังไม่สามารถกำหนดความเท่าเทียมกันได้ สถานการณ์นี้สามารถดำเนินต่อไปเรื่อย ๆ และในบางกรณีการเข้าสู่ระบบจะล้มเหลวจนกว่าคุณจะเปลี่ยนชื่อล็อกอินของคุณ หาก Agetty พบบิตความเท่าเทียมกันเป็น 1 จะถือว่าเป็นบิตพาริตีและไม่ใช่บิตลำดับสูงของอักขระ 8 บิต สมมติว่าคุณไม่ได้ใช้เมตาแท็ก (ชื่อชุดผู้ใช้สูง) ในชื่อผู้ใช้ของคุณ (เช่นชื่อของคุณอยู่ใน ASCII) หนึ่งอาจได้รับใน "ห่วงเข้าสู่ระบบ" ในรูปแบบต่างๆ สมมติว่าคุณพิมพ์เพียงหนึ่งหรือสองตัวอักษรสำหรับชื่อการเข้าสู่ระบบของคุณแล้วกด return ถ้าตัวอักษรเหล่านี้ไม่เพียงพอสำหรับการตรวจสอบความเท่าเทียมกันการเข้าสู่ระบบจะทำงานก่อนที่จะตรวจพบความเท่าเทียมกัน บางครั้งปัญหานี้เกิดขึ้นหากคุณไม่มีเครื่องเทอร์มินอลอยู่และ / หรือเชื่อมต่ออยู่เมื่อเริ่มทำงานใหม่ ถ้าคุณติดค้างอยู่ใน "ลูปล็อกอิน" นี้ทางออกก็คือการกดปุ่ม return หลาย ๆ ครั้งจนกว่าคุณจะได้รับคำสั่งให้เข้าสู่ระบบ getty อีกวิธีหนึ่งก็คือรอสักครู่หรือมากกว่านั้นสำหรับการหมดเวลา จากนั้นข้อความเข้าสู่ระบบ getty จะถูกวางลงบนหน้าจอโดยโปรแกรม getty และคุณอาจลองเข้าสู่ระบบอีกครั้ง แต่น่าเสียดายที่ agetty ไม่สามารถตรวจจับความเท่าเทียมกันนี้ได้เมื่อปลายปี 2542 ไม่มีตัวเลือกใดในการปิดใช้งานการตรวจสอบความเท่าเทียมกันแบบอัตโนมัติและจะตรวจจับความเท่าเทียมกันที่ไม่ถูกต้อง ผลลัพธ์คือขั้นตอนการเข้าสู่ระบบจะถูกบิดเบือนและจะกำหนดความเท่าเทียมกัน ดังนั้นจึงดูเหมือนจะไม่เป็นไปได้ที่จะพยายามใช้ไบต์ข้อมูล 8 บิตพร้อมพาริตี (ส่วนใหญ่มาจาก Old-Serial HOWTO โดย Greg Hankins)สำหรับ getty นี้จำเป็นต้องใส่ทั้งสองรายการในแฟ้มกำหนดค่าและเพิ่มรายการเข้า / etc / inittab. ต่อไปนี้คือตัวอย่างรายการที่จะใช้สำหรับเทอร์มินัลที่คุณใส่ลงในไฟล์คอนฟิกูเรชัน / etc / gettydefs.
โปรดทราบว่า DT38400, DT19200 ฯลฯ เป็นเพียงป้ายกำกับและต้องเหมือนกันที่คุณใช้ / etc / inittab. ถ้าคุณต้องการคุณสามารถทำ เก็ตตี้ พิมพ์สิ่งที่น่าสนใจในแบนเนอร์เข้าสู่ระบบ ในตัวอย่างของฉันฉันมีชื่อระบบและบรรทัดอนุกรมที่พิมพ์ คุณสามารถเพิ่มสิ่งอื่น ๆ ได้: blockquote เฉดสี = yes
เมื่อคุณแก้ไขเสร็จแล้ว / etc / gettydefs, คุณสามารถตรวจสอบว่าไวยากรณ์ถูกต้องโดยการทำ:
ตรวจสอบให้แน่ใจว่าไม่มีคนอื่น เก็ตตี้ หรือ uugetty config สำหรับพอร์ตอนุกรมที่เทอร์มินัลของคุณเชื่อมต่ออยู่เช่น (/etc/default/{uu}getty.ttySยังไม่มีข้อความ หรือ /etc/conf.{uu}getty.ttySยังไม่มีข้อความ) เช่นนี้อาจจะรบกวนการทำงาน เก็ตตี้ บนเทอร์มินัล ลบไฟล์ที่ขัดแย้งกันออกไปหากออก แก้ไขของคุณ / etc / inittab ไฟล์ที่จะเรียกใช้ เก็ตตี้ บนพอร์ตอนุกรม (แทนข้อมูลที่ถูกต้องสำหรับสภาพแวดล้อมของคุณ - พอร์ตความเร็วและประเภทขั้วเริ่มต้น):
ณ จุดนี้คุณจะเห็นข้อความเข้าสู่ระบบบนเครื่องของคุณ คุณอาจต้องกดกลับเพื่อให้ได้ความสนใจของเทอร์มินัล "m" หมายถึงโมเด็ม โปรแกรมนี้เป็นหลักสำหรับโมเด็มและกลางปี 2000 จะต้องคอมไพล์ใหม่เพื่อใช้สำหรับเทอร์มินัลข้อความ (เว้นแต่คุณจะใช้การควบคุมการควบคุมฮาร์ดแวร์และมักต้องใช้สายทำด้วยมือ) สำหรับเอกสารสำหรับขั้วต่อที่เชื่อมต่อโดยตรงดูส่วน "Direct" ของคู่มือ: mgetty.texi ดูบรรทัดสุดท้ายของ /etc/mgetty/mgetty.config สำหรับตัวอย่างของการกำหนดค่าสำหรับเทอร์มินัล หากคุณไม่พูดว่า "toggle-dtr no" จะมีโมเด็มและวาง (ลบล้าง) หมุด DTR ที่พีซีโดยไม่ตั้งใจในการรีเซ็ตโมเด็มที่ไม่มีอยู่จริง ในทางตรงกันข้ามกับ gettys อื่น mgetty จะไม่แนบตัวเองกับเทอร์มินอลจนกว่าจะมีผู้เข้าชมคีย์ของ terminal ใด ๆ ดังนั้นคุณจะเห็น? สำหรับเทอร์มินัลใน ด้านบน หรือ PS จนกว่าจะถึงเหตุการณ์เช่นนี้ บันทึกเข้า / var / log / mgetty / อาจแสดงข้อความแจ้งเตือนไม่กี่รายการซึ่งใช้ได้เฉพาะกับโมเด็มที่คุณอาจละเว้น นี่คือตัวอย่างของบรรทัดง่ายๆที่คุณใส่เข้า / etc / inittab:
เก็ตตี้ออกหลังจากเข้าสู่ระบบ (และสามารถ respawn)
ถ้า getty รันจากบรรทัดคำสั่ง: โปรแกรมหยุดทำงาน
agetty (อาจเป็นชื่อ getty)
S1: 23: respawn: / sbin / getty -L 19200 ttyS1 vt102
การตรวจหาปัญหาความเท่าเทียมกันของ Agetty อัตโนมัติ
ไบต์ข้อมูล 8 บิต (บวกพาริตี้)
getty (ส่วนหนึ่งของ getty_ps)
mgetty