自动对 Wifi USB 使用 usb_modeswitch

Che*_*o R 2 udev usb-modeswitch systemd

我最近购买了一个包含 Realtek rtl8811CU 芯片组的 Wifi Dongle。我正在使用 Ubuntu 18.04 LTS。

\n\n

幸运的是,在找到这个Github repo后,我可以毫无问题地编译它并安装驱动程序。

\n\n

但是,每次连接加密狗时,都会被检测为磁盘,并且我需要运行 usb_modeswitch 才能使其工作:

\n\n
$ lsusb\n [...]\n Bus 001 Device 013: ID 0bda:1a2b Realtek Semiconductor Corp. \n$ sudo usb_modeswitch -KW -v 0bda -p 1a2b\n$ lsusb\n [...]\n Bus 001 Device 014: ID 0bda:c811 Realtek Semiconductor Corp.\n
Run Code Online (Sandbox Code Playgroud)\n\n

设备 ID 发生变化,现在我可以正确使用我的 Wifi dongle。

\n\n

我尝试将此条目添加到位于 /lib/udev/rules.d/40-usb_modeswitch.rules 的 udev 规则中,据说每次检测到设备时都运行该命令:

\n\n
 # Realtek 8211CU Wifi AC USB\n ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="usb_modeswitch \'/%k\'"\n
Run Code Online (Sandbox Code Playgroud)\n\n

但后来我重新连接,什么也没发生。

\n\n

我已经检查过,也许您需要一项服务来执行此操作,但似乎无法激活。

\n\n
$ systemctl --all | grep usb_modeswitch\n\xe2\x97\x8f usb_modeswitch@1-4.1.service    loaded    failed   failed    USB_ModeSwitch_1-4.1                                                            \nsystem-usb_modeswitch.slice       loaded    active   active    system-usb_modeswitch.slice    \n\n$ systemctl status usb_modeswitch@1-4.1.service\n\xe2\x97\x8f usb_modeswitch@1-4.1.service - USB_ModeSwitch_1-4.1\nLoaded: loaded (/lib/systemd/system/usb_modeswitch@.service; static; vendor preset: enabled)\nActive: failed (Result: exit-code) since Thu 2018-10-04 11:49:17 CDT; 2min 5s ago\n    Docs: man:usb_modeswitch_dispatcher(1)\nProcess: 32216 ExecStart=/usr/sbin/usb_modeswitch_dispatcher --switch-mode 1-4.1 (code=exited, status=1/FAILURE)\nMain PID: 32216 (code=exited, status=1/FAILURE)\n\noct 04 11:49:17  systemd[1]: Starting USB_ModeSwitch_1-4.1...\noct 04 11:49:17  usb_modeswitch_dispatcher[32216]: Could not read attribute: No such file or directory\noct 04 11:49:17  usb_modeswitch_dispatcher[32216]: Could not read attribute: No such file or directory\noct 04 11:49:17  systemd[1]: usb_modeswitch@1-4.1.service: Main process exited, code=exited, status=1/FAILURE\noct 04 11:49:17  systemd[1]: usb_modeswitch@1-4.1.service: Failed with result \'exit-code\'.\noct 04 11:49:17  systemd[1]: Failed to start USB_ModeSwitch_1-4.1.\n
Run Code Online (Sandbox Code Playgroud)\n\n

Ubuntu 包装器似乎有问题,有谁知道我如何进一步调查?我对 systemd 和 udev 规则很陌生,所以我不太确定在哪里可以找到更多日志或调试功能。

\n

Che*_*o R 5

我已经找到了方法。我修改了文件,/lib/udev/rules.d/40-usb_modeswitch.rules在行前添加了LABEL="modeswitch_rules_end"以下内容:

# Realtek 8211CU Wifi AC USB
ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="/usr/sbin/usb_modeswitch -K -v 0bda -p 1a2b"
Run Code Online (Sandbox Code Playgroud)

之后,每次我连接wifi适配器时,磁盘都不会出现,并且会自动检测到Wifi。也许这不是最干净的方法,但它确实有效。

  • 我认为标准方式应该是这样的: `ATTR{idVendor}=="0e8d", ATTR{idProduct}=="2870", RUN+="usb_modeswitch '%b/%k'"` (2认同)