Ok, então consegui encontrar uma maneira bem simples de contornar esse problema. A solução ideal seria (na minha opinião) impedir que /dev/input/event1
e 2
fossem criados, mas não consegui que as regras do udev funcionassem da maneira que eu queria.
Acabei usando EVIOCGRAB
no meu aplicativo Qt. Eu tenho um filtro de evento "global" no topo que detecta se o usuário tocou no dispositivo e escurece a exibição após alguns minutos de inatividade. Adicionando isso ao construtor:
QString dev1 = QLatin1String("/dev/input/event1");
QString dev2 = QLatin1String("/dev/input/event2");
int fd1 = QT_OPEN(dev1.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0);
if(fd1 >= 0)
{
::ioctl(fd1, EVIOCGRAB, 1);
qDebug() << "Grabbed " << dev1;
}
int fd2 = QT_OPEN(dev2.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0);
if(fd2 >= 0)
{
::ioctl(fd2, EVIOCGRAB, 1);
qDebug() << "Grabbed " << dev2;
}
e não fazendo mais nada, consegui o resultado que precisava. As entradas de event1
e event2
não estão mais aparecendo no meu aplicativo (e não estão acessíveis por evtest
) e, se eu sair do aplicativo, os dispositivos de evento se tornarão "ativos" novamente.
Funciona como um encanto!
// Anders