Wie erstelle ich udev-Regeln, um eines der Android-Geräte zu deaktivieren?

8

Ich habe ein HTC Android-Handy.

Jedes Mal, wenn ich es an einen Computer anschließe, erhalte ich eine Nachricht:

Android Phone: Could not open MTP device "[usb:002,003]"

Die Zahlen können unterschiedlich sein. Aber das Telefon verbindet sich richtig.

usb-devices Ausgabe

T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 28 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0bb4 ProdID=0f91 Rev=02.33
S:  Manufacturer=HTC
S:  Product=Android Phone
S:  SerialNumber=FA41BWB00560
C:  #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=06(still) Sub=01 Prot=01 Driver=usbfs
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=00 Driver=(none)

lsusb

Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 048d:1336 Integrated Technology Express, Inc. SD/MMC Cardreader
Bus 002 Device 004: ID 0bb4:0f91 HTC (High Tech Computer Corp.) 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 04b8:0898 Seiko Epson Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

lsusb -t

/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/3p, 12M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/3p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/3p, 12M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/3p, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
    |__ Port 1: Dev 4, If 0, Class=Imaging, Driver=usbfs, 480M
    |__ Port 1: Dev 4, If 1, Class=Vendor Specific Class, Driver=, 480M
    |__ Port 3: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
    |__ Port 2: Dev 2, If 0, Class=Vendor Specific Class, Driver=, 480M
    |__ Port 2: Dev 2, If 1, Class=Printer, Driver=usblp, 480M
    |__ Port 2: Dev 2, If 2, Class=Mass Storage, Driver=usb-storage, 480M

udevadm info -q all -n /dev/bus/usb/002/004

P: /devices/pci0000:00/0000:00:13.2/usb2/2-1
N: bus/usb/002/004
S: libmtp-2-1
E: BUSNUM=002
E: COLORD_DEVICE=1
E: COLORD_KIND=camera
E: DEVLINKS=/dev/libmtp-2-1
E: DEVNAME=/dev/bus/usb/002/004
E: DEVNUM=004
E: DEVPATH=/devices/pci0000:00/0000:00:13.2/usb2/2-1
E: DEVTYPE=usb_device
E: DRIVER=usb
E: GPHOTO2_DRIVER=PTP
E: ID_BUS=usb
E: ID_FOR_SEAT=usb-pci-0000_00_13_2-usb-0_1
E: ID_GPHOTO2=1
E: ID_MEDIA_PLAYER=1
E: ID_MODEL=Android_Phone
E: ID_MODEL_ENC=Android\x20Phone
E: ID_MODEL_ID=0f91
E: ID_MTP_DEVICE=1
E: ID_PATH=pci-0000:00:13.2-usb-0:1
E: ID_PATH_TAG=pci-0000_00_13_2-usb-0_1
E: ID_REVISION=0233
E: ID_SERIAL=HTC_Android_Phone_FA41BWB00560
E: ID_SERIAL_SHORT=FA41BWB00560
E: ID_USB_INTERFACES=:060101:ffff00:
E: ID_VENDOR=HTC
E: ID_VENDOR_ENC=HTC
E: ID_VENDOR_FROM_DATABASE=HTC (High Tech Computer Corp.)
E: ID_VENDOR_ID=0bb4
E: MAJOR=189
E: MINOR=131
E: PRODUCT=bb4/f91/233
E: SUBSYSTEM=usb
E: TAGS=:seat:uaccess:
E: TYPE=0/0/0
E: USEC_INITIALIZED=611981507

dmesg

[   40.632283] usb 2-1: new high-speed USB device number 3 using ehci-pci
[   40.765458] usb 2-1: New USB device found, idVendor=0bb4, idProduct=0f91
[   40.765469] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[   40.765475] usb 2-1: Product: Android Phone
[   40.765480] usb 2-1: Manufacturer: HTC
[   40.765485] usb 2-1: SerialNumber: FA41BWB00560
[   40.766646] usb-storage 2-1:1.1: USB Mass Storage device detected
[   40.767102] scsi host10: usb-storage 2-1:1.1
[   40.864690] usb 2-1: USB disconnect, device number 3
[   41.613079] usb 2-1: new high-speed USB device number 4 using ehci-pci
[   41.746616] usb 2-1: New USB device found, idVendor=0bb4, idProduct=0f91
[   41.746626] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[   41.746633] usb 2-1: Product: Android Phone
[   41.746638] usb 2-1: Manufacturer: HTC
[   41.746643] usb 2-1: SerialNumber: FA41BWB00560
[  101.942087] usb 2-1: reset high-speed USB device number 4 using ehci-pci

Ich fand auch heraus, dass für einen kurzen Zeitraum nach dem Anschließen des Telefons ein USB-Speichergerät deklariert wird

I:  If#= 0 Alt= 0 #EPs= 3 Cls=06(still) Sub=01 Prot=01 Driver=usbfs
I:  If#= 1 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

Dann wird die Verbindung getrennt und die Klasse in geändert ff.

