Como eu posso bloquear programaticamente a entrada do usuário em um determinado momento?

2

Como uma pessoa que trabalha em ciência da computação trabalhando off-line para evitar o uso do Facebook, essa nem sempre é (quase nunca) possível para mim, pois eu tenho que estar on-line para trabalhar.

Eu tentei leechblock e coisas semelhantes, mas o problema é que em algum momento eu começar a fazer sistemas para eu hackear, o que é meio sem sentido se você tiver raiz.

Eu gostaria muito de experimentar o método descrito aqui . (Versão resumida: reinicie seu PC toda vez que terminar uma tarefa ou fique entediado com ela)

Ao contrário do autor deste blog, meu trabalho é feito principalmente não em sessões de tela, mas em IDEs e outras coisas não tão rápidas para iniciar, significando uma reinicialização completa incluindo o carregamento de todos os meus programas. . Então, a questão é:

Como posso bloquear todas as entradas do usuário e preferencialmente deixar a tela em branco por um determinado período de tempo?

A ideia seria então ter um atalho de teclado para ativar o script / programa (o que provavelmente também teria que ter root, eu acho?)

    
por black_puppydog 02.10.2012 / 05:39

1 resposta

2

Então você quer se tratar como um garoto de 16 anos, não é? Ok, este deve ser um bom ponto de partida ...

#> cat force-screensaver.sh

#!/bin/bash

secondstowait=

if [ "x" == "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

Você pode chamar isso de passar o número de segundos que você deseja torturar (por exemplo, force-screensaver.sh 60 é o máximo que eu pude suportar). Então você só precisa ligá-lo a um atalho de teclado e pronto.

Tenha uma boa dor: P

    
por Avio 02.10.2012 / 11:08