답변1
systemd는 출력을 인쇄할 때 현재 화면 해상도에 따라 줄을 조정합니다.
lightdm이 닫히면 화면 해상도가 기본값으로 되돌아갑니다. systemd가 이전 줄을 이미 인쇄하여 뒤로 이동하지 않고 화면을 지운 다음 해상도가 변경될 때마다 새 해상도로 내용을 다시 인쇄하지 않도록 하는 것이 합리적입니다.
이 문제를 해결하려면 다음이 필요하다는 것을 알 수 있습니다.기본 TTY 해상도 설정X(또는 wayland) 서버의 해상도와 일치하도록 합니다.
또한 마무리 텍스트의 모양을 개선하기 위해 노력하는 것이 다소 현학적이라는 점도 지적하고 싶습니다. 메시지는 너무 오랫동안 화면에 표시되지 않으며, 서비스가 다운되어 중단되면 현재 해상도로 인쇄되므로 중요한 내용을 읽을 수 있어야 합니다. 로그가 지속성(실행 사이에 저장되고 /var/
실행 사이에 삭제되지 않음)인 경우 로그가 표시되는 방식과 다르게 저장된다는 것을 알면 안심할 수 있습니다. 지속성을 위해 로그를 구성한 경우 journalctl -b 1
마지막 시작부터 올바르게 정렬된 메시지를 볼 수 있습니다. 이러한 메시지를 읽어야 하는데 읽을 수 없다고 생각한다면 이것이 중요할 수 있습니다.
답변2
부인 성명:이 솔루션은 systemd 및 LightDM을 실행하는 사용자를 위한 것입니다. 설정이 다른 경우 시스템에 맞게 다음 지침을 수정해야 할 수도 있습니다. 잘못 정렬된 종료 메시지에 대한 모든 배경 정보를 읽고 싶지 않다면 해결 방법 섹션으로 건너뛰세요.
개요:나는 이 문제를 해결하기 위해 오랜 시간을 보냈지만 며칠 전까지는 그런 일이 발생하지 않았습니다. 이는 화면 해상도와 관련이 없을 가능성이 높지만 응용 프로그램(아마도 LightDM) 중 하나가 터미널/tty를 잘못 포맷했기 때문에 발생합니다. 시작/종료 중 어느 시점에서 무언가가 tty를 변경하여 새 줄(NL)이 평소처럼 자동 캐리지 리턴(CR)을 받지 않도록 합니다. 영어에서는 키보드를 누르면 Enter텍스트 커서가 한 줄 아래로 이동하지만 터미널 창의 왼쪽에 재정렬되지는 않음을 의미합니다(제공한 그림에서 볼 수 있음).https://i.stack.imgur.com/oARSo.jpg). 이것은 "계단 효과"라고 불리며, 제가 들은 바에 따르면 이는 Linux에서 꽤 흔한 문제입니다. 위 문제를 해결하는 핵심 코드는 이지만 stty opost onlcr
, systemd에서 정확히 어디에 넣어야 할지 모르면 사용하기 어려울 수 있습니다. 이 명령을 너무 일찍 또는 너무 늦게 적용하면 이미 올바르게 표시된 텍스트의 서식만 지정됩니다. 한 가지 해결책은 tty 출력을 적절하게 조정하는 사용자 정의 시스템 서비스를 만드는 것입니다. 때때로 서비스가 자동으로 다시 시작되도록 하여 stty opost onlcr
정확히 어디로 가야 할지 알 필요가 없도록 할 수 있습니다 .
해결책:
# 데스크탑 환경(예: Gnome, KDE Plasma 등)이 실행 중인 tty 인스턴스를 확인합니다. 일반적으로 tty1이지만 LightDM을 사용하므로 실제로는 tty7이어야 합니다. 2단계에서 systemd 서비스를 생성할 때 이 정보가 필요합니다.
- 터미널에서 실행하십시오
who
. 다음과 같은 출력이 생성되어야 합니다.
사용자 이름 tty7 2021-02-08 12:11 (:0)
#As root /etc/systemd/system/
. 이 ExecStart=
섹션 아래에 1단계에서 찾은 tty 정보를 포함합니다. 서비스 이름을 원하는 대로 지정하세요 staircase-effect.service
. 예: .
- 터미널에서 실행하십시오
sudo nano /etc/systemd/system/staircase-effect.service
. 이것은 나중에 설명할 중요한 옵션과 함께 시도해 볼 수 있는 샘플 장치입니다.
[Unit]
Description=tty 계단 복구 effectDefaultDependency
=no
Before=halt.target shutdown.target restart.target
[이메일 보호됨]
StartLimitBurst=5
StartLimitIntervalSec=0[서비스]
유형=simple
ExecStart=/bin/stty -F /dev/tty7 opost onlcr
Restart=항상
RestartSec=30[설치]
WantedBy=multi-user.target
StartLimitIntervalSec=0
- 이 옵션을 "0"으로 설정하면 systemd가 오류를 반환하지 않고 무제한으로 서비스를 다시 시작할 수 있습니다.
Type=simple
- 이 서비스는 무한 루프로 실행되므로 "일회용"보다는 "단순"을 사용하는 것이 좋습니다. AFAIK, "oneshot"은 다른 서비스가 동시에 실행되는 것을 방지하는데, 이는 이 경우 바람직하지 않습니다.
ExecStart=/bin/stty -F /dev/tty7 opost onlcr
- 이 줄은 실제로 계단 메시지를 해결합니다. who
1단계의 명령에서 올바른 tty 번호를 입력했는지 확인하십시오 .
Restart=always
- 시작/종료 프로세스에서 서비스를 배치할 위치를 정확히 알지 않는 한 이 서비스가 반복적으로 나타나기를 원합니다. stty
텍스트가 이미 올바르게 표시되어 있는 동안 명령을 실행하면 명령이 적용되지 않습니다.
RestartSec=30
- 기술적으로 이 옵션은 개인 취향에 따라 결정됩니다. 문제를 해결할 수 있을 만큼 자주 서비스를 다시 시작해야 하지만 문제 자체가 문제가 될 정도로 자주 서비스를 다시 시작해서는 안 됩니다.
#새 서비스를 루트로 활성화합니다 systemctl
.
- 터미널에서 실행하십시오
sudo systemctl enable staircase-effect.service
. 그런 다음reboot
수정 사항이 작동하는지 확인하십시오.
선택적 LIGHTDM 조정:
#Default LightDM 서비스가 불필요한 서비스 /usr/lib/systemd/system/lightdm.service
와 충돌합니다 [email protected]
(https://bugs.archlinux.org/task/49527?opened=22169&status%5B0%5D=). 이것이 계단 메시지와 관련이 있는지는 확실하지 않지만, [email protected]
유닛 파일에서 해당 줄을 제거해도 문제가 되지 않을 것입니다.
- 터미널에서 실행하십시오
sudo systemctl edit --full lightdm.service
. 그런 다음[email protected]
LightDM이 표준 getty 서비스를 방해하지 않도록 이 줄을 제거하거나 주석 처리하세요 .reboot
변화를 살펴보세요.
대체 솔루션:
https://www.reddit.com/r/linux/comments/iwnm9w/shutdown_staircase_output_fix/
대체 솔루션 1(여기서 stty
기본 명령을 얻습니다)
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=617249
대체 솔루션 2(System V 및 Debian을 실행하는 사용자용)