วิธีรับ ttys น้อยลงด้วย Systemd


29

/etc/inittabในวันเก่าฉันเพียงแค่การปรับเปลี่ยน ขณะนี้ด้วย systemd ดูเหมือนว่าจะเริ่ม tty [1-6] โดยอัตโนมัติฉันจะปิดการใช้งาน tty [4-6] ได้อย่างไร

ดูเหมือนว่ามีไฟล์บริการ systemd เพียงไฟล์เดียวและใช้ a %Iเพื่อแยกเซสชัน tty ที่ต่างกัน ฉันหวังว่าฉันไม่จำเป็นต้องลบบริการนั้นและสร้างแต่ละบริการgetty@ttyX.serviceด้วยตนเอง

คำตอบ:


35

ไม่จำเป็นต้องปิดการใช้งาน TTY "พิเศษ" อย่างแท้จริงเนื่องจากการsystemdสร้างภายใต้เก็ตตี้ตามต้องการ: ดูman systemd-getty-generatorรายละเอียด โปรดทราบว่าโดยค่าเริ่มต้นการวางไข่อัตโนมัตินี้จะทำสำหรับ VTs สูงถึง VT6 เท่านั้น (เพื่อเลียนแบบระบบ Linux แบบดั้งเดิม)

ดังที่Lennart พูดในบล็อกโพสต์1 :

เพื่อที่จะทำให้สิ่งต่าง ๆ ที่มีประสิทธิภาพมากขึ้นพร้อมท์ตอนนี้เริ่มต้นตามความต้องการเท่านั้น ในขณะที่คุณสลับไปที่ VTs บริการ getty จะถูกสร้างอินสแตนซ์เป็น getty@tty2.service, getty@tty5.service และอื่น ๆ เนื่องจากเราไม่จำเป็นต้องเริ่มกระบวนการ getty อีกต่อไปสิ่งนี้จะช่วยให้เราประหยัดทรัพยากรได้เล็กน้อยและทำให้การเริ่มต้นทำงานเร็วขึ้นเล็กน้อย

หากคุณต้องการกำหนดจำนวน gettys เฉพาะคุณสามารถแก้ไขlogind.confด้วยรายการที่เหมาะสมในตัวอย่างนี้ 3:

NAutoVTs=3


1. อันที่จริงโพสต์ทั้งชุดซึ่งปัจจุบันมีหมายเลข 18— systemd สำหรับผู้ดูแลระบบเป็นสิ่งที่ควรค่าแก่การอ่าน


ขอบคุณสำหรับคำตอบ Jason แอปพลิเคชันของ บริษัท ของฉันถูกจัดส่งบนเซิร์ฟเวอร์จริงและในรุ่นเก่าเราจะแก้ไข inittab เพื่อล็อค tty อื่น ๆ
jcbwlkr

11

บนระบบที่ใช้เดเบียนมีไฟล์ที่ทำให้มีการเรียกใช้เพิ่มอีก 5 ตัวเมื่อเปิดเครื่องหากคุณเพิ่งสร้างเซิร์ฟเวอร์ (โดยไม่ใช้บริการ dbus):

/lib/systemd/system/getty.target.wants/getty-static.service

ในนั้นมันพูดว่า:

[Service]
Type=oneshot
ExecStart=/bin/systemctl --no-block start getty@tty2.service getty@tty3.service getty@tty4.service getty@tty5.service getty@tty6.service
RemainAfterExit=true

เพียงแค่การลบไฟล์นี้จะทำให้ไม่สามารถวางไข่ได้ อย่าลังเลที่จะทำรายการให้สั้นลงหากคุณต้องการวางไข่เพิ่มอีกหนึ่งรายการ (สำหรับคอนโซลคุณธรรม 2 ตัว) โปรดทราบว่าคุณจะได้รับหนึ่งโดยอัตโนมัติใน tty1 ดังนั้นคุณจึงมีคอนโซลเสมือนอย่างน้อยหนึ่งตัว

ดูเพิ่มเติมที่: systemd-logind.service ล้มเหลวในการเริ่มต้นหาก dbus หายไป


2
NB: ไฟล์เป็นเจ้าของโดยแพ็คเกจ systemd ดังนั้นหากต้องการแก้ไขหรือลบไฟล์ให้ใช้dpkg-divertก่อน แต่ก็มีวิธีที่เป็นระบบที่จะกำจัดมันออกไปให้พ้นทาง - วิ่งsudo systemctl mask getty-static.serviceและตั้งค่าของคุณเอง/etc
Josip Rodin

2
maskเนื่องจากบริการที่เปิดใช้งานนั้นมีเสียงดังจะสะอาดกว่าหากสร้างหน่วยที่มีชื่อเดียวกันใน/etcการแทนที่เนื้อหา ใช้ ExecStart = / bin / true หากคุณต้องการเริ่มศูนย์ getty สถิตแบบคงที่
sourcejedi

อีกวิธีที่ถูกต้อง systemd คือการแทนที่รุ่นของแพ็คเกจ (คุณไม่ควรลบไฟล์นั้น) โดยใช้sudo systemctl edit getty-static.serviceซึ่งจะสร้างไฟล์แทนที่ที่มีความสำคัญเหนือกว่า/libหนึ่ง
ryeager

8

หากต้องการปิดใช้งาน gettys บน TTY เฉพาะ 4-6 ขณะที่อาจปล่อยให้ 1-3 และ 7-9 ทำงานให้รัน:

for i in {4..6}; do
  systemctl mask getty@tty${i}.service
done

maskสร้าง symlink /etc/systemd/system/{name} -> /dev/nullซึ่งปิดการใช้งานบริการอย่างมีประสิทธิภาพ ความพยายามเรียกใช้ผ่านsystemctl startจะแสดงข้อผิดพลาดFailed to start NAME.service: Unit NAME.service is masked.

ถ้าคุณมี A.service Wants=masked.serviceแล้วstart Aจะประสบความสำเร็จ แต่ยังสร้างข้อผิดพลาดเริ่มต้นการพึ่งพาในวารสาร

หากคุณมี B.service Requires=masked.serviceก็start Bจะล้มเหลวเช่นกัน

ใช่ไม่รู้จัก ไชโย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.