I:  If#= 0 Alt= 0 #EPs= 3 Cls=06(still) Sub=01 Prot=01 Driver=usbfs
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=00 Driver=(none)
Pilot6
quelle
Bitte machen Sie Folgendes für mich: 1) lsusbund finden Sie Ihr Gerät oder Ihre Geräte (Bus und Gerät). 2) Starten Sie den Befehl udevadm info -q all -n /dev/bus/usb/your_bus_id/your_device_idund verwenden Sie Bus und Gerät. Fügen Sie die Ausgabe des Befehls in Schritt 2 zu Ihrer Frage hinzu.
AB
Ok und die Ausgabe von lsusbauch, ich brauche nur den Teil Ihres Telefons
AB
Ich werde es hinzufügen, aber Sie können VID & PID in sehen usb-devices. @AB
Pilot6
Ich habe den ersten Kommentar nicht gesehen. Das wurde auch hinzugefügt.
Pilot6
1
Ich bin mir nicht sicher, ob das wirklich zwei USB-Geräte sind.
AB

Antworten:

6

Aus der dmesgAusgabe geht hervor, dass das Telefon zweimal verbunden ist.

  • [40.632283] 1. als USB-Bus 2 dev 3 angeschlossen
  • [40.864690] getrennt
  • [41.613079] 2. als USB-Bus 2 dev 4 angeschlossen

Das Problem ist:

  • Beide Telefonanschluss - Modi werden mit denselben Attributen idVendor/ idProduct/ bcdDevice.

  • libmtp udev-Regeln verwenden nur idVendor/ idProduct, um Geräte zusätzlich zu nicht wichtigen / allgemeinen Attributen zu filtern ACTION!="add", ENV{MAJOR}!="?*"und SUBSYSTEM=="usb"

  • libmtp udev Regeln verwenden ATTR(nicht ATTRS), es zielt genau auf diesen Geräteknoten ab /devices/pci0000:00/0000:00:13.2/usb2/2-1. Daher können wir keine Details zu Schnittstellenknoten verwenden, da diese untergeordnete Knoten sind.

Verwenden Sie, um zu erfahren, was los ist udevadm monitor. Nur Ereignisse ohne Details anzeigen.

  1. Ziehen Sie den Stecker aus der Steckdose
  2. Öffnen Sie das Terminal und führen Sie es aus udevadm monitor -u, -uum nur UDEV-Ereignisse anzuzeigen (für eine saubere Ausgabe).
  3. Schließen Sie das Telefon an und warten Sie, bis sich die Dinge beruhigt haben
  4. Ctrl+ Cum die Überwachung zu beenden

Um Details (Umgebungseigenschaften) abzurufen, verwenden Sie udevadm monitor -u -pstattdessen und vergleichen Sie die Ausgabe an diesem Knoten:

  • UDEV [107.024195] add /devices/pci0000:00/0000:00:13.2/usb2/2-1 (usb)
  • UDEV [107.998137] add /devices/pci0000:00/0000:00:13.2/usb2/2-1 (usb)

Beachten Sie den Unterschied in ID_USB_INTERFACES

Eine andere sauberere Möglichkeit, mit einer udev-Regel nur das zu sammeln, was wir brauchen:

  1. Fügen Sie /lib/udev/rules.d/69-libmtp.ruleskurz danach eine Regel hinzu LABEL="libmtp_usb_rules":

    ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0f91", RUN+="/bin/sh -c 'env >> /home/username/udev-phone-mtp_%E{SEQNUM}.log'"
    
  2. Regeln neu laden

    sudo udevadm control -R
    
  3. Schließen Sie das Telefon einmal an.

  4. Diese Regel sollte zweimal ausgelöst werden. Vergleichen der Ausgabe an diesem Knoten:

    diff udev-phone-mtp_*.log

    sollte bringen: (dies ist nur der interessante Teil)

    < ID_USB_INTERFACES=:060101:080650:
    ---
    > ID_USB_INTERFACES=:060101:ffff00:
    

Genau das, was Pilot6 (OP) verwenden konnte, usb-devicesbevor es wieder verbunden wurde.


Ich schlage vor, diese Regel /lib/udev/rules.d/69-libmtp.rulesgleich nach LABEL="libmtp_usb_rules":

ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0f91", ENV{ID_USB_INTERFACES}==":060101:080650:", GOTO="libmtp_rules_end"
user.dz
quelle
Diese Chat-Diskussion chat.stackexchange.com/rooms/28790/… bezog sich darauf. Berichtet, dass: Das erste Mal hat es gut funktioniert Ein zweites Mal nach dem Ausstecken gab es einen Fehler, der dann nach einer Verzögerung geöffnet wurde.
user.dz
1
Ich sehe jetzt keine Fehler. Aber die Verzögerung ist immer noch da. Die Montage des Geräts dauert bis zu einer Minute. Ich erhalte die Fehlermeldung, wenn ich nicht warte, bis es automatisch gemountet wird, und versuche, es in Nautilus zu öffnen.
Pilot6
1
Dies scheint jedoch nicht verwandt zu sein, da ich Ihre Zeile auskommentiert habe und die Verzögerung immer noch vorhanden ist. Das Telefon wird im Launcher angezeigt, kann jedoch einige Zeit nicht bereitgestellt werden.
Pilot6
Die Verzögerung hängt nicht mit Ubuntu zusammen. Es ist ein Android-Fehler. Ich habe das Telefon von einem Computer aus angeschlossen und mit einem anderen verbunden. Es gibt die gleiche Verzögerung.
Pilot6
1
Es war wirklich ein Android-Problem mit der Verzögerung. Ich habe die Firmware aus einem anderen Grund neu installiert und die Verzögerung ist verschwunden.
Pilot6