Hi,
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.
Ist hier jemand mit dem Input-Subsystem so vertraut, dass er mir dabei unter die Arme greifen kann?
Gruß, Daniel
Am Mittwoch, dem 08.06.2022 um 01:16 +0200 schrieb Daniel Leidert:
[Unblank Screen via BTN_TOUCH]
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.
Ist hier jemand mit dem Input-Subsystem so vertraut, dass er mir dabei unter die Arme greifen kann?
Ich habe mir jetzt mal Beispiele wie drivers/input/apm-power.c angeschaut und einen Handler für BTN_TOUCH und den Touchscreen geschrieben, der do_unblank_screen() aufruft, wenn ein BTN_TOUCH Event eintritt. Mal schauen, onb das so funktioniert, wie ich mir das vorstelle.
Gruß, Daniel
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?
Ausserdem scheint mir do_unblank_screen() nur fuer das kernelseitige (un)blanking eines VT zustaendig zu sein. Ein Screensaver unter X blankt das VT ja nicht wirklich, sondern zeigt auf dem X-Display irgendeine Animation an, die den Bildschirminhalt ueberdeckt.
Gruss, Christian
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
lug-dd@mailman.schlittermann.de