나는 이것에 대해 조금 검색했고 도움이되는 것을 찾을 수없는 것 같습니다.
30 분 동안 활동이 없으면 Ubuntu 12.10을 실행하는 PC가 일시 중지되도록 설정되어 있습니다. 나는 그것을 바꾸고 싶지 않으며, 그것은 대부분의 시간에 효과적입니다.
내가하고 싶은 것은 특정 응용 프로그램이 실행중인 경우 자동 일시 중단을 비활성화하는 것입니다. 어떻게해야합니까?
지금까지 찾은 가장 가까운 것은 쉘 스크립트를 추가 /usr/lib/pm-utils/sleep.d
하여 응용 프로그램이 실행 중인지 확인하고 일시 중지를 방지해야 함을 나타내는 1을 반환하는 것입니다. 그러나 30 분 후에 다시 시도하지 않고 시스템이 자동으로 일시 중지되는 것처럼 보입니다. (알 수있는 한, 마우스를 움직이면 타이머가 다시 시작됩니다.) 응용 프로그램이 몇 시간 후에 완료 될 가능성이 높으며 사용하지 않으면 PC가 자동으로 일시 중지됩니다 그 시점에서 . (응용 프로그램이 완료되면 pm-suspend에 전화를 걸고 싶지 않습니다.)
이것이 가능한가?
편집 : 아래 의견 중 하나에서 언급했듯이 실제로 원하는 것은 내 PC가 NFS를 통해 파일을 제공 할 때 일시 중단을 방지하는 것이 었습니다. NFS 부분을 해결하는 방법을 이미 알고 있었기 때문에 질문의 "일시 중단"부분에 집중하고 싶었습니다. 답 중 하나에 주어진 'xdotool'아이디어를 사용하여 몇 분마다 cron에서 실행되는 다음 스크립트를 생각해 냈습니다. 화면 보호기가 시작되는 것을 막기 때문에 이상적이지는 않지만 작동합니다. '카페인'이 나중에 일시 중단을 올바르게 다시 활성화하지 않는 이유를 살펴 봐야 할 것입니다. 어쨌든, 이것은 효과가있는 것처럼 보이므로 다른 사람이 관심이있는 경우 여기에 포함시킵니다.
#!/bin/bash
# If the output of this function changes between two successive runs of this
# script, we inhibit auto-suspend.
function check_activity()
{
/usr/sbin/nfsstat --server --list
}
# Prevent the automatic suspend from kicking in.
function inhibit_suspend()
{
# Slightly jiggle the mouse pointer about; we do a small step and
# reverse step to try to stop this being annoying to anyone using the
# PC. TODO: This isn't ideal, apart from being a bit hacky it stops
# the screensaver kicking in as well, when all we want is to stop
# the PC suspending. Can 'caffeine' help?
export DISPLAY=:0.0
xdotool mousemove_relative --sync -- 1 1
xdotool mousemove_relative --sync -- -1 -1
}
LOG="$HOME/log/nfs-suspend-blocker.log"
ACTIVITYFILE1="$HOME/tmp/nfs-suspend-blocker.current"
ACTIVITYFILE2="$HOME/tmp/nfs-suspend-blocker.previous"
echo "Started run at $(date)" >> "$LOG"
if [ ! -f "$ACTIVITYFILE1" ]; then
check_activity > "$ACTIVITYFILE1"
exit 0;
fi
/bin/mv "$ACTIVITYFILE1" "$ACTIVITYFILE2"
check_activity > "$ACTIVITYFILE1"
if cmp --quiet "$ACTIVITYFILE1" "$ACTIVITYFILE2"; then
echo "No activity detected since last run" >> "$LOG"
else
echo "Activity detected since last run; inhibiting suspend" >> "$LOG"
inhibit_suspend
fi
편집 2 : 위의 스크립트는 작동하지만 아래의 다른 의견 덕분에 이제이 스크립트 쌍을 사용하고 있습니다.이 스크립트는 일시 중단을 억제하면서 화면 보호기가 시작되도록하는 이점이 있습니다. 첫 번째는 /usr/lib/pm-utils/sleep.d/000nfs-inhibit이며, 금지 파일이있는 경우 일시 중지 시도를 방지합니다.
#!/bin/sh
LOG="/home/zorn/log/nfs-suspend-blocker.log"
INHIBITFILE="/home/zorn/tmp/nfs-suspend-blocker.inhibit"
echo "$0: Started run at $(date), arguments: $*" >> "$LOG"
if [ "$1" = "suspend" ] && [ -f "$INHIBITFILE" ]; then
echo "$0: Inhibiting suspend" >> "$LOG"
exit 1
fi
exit 0
두 번째는 이전 nfs-suspend-blocker 스크립트의 수정 된 버전이며 여전히 cron에서 실행해야합니다. 이제 아래 의견에 요약 된 전략을 따릅니다.
#!/bin/bash
# This works in tandem with /usr/lib/pm-utils/sleep.d/000nfs-inhibit, which
# will prevent a suspend occurring if $INHIBITFILE is present. Once it prevents
# a suspend, it appears that it requires some "user activity" to restart the
# timer which will cause a subsequent suspend attempt, so in addition to
# creating or removing $INHIBITFILE this script also jiggles the mouse after
# removing the file to restart the timer.
# If the output of this function changes between two successive runs of this
# script, we inhibit auto-suspend.
function check_activity()
{
/usr/sbin/nfsstat --server --list
}
# Slightly jiggle the mouse pointer about; we do a small step and reverse step
# to try to stop this being annoying to anyone using the PC.
function jiggle_mouse()
{
export DISPLAY=:0.0
xdotool mousemove_relative --sync -- 1 1
xdotool mousemove_relative --sync -- -1 -1
}
LOG="$HOME/log/nfs-suspend-blocker.log"
ACTIVITYFILE1="$HOME/tmp/nfs-suspend-blocker.current"
ACTIVITYFILE2="$HOME/tmp/nfs-suspend-blocker.previous"
INHIBITFILE="$HOME/tmp/nfs-suspend-blocker.inhibit"
echo "$0: Started run at $(date)" >> "$LOG"
if [ ! -f "$ACTIVITYFILE1" ]; then
check_activity > "$ACTIVITYFILE1"
exit 0;
fi
/bin/mv "$ACTIVITYFILE1" "$ACTIVITYFILE2"
check_activity > "$ACTIVITYFILE1"
if cmp --quiet "$ACTIVITYFILE1" "$ACTIVITYFILE2"; then
echo "$0: No activity detected since last run" >> "$LOG"
if [ -f "$INHIBITFILE" ]; then
echo "$0: Removing suspend inhibit file and jiggling mouse" >> "$LOG"
/bin/rm "$INHIBITFILE"
jiggle_mouse
fi
else
echo "$0: Activity detected since last run; inhibiting suspend" >> "$LOG"
touch "$INHIBITFILE"
fi