Отключите правила MTP udev для конкретного устройства, чтобы его можно было подключить как устройство хранения USB
У меня проблема с конкретным устройством, которое не является Android / мобильным устройством.
Это медиаплеер с внутренним жестким диском, который я пытаюсь подключить как запоминающее устройство, поэтому я могу копировать фильмы и сериалы и с него.
При подключении к моей системе я вижу следующее
kernel: usb 1-4: new high-speed USB device number 7 using xhci_hcd
systemd[1]: Starting Cleanup of Temporary Directories...
systemd[1]: Started Cleanup of Temporary Directories.
mtp-probe[4978]: checking bus 1, device 7: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4"
kernel: usb 1-4: can't set config #1, error -110
mtp-probe[4978]: bus: 1, device: 7 was not an MTP device
kernel: usb 1-4: USB disconnect, device number 7
lsusb показывает мне
Bus 001 Device 008: ID 174c:5106 ASMedia Technology Inc. ASM1051 SATA 3Gb/s bridge
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x174c ASMedia Technology Inc.
idProduct 0x5106 ASM1051 SATA 3Gb/s bridge
bcdDevice 0.01
iManufacturer 2
iProduct 3
iSerial 1
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 6 SCSI
bInterfaceProtocol 80 Bulk-Only
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Мое ядро и дистрибутив
uname -a
Linux aaron-pc 4.9.24-1-MANJARO #1 SMP PREEMPT Fri Apr 21 08:32:28 UTC 2017 x86_64 GNU/Linux
3 ответа
После большого чтения и тестирования.
Я обнаружил, что это связано с недавним изменением в правилах Udev по умолчанию, чтобы установить правило всеобъемлющего контроля для устройств, которые будут обрабатываться MTP, если они не соответствуют никаким другим правилам udev для USB-устройств.
Вместо того, чтобы мое устройство было установлено как запоминающее устройство USB, как раньше.
Я обнаружил, что мне нужно сообщить udev, что это устройство должно управляться запоминающим устройством USB, а не MTP перехватывать все правила
Сначала мне нужен идентификатор моего устройства. Ниже это последний в списке
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 8087:0a2a Intel Corp.
Bus 001 Device 002: ID 04f2:b51d Chicony Electronics Co., Ltd
Bus 001 Device 006: ID 04e8:6860 Samsung Electronics Co., Ltd Galaxy (MTP)
Bus 001 Device 005: ID 0b05:181b ASUSTek Computer, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 007: ID 174c:5106 ASMedia Technology Inc
Я уверен, что здесь есть нечто большее, чем то, что у меня есть, но это работает для меня. Я беру идентификатор устройства, который 174c:5106
и замените его в правилах udev ниже.
$ cat /etc/udev/rules.d/90-myrules.rules
SUBSYSTEMS=="usb", ENV{MODALIAS}=="usb:174c:5106", ENV{MODALIAS}="usb-storage"
Теперь я вижу следующее в моих системных журналах
journalctl -fe
kernel: usb 1-2: USB disconnect, device number 9
kernel: usb 1-2: new high-speed USB device number 10 using xhci_hcd
mtp-probe[9850]: checking bus 1, device 10: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2"
mtp-probe[9850]: bus: 1, device: 10 was not an MTP device
kernel: usb-storage 1-2:1.0: USB Mass Storage device detected
kernel: scsi host3: usb-storage 1-2:1.0
kernel: usbcore: registered new interface driver usb-storage
kernel: usbcore: registered new interface driver uas
kernel: scsi 3:0:0:0: Direct-Access ST310005 24AS JC4B PQ: 0 ANSI: 0
kernel: sd 3:0:0:0: Attached scsi generic sg2 type 0
kernel: sd 3:0:0:0: [sdb] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
kernel: sd 3:0:0:0: [sdb] Write Protect is off
kernel: sd 3:0:0:0: [sdb] Mode Sense: 23 00 00 00
kernel: sd 3:0:0:0: [sdb] No Caching mode page found
kernel: sd 3:0:0:0: [sdb] Assuming drive cache: write through
kernel: sdb: sdb1
kernel: sd 3:0:0:0: [sdb] Attached SCSI disk
Сначала скопируйте файл /lib/udev/rules.d/69-libmtp.rules
в /etc/udev/rules.d/69-libmtp.rules
:
$ sudo cp /lib/udev/rules.d/69-libmtp.rules /etc/udev/rules.d/69-libmtp.rules
В верхней части этого файла вы можете найти:
# Some sensitive devices we surely don't wanna probe
ATTR{idVendor}=="0670", GOTO="libmtp_rules_end"
ATTR{idVendor}=="0471", ATTR{idProduct}=="083f", GOTO="libmtp_rules_end"
Затем исключите устройство из mtp-probe
добавив следующую строку после упомянутых строк:
ATTR{idVendor}=="093a", ATTR{idProduct}=="2516", GOTO="libmtp_rules_end"
Я нашел свой идентификатор устройства USB с lsusb
командная оболочка. это 093a:2516
Я экспериментирую с отключением периферийных устройств с помощью док-станции thinkpad (здесь ). Проверяя журналctl, я обнаружил, что последние строки перед отключением показывают ошибку устройства mtp-probe, и я думаю, что причина может быть такой же, но с моим монитором. Как мне найти свои устройства, чтобы исключить их для mtp-probe?
Мой lsusb:
Bus 002 Device 008: ID 17ef:1010 Lenovo Lenovo ThinkPad Dock
Bus 002 Device 002: ID 0bda:0316 Realtek Semiconductor Corp. USB3.0-CRW
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 138a:0097 Validity Sensors, Inc.
Bus 001 Device 005: ID 5986:2118 Acer, Inc Integrated Camera
Bus 001 Device 030: ID 046d:c084 Logitech, Inc. G203 Gaming Mouse
Bus 001 Device 029: ID 17ef:100f Lenovo Lenovo ThinkPad Dock
Bus 001 Device 028: ID 17ef:1010 Lenovo Lenovo ThinkPad Dock
Bus 001 Device 027: ID 04b4:1007 Cypress Semiconductor Corp.
Bus 001 Device 008: ID 2386:340e Raydium Corporation Raydium Touch System
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub