我有一个基于 ubuntu 16.04 LTS 的小型家庭服务器,没有图形用户界面。它安装了 10.04 LTS 并始终升级。在版本 13 中,我通过脚本更改了电源按钮的行为,以实现在两秒内按下一次电源按钮时关机,按下两次电源按钮时挂起。在升级到版本 14.04 之前,该脚本运行良好。在此之前,只有通过命令行启动脚本时,脚本才会起作用。如果它通过 powerbutton-event 运行,它总是会发出两声哔哔声,然后服务器进入睡眠状态。看起来 if 结构不起作用!?当我在if [[ -e $LOCKFILE ]]
测试语句周围加上双括号时,我取得了一点成功。if 结构起作用了,但删除锁文件不起作用。
/etc/acpi/powerbutton.sh(绑定到 powerbutton 事件):
#!/bin/sh
# /etc/acpi/powerbtn.sh
[ -r /usr/share/acpi-support/power-funcs ] && . /usr/share/acpi-support/power-funcs
# call the subscript as single threat
/etc/acpi/suspend_or_shutdown.sh &
/etc/acpi/suspend_or_shutdown.sh:
#!/bin/sh
#/etc/acpi/suspend_or_shutdown.sh
[ -r /usr/share/acpi-support/power-funcs ] && . /usr/share/acpi-support/power-funcs
# 1x pressed = halt (within 2s)
# 2x pressed = suspend to disk
#Skip if we just in the middle of resuming
test -f /var/lock/acpisleep && exit 0
#file for decision
LOCKFILE=/var/lock/suspend_or_shutdown.lock
#acustic feedback
beep -l 50 -D 500
#exists /run/lock/suspend_or_shutdown.lock ?
if [ -e $LOCKFILE ]
then
#yes -> suspend (power button pressend second time)
#del lockfile
rm $LOCKFILE
# 2x beep for feedback
beep -r 2 -d 100
# SLEEP to S3
# pm-suspend
### OR ###
acpitool --suspend
else
#no -> create lockfile with PID
echo "$$" > $LOCKFILE
#wait 2s
sleep 2
#if pressed 2x, lockfile is deleted
if [ -e $LOCKFILE ]
then
#delete lockfile
rm $LOCKFILE
# 1x beep
beep
# shutdown server
shutdown -h now "Power button pressed"
else
exit 0
fi
fi
我不知道为什么脚本不起作用(除非通过命令行)。如果有人知道,请告诉我……非常感谢 :-)
史基