cyme(1)

πŸ“¦
version 3.0.2 Β· 5 versions
, in alpine 3.24, arch rolling, nixpkgs unstable

πŸ’… cyme(1) β€” General Commands Manual

okay bestie, this is cyme(1) from the General Commands Manual and she is that girl. Strap in πŸ’–


✨ NAME ✨

cyme β€” List system USB buses and devices. A modern cross-platform lsusb

πŸ¦‹ SYNOPSIS πŸ¦‹

cyme [-l|--lsusb] [-t|--tree] [-d|--vidpid] [-s|--show] [-D|--device]
[--filter-name] [--filter-serial] [--filter-class] [--filter-exclude]
[-v|--verbose]... [-b|--blocks] [--bus-blocks] [--config-blocks]
[--interface-blocks] [--endpoint-blocks] [--block-operation] [-m|--more]
[--sort-devices] [--sort-buses] [--group-devices] [--hide-buses]
[--hide-hubs] [--list-root-hubs] [--decimal] [--no-padding] [--color]
[--encoding] [--icon] [--headings] [--json] [--from-json]
[-F|--force-libusb] [-c|--config] [-z|--debug]... [--mask-serials]
[--mute-hubs] [--system-profiler] [-h|--help] [-V|--version]
[subcommands]

🌸 DESCRIPTION 🌸

List system USB buses and devices. A modern cross-platform lsusb. that's it, that's the vibe. your USB situation, but make it iconic ✨


πŸŽ€ OPTIONS πŸŽ€

  • -l, --lsusb β€” tries really hard to keep the output compatible with plain old lsusb, for the nostalgia girlies 🫢
  • -t, --tree β€” dumps the whole USB device hierarchy as a tree, branch by branch, like a little family tree but for hardware 🌳
  • -d, --vidpid <VID:[PID]> β€” shows only the devices rocking that vendor and product ID number you gave (hexadecimal, babe), formatted as VID:[PID]
  • -s, --show <SHOW> β€” shows only the devices with that device number and/or bus number (decimal, ngl), formatted as [[bus]:][devnum]
  • -D, --device <DEVICE> β€” picks which device lsusb will examine β€” you hand it over as a Linux /dev/bus/usb/BBB/DDD style path
  • --filter-name <FILTER_NAME> β€” filters on whatever string is hanging out inside the name
  • --filter-serial <FILTER_SERIAL> β€” filters on whatever string is hanging out inside the serial
  • --filter-class <FILTER_CLASS> β€” filters on the USB class code. the possible values are lowkey a lot, so:
    • use-interface-descriptor β€” the device class is unspecified, so interface descriptors get used to figure out which drivers are needed
    • audio β€” speaker, microphone, sound card, MIDI 🎧
    • cdc-communications β€” the modern serial interface; shows up as a UART/RS232 port on most systems
    • hid β€” Human Interface Device; game controllers, keyboards, mice etc. also super commonly used as a device data interface rather than creating something from scratch
    • physical β€” force feedback joystick
    • image β€” still imaging device; scanners, cameras πŸ“Έ
    • printer β€” laser printer, inkjet printer, CNC machine
    • mass-storage β€” Mass storage devices (MSD): USB flash drive, memory card reader, digital audio player, digital camera, external drive
    • hub β€” high speed USB hub
    • cdc-data β€” used together with class 02h (Communications and CDC Control) above
    • smart-card β€” USB smart card reader
    • content-security β€” fingerprint reader
    • video β€” webcam
    • personal-healthcare β€” pulse monitor (watch)
    • audio-video β€” webcam, TV
    • billboard β€” describes the USB-C alternate modes supported by the device
    • usb-type-c-bridge β€” an interface to expose and configure the USB Type-C capabilities of Connectors on USB Hubs or Alternate Mode Adapters
    • bdp β€” this base class is defined for devices that conform to the "VESA USB BDP Device Specification" found at the VESA website. This specification defines the usable set of SubClass and Protocol values. Values outside of this defined spec are reserved. These class codes can only be used in Interface Descriptors
    • mctp β€” this base class is defined for devices that conform to the "MCTP over USB" found at the DMTF website as DSP0283. This specification defines the usable set of SubClass and Protocol values. Values outside of this defined spec are reserved. These class codes can only be used in Interface Descriptors
    • i3c-device β€” an interface to expose and configure the I3C function within a USB device to allow interaction between host software and the I3C device, to drive transactions on the I3C bus to/from target devices
    • diagnostic β€” trace and debugging equipment
    • wireless-controller β€” wireless controllers: Bluetooth adaptors, Microsoft RNDIS
    • miscellaneous β€” this base class is defined for miscellaneous device definitions. Some matching SubClass and Protocols are defined on the USB-IF website
    • application-specific-interface β€” this base class is defined for devices that conform to several class specifications found on the USB-IF website
    • vendor-specific-class β€” this base class is defined for vendors to use as they please
  • --filter-exclude <KEY=VALUE> β€” excludes devices matching a KEY=VALUE criteria. KEY is one of: vidpid, name, serial, class, bus, number. Comma-separate multiple KEY=VALUE pairs to AND them (one occurrence). Repeat the arg to OR exclusions. yes bestie, AND and OR, she contains multitudes πŸ’€
  • -v, --verbose β€” verbosity level (repeat it to build up the count): 1 prints device configurations; 2 prints interfaces; 3 prints interface endpoints; 4 prints everything and more blocks. go off, she's nosy and we love that for her
  • -b, --blocks <BLOCKS>... β€” specifies the blocks that get displayed for each device and in what order. Supply the arg multiple times or as csv to specify multiple blocks.

