局域网中Ubuntu设备中的USB 鼠标/键盘、USB 驱动器、网络摄像头和扬声器如果需要共享给另一个系统可用ufans.top的方法。利用Linux 内核中一个名为 USB/IP 的命令行工具,可实现在计算机之间共享 USB 设备及其全部功能。计算机可以使用另一台远程Ubuntu设备中的 USB 设备,就像直接连接一样。

如果您只想在计算机之间共享 USB 鼠标和键盘,那么 Barrier 是一个不错的选择。但对于网络摄像头、USB 驱动器、打印机(通常有选项可以完成这项工作)和其他一般 USB 设备。

步骤 1:安装 USB/IP 内核工具

首先,按下键盘上的 Ctrl+Alt+T 打开终端窗口。当终端打开时,运行命令安装 Linux 内核工具:

sudo apt install linux-tools-$(uname -r)

此命令安装当前内核版本的内核工具。由于 Ubuntu 会定期更新其内核,您可能需要为较新的内核重新运行此命令。

步骤 2:运行时共享 USB 设备

  1. 首先,加载 USB/IP 特定的内核模块。在连接 USB 设备的主机上,您需要首先加载 usbip_core 和 usbip_host 内核模块。

    sudo modprobe usbip_core
    sudo modprobe usbip_host

  2. 然后,运行守护进程。有一个 usbipd 命令用于运行服务器守护程序,默认情况下,该守护程序监听 TCP 端口 3240。

    usbipd &

如果端口 3240 正在使用中,或者您想要监听另一个端口,则使用 usbipd --tcp-port 1234 &(替换数字 1234)。

  1. 接下来,列出计算机上的所有 USB 设备,以获取信息,例如总线 ID、供应商 ID 和产品 ID。

    usbip list -l

在输出中,您需要记住要共享的 USB 设备的总线 ID(通常为 1-1、1-2、...)。

最后,绑定 USB 设备,使其无法远程访问(将总线 ID 1-1 替换为您的)。

sudo usbip bind -b 1-1

它应该输出类似于“bind device on *: complete”的内容。但是,对于 USB 键盘/鼠标,如果您在远程连接之前移动或使用主机上的设备,绑定可能会失败。

并且,要停止共享 USB 设备,请使用命令:

sudo usbip unbind -b 1-1

步骤 3:从远程计算机访问 USB 设备

对于客户端计算机,也必须安装 USB/IP 工具。请参阅步骤 1。

然后,您必须通过运行命令加载 vhci_hcd 内核模块:

sudo modprobe vhci_hcd

最后,列出可访问的远程 USB 设备:

sudo usbip list -r 192.168.0.104

然后,通过命令连接远程 USB:

sudo usbip attachment -r 192.168.0.104 -b 1-1

在这里将 192.168.0.104 替换为您的主机 IP,并根据您共享的总线 ID 替换 1-1。如果一切顺利,您现在应该能够像直接连接一样使用远程 USB 设备。
usbip-bind
要断开远程 USB,请使用命令首先列出所有连接:

sudo usbip port

然后,运行命令进行分离(根据最后一个命令输出替换 00)。

sudo usbip detach -p 00

在启动时启用 USB 设备共享

如果前面的步骤有效,并且您想重启后仍然有效,将其永久保留,那么您可以编写规则来自动加载内核模块、自动启动守护进程并自动绑定 USB 设备。

  1. 首先,通过命令 (Ctrl+Alt+T) 创建自定义配置文件,在系统启动时自动加载内核模块:

    sudo gnome-text-editor /etc/modules-load.d/usbip.conf

gnome-text-editor为Ubuntu24.04默认的文字编辑器,也可以实用nano或gedit,下同。
打开文件后,只需添加以下 2 行并保存:

usbip_core
usbip_host
  1. 然后,通过命令创建 systemd 服务,自动运行 usbipd 守护进程:

    sudo gnome-text-editor /etc/systemd/system/usbipd.service

打开文件后,添加以下行并保存:

[Unit]
Description=USB/IP server
After=network.target

[Service]
ExecStart=/usr/bin/usbipd

[Install]
WantedBy=multi-user.target

最后,运行命令启用并启动服务:

sudo systemctl enable --now usbipd.service

注意:服务可能无法启动启动直到系统重启,因为您已经在步骤 2-2 中运行了守护进程。

  1. 最后,创建一个服务来自动绑定您想要共享的 USB 设备。为此,请运行命令:

    sudo gnome-text-editor /etc/systemd/system/usbip-bind@.service

打开文件后,添加以下行并保存。

[Unit]
Description=USB-IP Binding on bus id %I
After=network-online.target usbipd.service
Wants=network-online.target
Requires=usbipd.service
#DefaultInstance=1-1

[Service]
Type=simple
ExecStart=/usr/bin/usbip bind -b %i
RemainAfterExit=yes
ExecStop=/usr/bin/usbip unbind -b %i
Restart=on-failure

[Install]
WantedBy=multi-user.target

接下来,您需要运行命令来启用和启动服务:

sudo systemctl enable --now usbip-bind@1-1.service

在此命令中,根据要共享的 USB 设备的总线 ID 替换 1-1。

完成后,重新启动计算机并尝试从远程计算机连接。

撤消上述所有
要撤消最后一步,首先打开终端 (Ctrl+Alt+T) 并运行命令以禁用服务(也相应地替换 1-1):

sudo systemctl disable --now usbip-bind@1-1.service
sudo systemctl disable --now usbipd.service

然后,删除 3 个配置文件,尽管服务文件在您重新启用它们之前不起作用:

sudo rm /etc/systemd/system/usbip-bind@.service
sudo rm /etc/systemd/system/usbipd.service
sudo rm /etc/modules-load.d/usbip.conf

最后修改:2024 年 10 月 08 日
如果觉得我的文章对你有用,请随意赞赏