disable MTP udev rules for specific device so it can be mount as a USB Mass Storage device
Solution 1
After much reading and testing.
I found out that this is related to a recent change in the default Udev rules to set a catch-all rule for devices to be handled by MTP if they don't match any other udev rules for USB devices.
Instead of my device being mounted as a USB mass storage device as it used to.
I found that I need to let udev know that this device should be managed a USB mass storage device instead of the MTP catch all rule
First I need my devices ID. Below it is the last one in the list
$ 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
I am sure there is more to this then what I have here, but this works for me. I take the device ID which 174c:5106
and replace it in the udev rules below.
$ cat /etc/udev/rules.d/90-myrules.rules
SUBSYSTEMS=="usb", ENV{MODALIAS}=="usb:174c:5106", ENV{MODALIAS}="usb-storage"
I now see the following in my system logs
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
Solution 2
First copy the file /lib/udev/rules.d/69-libmtp.rules
to /etc/udev/rules.d/69-libmtp.rules
:
$ sudo cp /lib/udev/rules.d/69-libmtp.rules /etc/udev/rules.d/69-libmtp.rules
At the top of this file you can find:
# 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"
Then exclude the device from mtp-probe
by adding next line after mentioned lines:
ATTR{idVendor}=="093a", ATTR{idProduct}=="2516", GOTO="libmtp_rules_end"
I found my USB device ID with lsusb
shell command. It is 093a:2516
Related videos on Youtube
nelaaro
Linux admin, tech enthusiast. opensource evangelist.
Updated on September 18, 2022Comments
-
nelaaro over 1 year
I have a problem with a specific device that is not an android / mobile device.
It is a media player with an internal hard drive that I am trying to connect as a mass storage device so I can copy movies/series too and from it.I see the following when I connect it to my system
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 shows me
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
My kernel and distro
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
-
kyb over 6 yearsseems to work only for one concrete usb flash drive.
-
nelaaro over 6 years@kyb that is correct this is an example of how to add that rule so it work for my drive. I will update the answer show I show how I got my drives device ID
-
Massey101 over 6 yearsThat's incorrect, don't manually edit files under
/lib
. Your changes will be wiped by the next package update. Make an override under/etc/udev/rules.d
instead. -
Eugen Konkov over 6 years@ulidtko: I saw this on some official forums. But you are right. Should I copy whole
69-libmtp.rules
from/lib
to/etc/udev/rules.d
, then make changes into it? -
Massey101 over 6 yearsYes. Rule files under
/etc/udev/rules.d
override those in/lib/udev/rules.d
if they're named identically. Sort of similar to howsystemd
allows overriding unit files. -
Eugen Konkov over 6 years@ulidtko: Have updated the answer
-
Terseus over 5 yearsArchlinux was indeed wrongly detecting my Kindle paperwhite as an MTP device, forcing it to be a USB storage with this udev rule worked, thank you!!
-
Nấm Lùn about 5 yearsThis was useful to disable my Ticwatch Pro being shown as an MTP device, even though I'm not exactly able to use it as so and only wanted to charge it.
-
gnubeard about 4 yearsPlease do not submit questions as answers to previous questions. Instead, create a new post.
-
No name over 2 yearsWas there anything you had to do after adding that file? I did something similar (changing device ID per what lsusb showed me -- in the brief moments it showed the device at all), and even tried
systemctl restart systemd-udevd
(as root), but no change (with an Adafruit MagTag / Espressif ESP32-S2 based board)... Wondering if I'm missing a step that you didn't mention explicitly, or if this solution just isn't working for me for some other reason. -
nelaaro over 2 years@lindes All I had to was plug and unplug my device. I did this after a restart. So I guess
systemctl reload systemd-udevd.service
would do the trick. If the rule is not working You would need to check logs and confirm that your device ID are 100% correct.