Ich möchte, dass mein Touchpad automatisch deaktiviert wird, wenn eine externe Maus angeschlossen ist, und aktiviert wird, wenn keine vorhanden ist. Ich habe versucht, es zu verwenden, touchpad-indicator
aber das schlägt fehl, wenn der Computer mit angeschlossener Maus in den Ruhezustand versetzt und mit nicht angeschlossener Maus geweckt wurde.
Ich habe versucht, das folgende Skript in einen Daemon zu verwandeln, um dieses Problem zu lösen, aber ich kann es nicht zum Laufen bringen:
#!/bin/bash
declare -i TID
declare -i MID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
MID=`xinput list | grep -Eo 'Mouse\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
if [ $MID -gt 0 ]
then
xinput disable $TID
else
xinput enable $TID
fi
Ich habe es versucht start-stop-daemon -S -x ./myscript.sh -b
und setsid ./myscript.sh >/dev/null 2>&1 < /dev/null &
und nohup ./myscript 0<&- &>/dev/null &
und sogar./myscript.sh &
Alle diese geben eine 4-stellige Zahl zurück, die meiner Meinung nach die PID des gestarteten Prozesses sein sollte, aber wenn ich lxtask starte, gibt es keine Prozesse mit dieser PID , selbst wenn ich "Alle Prozesse anzeigen" ankreuze . Und natürlich funktioniert es nicht!
xinput
braucht einen laufenden X - Server und die meisten Methoden der laufenden Sachen als Daemons keine Kenntnis oder Fähigkeit haben, X. Drittens und den Hauptgrund zu verbinden , warum Sie immer erklären , sollten Sie zu tun , was versuchen , das ist sehr oft die Lösung Dass jemand versucht, sich zu bewerben, ist eigentlich nicht der richtige Weg, um dies zu erreichen, und Sie stellen am Ende die falsche Frage, die allgemein als XY-Problem bekannt ist .Antworten:
Das grundlegende Skript, das Sie benötigen, ist einfach:
Das obige Skript schaltet das Trackpad um, je nachdem, ob eine Maus angeschlossen ist. Beim Start wird es für immer ausgeführt und sucht jede Sekunde nach einer Maus, wodurch das Touchpad entsprechend deaktiviert oder aktiviert wird.
Speichern Sie nun das Skript als
~/touchpad.sh
, machen Sie es ausführbar (chmod +x ~/touchpad.sh
) und fügen Sie es Ihren Startprogrammen für GUI-Sitzungen hinzu. Sie haben nicht angegeben, welche Desktop-Umgebung Sie verwenden, aber da Sie dies erwähnt habenlxtask
, gehe ich davon aus, dass Sie sie verwendenLXDE
. In jedem Fall finden Sie hier Anweisungen für beideLXDE
undUnity
:Fügen Sie das Skript zu den Autostart-Dateien von LXDE hinzu
Stellen Sie sicher, dass Sie "PROFIL" durch den tatsächlichen Namen Ihres LXDE-Profils ersetzen. Sie können herausfinden, was es ist, indem Sie es ausführen
ls ~/.config/lxsession/
.Fügen Sie das Skript zu den Autostart-Dateien von Unity hinzu
Öffnen
Startup Applications
(im Dashboard nach "Startup" suchen)Klicken Sie auf "Hinzufügen" und fügen Sie den Pfad zu Ihrem Skript in das Befehlsfeld ein:
quelle
Okay, ich habe eine udev-Regel dafür aufgestellt, und es ist, wie @terdon sagte, ein viel saubererer Weg
Dank dieses Handbuchs habe ich eine Datei "touchpad_toggle.rules" in /etc/udev/rules.d/ erstellt (Root-Zugriff erforderlich) und sie mit zwei Zeilen gefüllt:
Vergessen Sie nicht, "Benutzername" durch Ihren Benutzernamen zu ersetzen!
Der Inhalt dieser On- und Off-Shell-Skripte ist nur eine kastrierte Version des Skripts in meiner Frage. Beispiel - off.sh:
Sie müssen xinput enable $ TID in on.sh verwenden
Und vergessen Sie nicht, das Skript in meiner Frage (oder das von @terdon vorgeschlagene, aber ohne Schleife) zum automatischen Start der Sitzung hinzuzufügen, wie er es Ihnen in seiner Antwort gesagt hat.
Das ist es, aber ich muss eines hinzufügen:
Wenn Sie ein Synaptics-Touchpad haben (ich habe Elantech, daher ist es nicht für mich geeignet), können Sie Ihre Skripte (Pfade, in die Sie nach RUN + = schreiben) durch einen einfachen Befehl
/usr/bin/synclient TouchpadOff=0
bzw. 1 ersetzenquelle
udev
Regel auf irgendeine Weise zu erstellen , ist es möglicherweise besser, die Datei an einem anderen Ort als im Home-Verzeichnis zu speichern. Zum Beispiel:/usr/local/bin
oder/opt/touchpad-toggle/bin/
.