SSH 연결이 켜져있을 때 머신이 잠자 지 않도록 방지


13

데스크탑이 비활성 상태 일 때 데스크탑을 일시 중단 모드로 전환하여 전력을 절약하려고합니다. 그러나 많은 데스크탑은 소유자가 SSH를 통해 액세스합니다. 소유자가 머신을 켤 수 있도록 wakeonlan 솔루션이 배치되어 있지만 SSH 연결이 켜져 있어도 머신이 10 분 후에 다시 자동 일시 중단됩니다.

내가하려는 것은 "활동"정의에 활성 SSH 세션을 포함시키는 것입니다.

문제는 폴킷 규칙을 설정하여 수행 할 수 있습니까? 실제 일시 중단 전에 실행되는 스크립트를 넣고 SSH 세션이 발견되면 스크립트를 중단하여 수행 할 수 있습니까? 이 작업을 수행하는 합법적 인 방법이 필요합니다. 그렇지 않다면 해키 방법도 환영합니다.

현재 순진한 해키 솔루션 : 편집 /usr/sbin/pm-suspend:

#check for SSH sessions, and prevent suspending:
if [ "$(who | grep -cv "(:")" -gt 0 ]; then
    echo "SSH session(s) are on. Not suspending."
    exit 1
fi

이것이 목적을 달성합니다. 그러나 언제 업데이트가 파일을 덮어 쓸지 모르겠습니다 /usr/sbin/pm-suspend. 또한 이것이 tuxonice와 같은 다른 일시 중단 구현에서 어떻게 작동하는지 모르겠습니다.


2
grep -cv :0통과 하는 대신 사용 하는 것이 좋습니다 wc.
terdon

1
보다 우아함을위한 또 다른 아이디어 : GNU grep과 같은 POSIX를 사용한다고 가정 할 [경우 호출을 중단 할 수 있습니다 . if who | grep -qv :0; thengrep
David Foerster

답변:


19

우분투 14.10까지 (업 스타트 기반)

“파일”섹션 pm-action(8)을 살펴보고 검색 /etc/pm/sleep.d하십시오. 이러한 스크립트 중 하나가 0이 아닌 종료 상태로 리턴되면 일시 중단이 방지됩니다.

명확성을 위해 업데이트 된 지침 :

  1. 따라서 파일을 만듭니다 /etc/pm/sleep.d/05_ssh_keepawake.

  2. 이 파일에 shebang ( #!/bin/sh)과 질문에 언급 된 코드를 넣으십시오 .

  3. 그것에 대한 실행 권한을 설정하십시오.

    chmod +x /etc/pm/sleep.d/05_ssh_keepawake
    

우분투 15.04부터 (시스템 기반)

systemd 는 전원 상태 후크를 관리하기 위해 pm-utils 를 사용하지 않지만 같은 인프라를 가지고 있습니다. 수면 방지 체커는 더 이상 수면에서 실행되지 않지만 수면 을 금지하는 작업 으로 설정해야합니다 ( 1 참조 ).

따라서 SSH 세션 로그인 및 로그 아웃에 명령을 추가하여 systemd (예 :을 통해 systemd-inhibit(1)) 수면 금지를 등록한 후 나중에 금지를 해제해야합니다. 누군가 SSH 로그인 및 로그 아웃에 연결하는 방법을 알고 있다면 관련 단계와 명령을 해결할 수 있도록 의견이나 편집을 환영합니다.

다음 섹션은 진행중인 작업입니다. 수행중인 작업을 알고있을 때만 사용하십시오!

옵션 사용에 /etc/systemd/system/ssh-inhibt-sleep.service의존 하는 시스템 장치를 작성할 수 있습니다 . 새 장치가 실패한 경우 (호출 된 프로세스에서 0이 아닌 종료 상태로) 장치 가 후속 휴면 조치를 취합니다.sleep.targetRequiredBysleep.target

[Unit]
Description=Check for running SSH sessions and, if any, inhibit sleep
Before=sleep.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c '! who | grep -qv :0'`

[Install]
RequiredBy=sleep.target

항상 그렇듯이 시스템 유닛을 활성화해야 시스템이 적용됩니다.

sudo systemctl enable ssh-inhibt-sleep.service

자세한 내용은 systemd.unit(5)및을 참조하십시오 systemd.service(5).


이것은 18.04에서 작동하지 않는 것 같습니다. 이것이 더 이상 해결책이 아닙니까?
Michael Jarret

1
@MichaelJarret : 그렇습니다. systemd의 상황에 대한 정보로 질문을 업데이트했습니다.
David Foerster

나는 어제이 밖으로 정렬하는 동안 다음 찾았지만 일을 이전 스크립트를 수정하지 못했습니다 여기
마이클 자렛에게

나는 나의 코멘트를 편집 할 수 없습니다뿐만 아니라 관련된 것
마이클 자렛을

1
@ MichaelJarret : 당신이 시도 할 수있는 또 다른 아이디어가있었습니다. 내 답변에 대한 업데이트를 참조하십시오.
David Foerster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.