[default: bus-number,device-number,icon,vendor-id,product-id,name,serial,speed]

Possible values:

  • bus-number β€” number of the bus device is attached to
  • device-number β€” bus issued device number
  • branch-position β€” position of the device in its parent branch
  • port-path β€” Linux style port path
  • sys-path β€” Linux udev reported syspath
  • driver β€” Linux udev reported driver loaded for the device
  • icon β€” icon based on VID/PID
  • vendor-id β€” unique vendor identifier β€” purchased from USB IF
  • product-id β€” vendor unique product identifier
  • vid-pid β€” unique vendor identifier and product identifier as a string formatted 'vid:pid' like lsusb
  • name β€” the device name as reported in descriptor, or using usb_ids if None
  • manufacturer β€” the device manufacturer as provided in descriptor, or using usb_ids if None
  • product-name β€” the device product name as reported by the usb_ids vidpid lookup
  • vendor-name β€” the device vendor name as reported by the usb_ids vid lookup
  • serial β€” device serial string as reported by descriptor
  • speed β€” advertised device capable speed
  • negotiated-speed β€” negotiated device speed as connected
  • speed-label β€” advertised device speed as the USB-IF label string
  • negotiated-speed-label β€” negotiated device speed as the USB-IF label string
  • tree-positions β€” position along all branches back to the trunk device
  • bus-power β€” macOS system_profiler only β€” actually bus current in mA not power!
  • bus-power-used β€” macOS system_profiler only β€” actually bus current used in mA not power!
  • extra-current-used β€” macOS system_profiler only β€” actually bus current used in mA not power!
  • bcd-device β€” the device version
  • bcd-usb β€” the supported USB version
  • base-class β€” base class enum of the interface provided by USB IF β€” only available when using libusb
  • sub-class β€” sub-class value of the interface provided by USB IF β€” only available when using libusb
  • protocol β€” protocol value for the interface provided by USB IF β€” only available when using libusb
  • uid-class β€” class name from the USB IDs repository
  • uid-sub-class β€” sub-class name from the USB IDs repository
  • uid-protocol β€” protocol name from the USB IDs repository
  • class β€” fully defined USB Class Code enum based on the BaseClass/SubClass/Protocol triplet
  • base-value β€” base class as a number value rather than an enum
  • last-event β€” last time the device was seen
  • event-icon β€” event icon
  • operation-mode β€” advertised device speed as a USB-IF Gen NxM operation mode string (e.g. 'USB 3.2 Gen 2x1')
  • negotiated-operation-mode β€” negotiated device speed as a USB-IF Gen NxM operation mode string
  • speed-marketing-label β€” advertised device speed as the USB-IF recommended marketing label (e.g. 'USB 5 Gbps')
  • negotiated-speed-marketing-label β€” negotiated device speed as the USB-IF recommended marketing label
  • --bus-blocks <BUS_BLOCKS>... β€” specifies the blocks that get displayed for each bus and in what order. Supply the arg multiple times or as csv to specify multiple blocks.

