Проблема определения Wi-Fi адаптера (Driver CDROM Mode)
Несколько дней назад, утром включив комп столкнулся с проблемой определения wifi адаптера, начал определяться как usb накопитель. Причем поведение было довольно странным, в течение дня при перезагрузке адаптер спокойно переключался, а вот отключения компа вечером и включении утром, переключения не происходило.
Будем исправлять это недоразумение и возвращать к жизни.
Первым делом смотрим выхлоп dmesg:
sudo dmesg ... [ 3301.659616] usb 5-2: new high-speed USB device number 7 using xhci_hcd [ 3301.785827] usb 5-2: New USB device found, idVendor=0bda, idProduct=1a2b, bcdDevice= 2.00 [ 3301.785831] usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 3301.785832] usb 5-2: Product: DISK [ 3301.785833] usb 5-2: Manufacturer: Realtek [ 3301.786145] usb-storage 5-2:1.0: USB Mass Storage device detected [ 3301.786243] scsi host9: usb-storage 5-2:1.0 [ 3302.829042] scsi 9:0:0:0: Direct-Access Realtek Driver Storage 1.00 PQ: 0 ANSI: 0 CCS [ 3302.829551] sd 9:0:0:0: [sdc] 16000 512-byte logical blocks: (8.19 MB/7.81 MiB) [ 3302.831718] sd 9:0:0:0: [sdc] Write Protect is on [ 3302.831721] sd 9:0:0:0: [sdc] Mode Sense: 03 00 80 00 [ 3302.833913] sd 9:0:0:0: [sdc] No Caching mode page found [ 3302.833915] sd 9:0:0:0: [sdc] Assuming drive cache: write through [ 3302.842540] sdc: [ 3302.847716] sd 9:0:0:0: [sdc] Attached SCSI removable disk [ 3308.789677] FAT-fs (sdc): utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive! ...
Здесь нас интересуют значения idVendor=0bda, idProduct=1a2b
inxi -n Network: Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet driver: r8168 IF: enp9s0 state: up speed: 100 Mbps duplex: full mac: 1X:c0:XX:52:fX:XX Device-2: Realtek RTL8188GU 802.11n WLAN Adapter (Driver CDROM Mode) type: USB driver: usb-storage
Для начала попробуем переключить режим в ручную, в помощью usb_modeswitch подставив значения idVendor=0bda, idProduct=1a2b
sudo usb_modeswitch -KW -v 0bda -p 1a2b
Смотрим выхлоп dmesg и inxi, если устройство переключилось, увидим это
sudo dmesg [ 3358.643200] usb 5-2: reset high-speed USB device number 7 using xhci_hcd [ 3359.230195] usb 5-2: reset high-speed USB device number 7 using xhci_hcd [ 3380.555958] usb 5-2: USB disconnect, device number 7 [ 3380.893007] usb 5-2: new high-speed USB device number 8 using xhci_hcd [ 3381.019271] usb 5-2: New USB device found, idVendor=0bda, idProduct=c811, bcdDevice= 2.00 [ 3381.019276] usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 3381.019277] usb 5-2: Product: 802.11ac NIC [ 3381.019278] usb 5-2: Manufacturer: Realtek [ 3381.019279] usb 5-2: SerialNumber: 123456 [ 3396.096863] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
Как видим idProduct изменился на значение c811
inxi -n Network: Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet driver: r8168 IF: enp9s0 state: up speed: 100 Mbps duplex: full mac: 1X:c0:XX:52:fX:XX Device-2: Realtek 802.11ac NIC type: USB driver: rtl8821cu IF: wlan0 state: up mac: 98:XX:XX:9a:XX:94
Чтобы каждый раз не переключать в ручную, сделаем это в автоматическом режиме, с помощью плавила udev
Создаём файл в /etc/usb_modeswitch.d/ с названием 0bda:1a2b:
# Mercusys MU6H DefaultVendor= 0x0bda DefaultProduct= 0x1a2b TargetVendor= 0x0bda TargetProduct= 0xc811 MessageContent="55534243123456780000000000000601000000000000000000000000000000" StandardEject=1
В /etc/udev/rules.d/ создаём файл 40-wifi-switch.rules:
ATTRS{idVendor}=="0bda", ATTRS{manufacturer}!="Realtek", ATTR{idProduct}=="1a2b", RUN+="/usr/sbin/usb_modeswitch -v 0bda -p c811 -J"
Перегружаемся, если всё правильно было сделано, то всё должно переключиться.