2.6.30: Maus & USB autosuspend

nilfilter

New member
Themenstarter
Registriert
21 Dez. 2007
Beiträge
613
Moin,

nachdem ich auf Heise die Neuerungen von Linux 2.6.30 gelesen hatte, wollte ich den auch mal ausprobieren. Eigentlich läuft auch alles, ich bilde mir insgesamt sogar eine bessere Reaktionszeit ein.

usb autosuspend schickt USB-Geräte per Default nach 2 Sekunden in den Schlaf (ob das und die anderen Änderungen in 2.6.30 was an der Akkulaufzeit bringen, teste ich gerade). Um z.B. eine USB-Maus aufzuwecken, kann man sie entweder bewegen oder klicken.
Bewegen funktioniert nicht mit meiner Maus (anscheinend senden nicht alle USB-Geräte Wakeup-Events, da sie die USB-Spezifikation zum Energiesparen nur unvollständig umsetzen).

Aber: Durch einen Klick ist die Maus zwar sofort wieder bereit, schläft aber auch nach 2 Sekunden wieder ein. Änderungen dieser Spanne über echo n > /sys/module/usbcore/parameters/autosuspend oder Optionen beim Laden des Moduls werden ignoriert; aktiv sind immer 2 Sekunden. Dauerhafte Abhilfe schaffe ich nur durch einmaliges Aus- und wieder Einstecken der Maus. Danach geht sie dauernd in den Schlaf und wacht bei Bewegung sofort wieder auf, so dass man autosuspend gar nicht bemerkt. Auf die Dauer ist diese Aus- und wieder Einstecken nervig, auch wenn man es nach dem Start nur ein einziges mal machen muss.

Liegt das also an der Maus, oder hat jemand 'ne Idee, wie ich sie ohne Abstecken automatisch richtig einbinde?

Code:
$ lsusb
Bus 002 Device 003: ID 046d:c019 Logitech, Inc. Optical Tilt Wheel Mouse
 
Liegt nicht an deiner Maus, meine hat das selbe Problem. Muss aber auch sagen, dass ich ebenfalls eine Logitech habe. Vielleicht nen Markenproblem.
Nervt wirklich. Bis Oktober is das vielleicht aber schon gelöst.

MfG Eric
 
Danke. Ich habe allerdings eben noch eine billige Maus von Speedlink ausprobiert; selbes Ergebnis.
 
Nicht unbedingt hilfreich aber jetzt wo du es sagst: Schwiegervater hat auch ne Logitechmaus, lässt man die Maus liegen pennt sie ein-danach muss man unheimlich schubsen bis sie wieder aufwacht. System ist allerdings XP
 
[quote='steveurkel',index.php?page=Thread&postID=607899#post607899]Nicht unbedingt hilfreich aber jetzt wo du es sagst: Schwiegervater hat auch ne Logitechmaus, lässt man die Maus liegen pennt sie ein-danach muss man unheimlich schubsen bis sie wieder aufwacht. System ist allerdings XP[/quote]Danke. Wenn die häufig erwähnte Annahme stimmt, dass viele USB-Geräte die USB-Spezifikationen zum Energiemanagement nur rudimentär umsetzen, dann müssten die Auswirkungen auf allen OS zu spüren sein (vllt. wird das hier und da im Treiber nachgemurkst).
 
Hi!

Also sowohl unter Ubuntu-Kerneln ( 2.6.24/27/28 ) als auch kernel.org ( 2.6.27/28/29 ) mit aktiviertem USB-autosupend konnte ich derlei an Mäusen ( Logitech MX620, MS Wireless Notebook, MS Wireless Explorer ) nicht beobachten. Mit dem 2.6.24 ist mir damals mein Scanner eingeschlafen. Den 2.6.30 habe ich noch nicht getestet.
 
Moin,

LKML[/url]
Auszug aus anderem Post im selben Thread:
Your mouse (as many other mice out there) doesn't emit wakeup event on movement, it only does on button click. There is nothing kernel can do about it. This is one of the reasons why autosuspend is disabled by default (other reason being many devices broken beyond hope when it comes to waking up).
. Ich hatte 'ne Kernel-Config aus einem 2.6.30 von Ubuntu-Testing-Irgendwas genommen und die angepasst, aber usb autosuspend ist m. W. in 2.6.30 standardmäßig aktiviert. Was jetzt einfach nicht passt ist, dass die Maus perfekt funktioniert, wenn man sie einmal ab- und wieder ansteckt. Es scheint, als würde sie erst dann richtig initialisiert. Von da an gibt's keine Probleme mehr mit Aufwachen durch Bewegung.
 
Naja, so eine Rechthaberei der Kernelentwickler nach dem Motto "die Hardwareentwickler sind zu blöd" ist ja wohl kaum im Sinne der Benutzer. Sollte ein (zu) großer Teil der USB-Hardware betroffen sein, gibts reichlich konstruktive Kritik ;) von der Usern und zu 2.6.31 wird wieder alles umgemodelt... :D (siehe ext4).
 
Lösungsansatz

Hi,

nachdem das Thema auch bei mir wg. Verwendung eines 2.6.30-er Mainline-Kernels akut wurde, habe ich mal ein wenig gebastelt.

Die Lösung sorgt über eine udev-Regel und ein Script dafür, daß für diejenigen USB-IDs (mit lsusb ermittelt), die in der Variable BLACKLIST aufgeführt sind, Auto-Suspend deaktiviert wird. Bei allen anderen wird Auto-Suspend aktiviert. Funktioniert sowohl beim Systemstart als auch beim (nachträglichen) Anstecken.

/usr/local/sbin/udev-usb-add.sh (chmod 755 nicht vergessen!)
Code:
#!/bin/sh
BLACKLIST="046d:c521 06cb:0009 04b3:3018"

dev=/sys/bus/usb/devices/${1##/*/}
[ ! -e $dev/power/autosuspend ] && exit 0

usbid="$(cat $dev/idVendor):$(cat $dev/idProduct)"
level="auto"
for i in $BLACKLIST; do 
	[ "$i" = "$usbid" ] && level="on"
done

echo 2 > $dev/power/autosuspend
echo $level > $dev/power/level
exit 0

/etc/udev/rules.d/99-local-usb.rules
Code:
ACTION=="add", SUBSYSTEM=="usb", \
	DRIVER=="usb", \
	RUN+="/usr/local/sbin/udev-usb-add.sh $env{DEVPATH}"

Über Feedback würde ich mich freuen.
 
Bei mir klappt's unter 2.6.30.1 nicht damit, d.h. ich muss weiterhin die Maus einmal ab- und wiedereinstecken.

Laut /var/log/udev nimmt meine Maus den Treiber generic-usb:
Code:
UDEV  [1247847743.912499] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/0003:046D:C019.0001 (hid)
UDEV_LOG=3
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/0003:046D:C019.0001
SUBSYSTEM=hid
DRIVER=generic-usb
HID_ID=0003:0000046D:0000C019
HID_NAME=Logitech USB Optical Mouse
HID_PHYS=usb-0000:00:1d.0-2/input0
MODALIAS=hid:b0003v0000046Dp0000C019
SEQNUM=1162
Den hab ich im zweiten Versuch dann in /etc/udev/rules.d/99-local-usb.rules eingetragen, leider kein Unterschied.
 
Hi,

meine udev-Regel setzt an der höchsten Stelle in der Hierarchie für das Gerät an. Beispiel für meine Logitech MX620 (046d:c521):
Code:
KERNEL[1247861431.864286] add  	/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6.2/1-6.2.2 (usb)
UDEV_LOG=3
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6.2/1-6.2.2
SUBSYSTEM=usb
DEVTYPE=usb_device
DRIVER=usb
DEVICE=/proc/bus/usb/001/008
PRODUCT=46d/c521/5701
TYPE=0/0/0
BUSNUM=001
DEVNUM=008
SEQNUM=1357
MAJOR=189
MINOR=7
Die USB-ID ist auch in der Variable PRODUCT zu sehen (ohne führende Nullen).

Kannst Du mal schauen ob Du weiter oben auch so einen Abschnitt hast und ob deine USB-ID korrekt ist?

EDITH: Du könntest auch in Zeile 12 des Skripts Debug-Code einbauen:
Code:
echo "$1 $dev $usbid $level" >> /tmp/udev.debug
 
Ich habe eine Logitech M-UAG120.

Code:
$ lsusb 
Bus 002 Device 004: ID 046d:c019 Logitech, Inc. Optical Tilt Wheel Mouse

Auszüge aus /var/log/udev:
Code:
KERNEL[1247847743.773119] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/0003:046D:C019.0001 (hid)
UDEV_LOG=3
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/0003:046D:C019.0001
SUBSYSTEM=hid
DRIVER=generic-usb
HID_ID=0003:0000046D:0000C019
HID_NAME=Logitech USB Optical Mouse
HID_PHYS=usb-0000:00:1d.0-2/input0
MODALIAS=hid:b0003v0000046Dp0000C019
SEQNUM=1162

Anders als bei dir ist meiner ID unter PRODUCT eine 3 vorangestellt:
Code:
KERNEL[1247847743.773298] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/input/input6 (input)
UDEV_LOG=3
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/input/input6
SUBSYSTEM=input
PRODUCT=3/46d/c019/111
NAME="Logitech USB Optical Mouse"
PHYS="usb-0000:00:1d.0-2/input0"
UNIQ=""
EV==17
KEY==ff0000 0 0 0 0 0 0 0 0
REL==143
MSC==10
MODALIAS=input:b0003v046DpC019e0111-e0,1,2,4,k110,111,112,113,114,115,116,117,r0,1,6,8,am4,lsfw
SEQNUM=1164

Meine derzeitige /etc/udev/rules.d/99-local-usb.rules:
Code:
ACTION=="add", SUBSYSTEM=="usb", \
	DRIVER=="generic-usb", \
	RUN+="/usr/local/sbin/udev-usb-add.sh $env{DEVPATH}"

Meine derzeitige /usr/local/sbin/udev-usb-add.sh (ist 755):
Code:
#!/bin/sh
BLACKLIST="046d:c019"

dev=/sys/bus/usb/devices/${1##/*/}
[ ! -e $dev/power/autosuspend ] && exit 0

usbid="$(cat $dev/idVendor):$(cat $dev/idProduct)"
level="auto"
for i in $BLACKLIST; do 
	[ "$i" = "$usbid" ] && level="on"
done
echo "$1 $dev $usbid $level" >> /tmp/udev.debug
echo 2 > $dev/power/autosuspend
echo $level > $dev/power/level
exit 0
/tmp/udev.debug wird nicht angelegt.
 
Such mal in /var/log/udev nach /devices/pci0000:00/0000:00:1d.0/usb2/2-2, das wäre das für mein Skript relevante Device.

Und setz mal wieder
Code:
DRIVER=="usb", \
und schau dann nochmal nach /tmp/udev.debug.
 
[quote='linrunner',index.php?page=Thread&postID=625372#post625372]Such mal in /var/log/udev nach /devices/pci0000:00/0000:00:1d.0/usb2/2-2, das wäre das für mein Skript relevante Device.[/quote]36 Vorkommnisse im vor dem Neustart geleerten udev-log. Was willst du genau wissen? ;)

Und setz mal wieder
Code:
DRIVER=="usb", \
und schau dann nochmal nach /tmp/udev.debug.
Code:
/devices/pci0000:00/0000:00:1d.0/usb2/2-2 /sys/bus/usb/devices/2-2 046d:c019 on
Das ist allerdings nach Login und ab- und wiederanstecken der Maus.
 
Aha, lt. udev.debug funktioniert mein Skript samt BLACKLIST einwandfrei (level=on für 046d:c019). Das war aber nicht die vollständige Datei, oder? Die restlichen Einträge sollten mit "auto" enden.

Da muß noch etwas anderes auf deinem System sein, das die Geräte auf "level=auto" setzt. Hast Du vielleicht aus die laptop-mode-tools im Einsatz und dort /etc/laptop-mode/conf.d/usb-autosuspend.conf konfiguriert? Das war es nämlich bei mir ... :D

Oder vielleicht Statements in rc.local à la?
Code:
for i in /sys/bus/usb/devices/*/power ; do
   echo "2" > $i/autosuspend
done
 
[quote='linrunner',index.php?page=Thread&postID=625501#post625501]Da muß noch etwas anderes auf deinem System sein, das die Geräte auf "level=auto" setzt. Hast Du vielleicht aus die laptop-mode-tools im Einsatz und dort /etc/laptop-mode/conf.d/usb-autosuspend.conf konfiguriert? Das war es nämlich bei mir ... :D[/quote]Danke dir, das war's wohl, lüppt jetzt ;)
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben