This tool lets you get a serial console on an Apple Silicon device and reboot it remotely, using only another Apple Silicon device running Linux and a standard Type C cable.
Requires as of September 2025 the AsahiLinux downstream kernel. The original tipd driver change is probably not upstreamable but vdmtool is expected to be updated if the upstream driver gains support for this.
This is based on macvdmtool without replicating portions of ThunderboltPatcher and licensed under Apache-2.0.
- Copyright (C) 2019 osy86. All rights reserved.
- Copyright (C) 2021 The Asahi Linux Contributors
Thanks to t8012.dev and mrarm for assistance with the VDM and Ace2 host interface commands.
Install Rust cargo and type cargo build
.
Connect the two devices via their DFU ports. That's:
- the rear port on MacBook Air and 13" MacBook Pro
- the port next to the MagSafe connector on the 14" and 16" MacBook Pro
- the port nearest to the power plug on Mac Mini (M1 and M2)
You need to use a USB 3.0 compatible (SuperSpeed) Type C cable. USB 2.0-only cables, including most cables meant for charging, will not work, as they do not have the required pins. Thunderbolt cables work too.
Run it as root (sudo ./tuxvdmtool
).
USAGE:
linuxvdmtool [OPTIONS] [SUBCOMMAND]
OPTIONS:
-d, --device [<DEVICE>...] Path to the USB-C controller device. [default:
/sys/class/i2c-dev/i2c-0/device/0-0038]
-h, --help Print help information
-V, --version Print version information
SUBCOMMANDS:
dfu put the target into DFU mode
help Print this message or the help of the given subcommand(s)
nop Do nothing
reboot reboot the target
reboot serial reboot the target and enter serial mode
serial enter serial mode on both ends
Use /dev/ttySAC0
on the local machine as your serial device. To use it with m1n1, export M1N1DEVICE=/dev/ttySAC0
.
For typical development, the command you want to use is tuxvdmtool reboot serial
. This will reboot the target, and immediately put it back into serial mode, with the right timing to make it work.