Làm thế nào để có được ít ttys hơn với Systemd?


29

Ngày xưa tôi chỉ sửa đổi /etc/inittab. Bây giờ, với systemd, nó dường như tự động bắt đầu tty [1-6], tôi nên tắt tty [4-6] như thế nào?

Có vẻ như chỉ có một tệp dịch vụ systemd và nó sử dụng %Iđể phân biệt các phiên tty khác nhau. Tôi hy vọng tôi không cần phải xóa dịch vụ đó và tạo từng dịch vụ getty@ttyX.servicetheo cách thủ công.

Câu trả lời:


35

Không có nhu cầu thực sự để vô hiệu hóa các TTY "phụ" vì các systemdgettys được tạo theo yêu cầu: xem man systemd-getty-generatorđể biết chi tiết. Lưu ý rằng, theo mặc định, việc sinh sản tự động này được thực hiện cho các VT chỉ tối đa VT6 (để bắt chước các hệ thống Linux truyền thống).

Như Lennart nói trong bài đăng trên blog 1 :

Để làm cho mọi thứ hiệu quả hơn, nhắc nhở đăng nhập hiện chỉ được bắt đầu theo yêu cầu. Khi bạn chuyển sang VT, dịch vụ getty được khởi tạo thành getty@tty2.service, getty@tty5.service, v.v. Vì chúng ta không phải bắt đầu vô điều kiện các quy trình nhỏ nữa, điều này cho phép chúng ta tiết kiệm một chút tài nguyên và làm cho việc khởi động nhanh hơn một chút.

Nếu bạn muốn định cấu hình một số gettys cụ thể, bạn có thể, chỉ cần sửa đổi logind.confvới mục thích hợp, trong ví dụ 3 này:

NAutoVTs=3


1. Trên thực tế, toàn bộ loạt bài viết hiện tại, số 18 18 systemd dành cho Quản trị viên , rất đáng để đọc.


Cảm ơn câu trả lời, Jason. Ứng dụng của công ty tôi được vận chuyển trên một máy chủ vật lý và trên các bản phân phối cũ hơn, chúng tôi sẽ sửa đổi inittab để khóa các ttys khác.
jcbwlkr

11

Trên các hệ thống dựa trên Debian, có một tệp khiến 5 getty thêm được khởi chạy khi khởi động nếu bạn vừa xây dựng một máy chủ (không có dịch vụ dbus):

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

Trong đó, nó nói:

[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

Chỉ cần xóa tập tin này sẽ ngăn không cho sinh sản thêm. Vui lòng rút ngắn danh sách nếu bạn muốn chỉ sinh ra thêm một getty (cho 2 bàn giao tiếp). Lưu ý rằng bạn tự động lấy một cái trên tty1 để bạn luôn có ít nhất một bảng điều khiển ảo.

Xem thêm: systemd-logind.service không khởi động nếu thiếu dbus


2
NB: tệp được sở hữu bởi gói systemd, vì vậy để sửa đổi hoặc xóa nó, dpkg-diverttrước tiên hãy sử dụng . Tuy nhiên, cũng có một cách có nguồn gốc hệ thống để đưa nó ra khỏi đường - chạy sudo systemctl mask getty-static.servicevà thiết lập của riêng bạn/etc
Josip Rodin

2
maskNếu một dịch vụ được kích hoạt là ồn ào , sẽ tốt hơn nếu tạo một đơn vị có cùng tên /etcđể ghi đè lên nội dung của nó. Sử dụng ExecStart = / bin / true nếu bạn muốn bắt đầu zero getty's static.
nguồn

cách chính xác systemd khác là để ghi đè lên các phiên bản gói (bạn thực sự không bao giờ nên xóa tập tin đó) sử dụng sudo systemctl edit getty-static.service, mà sẽ tạo ra một tập tin ghi đè mà được ưu tiên hơn những /libai
ryeager

8

Để vô hiệu hóa các gettys trên các TTY cụ thể 4-6 trong khi có thể để 1-3 và 7-9 hoạt động, hãy chạy:

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

masktạo symlink /etc/systemd/system/{name} -> /dev/nullmà vô hiệu hóa dịch vụ. Cố gắng chạy nó systemctl startsẽ hiển thị lỗiFailed to start NAME.service: Unit NAME.service is masked.

Nếu bạn có A.service Wants=masked.service, thì start Asẽ thành công nhưng cũng tạo ra lỗi bắt đầu phụ thuộc trong nhật ký.

Nếu bạn có B.service Requires=masked.service, thì start Bcũng sẽ thất bại.

Yup, necroanswer. Chúc mừng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.