[default: port-path,name,host-controller,host-controller-device]

Possible values:

  • bus-number β€” system bus number identifier
  • icon β€” icon based on VID/PID
  • name β€” system internal bus name based on the Root Hub device name
  • host-controller β€” system internal bus provider name
  • host-controller-vendor β€” vendor name of the PCI Host Controller from pci.ids
  • host-controller-device β€” device name of the PCI Host Controller from pci.ids
  • pci-vendor β€” PCI vendor ID (VID)
  • pci-device β€” PCI device ID (PID)
  • pci-revision β€” PCI Revision ID
  • port-path β€” syspath style port path to the bus, applicable to Linux only
  • --config-blocks <CONFIG_BLOCKS>... β€” specifies the blocks that get displayed for each configuration and in what order. Supply the arg multiple times or as csv to specify multiple blocks.

[default: number,icon-attributes,max-power,name]

Still on the --config-blocks possible values, bestie β€” finishing the list πŸ’…

  • name β€” the Name straight out of the string descriptor
  • number β€” the Number of config, i.e. bConfigurationValue; the value you set to enable the configuration
  • num-interfaces β€” how many Interfaces are available for this configuration
  • attributes β€” the Attributes of the configuration, aka bmAttributes
  • icon-attributes β€” an Icon representation of bmAttributes
  • max-power β€” Maximum current consumption in mA
  • --interface-blocks <INTERFACE_BLOCKS>... β€” okay so this one picks which blocks show up for each interface and the order they show up in ✨ Supply the arg multiple times or as csv to give multiple blocks.

[default: port-path,icon,alt-setting,base-class,sub-class]

Possible values:

  • name β€” Name from string descriptor
  • number β€” Interface number
  • port-path β€” Interface port path (only applicable on Linux)
  • base-class β€” Base class enum of interface provided by USB IF
  • sub-class β€” Sub-class value of interface provided by USB IF
  • protocol β€” Protocol value for interface provided by USB IF
  • alt-setting β€” Interfaces can have the same number but an alternate settings defined here
  • driver β€” Driver obtained from udev (Linux only)
  • sys-path β€” syspath obtained from udev (Linux only)
  • dev-path β€” The /dev/ device paths for the interface if any exist (Linux only)
  • mount-paths β€” Mount paths for MSD interfaces in CSV partition_no:mount_path format (Linux only)
  • num-endpoints β€” An interface can have many endpoints
  • icon β€” Icon based on BaseClass/SubCode/Protocol
  • uid-class β€” Class name from USB IDs repository
  • uid-sub-class β€” Sub-class name from USB IDs repository
  • uid-protocol β€” Protocol name from USB IDs repository
  • class β€” Fully defined USB Class Code based on BaseClass/SubClass/Protocol triplet
  • base-value β€” Base class as number value rather than enum
  • --endpoint-blocks <ENDPOINT_BLOCKS>... β€” same deal but for each endpoint πŸŽ€ Which blocks, and in what order. Supply arg multiple times or csv to specify multiple blocks.

[default: number,direction,transfer-type,sync-type,usage-type,max-packet-size]

Possible values:

  • number β€” Endpoint number on interface
  • direction β€” Direction of data into endpoint
  • transfer-type β€” Type of data transfer endpoint accepts
  • sync-type β€” Synchronisation type (Iso mode)
  • usage-type β€” Usage type (Iso mode)
  • max-packet-size β€” Maximum packet size in bytes endpoint can send/receive
  • interval β€” Interval for polling endpoint data transfers. Value in frame counts. Ignored for Bulk & Control Endpoints. Isochronous must equal 1 and field may range from 1 to 255 for interrupt endpoints
  • --block-operation <BLOCK_OPERATION> β€” the Operation to perform on the blocks you supplied via --blocks, --bus-blocks, --config-blocks, --interface-blocks and --endpoint-blocks 🫢

Default is add for ease of use; new is more explicit and was the legacy behaviour (< 2.3.0)

