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