Skip to content

Fix ATEN iKVM protocol support and add virtual media, profiles, and portable CLI builds - #10

Open
librarian wants to merge 21 commits into
tjone270:mainfrom
librarian:main
Open

Fix ATEN iKVM protocol support and add virtual media, profiles, and portable CLI builds#10
librarian wants to merge 21 commits into
tjone270:mainfrom
librarian:main

Conversation

@librarian

Copy link
Copy Markdown

Summary

This PR expands ATENtion from the original Windows viewer into a tested ATEN/Pilot
iKVM client with corrected authentication, ASPEED video decoding, working virtual
media, persistent server profiles, and cross-platform diagnostic builds.

Protocol and connection fixes

  • Correct the proprietary RFB security type 0x10 authentication framing.
    • The two JNLP credential fields are handled separately.
    • Each field is encoded as a fixed 24-byte, NUL-padded value.
  • Improve parsing of ATEN RFB 055.008 handshakes and JNLP launch parameters.
  • Add automatic BMC web login, session arming, CSRF handling, and fresh token retrieval.
  • Add TLS 1.2 mutual-authentication support with an embedded or externally overridden
    client.pfx.
  • Add structured diagnostic logging while redacting passwords, cookies, tokens, and
    other credentials.
  • Add a bounded raw-frame capture for unsupported video packets.

ASPEED video support

  • Add support for ASPEED AST2400/AST2500 modified-JPEG encoding (0x57).
  • Integrate the MPL-2.0 ASPEED reference decoder and document its separate license.
  • Correct ASPEED packet-header parsing.
  • Fix differential-frame corruption by retaining the required decoder state between
    updates.
  • Add Enhanced Text Mode using YUV444 and maximum quality, producing clear coloured
    console text without the previous compression artifacts.
  • Add explicit full-screen refresh requests and improved initial screen negotiation.

Virtual media

  • Implement the ATEN virtual-media multi-connection attach handshake.
  • Use the temporary credentials and virtual-media endpoint advertised by the BMC.
  • Support direct mutual TLS on the public virtual-media port.
  • Implement the required control framing and clean detach sequence.
  • Improve the emulated read-only SCSI CD-ROM command set and response data.
  • Add ISO mounting from both the GUI and CLI.
  • Verified live: Linux detected the mounted image as a USB CD-ROM and successfully read
    the ISO.

Connection profiles and settings

  • Add named profiles for managing multiple BMCs.
  • Allow saved hosts, usernames, and passwords to be edited after a failed connection.
  • Add Connection > Connect / Change server so credentials can be corrected without
    restarting or deleting application data.
  • Prevent automatic retry after a failed web login, avoiding accidental BMC account
    lockouts.
  • Store settings in the stable location:
    %LOCALAPPDATA%\ATENtion\settings.xml
  • Migrate compatible values from the previous version-specific user.config.
  • Protect saved passwords using Windows DPAPI scoped to the current user.
  • Add tests covering profile creation, editing, deletion, migration, and persistence.

Cross-platform diagnostic CLI

  • Add ATENtion.Capture, a command-line client capable of:
    • logging into and arming the BMC;
    • capturing the first decoded console frame;
    • retaining a raw ASPEED packet for diagnostics;
    • mounting and serving an ISO;
    • checking whether the native ASPEED decoder loads correctly.
  • Prompt for passwords without echoing them.
  • Support Windows, Linux x64, macOS x64, and macOS arm64.

Build and release changes

  • Add CI coverage for Windows, Linux, Intel macOS, and Apple Silicon macOS.
  • Publish self-contained, single-file CLI executables.
  • Bundle the native ASPEED library into the executable’s extraction payload.
  • Keep portable archives limited to the executable and ASPEED license file.
  • Make the release job idempotent:
    • create the GitHub Release if it does not exist;
    • upload or replace assets if the release already exists.

Tests added

Coverage was added for:

  • web arming and JNLP parsing;
  • RFB authentication framing;
  • ASPEED packet headers and differential-frame defaults;
  • enhanced-text screen requests;
  • unsupported-frame capture;
  • virtual-media framing and handshake records;
  • SCSI CD-ROM responses;
  • connection-profile persistence and migration.

Live validation

The changes were exercised against:

  • a Supermicro X10SDV-6C-TLN4F, an AST2400-based Supermicro X10 BMC.

Validated operations include console connection, keyboard/video operation, clear
enhanced-text rendering, screenshots, and virtual-media ISO mounting.

Known certificate limitation

The legacy iKVM mutual-TLS certificate embedded in older X9/X10/X11 BMC firmware
expired on May 17, 2026. This cannot be repaired solely by ignoring the BMC server
certificate because the BMC also validates the client certificate.

ATENtion supports an external client.pfx, but the durable solution requires updated
BMC firmware containing the corresponding renewed trust anchor. Supermicro has produced
beta firmware for affected platforms; this PR does not modify or redistribute BMC
firmware or claim to solve the firmware-side expiry.

@librarian

librarian commented Jul 26, 2026

Copy link
Copy Markdown
Author

Human here: you can build your own binaries (which would be sensible thing) but I have https://github.com/librarian/ATENtion/releases/tag/v1.1.0 release ready. I don't have x9 boards, so I can't test it against your setup. But this tool proved to be helpful for me, so I invested a bit of tokens here.

@librarian
librarian marked this pull request as draft July 26, 2026 15:40
@librarian
librarian marked this pull request as ready for review July 28, 2026 00:29
@librarian

Copy link
Copy Markdown
Author

Added new cert for new BMC firmware with updated cert inside.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant