Script ausführen mit systemd oder Autostart

  • Hallo zusammen,


    ich habe auf ein älteres Netbook Raspi-OS (Debian11) installiert, da ich auf ein 32-bit System angewiesen bin.

    Raspi-OS und OSMC setze ich seit Jahren für meine Raspis ein.


    Leider wird das vorhandene Synaptics Touchpad nicht automatisch unterstützt.

    Mit einem entsprechenden Konsolenbefehl funktioniert dieses aber.

    Die restliche Hardware wird dagegen sehr gut unterstützt und funktioniert einwandfrei.


    Habe mir nun eine Scriptdatei erstellt, und diese unter /home/user/bin/touchpad.sh abgelegt.

    Ich wollte über systemd starten, deshalb liegt unter /etc/systemd/system/touch.service.

    Leider funktioniert die Sache nicht, habe auch schon versucht mit Autostart das Script zu starten, leider auch ohne Erfolg.

    Das Script kann ich per Doppelklick ausführen, das Touchpad ist dann auch aktiviert.

    Edited once, last by Omegator ().

  • Hallo,


    ist die Service Unit aktiviert? Hast du mal die Logs von systemd mit journalctl abgefragt bzgl. deiner Unit? Poste bitte mal deine Unit hier.


    systemd ist schon der richtige Weg. Autostart ist primär dafür gedacht, grafische Programme nach dem Login in den Desktop zu starten.


    Gruß, noisefloor

  • Die ganzen Input-Devices werden beim Start des X-Windows Systems neu definiert.

    Als Abhängigkeit Deines Touchpad-Scripts käme beispielsweise das grafical.target bzw. das display-manager.service in Betracht.

    Als autostart des angemeldeten Users im Grafiksystem wäre aber die einfachste Art.



    Servus !

    RTFM = Read The Factory Manual, oder so

    Edited once, last by RTFM ().

  • Hallo,


    Quote

    Als autostart des angemeldeten Users wäre aber die einfachste Art.

    Oder eine systemd Service User Unit, die beim Login gestartet wird. Hängt dann aber vielleicht in der Tat davon ab, was das Skript im Detail macht.


    Gruß, noisefloor

  • #3 wurde auf Grafiksystem des angemeldeten Users verdeutlicht.


    Im X-Terminal des Users funktioniert das Script ja.



    Servus !

    RTFM = Read The Factory Manual, oder so

  • Hallo zusammen,

    vielen Dank für die Rückmeldungen, ich hatte leider noch keine Zeit mich zu melden.

    Hier mal der Inhalt der beiden Dateien:

    unter /home/user/bin liegt die touchpad.sh

    Bash
    #!/bin/sh
    
    xinput set-prop "Touchpad_Device_Name" "libinput Tapping Enabled" 1

    und unter /etc/systemd/system liegt die touch.service

    Code
    [Unit]
    Description=Enable Touchpad
    After=default.target
    
    [Service]
    # Start main service
    ExecStart=/home/user/bin/touchpad.sh
    
    [Install]
    WantedBy=display-manager.service

    Ich kann die .service aktivieren, aber nicht starten:


    Code
    systemctl enable touch.service
    systemctl start touch.service

    Das sieht dann so aus:


    Code
    systemctl start touch.service
    Job for touch.service failed because the control process exited with error code.
    See "systemctl status touch.service" and "journalctl -xe" for details.

    und so:

  • Hallo,


    die Fehlermeldung besagt, dass der Xserver zum Zeitpunkt des Starts der Unit (noch) nicht läuft.


    Probier' mal `After=graphical.target systemd-user-sessions.service` und `WantedBy=graphical.target`


    Warum packst du die Konfiguration nicht in eine Konfigurationsdatei für den XServer, die wird immer zur richtigen Zeit geladen.


    Gruß, noisefloor

  • Hallo,

    habe die Änderungen eingepflegt, leider kommen immer noch Fehlermeldungen, wenn ich den Status abfrage. Enable und Start laufen in der Konsole normal durch.

  • habe die Änderungen eingepflegt, ...

    Dann solltest Du das hier auch zeigen:

    Code
    systemctl cat touch

    BTW: Ein anderer Name für deine service-unit wäre evtl. "schöner" gewesen, denn:

    Code
    :~ $ which touch
    /usr/bin/touch

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Hier die Ausgabe:

    ich habe es jetzt nicht ganz verstanden, gibt es "touch" schon anderweitig?

    Umbenennen wäre jetzt kein Problem...

  • ich habe es jetzt nicht ganz verstanden, gibt es "touch" schon anderweitig?

    Nein, wahrscheinlich nicht. Du kannst ja schauen:

    Code
    systemctl list-units --type=service | grep -i touch

    Ich würde die service-unit trotzdem nicht als touch benennen, wenn es keinen Bezug zu /usr/bin/touch gibt (so wie das z. B. bei ssh der Fall ist).

    BTW: Dein Script hat eine sh-shebang und ausführen willst Du es mit der bash. OK, kann man machen, aber ...


    Startet deine service-unit dein Script, wenn Du die deaktivierte service-unit 30 Sekunden nach dem booten _manuell_ ausführst? Wenn ja und das für dich OK ist, kannst Du die deaktivierte service-unit, auch mit einer timer-unit starten.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Nein, wahrscheinlich nicht. Du kannst ja schauen:

    Code
    systemctl list-units --type=service | grep -i touch

    Ich würde die service-unit trotzdem nicht als touch benennen, wenn es keinen Bezug zu /usr/bin/touch gibt (so wie das z. B. bei ssh der Fall ist).

    BTW: Dein Script hat eine sh-shebang und ausführen willst Du es mit der bash. OK, kann man machen, aber ...


    Startet deine service-unit dein Script, wenn Du die deaktivierte service-unit 30 Sekunden nach dem booten _manuell_ ausführst? Wenn ja und das für dich OK ist, kannst Du die deaktivierte service-unit, auch mit einer timer-unit starten.

    Hebe jetz mal "touch" in"touchp" umbenannt.

    Im Script habe ich

    Bash
    #!/bin/sh

    in

    Bash
    #!/bin/bash

    umbenannt.

    Leider ändert sich gar nichts, auch nach einem Neustart nicht.

  • Leider ändert sich gar nichts, auch nach einem Neustart nicht.

    Und wie schaut es mit manuellem starten der service-unit, 1 Minute nach dem erfolgreichen booten deines PIs, aus?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Wenn ich eine Minute warte, und per Konsole (root) mit systemctl start touch.service starte, läuft das ohne Rückmeldung durch.

    Das Touchpad funktioniert danach aber immer noch nicht.

    Erst wenn ich das Script per Doppelklick, oder Konsole ausführe, funktioniert es.

  • Wenn ich eine Minute warte, und per Konsole (root) mit systemctl start touch.service starte, läuft das ohne Rückmeldung durch.

    Das Touchpad funktioniert danach aber immer noch nicht.

    Erst wenn ich das Script per ... Konsole ausführe, funktioniert es.

    Das ist der Beweis, dass deine service-unit fehlerhaft ist.


    EDIT:


    Wie ist die Ausgabe von:

    Code
    systemctl status touchp --full --no-pager

    ?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Hier die Ausgabe:

  • Hier die Ausgabe:

    Code
    Dez 02 14:58:31 raspberry bash[1918]: Unable to connect to X server
    Dez 02 14:58:31 raspberry systemd[1]: touchp.service: Main process exited, code=exited, status=1/FAILURE
    Dez 02 14:58:31 raspberry systemd[1]: touchp.service: Failed with result 'exit-code'.

    Dann stehen bei Ausführung mit Hilfe der service-unit, auch "spät" nach dem booten, die Ressource bzw. die erforderliche Umgebung nicht zur Verfügung. Jetzt geht es darum, zu wissen was das ist bzw. wie es in der service-unit zugänglich gemacht wird.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden