我遇到了问题,因为我的朋友经常忘记关闭我们的电脑。我不知道如何解决它。安装了 ubuntu 系统。
我正在寻找一种解决方案,让用户必须点击并确认(每小时一次)有人在使用计算机。如果他不这样做,计算机将自动关闭。
这个问题有解决办法吗?
答案1
一种方法是模拟按下电源按钮。然后会弹出以下对话框,并在 60 秒后关闭计算机。
要做到这一点,请使用acpi_fakekey 116
它将“按下”关机按钮(数字 116)。(至少 116 是我的关机按钮。如果它在您的机器上失败,请尝试evtest
在按下按钮时安装并运行它)
要每小时自动执行此操作,请将其添加到 roots crontab 中,如下所示:
sudo crontab -e
并添加以下行:
0 * * * * /usr/bin/acpi_fakekey 116
这将会在每月每周每天每小时第 0 分钟按下按钮。
答案2
这是您要执行的操作的工作脚本:
#!/bin/bash
while true; do
sleep 59m
zenity --question --text "Are you using the pc (click anything)?"&
zenity_id=$!
#the user has 1 minute to answer, otherwise PC will shut down
sleep 1m
if kill $zenity_id 2> /dev/null; then
#zenity was still running, shutdown the pc
dbus-send --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
fi
done
每小时一次,它会弹出一个窗口询问“你还在吗?”,如果用户点击了某个按钮,则它不会再关机一小时(一小时后会再次显示弹出窗口),但如果超过 1 分钟没有与对话框交互,则 PC 会自动关机。为了在启动时启动此功能,请使用上述代码创建一个文件并使其可执行(右键单击->属性->权限->允许以程序形式执行文件),然后单击屏幕右上角的电源按钮,选择启动应用程序并添加此脚本。
答案3
答案4
让某人每隔指定的时间间隔点击一次按钮似乎很乏味。
您可以让 gnome-screensaver 为您工作并检查它已经运行了多长时间。
在脚本中,您可以执行以下操作:
#!/bin/bash
pidof X || exit #not running X!
export DISPLAY=":0" # use current display
DURATION="`gnome-screensaver-command -t | awk '{print $7}'`"
if [ $DURATION -gt 3600 ]; then #idle for an hour
shutdown -h now
fi
这是一个非常基本的例子,任何人都可以对其进行扩展。将其放在 cron 作业中或使用 while/sleep 调用以守护进程模式运行。
我不会完全照原样使用它,而只是说明一种方法。这假设我们使用 gnome-screensaver。xscreensaver 有类似的调用。