UPDATE 2017/08/23: script alterado para um que não envia pressionamentos de tecla, mas desativa dpms
e o protetor de tela temporariamente enquanto um vídeo está sendo reproduzido em tela cheia.
Isso só funciona com aplicativos em tela cheia, não maximizados.
Primeiro, instale xdotool
:
sudo apt install xdotool
Eu criei uma pasta scripts
na minha pasta pessoal para que eu deixasse os scripts que eu queria manter:
mkdir -p ~/scripts
criei um arquivo chamado check_full.bsh
na minha pasta ~/scripts
e adicionei o seguinte conteúdo a ele:
Como meu protetor de tela está definido por 20 minutos, configurei o cronômetro de espera no script para 10 minutos (600 segundos). Você pode alterar isso com base nas configurações do protetor de tela.
#!/bin/bash
#Get DPMS settings
dpms_set=$(xset -q | grep -i "dpms is" | awk '{print $NF}')
#Get screensaver type and command
scrnsvr=$(ps -ef | grep screensav | grep -v grep | awk '{print $8}')
scrnsvrcmd=$(ps -ef | grep screensav | grep -v grep | awk '{print substr($0,index($0,$8))}')
#Sleep Timer in seconds.
SL=600
while true;
do
result=()
#Get all window geometries
all=($(xdotool search --name - | while read win; do xdotool getwindowgeometry $win | grep Geometry | awk '{print $2}'; done))
#Get all screen resolutions detected and build array.
SCREENS=($(xrandr | grep \* | awk '{print $1}'))
SCRN=" ${SCREENS[*]} "
#Get result of all windows and match
for item in ${all[@]}; do if [[ $SCRN =~ " $item " ]] ; then result+=($item); fi; done
#If a result exists disable power management and screensaver
if [[ ${result[@]} ]]; then
ps -ef | grep $scrnsvr | grep -v grep >/dev/null
if [[ $? == 0 ]]; then
kill $(ps -ef | grep $scrnsvr | grep -v grep | awk '{print $2}')
fi
if [[ $dpms_set == "Enabled" ]];then
xset -dpms
fi
else
ps -ef | grep $scrnsvr | grep -v grep >/dev/null
if [[ $? == 1 ]]; then
${scrnsvrcmd} &
fi
if [[ $dpms_set != "Disabled" ]];then
xset dpms
fi
fi
result=()
sleep $SL
done
torne o script executável:
chmod +x ~/scripts/check_full.bsh
Por algum motivo, um cron job não executaria isso corretamente. Então, adicionei uma entrada à minha inicialização para chamar esse script. Na pasta ~/.config/autostart/
, criei um arquivo chamado Check_Full.desktop
com o seguinte conteúdo:
Eu gosto de ter atrasos adicionados à inicialização, pois eles costumam carregar melhor.
[Desktop Entry]
Type=Application
Name=Check_Full
Comment=Prevent screensaver from activating when full screen video is playing
Exec=bash -c 'sleep 5 && /home/<username>/scripts/check_full.bsh'
altere a linha Exec para corresponder à sua pasta pessoal.
Defina as permissões adequadas para o arquivo:
chmod 664 ~/.config/autostart/check_full.desktop
Depois de sair e voltar, check_full.bsh
está agora em execução e a cada 10 minutos se a aplicação ativa estiver em tela cheia. Caso contrário, o protetor de tela / tela de bloqueio é iniciado nos horários normais.
Espero que isso ajude!