ฉันค้นหาสิ่งนี้แล้วดูเหมือนจะไม่สามารถหาอะไรที่เป็นประโยชน์ได้
ฉันมีคอมพิวเตอร์ที่ใช้ Ubuntu 12.10 ตั้งค่าให้ระงับหลังจากไม่มีกิจกรรมเป็นเวลา 30 นาที ฉันไม่ต้องการเปลี่ยนมันใช้งานได้ดีตลอดเวลา
สิ่งที่ฉันต้องการทำคือปิดการใช้งานการระงับอัตโนมัติหากแอปพลิเคชันบางตัวกำลังทำงานอยู่ ฉันจะทำสิ่งนี้ได้อย่างไร
สิ่งที่ใกล้เคียงที่สุดที่ฉันเคยพบคือการเพิ่มเชลล์สคริปต์/usr/lib/pm-utils/sleep.d
ที่ตรวจสอบว่าแอปพลิเคชันทำงานอยู่และส่งคืน 1 เพื่อระบุว่าควรจะป้องกันการหยุดทำงานชั่วคราวหรือไม่ แต่ดูเหมือนว่าระบบจะยกเลิกการระงับโดยอัตโนมัติแทนที่จะลองอีกครั้งในอีก 30 นาที (เท่าที่ผมสามารถบอกได้ว่าถ้าผมเลื่อนเมาส์ไปที่เตะจับเวลาอีกครั้ง.) มันค่อนข้างจะมีโปรแกรมจะเสร็จสมบูรณ์หลังจากที่ไม่กี่ชั่วโมงและฉันอยากจะพีซีของฉันแล้วระงับโดยอัตโนมัติถ้าฉันไม่ได้ใช้ มันอยู่ที่จุดนั้น (ดังนั้นฉันไม่ต้องการเพิ่มการโทรไปที่ pm-suspend เมื่อแอปพลิเคชันเสร็จสิ้น)
เป็นไปได้ไหม
แก้ไข: ตามที่ฉันได้กล่าวไว้ในความคิดเห็นด้านล่างสิ่งที่ฉันต้องการคือการยับยั้งการหยุดชั่วคราวเมื่อพีซีของฉันแสดงไฟล์ผ่าน 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