如果没有人使用计算机,则以特定方式关机

如果没有人使用计算机,则以特定方式关机

我遇到了问题,因为我的朋友经常忘记关闭我们的电脑。我不知道如何解决它。安装了 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

你可以编写简单脚本shutdown 0在提示后使用该命令。

我应该补充一下,你可以使用睡眠命令循环来实现等待。

答案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 有类似的调用。

相关内容