[default: add]

Possible values:

  • add β€” Add new blocks to the existing blocks, ignoring duplicates
  • append β€” Append new blocks to the end of the existing blocks
  • new β€” Replace all blocks with new ones
  • prepend β€” Prepend new blocks to the start of the existing blocks
  • remove β€” Remove matching blocks from the existing blocks
  • -m, --more β€” Print more blocks by default at each verbosity. Lowkey just gives you more πŸ‘‘

Only works if --blocks,--x--blocks not supplied as args or in config

  • --sort-devices <SORT_DEVICES> β€” the Sort devices operation, iykyk

[default: device-number (flat), branch-position (tree)]

Possible values:

  • device-number β€” Sort by bus device number
  • branch-position β€” Sort by position in parent branch
  • no-sort β€” No sorting; whatever order it was parsed
  • --sort-buses β€” Sort devices by bus number. If using any sort-devices other than no-sort, this happens automatically ✨
  • --group-devices <GROUP_DEVICES> β€” Group devices by value when listing

[default: no-group]

Possible values:

  • no-group β€” No grouping
  • bus β€” Group into buses with bus info as heading β€” like a flat tree
  • --hide-buses β€” Hide empty buses when printing tree; those with no devices. Ghost buses, be gone πŸ’€
  • --hide-hubs β€” Hide empty hubs when printing tree; those with no devices. When listing will hide hubs regardless of whether empty of not
  • --list-root-hubs β€” Show root hubs when listing; Linux only 🐧
  • --decimal β€” Show base16 values as base10 decimal instead. It's giving math class fr fr
  • --no-padding β€” Disable padding to align blocks β€” will cause --headings to become maligned 😭 (yes bestie, it will look a mess, that's the trade)
  • --color <COLOR> β€” Output coloring mode 🌈

[default: auto]

Possible values:

  • auto β€” Show colours if the output goes to an interactive console
  • always β€” Always apply colouring to the output
  • never β€” Never apply colouring to the output
  • --encoding <ENCODING> β€” Output character encoding

[default: glyphs]

Possible values:

  • glyphs β€” Use UTF-8 private use area characters such as those used by NerdFont to show glyph icons
  • utf8 β€” Use only standard UTF-8 characters for the output; no private use area glyph icons
  • ascii β€” Use only ASCII characters for the output; 0x00 - 0x7F (127 chars)
  • --icon <ICON> β€” When to print icon blocks πŸŽ€

[default: auto]

Possible values:

  • auto β€” Show icon blocks if the [Encoding] supports icons matched in the [icon::IconTheme]
  • always β€” Always print icon blocks if included in configured blocks
  • never β€” Never print icon blocks
  • --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. Replay era ✨
  • -F, --force-libusb β€” Force pure libusb profiler on macOS rather than combining system_profiler output

Has no effect on other platforms or when using nusb

  • -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 πŸ™ˆ Privacy slay.

Possible values:

  • no-mask β€” No masking
  • hide β€” Hide with '*' char
  • scramble β€” Mask by randomising existing chars
  • replace β€” Mask by replacing length with random chars
  • --mute-hubs β€” Apply muted colour to hub device lines instead of per-block colours
  • --system-profiler β€” Use the system_profiler command on macOS to get USB data

If not using nusb this is the default for macOS, merging with libusb data for verbose output. nusb uses IOKit directly so does not use system_profiler by default

  • -h, --help β€” Print help (see a summary with '-h')
  • -V, --version β€” Print version

✨ SUBCOMMANDS ✨

  • cyme-watch(1) β€” Watch for USB devices being connected and disconnected πŸ‘€ the main character of hot-plugging honestly
  • cyme-help(1) β€” Print this message or the help of the given subcommand(s)

πŸ¦‹ VERSION πŸ¦‹

v3.0.2


🌸 AUTHORS 🌸

John Whittington <john@jbrengineering.co.uk> β€” the icon who made all this happen, no cap πŸ’œ


and that's the whole page bestie, you ate that πŸŽ€ this was cyme version 3.0.2, documented right here in the cyme(1) manual page β€” go forth and enumerate your USB tree with main character energy πŸ’…βœ¨πŸ«Ά

πŸ“¦ where this page comes from