전원 버튼을 길게 누르면(빠르게 누르는 것이 아니라) 종료되는 메커니즘은 무엇입니까?

전원 버튼을 길게 누르면(빠르게 누르는 것이 아니라) 종료되는 메커니즘은 무엇입니까?

logind.conf의 "HandlePowerKey" 옵션을 사용하여 전원 버튼의 동작을 제어할 수 있습니다. "일시중지"로 설정되어 있습니다. 전원 버튼을 간단히 탭하면 예상대로 작동하여 운영 체제가 일시 중지됩니다. 그러나 버튼을 길게 누르면 이를 무시하고 컴퓨터가 종료되는 것 같습니다. 어떻게 이런일이 일어 났습니까?

제가 묻는 이유는 /lib/systemd/system-sleep에 있는 스크립트가 오랫동안 전원을 켠 상태로 놔두면 올바르게 실행되지 않기 때문입니다.

답변1

전원 버튼은 시스템 펌웨어에 의해 처리됩니다. 일반적인 구성은 다음과 같습니다.

  • 버튼을 눌렀을 때그런 다음 릴리스, 펌웨어는 운영 체제에 전원을 보내 순차적인 종료 또는 일시 중지를 트리거합니다.

  • 버튼을 눌렀다가 몇 초 내에 놓지 않으면 펌웨어는 운영 체제에 알리지 않고 시스템 전원을 끕니다.

두 시퀀스는 둘 중 하나입니다. 시스템을 일시 중지한 후 종료할 필요는 없습니다. 이것이 전원 버튼을 오랫동안 누르고 있을 때 스크립트가 실행되지 않는 이유입니다. 운영 체제는 이를 인식하지 못합니다.

답변2

여기에는 두 가지 일이 있습니다.

첫째, Stephen이 제안한 것처럼 마더보드의 펌웨어는 버튼의 신호를 처리합니다. 버튼을 누르는 시기에 따라 펌웨어가 무엇을 할지 결정합니다.

그런 다음 펌웨어는 ACPI 신호를 운영 체제로 보냅니다. 전원 버튼을 빠르게 누르면 전원 버튼 신호가 전송됩니다. 재설정 버튼을 누르면 재설정 신호가 전송됩니다. 버튼을 누르고 있으면 펌웨어가 운영 체제에 신호를 보내지 않고 시스템 전원을 차단하므로 운영 체제가 순서대로 종료될 시간이 제공되지 않습니다. 즉, 펌웨어가 운영 체제에 신호를 보내지 않기 때문에 일반적으로 종료 시 실행되는 모든 스크립트와 트리거는 실행되지 않습니다. 이는 전원 버튼을 오랫동안 누르면 스크립트가 작동하지 않는 이유를 설명합니다.

동작을 제어하려면 운영 체제가 ACPI 종료 신호를 처리하는 방법을 구성해야 합니다. 따라서 컴퓨터가 멈추도록 하려면 전원 버튼을 누를 때 운영 체제가 멈추도록 구성하면 됩니다.

그러나 전원 버튼을 길게 누르면 운영 체제가 펌웨어로부터 신호를 수신하지 않기 때문에 아무것도 제어할 수 없습니다.

메시지 로그를 따라가면

sudo tail -f /var/log/messages 

전원 버튼을 눌렀을 때 기록된 로그를 봅니다. 내 노트북(lenovo t14)과 데스크탑(asus 마더보드)에서는 전원 버튼을 놓으면 둘 다 신호를 수신합니다.

Aug 16 11:47:43 tp-01 systemd-logind[1508]: Power key pressed.

이는 마더보드의 펌웨어가 프레스가 길거나 짧은지 결정하기 위해 기다리고 있기 때문에 의미가 있습니다. 이는 또한 길게 누르면 시스템의 전원이 즉시 차단되므로 버튼을 놓기 전에 전원이 차단되고 신호가 전송되지 않음을 의미합니다.

관련 정보