-
Notifications
You must be signed in to change notification settings - Fork 216
feat: split ironrdp-client into a reusable library + ironrdp-viewer binary #1309
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Benoît Cortier (CBenoit)
merged 6 commits into
master
from
copilot/propose-ironrdp-separation
May 26, 2026
Merged
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
3b9e469
Split ironrdp-client into library + ironrdp-viewer binary (PR A)
Copilot da34f7f
Rebase on master; use bounded mpsc channel with backpressure for outp…
Copilot f9fe3d9
Address review comments: simplify ClipboardType to Enable/Disable/Stu…
Copilot e13b8dd
Add parse_config_from helper; simplify test to use it
Copilot 41091ef
Run cargo fmt
Copilot a760227
.
CBenoit File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,84 +1,18 @@ | ||
| # IronRDP client | ||
|
|
||
| Portable RDP client without GPU acceleration. | ||
| Reusable RDP client engine library built on top of the IronRDP crates suite. | ||
|
|
||
| This is a a full-fledged RDP client based on IronRDP crates suite, and implemented using | ||
| non-blocking, asynchronous I/O. Portability is achieved by using softbuffer for rendering | ||
| and winit for windowing. | ||
| This crate is **library-only**: it exposes the `Config`, the `RdpClient` | ||
| runtime, input/output event types, the WebSocket transport, and the session driver. It is | ||
| consumed by `ironrdp-viewer` (the portable GUI client binary) and by any other embedder | ||
| (for example, a headless agent). | ||
|
|
||
| ## Sample usage | ||
| The library is winit-agnostic. Output events are emitted on a bounded | ||
| `tokio::sync::mpsc::Sender<RdpOutputEvent>` channel: the embedder is responsible | ||
| for consuming them and dispatching them to whatever event loop or runtime it wishes. | ||
|
|
||
| ```shell | ||
| ironrdp-client <HOSTNAME> --username <USERNAME> --password <PASSWORD> | ||
| ``` | ||
|
|
||
| ## `.rdp` file support | ||
|
|
||
| You can load a `.rdp` file with `--rdp-file <PATH>`. | ||
|
|
||
| Currently supported properties: | ||
|
|
||
| - `full address:s:<value>` | ||
| - `alternate full address:s:<value>` | ||
| - `server port:i:<value>` | ||
| - `username:s:<value>` | ||
| - `ClearTextPassword:s:<value>` | ||
| - `domain:s:<value>` | ||
| - `enablecredsspsupport:i:<0|1>` | ||
| - `gatewayhostname:s:<value>` | ||
| - `gatewayusagemethod:i:<value>` | ||
| - `gatewaycredentialssource:i:<value>` | ||
| - `gatewayusername:s:<value>` | ||
| - `GatewayPassword:s:<value>` | ||
| - `kdcproxyurl:s:<value>` (also `KDCProxyURL:s:<value>`) | ||
| - `kdcproxyname:s:<value>` | ||
| - `alternate shell:s:<value>` | ||
| - `shell working directory:s:<value>` | ||
| - `redirectclipboard:i:<0|1>` | ||
| - `audiomode:i:<0|1|2>` | ||
| - `desktopwidth:i:<value>` | ||
| - `desktopheight:i:<value>` | ||
| - `desktopscalefactor:i:<value>` | ||
| - `compression:i:<0|1>` | ||
|
|
||
| Property precedence is: | ||
|
|
||
| 1. CLI options | ||
| 2. `.rdp` file values | ||
| 3. Defaults and interactive prompts | ||
|
|
||
| Unknown or unsupported `.rdp` properties are ignored and do not cause parsing failures. Parse | ||
| issues are reported to stderr. | ||
|
|
||
|
|
||
| The `IRONRDP_LOG` environment variable is used to set the log filter directives. | ||
|
|
||
| ```shell | ||
| IRONRDP_LOG="info,ironrdp_connector=trace" ironrdp-client <HOSTNAME> --username <USERNAME> --password <PASSWORD> | ||
| ``` | ||
|
|
||
| See [`tracing-subscriber`’s documentation][tracing-doc] for more details. | ||
|
|
||
| [tracing-doc]: https://docs.rs/tracing-subscriber/0.3.17/tracing_subscriber/filter/struct.EnvFilter.html#directives | ||
|
|
||
| ## Support for `SSLKEYLOGFILE` | ||
|
|
||
| This client supports reading the `SSLKEYLOGFILE` environment variable. | ||
| When set, the TLS encryption secrets for the session will be dumped to the file specified | ||
| by the environment variable. | ||
| This file can be read by Wireshark so that in can decrypt the packets. | ||
|
|
||
| ### Example | ||
|
|
||
| ```shell | ||
| SSLKEYLOGFILE=/tmp/tls-secrets ironrdp-client <HOSTNAME> --username <USERNAME> --password <PASSWORD> | ||
| ``` | ||
|
|
||
| ### Usage in Wireshark | ||
|
|
||
| See this [awakecoding's repository][awakecoding-repository] explaining how to use the file in wireshark. | ||
| For the end-user RDP client binary, see [`ironrdp-viewer`](../ironrdp-viewer). | ||
|
|
||
| This crate is part of the [IronRDP] project. | ||
|
|
||
| [IronRDP]: https://github.com/Devolutions/IronRDP | ||
| [awakecoding-repository]: https://github.com/awakecoding/wireshark-rdp#sslkeylogfile |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.