Seite 1 von 1

[Gelöst] Brauche Hilfe mit einem Shell-Script

Verfasst: 2. Nov 2021, 21:23
von Spielwurm
Mein Laptop reagiert im Bereitschaftszustand auf die Maus: der Rechner wird wach. Und weil die Maus meist irgendwo auf dem Tisch liegt, wird er oft wach. Ich hab die Stelle gefunden wo es steht:

Code: Alles auswählen

/sys/bus/usb/devices/1-8/power/wakeup
Das steht "enabled drin und wenn ich dort reinschreibe:

Code: Alles auswählen

echo > /sys/bus/usb/devices/1-8/power/wakeup disabled
hat sich das Problem erledigt.

ich hab es sogar schon geschafft, ein Startscript zu schreiben und zu installieren für Systemctl. Dabei wird das folgende Script ausgeführt:

Code: Alles auswählen

#! /bin/bash
echo > /sys/bus/usb/devices/1-8/power/wakeup disabled
und alles ist gut. Alles? Nein, ein kleiner ACPI macht, dass das Verzeichnis nicht immer existiert und oft heißt das passende Verzeichnis .

Wie muss das Script aussehen, damit folgendes passiert:

Code: Alles auswählen

Existiert /sys/bus/usb/devices/1-8/power/?
Wenn ja, schreibe echo > /sys/bus/usb/devices/1-8/power/wakeup disabled
Wenn nein, schreibe echo > /sys/bus/usb/devices/1-9/power/wakeup disabled
Spielwurm

Re: Brauche Hilfe mit einem Shell-Script

Verfasst: 2. Nov 2021, 22:19
von Christina
Probiere es mal mit einer udev-Rule nach diesem Schema (oben):
https://linux-club.de/forum/viewtopic.php?t=123223

Bei meinem Notebook läuft das, aber bei meinem PC klappte später das Aufwachen mit Maus und Tastatur nicht mehr.

Re: Brauche Hilfe mit einem Shell-Script

Verfasst: 3. Nov 2021, 06:29
von marce
... und ich wäre mir schon mal recht sicher, daß es

Code: Alles auswählen

echo disabled > /sys/bus/usb/devices/1-8/power/wakeup
heißen sollte...

Re: Brauche Hilfe mit einem Shell-Script

Verfasst: 3. Nov 2021, 11:47
von josef-wien

Code: Alles auswählen

echo disabled
ist der Aufruf einer Funktion der GNU bash (im vorliegenden Fall, denn das Programm echo aus den GNU coreutils müßte mit Pfad-Angabe aufgerufen werden) mit Übergabe eines Parameters.

Code: Alles auswählen

> /sys/bus/usb/devices/1-8/power/wakeup
ist in beiden Fällen eine Anweisung an die GNU bash, die Ausgabe umzuleiten, und die kann am Anfang, in der Mitte oder am Ende stehen.

Re: Brauche Hilfe mit einem Shell-Script

Verfasst: 3. Nov 2021, 12:02
von marce
wieder was gelernt - ich wäre ich 1000 Jahren nicht auf die Idee gekommen, das in der Reihenfolge zu schreiben. Aber ja, wenn man drüber nachdenkt...

Zweckes der Lesbarkeit würde ich trotzdem die andere Variante bevorzugen...

Re: Brauche Hilfe mit einem Shell-Script

Verfasst: 3. Nov 2021, 13:27
von abgdf
Spielwurm hat geschrieben: 2. Nov 2021, 21:23Wie muss das Script aussehen, damit folgendes passiert:

Code: Alles auswählen

Existiert /sys/bus/usb/devices/1-8/power/?
Wenn ja, schreibe echo > /sys/bus/usb/devices/1-8/power/wakeup disabled
Wenn nein, schreibe echo > /sys/bus/usb/devices/1-9/power/wakeup disabled

Code: Alles auswählen

#!/bin/bash

p8dir="/sys/bus/usb/devices/1-8/power"
p9dir="/sys/bus/usb/devices/1-9/power"

if test -e "$p8dir"
then
    echo "disabled" > "$p8dir/wakeup"
else
    echo "disabled" > "$p9dir/wakeup"
fi
Eine udev-Rule wäre die "bessere" Lösung, aber wenn es nach mir ginge, würde es gar keine kryptischen und sich ständig verändernden udev-Rules geben. Ich hab' also vom Prinzip her kein Problem damit, da mit einem Skript direkt reinzuhacken.

