-
Notifications
You must be signed in to change notification settings - Fork 0
Thor: General Workability
How to work with the NVIDIA Jetson Thor.
KVM switches are used for connecting multiple pieces of hardware to a single mouse, keyboard, and monitor. If you use a KVM switch with the Thor, there's an issue where the USB ports (which are typically connected to a USB port on the KVM switch) have a setting that prevents them from working smoothly with the KVM switch.
What’s happening is almost certainly USB hub power-management + “real disconnect” behavior from the KVM.
Most KVMs don’t keep a constant virtual keyboard/mouse attached; they act like a USB hub that disconnects from the currently-unselected host and reconnects when you switch back. On Jetson/Thor it’s common for the hub/port to end up in a low-power state (autosuspend / USB3 link power states) and not resume cleanly—so the HID devices look “dead” until you physically replug (which forces a full re-enumeration). NVIDIA’s Thor docs also note autosuspend is disabled by default for most devices, but not for hubs — and your KVM presents as a hub.
We disable autosuspend on the USB ports.
Terminal:
lsusb -t
Expected Output:
/: Bus 001.Port 001: Dev 001, Class=root_hub, Driver=tegra-xusb/4p, 480M
|__ Port 003: Dev 002, If 0, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 003: Dev 002, If 1, Class=Wireless, Driver=rtk_btusb, 12M
|__ Port 004: Dev 003, If 0, Class=Hub, Driver=hub/4p, 480M
/: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=tegra-xusb/4p, 20000M/x2
|__ Port 003: Dev 002, If 0, Class=Hub, Driver=hub/4p, 10000M
Now we need to see the USB device paths (the 1-... / 2-... names) that correspond to those hubs.
Terminal:
ls -d /sys/bus/usb/devices/1-* /sys/bus/usb/devices/2-* 2>/dev/null
Expected Output:
/sys/bus/usb/devices/1-0:1.0 /sys/bus/usb/devices/1-4:1.0
/sys/bus/usb/devices/1-3 /sys/bus/usb/devices/2-0:1.0
/sys/bus/usb/devices/1-3:1.0 /sys/bus/usb/devices/2-3
/sys/bus/usb/devices/1-3:1.1 /sys/bus/usb/devices/2-3:1.0
/sys/bus/usb/devices/1-4
Terminal:
for d in 1-4 2-3; do
echo "Setting $d..."
echo on | sudo tee /sys/bus/usb/devices/$d/power/control
if [ -f /sys/bus/usb/devices/$d/power/autosuspend_delay_ms ]; then
echo -1 | sudo tee /sys/bus/usb/devices/$d/power/autosuspend_delay_ms
fi
echo -n "control="; cat /sys/bus/usb/devices/$d/power/control
done
Now we’ll make that change persistent, so you don’t have to run commands after every reboot or reconnect.
Terminal:
for d in 1-4 2-3; do
echo "=== $d ==="
cat /sys/bus/usb/devices/$d/{idVendor,idProduct,manufacturer,product} 2>/dev/null
done