Systemd로 tty를 줄이는 방법은 무엇입니까?


29

옛날에는 방금 수정했습니다 /etc/inittab. 이제 systemd를 사용하면 tty [1-6]이 자동으로 시작되는 것 같습니다. 어떻게 tty [4-6]을 비활성화해야합니까?

시스템화 된 서비스 파일이 하나만있는 것처럼 보이고 %I다른 tty 세션을 식별 하기 위해 를 사용 합니다. 해당 서비스를 제거하지 않아도되고 각 서비스를 getty@ttyX.service수동으로 생성 해야합니다.

답변:


35

systemd요청시 gettys가 생성 되므로 "추가"TTY를 비활성화 할 필요가 없습니다 man systemd-getty-generator. 자세한 내용 은 참조 하십시오. 기본적으로이 자동 스폰은 VT6까지만 VT6에 대해서만 수행됩니다 (전통적인 Linux 시스템을 모방 함).

Lennart가 블로그 게시물 1 에서 말한 것처럼 :

보다 효율적인 로그인 프롬프트를 만들기 위해 요청시에만 프롬프트가 시작됩니다. VT로 전환하면 getty 서비스는 getty@tty2.service, getty@tty5.service 등으로 인스턴스화됩니다. 더 이상 getty 프로세스를 무조건 시작할 필요가 없기 때문에 약간의 리소스를 절약 할 수 있으며 스타트 업이 약간 빨라집니다.

특정 수의 게티를 구성하려면 logind.conf이 예제에서 적절한 항목으로 수정 하면됩니다.

NAutoVTs=3


1. 사실 관리자를 위해 시스템화 된 전체 게시물 (현재 번호 18 )은 읽을만한 가치가 있습니다.


답변 주셔서 감사합니다, Jason. 우리 회사의 응용 프로그램은 실제 서버에 제공되며 이전 배포판에서는 다른 tty를 잠그기 위해 inittab을 수정합니다.
jcbwlkr

11

데비안 기반 시스템에는 서버를 방금 구축 한 경우 (dbus 서비스없이) 시작할 때 5 개의 추가 게티가 시작되도록하는 파일이 있습니다.

/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
주의 : 파일은 systemd 패키지가 소유하고 있으므로 수정하거나 삭제하려면 dpkg-divert먼저 사용하십시오 . 그러나, 체계적인 방법으로 그것을 빠져 나갈 수있는 방법이 있습니다. – 직접 실행 sudo systemctl mask getty-static.service하고 설정하십시오/etc
Josip Rodin

2
mask활성화 된 서비스를 사용하는 것이 시끄럽다면 , 같은 이름을 가진 장치를 만들어 /etc내용을 덮어 쓰는 것이 더 깨끗합니다 . 정적 게티를 0으로 시작하려면 ExecStart = / bin / true를 사용하십시오.
sourcejedi

다른 systemd 올바른 방법은 (당신이 정말로 해당 파일을 삭제하지 마십시오한다)를 사용하여 패키지 버전을 무시하는 것입니다 sudo systemctl edit getty-static.service보다 우선 재정의 파일을 만들 것이다, /lib
ryeager

8

1-3과 7-9를 그대로두고 특정 TTY 4-6에서 getty를 비활성화하려면 다음을 실행하십시오.

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

mask/etc/systemd/system/{name} -> /dev/null효과적으로 서비스를 비활성화하는 symlink 를 만듭니다 . 를 통해 실행하려고 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.