如何以编程方式在给定时间内阻止用户输入?

如何以编程方式在给定时间内阻止用户输入?

作为从事计算机科学工作的人员,离线工作以避免使用 Facebook 等对我来说并不总是(意味着几乎从来没有)可行的,因为我大多数时间都必须在线工作。

我努力了水蛭块和类似的事情,但问题是,在某个时候我开始为自己制作系统来破解,如果你有根的话,这毫无意义。

我非常想尝试一下所描述的方法这里。(简短版本:每次完成任务或厌倦任务时都重新启动电脑)

与本博客的作者不同,我的工作主要不是在屏幕会话中完成的,而是在 IDE 和其他启动速度不是很快的东西中完成的,这意味着完全重启(包括加载所有程序)将需要一些时间。所以,问题是:

我怎样才能阻止所有用户输入并最好在给定的时间内使屏幕空白?

然后我们的想法就是有一个键盘快捷键来激活脚本/程序(我猜可能也必须有 root 权限?)

答案1

所以你想把自己当成一个 16 岁的男孩,不是吗?好吧,这应该是一个很好的起点...

#> cat force-screensaver.sh

#!/bin/bash

secondstowait=$1

if [ "x$1" == "x" ] ; then
    echo
    echo "Please insert the number of seconds you want to wait"
    echo
    exit
fi

hourstowait=$(($secondstowait / 3600))
minstowait=$((($secondstowait / 60) - ($hourstowait * 60)))
secstowait=$(($secondstowait - $minstowait * 60 - $hourstowait * 3600))

starth=`date +"%H"`
startm=`date +"%M"`
starts=`date +"%S"`

ends=0
endm=0
endh=0

ends=$(($ends + $starts + $secstowait))
if [ $ends -gt 59 ] ; then
    ends=$(($ends - 60))
    endm=$(($endm + 1))
fi

endm=$(($endm + $startm + $minstowait))
if [ $endm -gt 59 ] ; then
    endm=$(($endm - 60))
    endh=$(($endh + 1))
fi

endh=$(($endh + $starth + $hourstowait))

echo
echo "Will wait for $hourstowait hours, $minstowait minutes and $secstowait seconds"
echo

printf "Starting at %02d:%02d:%02d - stopping at %02d:%02d:%02d\n" "$starth" "$startm" "$starts" "$endh" "$endm" "$ends"

while (true)
do

    currh=`date +"%H"`
    currm=`date +"%M"`
    currs=`date +"%S"`

    #echo "Running..."
    gnome-screensaver-command -a

    #sleep 5

    if [ $currh -ge $endh ] && [ $currm -ge $endm ] && [ $currs -ge $ends ] ; then
        echo
        echo Exiting...
        echo
        gnome-screensaver-command -d
        exit
    fi
done

你可以调用它并传入你想要折磨自己的秒数(例如force-screensaver.sh 60这是我能忍受的最大时间)。然后你只需要将它绑定到键盘快捷键就大功告成了。

祝你痛苦愉快 :P

相关内容