モダンなlsusbのようなcymeを少し試す

rust製のモダンなlsusb的なcymeというものを見かけたので少し試してみました.
cymeはlsusbとも互換性が有り,Linux/Windows/macOSで動作するようです.

install
$ sudo apt install cargo libudev-dev
$ cargo install cyme
$ export PATH=/home/matoken/.cargo/bin:$PATH
help
$ cyme -h
List system USB buses and devices; a modern and compatible `lsusb`

Usage: cyme [OPTIONS]

Options:
  -l, --lsusb
          Attempt to maintain compatibility with lsusb output
  -t, --tree
          Dump USB device hierarchy as a tree
  -d, --vidpid <VIDPID>
          Show only devices with the specified vendor and product ID numbers (in hexadecimal) in format VID:[PID]
  -s, --show <SHOW>
          Show only devices with specified device and/or bus numbers (in decimal) in format [[bus]:][devnum]
  -D, --device <DEVICE>
          Selects which device lsusb will examine - supplied as Linux /dev/bus/usb/BBB/DDD style path
      --filter-name <FILTER_NAME>
          Filter on string contained in name
      --filter-serial <FILTER_SERIAL>
          Filter on string contained in serial
      --filter-class <FILTER_CLASS>
          Filter on USB class code [possible values: use-interface-descriptor, audio, cdc-communications, hid, physical, image, printer, mass-storage, hub, cdc-data, smart-cart, content-security, video, personal-healthcare, audio-video, billboard, usb-type-c-bridge, i3c-device, diagnostic, wireless-controller, miscellaneous, application-specific-interface, vendor-specific-class]
  -v, --verbose...
          Verbosity level: 1 prints device configurations; 2 prints interfaces; 3 prints interface endpoints; 4 prints everything and all blocks
  -b, --blocks <BLOCKS>
          Specify the blocks which will be displayed for each device and in what order [possible values: bus-number, device-number, branch-position, port-path, sys-path, driver, icon, vendor-id, product-id, name, manufacturer, product-name, vendor-name, serial, speed, tree-positions, bus-power, bus-power-used, extra-current-used, bcd-device, bcd-usb, class-code, sub-class, protocol]
      --bus-blocks <BUS_BLOCKS>
          Specify the blocks which will be displayed for each bus and in what order [possible values: bus-number, icon, name, host-controller, pci-vendor, pci-device, pci-revision, port-path]
      --config-blocks <CONFIG_BLOCKS>
          Specify the blocks which will be displayed for each configuration and in what order [possible values: name, number, num-interfaces, attributes, icon-attributes, max-power]
      --interface-blocks <INTERFACE_BLOCKS>
          Specify the blocks which will be displayed for each interface and in what order [possible values: name, number, port-path, class-code, sub-class, protocol, alt-setting, driver, sys-path, num-endpoints, icon]
      --endpoint-blocks <ENDPOINT_BLOCKS>
          Specify the blocks which will be displayed for each endpoint and in what order [possible values: number, direction, transfer-type, sync-type, usage-type, max-packet-size, interval]
  -m, --more
          Print more blocks by default at each verbosity
      --sort-devices <SORT_DEVICES>
          Sort devices by value [possible values: branch-position, device-number, no-sort]
      --sort-buses
          Sort devices by bus number
      --group-devices <GROUP_DEVICES>
          Group devices by value when listing [default: no-group] [possible values: no-group, bus]
      --hide-buses
          Hide empty buses when printing tree; those with no devices. When listing will hide Linux root_hubs
      --hide-hubs
          Hide empty hubs when printing tree; those with no devices. When listing will hide hubs regardless of whether empty of not
      --decimal
          Show base16 values as base10 decimal instead
      --no-padding
          Disable padding to align blocks
      --no-colour
          Disable coloured output, can also use NO_COLOR environment variable
      --ascii
          Disables icons and utf-8 charactors
      --headings
          Show block headings
      --json
          Output as json format after sorting, filters and tree settings are applied; without -tree will be flattened dump of devices
      --from-json <FROM_JSON>
          Read from json output rather than profiling system - must use --tree json dump
  -F, --force-libusb
          Force libusb profiler on macOS rather than using/combining system_profiler output
  -c, --config <CONFIG>
          Path to user config file to use for custom icons, colours and default settings
  -z, --debug...
          Turn debugging information on. Alternatively can use RUST_LOG env: INFO, DEBUG, TRACE
      --mask-serials <MASK_SERIALS>
          Mask serial numbers with '*' or random chars [possible values: hide, scramble, replace]
  -h, --help
          Print help information (use `--help` for more detail)
  -V, --version
          Print version information
実行
$ cyme
Failed to open Bus 002 Device 001: ID 1d6b:0003, will be unable to obtain all data: Access denied (insufficient permissions)
Failed to open Bus 001 Device 003: ID 8087:0a2b, will be unable to obtain all data: Access denied (insufficient permissions)
Failed to open Bus 001 Device 002: ID 5986:054c, will be unable to obtain all data: Access denied (insufficient permissions)
Failed to open Bus 001 Device 004: ID 17ef:6047, will be unable to obtain all data: Access denied (insufficient permissions)
Failed to open Bus 001 Device 001: ID 1d6b:0002, will be unable to obtain all data: Access denied (insufficient permissions)
  1   3  0x8087 0x0a2b Bluetooth wireless interface                      12.0 Mb/s
  1   2  0x5986 0x054c                                                  480.0 Mb/s
  1   4  0x17ef 0x6047 ThinkPad Compact Keyboard with TrackPoint         12.0 Mb/s
  1   1  0x1d6b 0x0002 2.0 root hub                                     480.0 Mb/s
  2   1  0x1d6b 0x0003 3.0 root hub                                       5.0 Gb/s
