Remote control for the ASRock Rack ROMED8-2T and ROMED8-2T/BCM — including changing BIOS settings without a browser, a Java/HTML5 KVM, or a physical keyboard.
$ romed8ctl bios enter
reset issued; waiting for the Aptio Setup screen ...
in BIOS Setup
$ romed8ctl bios show link-speed
PCIE1 Link Speed GEN4
PCIE2 Link Speed GEN4
PCIE3 Link Speed GEN4
...
$ romed8ctl bios set link-speed PCIE3=GEN3 PCIE4=GEN3 PCIE5=GEN3 --save
PCIE3 -> GEN3
PCIE4 -> GEN3
PCIE5 -> GEN3
saving (host will reboot) ...The obvious ways to script BIOS changes on this board do not work:
| Approach | Result on BMC 2.08.00 / BIOS P4.10 |
|---|---|
Redfish PATCH /Systems/Self/Bios/SD |
404 — resource not found (also with X-Auth-Token session auth) |
Redfish PATCH /Systems/Self/Bios |
405 — method not allowed |
GET /Registries/BiosAttributeRegistry… |
404 — the registry the BIOS resource advertises isn't served |
Legacy /api/* web endpoints |
no BIOS endpoints at all |
ipmitool sol to reach a shell |
host has no serial getty |
| SSH to the BMC | drops into a crippled "SMASHLITE" console |
H5Viewer via a minted kvmtoken |
/api/viewerlogin → 401 unless the token was minted by that browser session |
What does work: the BIOS Setup screen is rendered over IPMI Serial-over-LAN.
romed8ctl opens a SOL session, parses the ANSI stream into an 80×25 screen, and
sends keystrokes — so Setup becomes fully scriptable.
Reads still go over Redfish (fast, and exposes all 743 BIOS attributes), writes go over SOL.
pipx install git+https://github.com/felkru/romed8ctl
# or
git clone https://github.com/felkru/romed8ctl && cd romed8ctl && pip install -e .Requires ipmitool and script on your PATH (both standard):
sudo apt install ipmitool bsdutils # Debian/Ubuntu
brew install ipmitool # macOSIn the BMC web UI: Settings → User Management → click a user slot. The profile form has these fields:
- Username / Password — an account with Administrator privilege.
- Network Privilege:
Administrator(required for IPMI-over-LAN and SOL). - SNMP Access — optional; only tick it if you actually want SNMP.
romed8ctldoes not use SNMP. If you enable it,SHA256+AESare the sane choices. - Upload SSH Key — optional. It gives you
ssh admin@<bmc>, but on this firmware that lands in a SMASHLITE console that can't do anything useful.romed8ctldoes not need it.
The only thing that actually matters is an Administrator account whose credentials you can hand to
ipmitool.
Settings → Services — make sure IPMI (and Redfish, for the read-only
commands) are enabled and not restricted to an interface you can't reach.
SOL is on by default; confirm with:
ipmitool -I lanplus -H <bmc-ip> -U admin -P '<pass>' sol infoYou want Enabled : true and Payload Channel : 1.
Without this the BIOS never writes to the serial port and every bios command
returns a blank screen. It is on by default on most ROMED8-2T units; verify once
using the physical console or the H5Viewer:
BIOS → Advanced → Serial Port Console Redirection
Console Redirection→ Enabled (for the SOL/COM port)Terminal Type→ VT100+ or ANSIBits per second→ 115200Flow Control→ None
These match romed8ctl's defaults (115200 8N1, 80×25).
Keep the password out of your shell history and out of ps:
mkdir -p ~/.config/romed8ctl
printf 'machine 10.0.0.5 login admin password SECRET\n' > ~/.config/romed8ctl/netrc
chmod 600 ~/.config/romed8ctl/netrcThen either pass --host 10.0.0.5 or export ROMED8_BMC_HOST=10.0.0.5.
$ROMED8_BMC_USER / $ROMED8_BMC_PASS also work if you prefer environment
variables.
romed8ctl info board / BIOS / BMC versions and power state
romed8ctl pages list known BIOS pages, their settings and legal values
romed8ctl power status|on|off|shutdown|reset|reboot|cycle
romed8ctl sol [--seconds N] capture the serial console (POST messages, etc.)
romed8ctl bios enter reboot into Setup and wait for it
romed8ctl bios screen render the current Setup screen
romed8ctl bios show <page> print one settings page
romed8ctl bios set <page> SLOT=VALUE... [--save]
romed8ctl bios send "right;down;enter" [--show] raw keystrokes
romed8ctl bios save F10, confirm, reboot
romed8ctl bios dump [--filter RE] all BIOS attributes (Redfish, read-only)
| page | BIOS location | settings | values |
|---|---|---|---|
link-speed |
Advanced → Chipset Configuration → AMD PCIE Link Speed | PCIE1…PCIE7, OCU1, OCU2, M2_1, M2_2 |
Auto GEN4 GEN3 GEN2 GEN1 |
link-width |
Advanced → Chipset Configuration → AMD PCIE Link Width | PCIE1, PCIE2/M2_1, PCIE3…PCIE7 |
x16 x8x8 x8x4x4 x4x4x8 x4x4x4x4 |
hotplug |
Advanced → Chipset Configuration → AMD PCIE Hotplug | PCIE1…PCIE7, OCU1, OCU2 |
Disabled Enabled |
csm |
Boot → CSM | CSM, per-slot OpROM |
Disabled Enabled Auto |
Typical session:
romed8ctl bios enter
romed8ctl bios show link-width
romed8ctl bios set link-width PCIE3=x16 PCIE4=x16
romed8ctl bios set hotplug PCIE3=Enabled --saveValues are changed by cycling with + and re-reading the screen until the target
value appears, so it stays correct even if option ordering differs on another
BIOS revision.
Collected the hard way while debugging a 6-GPU build:
- Physical slot order is the reverse of the BIOS names. Counting from the CPU
outward, the first slot is
PCIE7and the last isPCIE1. nvidia-smishowingGen1at idle is normal. NVIDIA GPUs downshift the link to save power. Always measurepcie.link.gen.currentunder load before concluding you have a signal-integrity problem.AER CAPships disabled, so PCIe errors are never logged — "no AER errors in dmesg" proves nothing until you enable it (Advanced → AMD CBS → NBIO Common Options).- A warm reboot may not reset cabled-PCIe retimers. Use
power cycle(a real S5 power-down with a hold) when a retimered link comes up wrong. - Don't set bifurcation you don't need.
x8x8on slots that carry a single x16 link can hang POST at PCIe enumeration once the board is densely populated. - Slots report
In Usewith bus address0000:ff:1f.7when the presence pin is asserted but the link never trained — i.e. the card is physically connected but its far end isn't responding (frequently: no aux power to the card). - One SOL session at a time.
romed8ctldeactivates stale sessions on connect; if you also have the H5Viewer open, expect fights.
romed8ctl never prints your password, never passes it on a command line you
didn't write, and only ever changes the settings you name. bios set refuses to
run unless the host is actually in Setup. There is no "load defaults" command on
purpose.
Changing BIOS settings on a remote machine can leave it unbootable. Make sure you have a way to clear CMOS before you script anything adventurous.
Developed against ROMED8-2T/BCM, BIOS P4.10, BMC 2.08.00. The menu maps in
romed8ctl/bios.py are BIOS-revision-specific; if a page has moved, bios send
lets you navigate manually and PAGES is a two-line fix. Other ASRock Rack AMI
boards will likely work with adjusted paths.
MIT