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 explicitnoneas 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,0for 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 certificatestofu... Accept certificate unconditionally on first connect and deny on subsequent connections if the certificate does not matchfingerprints... 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 isCLIPBOARD.PRIMARYis the X-style middle-click selection.direction-to:[all|local|remote|off]control enabled clipboard directionfiles-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 serverfn-key: Function key valueremap: RDP scancode to another one. Use/list:kbd-scancodeto get the mapping. Example: To switch 'a' and 's' on a US keyboard:/kbd:remap:0x1e=0x1f,remap:0x1f=0x1epipe: 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, seewLog(7)for details/log-level:[OFF|FATAL|ERROR|WARN|INFO|DEBUG|TRACE]β Set the default log level, seewLog(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 servergrab: 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/pwithout 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:socks5has to be said out loud explicitly, becausehttpis 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 between100and500(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:nlaturns 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:widthxheightorpercent%[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:timezonesfor 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 TLS1.2if no argument is supplied. use1.0for 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, orvsock://<number>, or/some/path/to/pipe, or|:1234to 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:180seconds) π/vmconnect[:vmid]β Hyper-V console (use port2179, 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 theWM_CLASShint 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 forkey-local, which tells you the script used the key combination β otherwise the combination gets forwarded to the remote π¨.
πΈ ENVIRONMENT VARIABLES πΈ
- wlog environment variables β
xfreerdpuses wLog as its log facility, so you can hit up the corresponding man page (wlog(7)) for more info π. arguments passed via/log-levelor/log-filterstake 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 toSSH_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
- a string identifying the hash algorithm used, e.g.
hashβ JSON string- a string of hex integer values representing the certificate hash, e.g.
0123456789abcdef
- a string of hex integer values representing the certificate hash, e.g.
- an array of JSON objects with:
π¦ 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 π₯
π LINKS π
- http://www.freerdp.com/ β the mothership, go say hi π
π 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
- fedora 43: freerdp 2:3.32.2-1.fc43 Β· Apache-2.0 AND HPND AND LGPL-2.1-or-later AND LicenseRef-Fedora-Public-Domain AND OFL-1.1
- fedora 44: freerdp 2:3.32.2-1.fc44 Β· Apache-2.0 AND HPND AND LGPL-2.1-or-later AND LicenseRef-Fedora-Public-Domain AND OFL-1.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms