Hey Lemmy!

This is a solution for fastboot not listing an Android device.

my device specs

my device specs

  • computer OS: Linux Mint 21.3
  • computer architecture: x86_64
  • USB cable: probably USB 2.0, but I’m not sure. It was not the one that came with my phone
  • phone model: Xiaomi MI 6X (wayne)
  • phone OS: MIUI 12
problem description

problem description

While my phone was in fastboot mode, I couldn’t connect to it using the Linux fastboot command.

  • fastboot devices showed nothing:

    me@computer:~$ fastboot devices
    me@computer:~$ 
    
  • lsusb listed my phone if it was in normal system mode. If I was in fastboot, lsusb does not list my phone.

  • adb worked fine—but only if I ran it as root. If I started it as a normal user, it showed this error:

    me@computer:~$ adb devices
    List of devices attached
    n22i3nf0    no permissions (user in plugdev group; are your udev rules wrong?);
    see [http://developer.android.com/tools/device.html]
    me@computer:~$
    

    I had to do these steps to make adb devices list it properly:

    me@computer:~$ adb kill-server
    me@computer:~$ sudo adb start-server
    
  • other phones were working fine with both adb and fastboot.

solution

solution

I had to add my phone’s device and vendor ID to /etc/udev/rules.d/51-android.rules. My other phones were added already, that’s why fastboot worked with them, but this phone wasn’t added, so it did not work. This solution is also the standard solve for the “no permissions (user in plugdev group)” error, so if the below guide doesn’t work, try someone else’s guide.

The below text is from this gist, with some edits.

  1. First, we are going to determine your phone’s vendor ID and device ID. Reboot your phone into normal system mode. (we can’t get the IDs in fastboot mode because lsusb doesn’t show the device.)
  2. Unplug your device from the computer and type lsusb in the terminal. You should get an output similar to this:
Bus 002 Device 002: ID 8087:8000 Intel Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 003 Device 033: ID 0cf3:3004 Atheros Communications, Inc. AR3012 Bluetooth 4.0
Bus 003 Device 047: ID 045e:07fd Microsoft Corp. Nano Transceiver 1.1
Bus 003 Device 002: ID 174f:148d Syntek 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  1. Now plug your phone into the computer and run the command again, the output should be different:
Bus 002 Device 002: ID 8087:8000 Intel Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 005: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 003 Device 033: ID 0cf3:3004 Atheros Communications, Inc. AR3012 Bluetooth 4.0
Bus 003 Device 047: ID 045e:07fd Microsoft Corp. Nano Transceiver 1.1
Bus 003 Device 002: ID 174f:148d Syntek 
Bus 003 Device 060: ID 05c6:6765 Qualcomm, Inc. 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  1. Take a note of the new output ID. For me it’s Bus 003 Device 060: ID 05c6:6765 Qualcomm, Inc.

  2. record the characters after ID (in this case, it’s 05c6:6765). The four characters before the colon are the vendor ID and the four characters after are the device ID.

  3. edit the file /etc/udev/rules.d/51-android.rules and add this:

    SUBSYSTEM=="usb", ATTR{idVendor}=="vendor_id", ATTR{idProduct}=="device_id", MODE="0666", GROUP="plugdev"
    

    make sure to replace vendor_id with your vendor ID and device_id with your device ID.

  4. Save and close the file.

  5. Now in the terminal, run this, which makes the file readable by all users. I don’t know why this is necessary.

    sudo chmod a+r /etc/udev/rules.d/51-android.rules
    
  6. restart your computer. This is what I did to make it work, but if you don’t want to, other methods I’ve seen are:

    • sudo systemctl restart udev
    • or:
      sudo udevadm control --reload-rules
      sudo udevadm trigger
      
  7. Now you can try the command fastboot devices and it should successfully list your device as one of the entries.

still doesn’t work?

Other solutions which I have seen:

  • use a different USB cable
  • use a different USB port
  • use a different computer
  • use a different OS: switch from Linux to Windows, or vice versa, or use a different version of Ubuntu.

Good luck!