Как я могу программно заблокировать пользовательский ввод на определенное время?

Как человек, работающий в области компьютерных наук, работающий в автономном режиме, чтобы избежать фейсбука и тому подобного, не всегда (то есть вряд ли когда-либо) возможен для меня, так как я в основном должен быть онлайн, чтобы работать.

Я пробовал пиявку и подобные вещи, но проблема в том, что в какой-то момент я начинаю создавать системы для себя, чтобы взломать, что бессмысленно, если у вас есть root.

Я бы очень хотел попробовать метод, описанный здесь здесь . (Короткая версия: перезагружайте свой компьютер каждый раз, когда завершаете задание или вам это надоедает)

В отличие от автора этого блога, моя работа в основном выполняется не в сеансах экрана, а в IDE и других не очень быстрых - для запуска, то есть полная перезагрузка, включая загрузку всех моих программ, займет время. Итак, вопрос таков:

Как я могу заблокировать весь пользовательский ввод и предпочтительно очистить экран в течение заданного промежутка времени?

Тогда идея состоит в том, чтобы комбинация клавиш для активации скрипта / программы (которая, вероятно, также должна иметь root-права?)

2
задан 2 October 2012 в 07:39

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

0
ответ дан 2 October 2012 в 07:39

Другие вопросы по тегам:

Похожие вопросы: