ubuntuusers.de

USB Port per Script schalten

Status: Ungelöst | Ubuntu-Version: Kubuntu 12.04 (Precise Pangolin)
Antworten |

justchris

Anmeldungsdatum:
12. August 2006

Beiträge: 116

Hi,

gibt es einen Möglichkeit per Script einzelne USB-Ports an- bzw. abzuschalten? Ich habe eine USB-Lampe die ich nur nach Bedarf einschalten will, wenn es geht per Software.

Kennt sich jemand damit aus?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Selber habe ich es nicht probiert, aber dies habe ich auf Stackoverflow gefunden: http://stackoverflow.com/questions/1163824/linux-usb-turning-the-power-on-and-off

In der Richtung müsste das gehen.

LG,

track

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

track schrieb:

In der Richtung müsste das gehen.

Ja, so in der Richtung. ☺

Ich hatte das mal probiert und das Ergebnis war, dass ich es nicht hingekriegt habe. Zumindest nicht mit USB-Lampen, denn diese Dinger sind „dumme“ Geräte, die einfach nur den Strom vom USB-Port nehmen und sich nicht als Device melden oder sonstwas. Wie der OP schon richtig erkannt hat, müsste man also den USB-Port als solchen abschalten – und wie das geht, habe ich nicht rausfinden können. Steht ja auch im Link, dass der Mensch dort noch keinen eingebauten USB-Root-Hub gesehen hat, bei dem sowas ginge.

Ich habe aber auch noch keinen externen gesehen, bei dem das geht. Das kann nicht jede Hardware, da musst du wohl auf gut Glück kaufen. Also, will heißen: Wenn du das irgendwie hinkriegen könntest, dann nur, indem du vor die Lampe noch einen passenden USB-Hub steckst und den dann in den Standby schickst.

Und da hat sich teilweise Kram geändert in den letzten Kernel-Versionen. Dieses „control“ gibt es nicht mehr (– edit: Quatsch, „level“ gibt es nicht mehr). Man muss jetzt Autosuspend „missbrauchen“, indem man eine Wartezeit von 0ms setzt. „Intelligente“ Devices kann man dann ungefähr wie folgt in den Standby schicken. Im Falle meiner Maus:

> lsusb | grep Mouse
Bus 004 Device 002: ID 045e:00cb Microsoft Corp. Basic Optical Mouse v2.0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# Das hier geht natürlich nur als root.

# Device finden und ins Verzeichnis wechseln.
dev="045E:00CB"
cd "$(readlink -f /sys/bus/usb/devices/*/*$dev*/)"
cd ../../power

# Aus.
echo 0 > autosuspend_delay_ms
echo auto > control
echo "Device off."

# Warten.
sleep 5

# An.
echo 2000 > autosuspend_delay_ms
echo on > control
echo "Device on."

Das ließe sich dann wohl auch auf einen passenden Hub übertragen, sofern man einen im Laden findet.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Soweit ich weiß, ist auf jeden Fall in der Hardware jeweils ein Schalter für die 5V vorhanden, so dass es grundsätzlich gehen muss.
Die Frage ist natürlich, wie man an die betreffenden Register kommt ...

Das ist sicher nicht so 08/15 möglich, aber eigentlich müsste man gerade bei Linux da dran kommen,
wahrscheinlich über das genaue Device: https://forum.openwrt.org/viewtopic.php?id=28798

Allerdings habe ich nur Lucid und alte Hardware, so dass ich da nichts aktuelles beitragen kann.
(MaW: Du musst Dich da selber durchknabbern !)

LG,

track

justchris

(Themenstarter)

Anmeldungsdatum:
12. August 2006

Beiträge: 116

Danke für eure Mühe, nach dem was ich bis jetzt gelesen habe, geht die Methode mit echo suspend /sys/bus/device/..../power/level nicht mehr, ab Kernel über 2.6 hastenichtgesehen. Ich habe auch alle Devices mit dieser Methode ausprobiert, ohne Erfolg. Schade, hätte nicht gedacht dass das so ein Problem ist, naja baue ich halt einen Hardwareschalter ein.

Laut lsusb -v unterstützt mein Hub sogar sowas:

Hub Descriptor:
  bLength               9
  bDescriptorType      41
  nNbrPorts             6
  wHubCharacteristic 0x0009
    Per-port power switching
    Per-port overcurrent protection
    TT think time 8 FS bits
  bPwrOn2PwrGood       50 * 2 milli seconds
  bHubContrCurrent      0 milli Ampere
  DeviceRemovable    0x00
  PortPwrCtrlMask    0xff
 Hub Port Status:
   Port 1: 0000.0100 power
   Port 2: 0000.0507 highspeed power suspend enable connect
   Port 3: 0000.0100 power
   Port 4: 0000.0100 power
   Port 5: 0000.0103 power enable connect
   Port 6: 0000.0100 power

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

justchris schrieb:

Danke für eure Mühe, nach dem was ich bis jetzt gelesen habe, geht die Methode mit echo suspend /sys/bus/device/..../power/level nicht mehr, ab Kernel über 2.6 hastenichtgesehen. Ich habe auch alle Devices mit dieser Methode ausprobiert, ohne Erfolg. [...] Laut lsusb -v unterstützt mein Hub sogar sowas: [...]

Öhm, hast du es wirklich mit „level“ versucht? Dann schau’ dir das oben mit „control“ nochmal an, denn das sollte funktionieren. Zumindest geht das bei meinem 3.4.7er Kernel. Und vielleicht hast du mit deinem Hub sogar Glück – probier’s aus!

Antworten |