서비스 중단을 통한 웨이크업 방지

서비스 중단을 통한 웨이크업 방지

내 말은 일시 중지 후 즉시 노트북이 깨어나지 않도록 하는 것입니다. 사진처럼 성공했어요여기. disable_devices_from_wakeup.sh내가 사용하는 스크립트의 내용은 다음과 같습니다.

#!/bin/bash

declare -a devices=(EHC1 EHC3 OHC1 OHC3)
for device in "${devices[@]}" ; do
    sudo sh -c "echo $device > /proc/acpi/wakeup"
done

이제 부팅 프로세스 전반에 걸쳐 변경 사항이 영구적으로 유지되기를 원합니다. 그래서 설명대로 서비스를 설정했습니다.여기그리고여기. 합쳐진 서비스는

$ cat /etc/systemd/system/wakeup_disable_devices.service
[Unit]
Description=Disable devices for wakeup, as a fix to prevent system from waking immediately after suspend

[Service]
ExecStart=/home/user1/Documents/soft-hard-ware/linux-ubuntu/disable_devices_from_wakeup.sh
#ExecStart=/bin/sh -c '/bin/echo EHC1 > /proc/acpi/wakeup'
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

그러나 다시 시작한 후에도 장치는 계속 깨어날 수 있습니다. 서비스가 다음과 같은 방식으로 실행되고 있지 않습니다.

$ systemctl status wakeup_disable_devices.service
 wakeup_disable_devices.service - Disable devices for wakeup, as a fix to prevent system from waking immediately after suspend
     Loaded: loaded (/etc/systemd/system/wakeup_disable_devices.service; disabled; vendor preset: enabled)
     Active: inactive (dead)

계속해서 변경 사항을 영구적으로 적용하고 자동으로 적용하는 방법을 모르겠습니다. 문제가 sudo내 스크립트 및/또는 다른 것에서 비롯된 것인지 모르겠습니다 . 또한 주석 처리된 라인으로 서비스 를 시도했지만 cat /proc/acpi/wakeup여전히 EHC1.enabled

관련된:

  1. https://askubuntu.com/questions/252743/how-do-i-prevent-mouse-movement-from-waking-up-a-suspensed-computer
  2. https://askubuntu.com/questions/152403/how-do-i-make-changes-to-proc-acpi-wakeup-permanent
  3. "/proc/acpi/wakeup"에 대한 영구 변경
  4. https://answerbun.com/
  5. https://mitjafelicijan.com/disable-mouse-wake-from-suspens-with-systemd-service.html

답변1

나는 서비스가 실제로 서비스가 아니기 때문에 "실행"되어야 한다고 생각하지 않습니다. 이는 처음에 발생하고 종료되는 일회성 작업입니다. 따라서 "RemainAfterExit"이 "비활성(죽음)"임에도 불구하고 여전히 systemctl 상태에 표시되는 것으로 의심됩니다. 스크립트에 몇 가지 설명 정보를 추가하면 실제로 실행되는지 확인할 수 있습니다. sudo에 문제가 있는지는 확실하지 않습니다. 일반 사용자로는 서비스가 실행되지 않습니다. 루트로 실행하거나(Sudo는 중복되지만 무해함) 아무도 실행하지 않을 수 있습니다(Sudo 권한이 없으므로 실패함). 그러나 나는 Ubuntu 사용자가 아니며 systemd가 가치 있는 것보다 더 많은 문제를 안고 있다고 생각합니다. 나는 OpenRC에서 이 문제를 해결하는 방법을 알고 있지만 그것은 당신에게 도움이 되지 않습니다.

답변2

간단한 단계를 놓쳤습니다

$ sudo systemctl enable wakeup_disable_devices.service

또한 (brute force) 명령으로 변경했습니다.

ExecStart=sh -c 'echo EHC1 > /proc/acpi/wakeup ; echo EHC3 > /proc/acpi/wakeup ; echo OHC1 > /proc/acpi/wakeup ; echo OHC3 > /proc/acpi/wakeup'

왜냐하면 더 "세련된" 것이기 때문입니다.

ExecStart=sh -c 'devs=(EHC1 EHC3 OHC1 OHC3) ; for dev in "${devs[@]}"; do echo $dev > /proc/acpi/wakeup ; done'

쓸모 없는. 디버깅하는 데 시간이 걸리지 않았습니다. 이제 더 이상 외부 스크립트가 필요하지 않습니다.

관련 정보