Bunun için biraz araştırdım ve yararlı bir şey bulamıyorum.
30 dakika boyunca herhangi bir işlem yapılmadığında askıya almak üzere Ubuntu 12.10 çalıştıran bilgisayarım var. Bunu değiştirmek istemiyorum, çoğu zaman harika çalışıyor.
Yapmak istediğim, belirli bir uygulama çalışıyorsa otomatik askıya almayı devre dışı bırakmaktır. Bunu nasıl yapabilirim?
Şimdiye kadar bulduğum en yakın şey /usr/lib/pm-utils/sleep.d
, uygulamanın çalışıp çalışmadığını kontrol eden ve askıya almanın önlenmesi gerektiğini belirtmek için 1 döndüren bir kabuk komut dosyası eklemektir . Ancak sistem 30 dakika sonra tekrar denemek yerine otomatik olarak askıya almayı bırakıyor gibi görünüyor. (Fareyi hareket ettirirsem zamanlayıcıyı yeniden başlatır.) Muhtemelen uygulama birkaç saat sonra bitecek ve eğer kullanmazsam bilgisayarımın otomatik olarak askıya alınmasını tercih ederim o noktada . (Bu yüzden uygulama bittiğinde pm-suspend çağrısına eklemek istemiyorum.)
Mümkün mü?
DÜZENLEME: Aşağıdaki yorumlardan birinde belirttiğim gibi, aslında istediğim, bilgisayarım NFS üzerinden dosya sunarken askıya almayı engellemekti; NFS parçasının nasıl çözüleceğine dair bir fikrim vardı, çünkü sorunun "askıya alma" kısmına odaklanmak istedim. Cevaplardan birinde verilen 'xdotool' fikrini kullanarak, birkaç dakikada bir cron'dan çalıştırdığım şu komut dosyasını buldum. İdeal değil çünkü ekran koruyucunun da tekmelemesini durduruyor, ancak çalışıyor. 'Kafeinin' neden daha sonra askıya almayı doğru bir şekilde yeniden etkinleştirmediğine bir göz atmam gerekiyor, o zaman muhtemelen daha iyisini yapabilirim. Her neyse, bu işe yarıyor gibi görünüyor, bu yüzden başka birinin ilgilenmesi durumunda buraya dahil ediyorum.
#!/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
DÜZENLEME 2: Yukarıdaki komut dosyası çalışır, ancak aşağıdaki başka bir yorum sayesinde, şimdi askıya almayı engellerken ekran koruyucunun devreye girmesine izin verme avantajına sahip olan bu komut dosyası çiftini kullanıyorum. Birincisi /usr/lib/pm-utils/sleep.d/000nfs-inhibit, bu da bir engelleme dosyası varsa askıya alma girişimini önler:
#!/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
İkincisi, önceki nfs-suspend-blocker betiğinin değiştirilmiş bir sürümüdür ve yine de cron'dan çalıştırılmalıdır. Şimdi aşağıdaki yorumda özetlenen stratejiyi takip ediyor:
#!/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