permission不足をsudoで解決
$ sudo ~/.cargo/bin/cyme
  1   3  0x8087 0x0a2b Bluetooth wireless interface                                12.0 Mb/s
  1   2  0x5986 0x054c USB HD Webcam                                 200901010001 480.0 Mb/s
  1   4  0x17ef 0x6047 ThinkPad Compact USB Keyboard with TrackPoint               12.0 Mb/s
  1   1  0x1d6b 0x0002 xHCI Host Controller                          0000:00:14.0 480.0 Mb/s
  2   1  0x1d6b 0x0003 xHCI Host Controller                          0000:00:14.0   5.0 Gb/s
lsusb形式
$ cyme --lsusb
Failed to open Bus 002 Device 001: ID 1d6b:0003, will be unable to obtain all data: Access denied (insufficient permissions)
Failed to open Bus 001 Device 003: ID 8087:0a2b, will be unable to obtain all data: Access denied (insufficient permissions)
Failed to open Bus 001 Device 002: ID 5986:054c, will be unable to obtain all data: Access denied (insufficient permissions)
Failed to open Bus 001 Device 004: ID 17ef:6047, will be unable to obtain all data: Access denied (insufficient permissions)
Failed to open Bus 001 Device 001: ID 1d6b:0002, will be unable to obtain all data: Access denied (insufficient permissions)
Bus 001 Device 003: ID 8087:0a2b Intel Corp. Bluetooth wireless interface
Bus 001 Device 002: ID 5986:054c Acer, Inc
Bus 001 Device 004: ID 17ef:6047 Lenovo ThinkPad Compact Keyboard with TrackPoint
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
文字化けが気になるので --ascii オプションを
$ sudo ~/.cargo/bin/cyme --tree --ascii
/:  xHCI Host Controller Linux 6.0.0-6-amd64 xhci-hcd
|__O   4 0x17ef 0x6047 ThinkPad Compact USB Keyboard with TrackPoint
|__O   2 0x5986 0x054c USB HD Webcam                                 200901010001
|__O   3 0x8087 0x0a2b Bluetooth wireless interface

/:  xHCI Host Controller Linux 6.0.0-6-amd64 xhci-hcd
--verbose は4つまで効くよう
$ sudo ~/.cargo/bin/cyme --ascii --vidpid 0x17ef:0x6047 --verbose --verbose --verbose | wc
      6      39     271
$ sudo ~/.cargo/bin/cyme --ascii --vidpid 0x17ef:0x6047 --verbose --verbose --verbose --verbose | wc
      6      56     389
$ sudo ~/.cargo/bin/cyme --ascii --vidpid 0x17ef:0x6047 --verbose --verbose --verbose --verbose --verbose | wc
      6      56     389
filter
$ sudo ~/.cargo/bin/cyme --ascii --filter-name cam (1)
  1   2 0x5986 0x054c USB HD Webcam 200901010001 480.0 Mb/s
$ sudo ~/.cargo/bin/cyme --ascii --filter-class hid (2)
$ sudo ~/.cargo/bin/cyme --ascii --filter-serial 14 (3)
  1   1 0x1d6b 0x0002 xHCI Host Controller 0000:00:14.0 480.0 Mb/s
  2   1 0x1d6b 0x0003 xHCI Host Controller 0000:00:14.0   5.0 Gb/s
$ sudo ~/.cargo/bin/cyme --ascii --vidpid 0x17ef:0x6047 (4)
  1   4 0x17ef 0x6047 ThinkPad Compact USB Keyboard with TrackPoint         12.0 Mb/s
  1. 文字列でフィルタ
  2. hid class でフィルタ……うまくいかない?
  3. serialの一部でフィルタ
  4. vid/pidでフィルタ
よく使う sudo lsusb -d 17ef:6047 -vvv の代わり?
$ sudo ~/.cargo/bin/cyme --ascii --vidpid 0x17ef:0x6047 --verbose --verbose --verbose --verbose --lsusb | head

Bus 001 Device 004: ID 17ef:6047 Lenovo ThinkPad Compact Keyboard with TrackPoint
Device Descriptor:
  bcdUSB              2.00
  bDeviceClass           0 UseInterfaceDescriptor
  bDeviceSubClass        0
  bDeviceProtocol        0
  bMaxPacketSize0        8
  idVendor          0x17ef Lenovo
  idProduct         0x6047 ThinkPad Compact Keyboard with TrackPoint
uninstall
$ cargo uninstall cyme
    Removing /home/matoken/.cargo/bin/cyme

lsusbでそう困っていませんが,cymeはlsusbと互換性があるし見た目も今どきな感じなので良さそうです.ただ自分で入れてまで使うかというと微妙.ディストリビューションパッケージに入ったら使うかもという感じでしょうか.

環境
$ cyme --version
cyme 1.2.1
$ dpkg-query -W cargo libudev-dev
cargo   0.63.1-3
libudev-dev:amd64       252.4-1
$ lsb_release -a
Distributor ID: Debian
Description:    Debian GNU/Linux bookworm/sid
Release:        n/a
Codename:       bookworm
$ arch
x86_64

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)