Aber prüf' nochmal, ob in den Dateien nicht noch was Anderes, Wichtiges drinsteht. Das "echo >" überschreibt ja die ganze Datei.

Re: Brauche Hilfe mit einem Shell-Script

Verfasst: 3. Nov 2021, 14:47
von Spielwurm
Jau danke, ich werde beobachten, wie es funktioniert, habe aber keine Zweifel, dass es tut, was es soll.

In den Dateien "wakeup" steht immer nur "enabled" oder "disabled" wie so oft in den /sys-Dateien.

USB-Rules: die habe ich 2 Semester studiert und komme immer noch nicht klar, wahrscheinlich fehlt mir das System dahinter. Mit "systemctl" kam ich schon relativ gut nach nur einem Semester Studium klar. Und weil das klappt, bleibt es jetzt dabei.

Spielwurm

Re: Brauche Hilfe mit einem Shell-Script

Verfasst: 3. Nov 2021, 17:30
von josef-wien
Spielwurm hat geschrieben:keine Zweifel, dass es tut
Und wenn es weder 1-8 noch 1-9 heißt, stehst Du wieder am Anfang Deines Problems.

Re: Brauche Hilfe mit einem Shell-Script

Verfasst: 3. Nov 2021, 20:47
von Spielwurm
Das Aufweckproblem besteht schon länger und bisher war es entweder das eine Verzeichnis oder das andere. Ich hatte das immer wieder von Hand "disabled" und daher weiß ich das. Aber Danke für den Tipp, wenn mir das Problem bei einem anderen Rechner unterkommt, studiere ich noch 2 Semester USB-rules ...

Spielwurm

Re: [gelöst] Brauche Hilfe mit einem Shell-Script

Verfasst: 3. Nov 2021, 22:27
von josef-wien
Mir ist nicht klar, welches Studium erforderlich ist, um

Code: Alles auswählen

lsusb
auszuführen, die Werte für die Maus zu ermitteln und an Stelle von "045e" (Microsoft Corp.) und "0039" (IntelliMouse Optical) als root in die gegebenenfalls anzulegende Datei /etc/udev/rules.d/99-local.rules zu schreiben:

Code: Alles auswählen

# Damit meine Maus mein System nicht aufweckt:
SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0039", TEST=="power/wakeup", ATTR{power/wakeup}="disabled"
(== bedeutet eine Abfrage auf Übereinstimmung, = ist die Zuweisung eines Werts.) Damit es schon vor dem nächsten Start aktiviert wird, wäre als root der Befehl

Code: Alles auswählen

udevadm control --reload-rules
auszuführen und die Maus ab- und anzustecken.

Re: [gelöst] Brauche Hilfe mit einem Shell-Script

Verfasst: 4. Nov 2021, 10:01
von Spielwurm
War keine ernsthafte Frage, oder? Ich habe keine Ahnung von diesen Regeln, hätte nicht den blassesten Schimmer, was wie geschrieben wird in welcher Reihenfolge mit welcher Syntax usw. Oder wird das verlangt, wenn man Linux benutzt?

Aber wenn ich das jetzt so lese: was ist denn, wenn ich mal eine andere Maus benutze? Dann muss ich die Regel neu schreiben mit anderer Firma und Produkt, oder?

Spielwurm

Re: [gelöst] Brauche Hilfe mit einem Shell-Script

Verfasst: 4. Nov 2021, 12:59
von Christina
Spielwurm hat geschrieben: 4. Nov 2021, 10:01 Ich habe keine Ahnung von diesen Regeln, hätte nicht den blassesten Schimmer, was wie geschrieben wird in welcher Reihenfolge mit welcher Syntax usw.
Das musst du auch gar nicht, dafür gibt es dieses Forum. ;)
Die korrekte "udev-rule" haben dir @josef-wien und @Gräfin Klara (Link oben) schon geschrieben.
Spielwurm hat geschrieben: 4. Nov 2021, 10:01 was ist denn, wenn ich mal eine andere Maus benutze? Dann muss ich die Regel neu schreiben mit anderer Firma und Produkt
Genau. Wenn du z.B. drei verschiedene Mäuse an diesem Notebook betreibst, legst du in der Datei "/etc/udev/rules.d/90-acpi.rules" drei udev-rules an, die sich nur in Vendor-ID und Product-ID der Mäuse unterscheiden.

