xfreerdp(1)

πŸ’– xfreerdp β€” the manual, but make it cute πŸ’–

okay bestie, so you wanna RDP into a Windows box from your X11 setup? say less. this is xfreerdp, section 1 of the manual, aka the FreeRDP X11 client, and she understands you. let's get into it 🫢


✨ NAME ✨

xfreerdp β€” FreeRDP X11 client. short. sweet. iconic. periodt πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

xfreerdp [file] [options] [/v:server[:port]]

that's the whole vibe. file? optional. options? as many as your heart desires. server? you need that one, [/v:server[:port]], don't forget her πŸŽ€


🌸 DESCRIPTION 🌸

xfreerdp is an X11 Remote Desktop Protocol (RDP) client which is part of the FreeRDP project.

and like, RDP servers? literally built-in to so many editions of Windows already, no setup required. but if Windows servers aren't your thing, alternative servers include ogon, gnome-remote-desktop, xrdp and VRDP (VirtualBox). options, we love to see it 🌈


πŸ‘‘ OPTIONS πŸ‘‘

okay here comes the big list. she's long. she's thorough. she's highkey the main character. every flag, every default, every argument β€” all of it, right here πŸ’œ

  • /a:addin[,options], /addin:addin[,options] β€” Addin. that's the entire blurb bestie, she's giving mysterious πŸ•΅οΈ
  • /azure:[tenantid:id],[use-tenantid[:[on|off]],[ad:url][avd-access:format string],[avd-token:format string],[avd-scope:format string],[auth-helper:path|autodetect] β€” AzureAD options. all the cloud girlies, this one's for you ✨
  • /action-script:file-name β€” Action script (default:~/.config/freerdp/action.sh)
  • /admin, /console β€” Admin (or console) session. no cap, sometimes you just need the keys πŸ‘‘
  • +aero β€” desktop composition (default:off)
  • /app:program:[path|||alias],cmd:command,file:filename,guid:guid,icon:filename,name:name,workdir:directory,hidef:[on|off] β€” Remote application program
  • /assistance:password β€” Remote assistance password
  • /auto-request-control: β€” Automatically request remote assistance input control
  • +async-channels β€” Asynchronous channels (experimental) (default:off)
  • +async-update β€” Asynchronous update (default:off)
  • /audio-mode:[[none|2]|[server|1]|[redirect|0]] β€” Audio output mode
  • +auth-only β€” Authenticate only (default:off)
  • /auth-pkg-list:[[none],]!ntlm,kerberos,!u2u β€” Authentication package filter (comma-separated list, use ! to disable). By default all methods are enabled. Use explicit none as first argument to disable all methods, selectively enabling only the ones following.
  • -authentication β€” Authentication (experimental) (default:on)
  • +auto-reconnect β€” Automatic reconnection (default:off)
  • /auto-reconnect-max-retries:retries β€” Automatic reconnection maximum retries, 0 for unlimited [0,1000]
  • /bpp:depth β€” Session bpp (color depth) (default:16)
  • /buildconfig β€” Print the build configuration
  • /cache:[bitmap[:on|off],codec[:rfx|nsc],glyph[:on|off],offscreen[:on|off],persist,persist-file:filename] β€” the manpage gives this one no blurb at all, so here she is in all her unbothered, mysterious glory πŸ™ˆ
  • /cert:[deny,ignore,name:name,tofu,fingerprint:hash:hash as hex[,fingerprint:hash:another hash]] β€” Certificate accept options. Use with care!
⚠️ bestie. use with care. this is the part where you read everything, okay? 😭
  • deny ... Automatically abort connection if the certificate does not match, no user interaction.
  • ignore ... Ignore the certificate checks altogether (overrules all other options)
  • name ... Use the alternate <name> instead of the certificate subject to match locally stored certificates
  • tofu ... Accept certificate unconditionally on first connect and deny on subsequent connections if the certificate does not match
  • fingerprints ... A list of certificate hashes that are accepted unconditionally for a connection
  • /client-build-number:number β€” Client Build Number sent to server (influences smartcard behaviour, see [MS-RDPESC])
  • /client-hostname:name β€” Client Hostname to send to server
  • /clipboard:[[use-selection:atom],[direction-to:[all|local|remote|off]],[files-to[:all|local|remote|off]]] β€” Redirect clipboard:
    • use-selection:<atom> ... (X11) Specify which X selection to access. Default is CLIPBOARD. PRIMARY is the X-style middle-click selection.
    • direction-to:[all|local|remote|off] control enabled clipboard direction
    • files-to:[all|local|remote|off] control enabled file clipboard direction (default:on)
  • -compression, -z β€” compression (default:on)
  • /compression-level:level β€” Compression level (0,1,2)
  • +credentials-delegation β€” credentials delegation (default:off)
  • /d:domain β€” Domain
  • -decorations β€” Window decorations (default:on)
  • /disp β€” Display control
  • /drive:name,path β€” Redirect directory <path> as named share <name>. Hotplug support is enabled with /drive:hotplug,*. This argument provides the same function as "Drives that I plug in later" option in MSTSC.
  • +drives β€” Redirect all mount points as shares (default:off)
  • /dump:record|replay,file:file[,nodelay] β€” record or replay dump
  • /dvc:channel[,options] β€” Dynamic virtual channel
  • +dynamic-resolution β€” Send resolution updates when the window is resized (default:off)
  • /echo, /echo β€” Echo channel. (yes, she's listed twice. the manpage said it, not me πŸ’€)
  • -encryption β€” Encryption (experimental) (default:on)
  • /encryption-methods:[40,][56,][128,][FIPS] β€” RDP standard security encryption methods
  • /endpointfedauth:token β€” Endpoint FedAuth token for Hyper-V VM console-connect scenarios
  • /f β€” Fullscreen mode (Ctrl+Alt+Enter toggles fullscreen)
  • +fipsmode β€” FIPS mode (default:off)
  • /floatbar[:sticky:[on|off],default:[visible|hidden],show:[always|fullscreen|window]] β€” floatbar is disabled by default (when enabled defaults to sticky in fullscreen mode)
  • -fonts β€” smooth fonts (ClearType) (default:on)
  • +force-console-callbacks β€” Use default callbacks (console) for certificate/credential/... (default:off)
  • /frame-ack:number β€” Number of frame acknowledgement
  • /args-from:file:file|stdin|fd:number|env:name β€” Read command line from a file, stdin or file descriptor. This argument can not be combined with any other. Provide one argument per line.
  • /from-stdin[:force] β€” Read credentials from stdin. With <force> the prompt is done before connection, otherwise on server request.
  • /gateway:..., /gw:... β€” Gateway Hostname. full syntax, verbatim, because she is long:
/gateway:g:gateway[:port],u:user,d:domain,p:password,usage-method:[direct|detect],access-token:token,type:[rpc|http[,no-websockets][,extauth-sspi-ntlm]|auto[,no-websockets][,extauth-sspi-ntlm]]|arm,url:wss://url,bearer:oauth2-bearer-token,timeout:1-600000 ms,
/gw:g:gateway[:port],u:user,d:domain,p:password,usage-method:[direct|detect],access-token:token,type:[rpc|http[,no-websockets][,extauth-sspi-ntlm]|auto[,no-websockets][,extauth-sspi-ntlm]]|arm,url:wss://url,bearer:oauth2-bearer-token,timeout:1-600000 ms
  • /gdi:sw|hw β€” GDI rendering
  • /geometry β€” Geometry tracking channel
  • +gestures β€” Consume multitouch input locally (default:off)
  • /gfx[:[[progressive[:on|off]|RFX[:on|off]|AVC420[:on|off]AVC444[:on|off]],mask:value,small-cache[:on|off],thin-client[:on|off],progressive[:on|off],frame-ack[:on|off],AV1[:on|off|i444|i420]]] β€” RDP8 graphics pipeline
  • -grab-keyboard β€” Grab keyboard focus, forward all keys to remote (default:on)
  • -grab-mouse β€” Grab mouse focus, forward all events to remote (default:on)
  • /h:height β€” Height (default:768)
  • -heartbeat β€” Support heartbeat PDUs (default:on)
  • /help, /? β€” Print help
  • +home-drive β€” Redirect user home as share (default:off)
  • /ipv4[:[:force]], /4[:[:force]] β€” Prefer IPv4 A record over IPv6 AAAA record
  • /ipv6[:[:force]], /6[:[:force]] β€” Prefer IPv6 AAAA record over IPv4 A record
  • /jpeg β€” JPEG codec support
  • /jpeg-quality:percentage β€” JPEG quality
  • /kbd:[layout:[0xid|name],lang:0xid,fn-key:value,type:value,subtype:value,unicode[:on|off],remap:key1=value1,remap:key2=value2,pipe:filename] β€” Keyboard related options:
    • layout: set the keybouard layout announced to the server (yes, "keybouard" β€” typo is canon, don't @ me)
    • lang: set the keyboard language identifier sent to the server
    • fn-key: Function key value
    • remap: RDP scancode to another one. Use /list:kbd-scancode to get the mapping. Example: To switch 'a' and 's' on a US keyboard: /kbd:remap:0x1e=0x1f,remap:0x1f=0x1e
    • pipe: Name of a named pipe that can be used to type text into the RDP session
  • /kerberos:[kdc-url:url,lifetime:time,start-time:time,renewable-lifetime:time,cache:path,armor:path,pkinit-anchors:path,pkcs11-module:name] β€” Kerberos options
  • /load-balance-info:info-string β€” Load balance info
  • /list:[kbd|kbd-scancode|kbd-lang[:value]|smartcard[:[pkinit-anchors:path][,pkcs11-module:name]]|monitor|tune|timezones] β€” List available options for subcommand (default:List available options for subcommand)
  • /log-filters:tag:level[,tag:level[,...]] β€” Set logger filters, see wLog(7) for details
  • /log-level:[OFF|FATAL|ERROR|WARN|INFO|DEBUG|TRACE] β€” Set the default log level, see wLog(7) for details
  • /max-fast-path-size:size β€” Specify maximum fast-path update size
  • /max-loop-time:time β€” Specify maximum time in milliseconds spend treating packets
  • +menu-anims β€” menu animations (default:off)
  • /microphone[:[sys:sys,][dev:dev,][format:format,][rate:rate,][channel:channel]],, /mic[:[sys:sys,][dev:dev,][format:format,][rate:rate,][channel:channel]] β€” Audio input (microphone)
  • /monitors:id[,id[,...]] β€” [experimental] Select monitors to use (only effective in fullscreen or multimonitor mode)
  • -mouse-motion β€” Send mouse motion events (default:on)
  • +mouse-relative β€” Send mouse motion with relative addressing (default:off)
  • /mouse:[relative:[on|off],grab:[on|off]] β€” Mouse related options:
    • relative: send relative mouse movements if supported by server
    • grab: grab the mouse if within the window
  • /multimon:on|off|force β€” Use multiple monitors (default:off)
  • +multitouch β€” Redirect multitouch input (default:off)
  • -multitransport β€” Support multitransport protocol (default:on)
  • -nego β€” protocol security negotiation (default:on)
  • /network:[invalid|modem|broadband|broadband-low|broadband-high|wan|lan|auto] β€” Network connection type
  • /nsc, /nscodec β€” NSCodec support
  • /orientation:[0|90|180|270] β€” Orientation of display in degrees
  • +old-license β€” Use the old license workflow (no CAL and hwId set to 0) (default:off)
  • /p[:password] β€” Password. Pass /p without arguments to silences interactive password prompts if no credentials are required for the connection.
  • /parallel[:name[,path]] β€” Redirect parallel device
  • /parent-window:window-id β€” Parent window id
  • /pcb:blob β€” Preconnection Blob
  • /pcid:id β€” Preconnection Id
  • /pheight:height β€” Physical height of display (in millimeters)
  • /play-rfx:pcap-file β€” Replay rfx pcap file
  • /port:number β€” Server port
  • -suppress-output β€” suppress output when minimized (default:on)
  • +print-reconnect-cookie β€” Print base64 reconnect cookie after connecting (default:off)
  • /printer[:name[,driver[,default]]] β€” Redirect printer device

and that's only part one bestie, we're literally just getting started 🌸 more coming πŸ’–

  • /proxy:[proto://][user:password@]host[:port] β€” proxy time, bestie 🌐 this overrides the env var (scroll down for the environment variable tea β˜•). and heads up: socks5 has to be said out loud explicitly, because http is the default and it will not read your mind.
  • /pth:password-hash, /pass-the-hash:password-hash β€” pass the hash (restricted admin mode) πŸ”‘
  • /pwidth:width β€” physical width of the display, in millimeters πŸ“
  • /rdp2tcp:executable path[:arg...] β€” TCP redirection πŸ”€
  • /reconnect-cookie:base64-cookie β€” hands a base64 reconnect cookie over to the connection πŸͺ
  • /redirect-prefer:FQDN|IP|NETBIOS,[...] β€” overrides the preferred redirection order ✨
  • /relax-order-checks, /relax-order-checks β€” do not check whether an RDP order was announced during capability exchange. literally only use this when you're connecting to a buggy server, no cap πŸ’€ (and yes it's written twice, that's just how it came, we keep it real)
  • /restricted-admin, /restrictedAdmin β€” restricted admin mode πŸ›‘οΈ
  • /rfx β€” RemoteFX ✨
  • /rfx-mode:[image|video] β€” RemoteFX mode 🎬
  • /scale:[100|140|180] β€” scaling factor of the display (default:100) πŸ”
  • /scale-desktop:percentage β€” scaling factor for desktop applications, value between 100 and 500 (default:100) πŸ–₯️
  • /scale-device:100|140|180 β€” scaling factor for app store applications (default:100) πŸ“±
  • /sec:rdp[:[on|off]]|tls[:[on|off]]|nla[:[on|off]]|ext[:[on|off]]|aad[:[on|off]] β€” force a specific protocol security, periodt. like /sec:nla turns NLA on and switches everything else off, while /sec:nla:[on|off] just toggles NLA on its own πŸ”
  • /serial[:name[,path[,driver[,permissive]]]], /tty[:name[,path[,driver[,permissive]]]] β€” redirect a serial device πŸ”Œ
  • /server-name:name β€” user-specified server name to use for validation (TLS, Kerberos) 🏷️
  • /shell:shell β€” alternate shell 🐚
  • /shell-dir:dir β€” shell working directory πŸ“
  • /size:widthxheight or percent%[wh] β€” screen size (default:1024x768) πŸ“
  • /smart-sizing:widthxheight|on|off β€” scale the remote desktop to the window size (default:off) πŸͺŸ
  • /smartcard[:str[,str...]] β€” redirects the smartcard devices that have any of the str in their names πŸ’³
  • /smartcard-logon[:[[cert:path|cert:base64(PEM)],[key:path|key:base64(PEM)],pin:pin,csp:csp name,reader:reader,card:card]] β€” activates Smartcard (optional certificate) Logon authentication πŸŽ€
  • /sound[:[sys:sys,][dev:dev,][format:format,][rate:rate,][channel:channel,][latency:latency,][quality:quality]], /audio[:[sys:sys,][dev:dev,][format:format,][rate:rate,][channel:channel,][latency:latency,][quality:quality]] β€” audio output (sound) πŸ”Š
  • /span β€” span the screen over multiple monitors πŸ–₯️πŸ–₯️
  • /spn-class:service-class β€” SPN authentication service class 🎫
  • /ssh-agent, /ssh-agent β€” SSH Agent forwarding channel πŸ”‘
  • /sspi-module:SSPI module path β€” SSPI shared library module file path πŸ“š
  • /winscard-module:WinSCard module path β€” WinSCard shared library module file path πŸƒ
  • /disable-output β€” deactivates all graphics decoding in the client session. lowkey perfect for load tests with a ton of simultaneous connections πŸ‘‘ (it's giving "I don't need to see it, I just need it to run")
  • /t:title, /title:title β€” window title πŸͺ§
  • -themes β€” themes (default:on) 🎨
  • /timeout:time in ms, /timeout:time in ms β€” advanced setting for high latency links: adjusts the connection timeout. use this if you keep getting timeout failures on your connection (default:9000) ⏱️
  • /timezone:windows timezone β€” use the supplied windows timezone for the connection (requires server support), peep /list:timezones for the allowed values 🌍
  • /tls:[ciphers|seclevel|secrets-file|enforce] β€” TLS configuration options πŸ’…:
    • ciphers:[netmon|ma|<cipher names>]
    • seclevel:<level> β€” default: 1, range: [0-5]. overrides the default TLS security level, might be needed for older target servers. details at https://docs.openssl.org/3.0/man3/SSL_CTX_set_security_level/
    • secrets-file:<filename>
    • enforce[:[ssl3|1.0|1.1|1.2|1.3]] β€” forces the use of an SSL/TLS version for a connection. some servers have a buggy TLS version negotiation and might straight up fail without this. defaults to TLS 1.2 if no argument is supplied. use 1.0 for windows 7 πŸͺŸ
  • -toggle-fullscreen β€” Alt+Ctrl+Enter to toggle fullscreen (default:on) πŸ–ΌοΈ
  • /tune:setting:value,setting:value β€” [experimental] directly manipulates freerdp settings. use with extreme caution! 🚨 (default:)
  • /u:[[domain]user|user[@domain]] β€” username πŸ§‘β€πŸ’»
  • +unmap-buttons β€” lets the server see the real physical pointer button (default:off) πŸ–±οΈ
  • /usb:[dbg,][id:vid:pid#...,][addr:bus:addr#...,][auto,][filter:class#...|none] β€” redirect a USB device πŸ”Œ
  • /v:server[:port] β€” server hostname|URL|IPv4|IPv6, or vsock://<number>, or /some/path/to/pipe, or |:1234 to pass a TCP socket to use 🌐
  • /vc:channel[,options] β€” static virtual channel πŸ“‘
  • /version β€” print version 🏷️
  • /video β€” video optimized remoting channel πŸŽ₯
  • /prevent-session-lock[:time in sec] β€” prevents session locking by injecting fake mouse motion events to the server whenever the connection is idle (default interval: 180 seconds) 🐭
  • /vmconnect[:vmid] β€” Hyper-V console (use port 2179, disable negotiation) πŸ–₯️
  • /w:width β€” width (default:1024) πŸ“
  • -wallpaper β€” wallpaper (default:on) 🌸
  • +window-drag β€” full window drag (default:off) πŸͺŸ
  • /window-position:xposxypos β€” window position πŸ“
  • /wm-class:class-name β€” sets the WM_CLASS hint for the window instance 🏷️
  • /workarea β€” use available work area 🧩

✨ KEYBOARD SHORTCUTS ✨

  • Right CTRL β€” releases the keyboard and mouse grab 🎯. if the keyboard is grabbed, your local system shortcuts stop working and get sent to the remote system instead. if the mouse is grabbed (optional), local gesture detection doesn't work and the mouse might not be able to leave the RDP window. mouse events are not altered, fr fr.
  • CTRL+ALT+Return β€” toggles the fullscreen state of the application πŸ–ΌοΈ
  • CTRL+ALT+m β€” minimizes the application πŸ“‰
  • CTRL+ALT+c β€” toggles remote control in a remote assistance session πŸŽ›οΈ
  • CTRL+ALT+d β€” disconnects the session and terminates the application πŸšͺ
  • Action Script β€” executes a predefined script on key press 🎬. if the script doesn't exist, it's just ignored, no biggie. scripts can live at the default location $XDG_CONFIG_HOME/freerdp/action.sh, or you can pass them as a command line argument /action:script:<path>. the script gets the current key combination as its argument. the output of the script is parsed for key-local, which tells you the script used the key combination β€” otherwise the combination gets forwarded to the remote πŸ“¨.

🌸 ENVIRONMENT VARIABLES 🌸

  • wlog environment variables β€” xfreerdp uses wLog as its log facility, so you can hit up the corresponding man page (wlog(7)) for more info πŸ“–. arguments passed via /log-level or /log-filters take precedence over the environment variables, periodt.
  • freerdp environment variables β€” various configurations of the core library can be configured with environment variables too. consult freerdp(7) for more info 🧠.
  • FREERDP_ASKPASS β€” set a program to ask for passwords, similar to SSH_ASKPASS πŸ”‘.

πŸ’– GLOBAL CONFIGURATION (client common) πŸ’–

Format and Location:

  • the configuration files are stored in global system configuration πŸ—‚οΈ.
  • the common certificate settings location is /etc/FreeRDP/certificates.json πŸ“œ
  • file format is JSON ✨

Supported options:

  • deny β€” JSON boolean
    • deny the certificate if the check against the system SSL store was not successful 🚫
  • ignore β€” JSON boolean
    • ignore certificate failures, just ignore the certificate πŸ™ˆ
  • deny-userconfig β€” JSON boolean
    • if the checks in the global configuration do not accept the certificate, do not ask the user 🀐
  • certificate-db β€” JSON array
    • an array of JSON objects with:
      • type β€” JSON string
        • a string identifying the hash algorithm used, e.g. sha256
      • hash β€” JSON string
        • a string of hex integer values representing the certificate hash, e.g. 0123456789abcdef

πŸ¦‹ GLOBAL CONFIGURATION (X11 client) πŸ¦‹

  • the X11 client configuration location is /etc/FreeRDP/xfreerdp.json πŸ—‚οΈ
  • file format is JSON ✨

Supported options:

  • isActionScriptAllowed β€” JSON boolean
    • allow or block action scripts 🎬. the default (when the option is not set) is to allow action scripts 🫢

✨ EXAMPLES ✨

Okay bestie, this is the part where it all clicks, I promise πŸ’– Strap in, we're doing real commands now.

First up, a little action script for key events β€” like, the whole reason you'd want key-local and xevent in your life at all:

#!/bin/bash

# we got a key combination
if [ "$1" = "key" ];
then
     # we only got one argument 'key'
     # list all supported combinations with echo
     if [ $# -eq 1 ];
     then
          echo "ctrl+alt+f1"
          echo "ctrl+alt+f2"
     else
          # We want the action for a single combination
          # use 'key-local' to not forward to RDP session
          if [ "$2" = "ctrl+alt+f1" ];
          then
               echo "key-local"
          fi
          if [ "$2" = "ctrl+alt+f2" ];
          then
                    echo "/usr/local/bin/somescript.sh"
          fi
     fi
fi
if [ "$1" = "xevent" ];
     then
          if [ $# -eq 1 ];
          then
               echo "FocusIn"
               echo "SelectionClear"
          else
               if [ "$2" = "SelectionNotify" ];
               then
                    echo "/usr/local/bin/someprogram"
               fi
          fi
     fi

So that's an example action script for key events β€” it lists ctrl+alt+f1 as something the local window manager should handle, and ctrl+alt+f2 as something that runs a script. Iconic behaviour, honestly πŸŽ€

And the plot twist you need to know: the return value of the program is what decides if the key gets handled locally or remotely β€” 0 for local, > 0 for remote, < 0 for errors. Periodt. No cap, that's the whole decision tree.


Now the actual xfreerdp invocations, one by one πŸ¦‹

xfreerdp connection.rdp /p:Pwd123! /f

Connect in fullscreen mode using a stored configuration connection.rdp and the password Pwd123!. Chef's kiss β€” config file does the heavy lifting, you just vibe.

xfreerdp /u:USER /size:50%h /v:rdp.contoso.com

Connect to host rdp.contoso.com with user USER and a size of 50 percent of the height. And listen β€” if you set width (w) instead of height (h), like /size:50%w, then 50 percent of the width gets used. Pick your percentage poison πŸ’…

xfreerdp /u:CONTOSO\\JohnDoe /p:Pwd123! /v:rdp.contoso.com

Connect to host rdp.contoso.com with user CONTOSO\\JohnDoe and password Pwd123!. Domain-flavoured username, love that for you 🌸

xfreerdp /u:JohnDoe /p:Pwd123! /w:1366 /h:768 /v:192.168.1.100:4489

Connect to host 192.168.1.100 on port 4489 with user JohnDoe, password Pwd123!. The screen width is set to 1366 and the height to 768. Very specific, very demure πŸ’–

xfreerdp /u:JohnDoe /p:Pwd123! /vmconnect:C824F53E-95D2-46C6-9A18-23A5BB403532 /v:192.168.1.100

Establish a connection to host 192.168.1.100 with user JohnDoe, password Pwd123! and connect to Hyper-V console (use port 2179, disable negotiation) with VMID C824F53E-95D2-46C6-9A18-23A5BB403532. That's a whole UUID, bestie, we're in the Hyper-V-iverse now 😭

+clipboard

Activate clipboard redirection. Copy-paste across worlds, we love to see it 🫢

/drive:home,/home/user

Activate drive redirection of /home/user as home drive.

/smartcard:<device>

Activate smartcard redirection for device device.

/printer:<device>,<driver>

Activate printer redirection for printer device using driver driver.

/serial:<device>

Activate serial port redirection for port device.

/parallel:<device>

Activate parallel port redirection for port device.

/sound:sys:alsa

Activate audio output redirection using device sys:alsa.

/microphone:sys:alsa

Activate audio input redirection using device sys:alsa.

/multimedia:sys:alsa

Activate multimedia redirection using device sys:alsa.

/usb:id,dev:054c:0268

Activate USB device redirection for the device identified by 054c:0268.

/kbd:remap:29=58,remap:58=29

Swap left Control (29) and Caps Lock (58). Absolute chaos, but make it a keymap πŸ”₯


πŸ‘‘ AUTHOR πŸ‘‘

The FreeRDP Team wrote all of this. Legends, every one of them, fr fr πŸ’œ


And that's a wrap on xfreerdp(1)! 🌈 This little masterpiece comes from the freerdp source, version-dated 2026-10-14, and it's living its best life under the name xfreerdp(1). Go forth and remote-desktop responsibly, bestie β€” you've got this πŸ’…βœ¨πŸŽ€

πŸ“¦ where this page comes from