Eu tive o mesmo problema e encontrei esta discussão.
Minha solução para o X11 (gerenciador de janelas da caixa de fósforos) com qt5 é a seguinte.
Eu, opcionalmente, não desligo a tela completamente, mas reduzo o brilho. Mas eu ainda quero evitar que o primeiro clique vá para o aplicativo, porque a tela esmaecida está um pouco escura e o usuário pode não ter visto o que ele tocou.
Primeiro, eu tenho um script que aguarda por um evento de tela de toque por um certo tempo (o mesmo tempo que o protetor de tela). Se o tempo decorrer, o brilho do visor é reduzido e é iniciada uma animação que sai se alguém pressionar o ecrã táctil. Se esse aplicativo sair, o brilho será definido para o valor original.
Em segundo lugar, o aplicativo de animação é um aplicativo QML Qt5 QuickScript.
Primeiro: o script que é executado em segundo plano:
device=/dev/input/mouse0
timeout=$screentime
while [ 1 ]; do
read -t $timeout -n 1 < $device
notread=$?
if [ $notread == 0 ]; then
echo $brightness > /sys/class/backlight/pwm-backlight/brightness
else
echo nobody has touched the screen, set screen more dark
echo $darkness > /sys/class/backlight/pwm-backlight/brightness
/usr/bin/qt5/qml /usr/local/bin/darkshow.qml
fi
done
Segundo - o script darkshow.qml:
import QtQuick 2.2
import QtQuick.Window 2.1
Item {
Window { id: mainwindows
width: 1024
height: 600
visible: true
visibility: Window.Maximized
opacity: 0.5
modality: Qt.ApplicationModal
// if it should stay on top: flags: Qt.SplashScreen
MouseArea {
onClicked: Qt.quit();
anchors.fill: parent
}
onActiveChanged: {
console.log("onActiveChanged");
if (active == 0) Qt.quit();
}
AnimatedSprite {
id: sprite
width: 1024
height: 600
anchors.centerIn: parent
source: "content/awibuben_spritesheet.png"
frameCount: 5
frameSync: true
frameWidth: 1024
frameHeight: 600
}
}
}