Re: Kernel-Modul um bei einem bestimmten Event eine bestimmte Funktion auszführen

Daniel Leidert <[email protected]>
Newsgroups gmane.user-groups.linux.dresden
Message-ID <[email protected]>
Am Donnerstag, dem 09.06.2022 um 08:41 +0200 schrieb Christian Perle:
> Hi Daniel,
> 
> On Wed, Jun 08, 2022 at 01:16:32 +0200, Daniel Leidert wrote:
> 
> > es scheint so, als würde der Gnome Screensaver bei einem einfachen
> > Touchpad nicht auf das Event reagieren. Evtest zeigt folgendes an,
> > wenn das Panel berührt wird:
> > 
> > Input driver version is 1.0.1
> > Input device ID: bus 0x3 vendor 0x2575 product 0xc300 version 0x110
> > Input device name: "Weida Hi-Tech CoolTouch System"
> > Supported events:
> >   Event type 0 (EV_SYN)
> >   Event type 1 (EV_KEY)
> >     Event code 330 (BTN_TOUCH)
> >   Event type 3 (EV_ABS)
> > [..]
> > Event: time 1654525281.317816, type 1 (EV_KEY), code 330 (BTN_TOUCH), value
> > 1
> > 
> > Jetzt dachte ich, dass es eine Möglichkeit wäre, mit einem Kernel-Modul
> > einfach auf BTN_TOUCH zu reagieren und einfach nur do_unblank_screen()
> > aufzurufen, wenn das Event auftritt.
> 
> Warum muss man eigentlich den Kernel "fixen", wenn der Userspace (Gnome
> Screensaver) kaputt ist?

Mit Wissen um Javascript könnte man vielleicht eine GNOME Shell-Extension
schreiben, die das selbe tut. Aber das ist nicht meine Spielwiese.

> Ausserdem scheint mir do_unblank_screen() nur fuer das kernelseitige
> (un)blanking eines VT zustaendig zu sein.

Korrekt. Darüber hatten wir dann noch gesprochen.

> Ein Screensaver unter X blankt
> das VT ja nicht wirklich, sondern zeigt auf dem X-Display irgendeine
> Animation an, die den Bildschirminhalt ueberdeckt.

Mittlerweile funktioniert es. Ich registriere wie gesagt einen Event-Handler,
Dieser checkt das Input-Gerät auf ein EV_KEY/BTN_TOUCH und ruft dann ein
kleines C-Programm auf, das DBUS_SESSION_BUS_ADDRESS setzt, setuid() aufruft,
und dann mit system() das gdbus-Kommando für den Nutzer aufruft, um den
Screensaver zu beenden. Das funktioniert jetzt richtig gut und der Kernel hat
auch keine Probleme mehr mit dem Modul.

Das funktioniert also erstmal. Wenn ich etwas Zeit habe, mache ich das
vielleicht noch einmal nur im Userspace (/dev/input/<gerät> öffnen und auf
EV_KEY/BTN_TOUCH testen und vielleicht sogar auf C-Ebene mit dbus
kommunizieren.

Aber das Modul funktioniert erst einmal:
https://github.com/dleidert/btn-touch-mod/blob/main/btn-touch-mod.c
https://github.com/dleidert/btn-touch-mod/blob/main/unblank-screen.c


Gruß, Daniel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.