Beispiel:

Code: Alles auswählen

lsusb
Bus 002 Device 004:  ID 04b4 : 0060 Cypress Semiconductor Corp. Wireless optical mouse 🐭
idVendor und idProduct sind hier die Angabe bei ID 04b4 : 0060.
Diese IDs stammen vom Hersteller selbst, und die werden von allen Betriebssystemen verwendet.

Re: Brauche Hilfe mit einem Shell-Script

Verfasst: 4. Nov 2021, 14:45
von abgdf
josef-wien hat geschrieben: 3. Nov 2021, 17:30Und wenn es weder 1-8 noch 1-9 heißt, stehst Du wieder am Anfang Deines Problems.
Ja, und wessen Fehler ist das?
Warum kann dieser udev-Kram die relevanten Systemeinstellungen nicht immer an dieselbe Stelle schreiben, so daß der Benutzer (oder ein Skript des Benutzers) sie da auch findet?
Ich habe den Verdacht, hier geht es mal wieder darum, die Systemeinstellungen zu verschleiern und vage zu machen, und dem Benutzer so die Kontrolle über das System ("the control over his own computing" (Stallman)) zu nehmen. Und das ist klar abzulehnen.

Re: [gelöst] Brauche Hilfe mit einem Shell-Script

Verfasst: 4. Nov 2021, 15:10
von Christina
Ich möchte noch was anmerken.
Bevor man mehrere udev-rules für diverse Mäuse anlegt, kann man statt ausprobieren auch vorher nachsehen, ob Linux das bereits automatisch selbst erledigt hat.
So schaue ich nach: (Vielleicht kennt jemand hier einen kürzeren Weg?)

Code: Alles auswählen

$ lsusb
Bus 002 Device 004: ID 04b4:0060 Cypress Semiconductor Corp. Wireless optical mouse
Bus 002 und Device 004 werden jetzt benötigt.

Code: Alles auswählen

$ udevadm info -q path -n /bus/usb/002/004
/devices/pci0000:00/0000:00:14.0/usb2/2-8
Einfügen: /sys{…}/power/wakeup sowie ein Backslash vor jedem Doppelpunkt.

Code: Alles auswählen

$ cat /sys/devices/pci0000\:00/0000\:00\:14.0/usb2/2-8/power/wakeup
disabled
Hier ist die "eigene" udev-rule nicht nötig. Wenn der PC trotzdem aus dem Suspend to RAM aufwacht, muss man sich eine ganz andere Lösung überlegen (Link oben) oder die Maus in Sicherheit bringen. Ich lege sie dann unter den PC-Monitor.

Re: [gelöst] Brauche Hilfe mit einem Shell-Script

Verfasst: 4. Nov 2021, 17:37
von josef-wien
Christina hat geschrieben:einen kürzeren Weg
Vielleicht:

Code: Alles auswählen

grep . /sys/bus/usb/devices/*/product /sys/bus/usb/devices/*/power/wakeup

Um alle Mäuse zu erwischen:

Code: Alles auswählen

SUBSYSTEM=="input", ACTION=="add", ENV{ID_INPUT_MOUSE}=="?*", TEST=="../../../../power/wakeup", ATTR{../../../../power/wakeup}="disabled"
Aber auch das ist nicht in Stein gemeißelt, während der Weiterentwicklung des 3er-Kernel wurde z. B. das "input subsystem" von neben nach unterhalb des "hidraw subsystem" verlegt, was natürlich Auswirkungen auf die Regel hatte. Ich ziehe eine auf die jewelige Maus ausgerichtete Regel vor, bei einem neuen Drucker muß man schließlich auch einmalig etwas tun. Dann fällt mir noch ein, daß bei den Distributionen mit überladener initrd möglicherweise diese neu erstellt werden muß.

Re: [gelöst] Brauche Hilfe mit einem Shell-Script

Verfasst: 4. Nov 2021, 17:44
von Christina
Vielen Dank für den Tipp nach grep . /
Das genügt für einen kurzen Überblick.

/sys/bus/usb/devices/2-8 ist nur ein Symlink, hier nach /sys/devices/pci0000\:00/0000\:00\:14.0/usb2/2-8

Linux hat schon so eine "rule", um alle Mäuse zu erwischen (power/wakeup). Aber das klappt in ganz wenigen Fällen nicht, darum auch dieser Thread.