XPRA(1)
๐ XPRA(1) โ the general commands manual, but make it make sense ๐
okay bestie, listen โ this is the manual page for xpra, aka your new favorite thing. It lives in the General Commands Manual section of the manual, and it is long, so buckle up. ๐
โจ NAME โจ
xpra โ viewer for remote, persistent X applications ๐ซถ
๐ SYNOPSIS ๐
xpra seamless [CONNECTIONSTRING] | xpra desktop [CONNECTIONSTRING]
[OPTIONS..]
xpra attach [CONNECTIONSTRING] [OPTIONS..]
xpra shadow [CONNECTIONSTRING] [OPTIONS..]
xpra proxy [:DISPLAY] [OPTIONS..]
xpra stop | xpra exit | xpra detach | xpra screenshot filename | xpra
version | xpra info [CONNECTIONSTRING] | xpra id [CONNECTIONSTRING]
| xpra top [CONNECTIONSTRING] [OPTIONS..]
xpra control [CONNECTIONSTRING] command [arguments..] [--ssh=CMD]
[--remote-xpra=CMD] [--socket-dir=DIR] [--socket-dirs=DIRS]
xpra displays [:DISPLAY]
xpra clean-displays [:DISPLAY]
xpra list [--socket-dir=DIR]
xpra list-sessions [--socket-dir=DIR]
xpra list-windows [--socket-dir=DIR]
xpra shell [CONNECTIONSTRING]
xpra showconfig [OPTIONS..]
xpra showsetting [SETTING1..]
xpra list-mdns
xpra docs
xpra html5
xpra upgrade [:DISPLAY] [...any options accepted by xpra seamless...]
xpra upgrade-desktop [:DISPLAY] [...any options accepted by xpra
desktop...]
xpra recover [:DISPLAY] [...any options accepted by xpra seamless...]
๐ฆ DESCRIPTION ๐ฆ
So here's the whole vibe: Xpra is a tool that lets you run X programs โ usually on a remote host โ and then beam their display straight to your local machine. And then?? You can disconnect from those programs and reconnect from the same machine or a completely different one, all without losing any state. No cap. ๐
The way it's different from standard X forwarding: it lets you disconnect and reconnect without disrupting the forwarded application. Iconic behavior.
And the way it's different from VNC and similar remote display techs: xpra can run rootless โ meaning apps forwarded by xpra show up on your desktop as normal windows managed by your window manager, instead of being all "trapped in a box together". ๐ซถ
Xpra also uses a custom protocol that is self-tuning and relatively latency-insensitive, which means it's actually usable over network connections that are too slow or unreliable for standard X forwarding. She's resilient, she's flexible, she ate. ๐ฅ
Xpra can also be used to shadow an existing X11 display, or in desktop mode where it behaves more like VNC.
By default the Xpra server announces available sessions (username and display number) via mDNS to the local network. Use mdns=no to disable it. ๐ก
๐ธ CONNECTION STRINGS ๐ธ
Xpra supports many types of connection strings (some may require extra packages to be installed):
๐ :DISPLAY[,OPTIONS]
Local displays: this is the simplest form and is only valid for the current local displays of the current user.
๐ tcp://[[USERNAME][:PASSWORD]@]HOST:PORT[/DISPLAY][?OPTIONS]
TCP mode uses port numbers and not display numbers. If multiple displays are available through a single TCP port (ie: using a proxy server), then one can also specify the display number after the port number.
๐ ssl://[[USERNAME][:PASSWORD]@]HOST:PORT[/DISPLAY][?OPTIONS]
SSL adds a secure socket layer on top of the TCP mode. ๐
๐ vsock://[[USERNAME][:PASSWORD]@]HOST:PORT[/?OPTIONS]
Almost identical to the TCP mode, but using AF_VSOCK for transport.
๐ ws://[[USERNAME][:PASSWORD]@]HOST:PORT/[DISPLAY][?OPTIONS]
Connect using websocket protocol.
๐ wss://[[USERNAME][:PASSWORD]@]HOST:PORT/[DISPLAY][?OPTIONS]
Connect using secure websocket protocol. (websocket with SSL) ๐
๐ ssh://[[USERNAME][:PASSWORD]@]HOST[:SSH_PORT]/[DISPLAY][?OPTIONS]
Connect using secure shell. (SSH)
Further SSH options can be specified using the --ssh command line option. The OPTIONS can be used to specify an ssh proxy: ?proxy=ssh://[USERNAME[:PASSWORD]@]HOST[:SSH_PORT] โ xpra will then establish an SSH connection to the specified "proxy" host, and from that host xpra will set up an SSH connection to the xpra server. (proxy chain, we love a relay race ๐โ๏ธ)
For backwards compatibility, SSH mode also supports the syntax: ssh:[USERNAME[:PASSWORD]@]HOST:DISPLAY but this form does not support specifying the SSH port number. Older versions also used the form protocol:host:port, but users are encouraged to move to a more standard URI format using :// as separator.
The password need only be specified when the server authentication module requires it.
๐ vnc://[[USERNAME][:PASSWORD]@]HOST[:VNC_PORT]/
Connect using the RFB protocol. (aka VNC) This mode only works against VNC servers or an xpra server in desktop or shadow mode.
โญ EXAMPLES โญ
xpra start :7โ Start an xpra server using display number:7.
Note: usingDISPLAY=:7 xtermto start applications against a specific display is not recommended. Always prefer using xpra's--start=command line option instead. See this next example: ๐
xpra start --start=firefoxโ Start an xpra server, choosing a display automatically and start firefox on that virtual display. No window will appear until you attach withxpra attach. The start child commands will inherit an environment tailored for running under xpra. ๐ฆxpra start ssh://bigbox/7 --start=xtermโ Start an xpra server on bigbox with an xterm in it, and connect to it.xpra desktop --start=xfce4-sessionโ Start an xfce session in a nested X11 server on an automatically assigned display number.xpra displaysโ Lists all the displays currently running on the system. This includes interactive desktop sessions as well as any virtual display (xvfb) whether or not they are being used by an xpra server. The displays inDEADstate can be recovered usingxpra recover. ๐โก๏ธโจxpra clean-displaysโ Terminate any displays left inDEADstate.xpra clean-socketsโ Delete any server sockets belonging to dead servers.xpra listโ Show a list of xpra servers you have running on the current host. This will also runclean-sockets.xpra list-sessionsโ Show a list of xpra servers, with extra information about each session if it can be collected.xpra list-windowsโ Show a list of xpra servers you have running on the current host, including the session name and a list of windows. (only if the session can be queried usingxpra info)xpra list-mdnsโ Show a list of xpra servers found via mDNS. (local network) ๐กxpra docsโ Open the documentation in a web browser. ๐xpra html5โ Open the html5 client in a web browser.xpra shellโ Start an interactive debug shell. ๐xpra showconfigโ Shows the configuration that would be used with other sub-commands, taking into account the command line arguments.xpra showsetting [SETTING1..]โ Shows the value of a specific configuration setting and which configuration directory set this value.xpra attach :7โ Attach to the xpra server that is using local display number:7. Any apps running on that server will appear on your screen. ๐ฅ๏ธxpra attach ssh://foo@frodo/7โ Use ssh to attach to the xpra server that is running on machinefrodoas userfooand using display:7. Any apps running on that server will appear on your local screen.xpra start :7 --start=screenโ Start an xpra server and ascreen(1)session. If any of the applications inside screen attempt to use X, they will be directed to the xpra server.
๐ DISPLAYS ๐
Understanding the basic idea of displays is critical to using xpra successfully. Fr fr. Don't skip this part, bestie. ๐
The idea comes from standard X. If you have multiple X servers running on the same host, then there has to be some way to distinguish them. X does this by assigning each server a small, unique integer called (perhaps confusingly) its "display". In the common case of a desktop machine that has only one X server running, that server uses display :0 (or sometimes you'll see :0.0, which is effectively the same). When an application starts under X, it needs to know how to find the right X server to use; it does this by checking the environment variable $DISPLAY.
Xpra faces a similar problem โ there may be multiple xpra servers running on the same host, as well as multiple X servers. It solves this problem by re-using X's solution โ each xpra server has a display associated with it. This display functions as both an X display (for when xpra is talking to X applications) and as an identifier by which xpra clients (like xpra attach) can locate the xpra server. dual purpose, main character energy ๐
You may omit the display number when using xpra start: a display will be chosen for you automatically. The display number chosen will be shown in the log output, you should also be able to see it with xpra list. On Microsoft Windows and Mac OSX, the display number should be omitted.
Otherwise, when starting an xpra server, you may want to specify the name of the display to use. To do this, simply pick any number you like and stick a colon in front of it. For instance :7, :12, and :3117 are all valid display names. Just keep in mind that:
- Every X or xpra server that is running on a single machine must use a different display name. If you pick a number that is already in use then xpra will not work. ๐ญ
- The first few numbers (
0,1,2) are commonly used by real X servers. - Everyone who connects to a given machine using
ssh(1)with X forwarding enabled will also use a display number; ssh generally picks numbers near ten (10,11,12, ...).
When specifying an xpra server to a client program like xpra attach, xpra detach, xpra stop, xpra exit, xpra version, xpra info, xpra list or xpra screenshot then you can use a display of the form :DISPLAY to refer to a server on the local host, or one of the form ssh://[USER@]HOST/DISPLAY to refer to a server on a remote host; xpra will automatically connect to the remote host using ssh(1). Generally, if you have only one xpra session running on a machine (which you can verify by running xpra list on that machine), then you can omit the number entirely; xpra attach alone will attach to the lone xpra server on the current machine regardless of its number, xpra attach ssh://frodo will similarly attach to the lone xpra session on a remote machine.
Connecting using the display number assumes that the client and server use the same configuration for socket directories, or at least that the client can find at least one of the directories used by the unix domain sockets (see bind, socket-dir and socket-dirs).
If the xpra server was given the --bind-tcp=[HOST]:PORT (or --bind-ssl, --bind-ws, --bind-wss, --bind-vsock) option when started then you can also connect to it using a display of the form tcp://HOST:PORT[/DISPLAY], ssl://HOST:PORT[/DISPLAY], ws://HOST:PORT[/DISPLAY], wss://HOST:PORT[/DISPLAY] or vsock://HOST:PORT[/DISPLAY]. ๐
โจ SUBCOMMANDS โจ
okay bestie, these are the little spells you can cast with xpra. Each one is its own vibe. ๐
xpra start
This command starts a new xpra server, including any necessary setup. (When starting a remote server with the ssh://HOST/DISPLAY syntax, the new session will also be attached.)
xpra desktop
Starts a nested X11 server, all child commands will be started in the nested X11 server. ๐ฅ๏ธโจ
xpra attach
This command attaches to a running xpra server, and forwards any applications using that server to appear on your current screen. basically your apps just pop up where you are ๐
xpra detach
Detaches the given xpra display. bye bye for now ๐ฆ
xpra screenshot
Takes a screenshot and saves it to the filename specified. Note: screenshots can only be taken when a client is attached. ๐ธ
xpra version
Queries the server version and prints it out. Note: older servers may not support this feature. โญ
xpra connect-test
Tries to connect to a server to see if it is alive. This is normally even available prior to authentication. This command returns 0 if the server responded. ๐ฅ
xpra id
Very similar to connect-test, but this subcommand also prints the basic server information it received: pid, uuid, etc ๐
xpra info
Queries the server for full version, status and statistics. ๐
xpra top
Shows the server's key health attributes. vibe check for your server ๐ฉบ
xpra control
Modify the server at runtime by issuing commands. The list of commands can be obtained by specifying "help" as command. Some of those commands may support a "help" mode themselves. ๐๏ธ
xpra initenv
This internal command creates the run-xpra script used with ssh connections. ๐ ๏ธ
xpra stop
This command attaches to a running xpra server, and requests that it terminates immediately. This generally causes any applications using that server to terminate as well. ๐
xpra exit
This command attaches to a running xpra server, and requests that it terminates immediately. Unlike xpra stop, the Xvfb process and its X11 clients (if any) will be left running. ๐ช
xpra showconfig
This commands shows the configuration which would be used given the arguments provided. You can also specify as extra arguments the specific options that should be displayed, or use the special value all to display all the options including the ones which are normally not displayed because they are not relevant on the given system. ๐
xpra list
This command finds all xpra servers that have been started by the current user on the current machine, and lists them. ๐
xpra upgrade
This command starts a new xpra server, but instead of creating it from scratch, it attaches to another existing server, tells it to exit, and takes over managing the applications that it was managing before. As the name suggests, the main use case is to replace a server running against an older version of xpra with a newer version, without having to restart your session. Any currently-running xpra attach command will exit and need to be restarted. โฌ๏ธ
xpra upgrade-desktop
Same as upgrade but for servers started using desktop. It is possible to upgrade seamless server into a desktop server and vice versa. ๐ฅ๏ธโฌ๏ธ
xpra recover
Similar to upgrade and upgrade-desktop: but without needing to specify if the server to recover is a seamless server or a desktop server. Unlike the upgrade subcommands, recover can also detect which displays need recovering. That is, displays which were previously used by an xpra server but this server has gone missing. ๐ฉน
xpra shadow
This command shadows an existing display and is supported on X11, MacOS and MS Windows platforms. (this is not supported on Wayland yet) ๐ญ
If there is only one X11 display active and its number is below 10, it can be auto-detected and the display may be omitted.
Note that this mode of operation uses screenscraping which is not very efficient. Video encoders partially mitigate this drawback.
By default, shadow mode will expose all the monitors connected as individual windows. But it is also possible to only shadow a specific region or monitor, or to group all monitors as a single window by specifying display options. Here are some examples:
To expose all monitors connected to display :1 as a single window, use the multi-window option:
xpra shadow :1,multi-window=no
To shadow a specific output using its name (ie: DP-1):
xpra shadow :1,DP-1
or more explicitly:
xpra shadow :1,plug=DP-1
To expose a rectangular area of size 1920x1080 as a single window, use:
xpra shadow :1,1920x1080
You may also want to specify the position of this rectangle (ie: 1280x0):
xpra shadow :1,1920x1080@1280x0
or using the more explicit syntax:
xpra shadow :1,geometry=1920x1080@1280x0
Multiple areas can be specified using / as separator, each one will be exposed as a separate window:
xpra shadow :1,1920x1080@1280x0/1280x600@0x400
xpra proxy
This command allows a single server to proxy connections for multiple others, potentially serving as a load balancing or authentication entry point for many sessions. The proxy server will spawn a new process for each proxy connection, this proxy process will create an unauthenticated new unix domain socket which can be used with the subcommands id, info, version and stop. ๐
Important Note
Some platforms and package managers may choose to only build the client and not the server. In this case, only the attach subcommand will be available. so if you're missing stuff, that's why ๐
๐ธ OPTIONS ๐ธ
General options
--versionโ Displays xpra's version number. ๐ท๏ธ-h,--helpโ Displays a summary of command line usage. ๐--minimalโ Disables all non-essential features. ๐ง-d FILTER1,FILTER2,...,--debug=FILTER1,FILTER2,...โ Enable debug logging. The special valueallenables all debugging. To get the full list of logging categories, runxpra -d help. To target loggers that use more than one logging category (as some categories can be quite broad), join them with a'+'. For example, to enable logging forserverandkeyboard, use--debug server+keyboard. You can also exclude a category with the'-'prefix. For example, to enable shadow debugging but not clipboard, use:--debug shadow,-clipboard. ๐--commands=yes|noโ Enable or disable the ability to run commands on the server. Generally, clients expect to be able to request new commands to be executed by the server, but this can be turned off to securely lock down the server. ๐--shell=yes|noโ Enable or disable the ability to connect to an xpra socket with theshellsubcommand. This is useful for debugging and is not enabled by default. When disabled, it can still be enable on a per-socket basis using bind options. ๐--control=yes|noโ Enable or disable the control channel of xpra sockets. This channel is accessed using thecontrolsubcommand to interact with an xpra process. ๐ฎ--mmap=yes|no|ABSOLUTEFILENAME|DIRECTORYโ Enable or disable memory mapped pixel data transfer. By default it is normally enabled automatically if the server and the client reside on the same filesystem namespace. On MS Windows, clients do not enable it automatically: the server is very rarely running on the same host, and the memory is reserved before we can find out - use--mmap=yesto enable it explicitly. This method of data transfer offers much lower overheads and reduces both CPU consumption and local network traffic. When attaching, you can also specify an absolute path where the mmap file will be created. When used on the server, one can specify the exact filename that the client will create, or just the directory where the file will be created so that multiple clients may connect and use mmap concurrently. ๐บ๏ธ--mmap-group=GROUPโ Sets the mmap file's gid to the group specified, and sets the permissions to660. This is necessary to share the mmap file across user accounts. You can also use the specialGROUPvalues:noโ Disable the functionality, the mmap file will use the default file permissions and default group ownership.SOCKETโ The group used will be the same one as found on the unix domain socket file the client connects to. Obviously, this can only work when connecting to unix domain sockets.autoโ Will use the'xpra'group if the user is a member, otherwise it will fallback to the same behaviour asSOCKET.
--windows=yes|noโ Enable or disable the forwarding of windows. This is usually the primary use for xpra and should be enabled. ๐ช--min-size=WIDTHxHEIGHTโ Sets the minimum size for all decorated windows. ๐--max-size=WIDTHxHEIGHTโ Sets the maximum size for all windows. ๐--readonly=yes|noโ Read only mode ignores all keyboard and mouse activity. ๐--clipboard=yes|no|clipboard-typeโ Enable or disable clipboard synchronization. If disabled on the server, no clients will be able to use clipboard synchronization at all. If turned off on the client, only this particular connection will ignore clipboard data from the server. This can also be used to specify a different clipboard implementation. The clipboard types available will vary from platform to platform and also depend on build time environment and options so this is best left onauto. Other clipboard types available may include:translatedโ Clipboard which can translate from one type of selection to anotherGDKโ The most complete clipboard implementation, includes full X11 supportdefaultโ Fallback clipboard, with limited X11 supportOSXโ OSX specific clipboard
--clipboard-direction=to-server|to-client|both|disabledโ Choose the direction of the clipboard synchronization. ๐--local-clipboard=SELECTIONโ Name of the local clipboard selection to be synchronized when using thetranslatedclipboard. ๐--remote-clipboard=SELECTIONโ Name of the remote clipboard selection to be synchronized when using thetranslatedclipboard. ๐--audio=yes|noโ Enable or disable all audio support (both speaker and microphone forwarding). ๐--pulseaudio=yes|noโ Enable or disable the starting of a pulseaudio server with the session. ๐ง--pulseaudio-command=SERVER-START-COMMANDโ Specifies the pulseaudio command to use to start the pulseaudio server, unless disabled withpulseaudio=no. ๐ต--pulseaudio-configure-commands=COMMANDโ the commands used to configure the pulseaudio server after it's already been started. You can specify this more than once, so go off bestie ๐--video=yes|noโ turn all video encoding support on or off. That's it, that's the whole vibe.--video-decoders=DECODERSโ says which video decoders get enabled. Use the special valuehelpto get a list of options, iykyk.--gstreamer=yes|noโ enable GStreamer audio and video support โจ--session-name=VALUEโ sets the name of this session. This value may be used in notifications, utilities, tray menu, etc. Setting this value on the server provides a default value which may be overridden on the client. cute, right?--encoding=ENCODINGโ sets the preferred encoding to use. To see the list of encodings available, use--encoding=help. This can be used to select grayscale or 8-bit modes likepng/P. On local connections or with extremelly fast network links, plainrgbis also a viable option. For everything else, the default valueautowill select the best encoding automatically and you should use themin-speedandmin-qualityoptions instead for tuning.--encodings=ENCODINGโ this specifies the image encodings enabled. This is the most misused command line option and should be left alone. The server engine needs to have multiple encodings available to work effectively. like, hands off it, bestie ๐--video-scaling=on|off|SCALINGโ how much automatic video downscaling should be used, from1(rarely) to100(aggressively),0to disable. Video scaling is normally used with video regions or very large windows (especially full screen windows) to try to maintain a decent framerate. Video downscaling negatively affects visual quality and will cause automatic refreshes (if enabled), it is most useful on video content where it saves a considerable amount of bandwidth.--socket-dir=DIRโ location where to write and look for the Xpra socket files. The default location varies from platform to platform (~/.xpraand$XDG_RUNTIME_DIR/xpraon most Posix systems). If unspecified, the first value fromsocket-dirswill be used. It may also be specified using theXPRA_SOCKET_DIRenvironment variable.
When using the socket-dir option, it is generally necessary to specify socket-dir or socket-dirs on all following commands, for xpra to work with the open sessions.
By specifying a shared directory this can be coupled with the mmap-group and socket-permissions option to connect Xpra sessions across user accounts with shared memory acceleration. ๐
--socket-dirs=DIRโ specifies the directories where to look for existing sockets if a specific one was not set usingsocket-dir. You may specify each directory using a new--socket-dirscommand line argument, or joined together by the path separator (:on Posix). The paths will be expanded. (ie:--socket-dirs=~/.xpra:/tmp)--sessions-dir=DIRโ directory to place and look for the session files in. These files describe each running xpra session.--system-proxy-socket=PATHโ the socket path to use to contact the system-wide proxy server.--file-transfer=on|off|askโ enable file transfers ๐ซถ--file-size-limit=SIZEโ maximum size of file transfers (ie:100M,1G).--open-files=on|off|askโ this option may be used to allow the remote end to automatically open files after they have been uploaded. This may be a security risk if you are using xpra to constrain what the clients can execute on the server. ๐จ--open-url=yes|no|askโ allow the remote end to ask for URLs to be opened on the local side. This may be a security risk.--forward-xdg-open=on|off|autoโ intercept execution ofxdg-openand forward the request to the client.--open-command=COMMANDโ the command to use for opening files and URLs.--printing=yes|no|askโ support printer forwarding from the server to the client.--lpadmin=COMMANDโ specify thelpadmincommand to use when configuring forwarded printers.--lpinfo=COMMANDโ specify thelpinfocommand to use when querying available printer drivers.--bandwidth-limit=BITSPERSECONDโ restrict bandwidth usage to below the limit given. The client's value cannot raise the limit of the server. The value may be specified using standard units, ie:1Mbpsor500K. Inautomode, the client will set the bandwidth limit value to 80% of the maximum speed of the network interface it is using to connect to the server.--bandwidth-detection=yes|noโ automatically detect runtime bandwidth limits and adjust the encoding parameters accordingly.--refresh-rate=VREFRESHโ the vertical refresh rate to use, which is the target number of frames per second. The value may be specified in absolute form (ie:60), as a percentage of the display's refresh rate (ie:50%), or asautoto follow the display.--reconnect=yes|noโ automatically reconnect to the server if the connection is lost. the way that this just works ๐ญ--pings=SECONDSโ how often to exchange ping and echo packets between client and server (in seconds, use zero to disable). The resulting latency statistics can be seen usingxpra info.--compressors=LISTโ the packet compressors to enable, as a comma separated list (ie:lz4,brotli,none).--packet-encoders=LISTโ the packet encoders to enable, as a comma separated list (ie:rencodeplus,bencode).--splash=yes|no|autoโ show a splash screen during client or server startup. With the default value ofauto, the splash screen is only shown if there is a GUI available - ie: no attempt will be made to show the splash screen when xpra is launched from an SSH session. ๐
โจ Options for seamless, desktop, upgrade, proxy and shadow โจ
--daemon=yes|noโ by default, the xpra server puts itself into the background, i.e. 'daemonizes', and redirects its output to a log file. This can be used to prevent that behavior (useful mostly for debugging).--resize-display=yes|no|WIDTHxHEIGHTโ resize the virtual display to match the resolution of the client currently connected. This only applies to thestartanddesktopsubcommands. If a resolution is given, this will be the initial resolution of the display and the display will be resizable. A small set of pre-defined aliases can also be used:QVGA,VGA,SVGA,XGA,1080p,FHD,4K. โจ--chdir=DIRโ change to this directory after daemonizing.--uid=UIDand--gid=GIDโ when launching the server as root, these options can be used to drop privileges to the given UID / GID.--pidfile=FILENAMEโ writes the server process ID to this file on startup. If the file has not been replaced, it will be deleted when the server exits.--log-dir=DIRโ the directory where server log files are placed when daemonizing.--log-file=FILENAMEโ when daemonizing, this is where the log messages will go. If a relative filename is specified then it is relative to--log-dir. The value of$DISPLAYwill be substituted with the actual display used.--challenge-handlers=MODULE:optionsโ configures which challenge handlers are used by the client and in which order. This option may be repeated to specify multiple handlers, which can be useful if the server sends more than one authentication challenge. The default value is:allwhich corresponds to:uri,file,env,kerberos,gss,u2f,prompt.uriโ use the password specified on the connection string, if any.fileโ the filename used to store the password can be specified using thefilenameoption. If this option is not specified, it will fallback to using the password filename specified with thepassword-fileswitch.envโ use the password specified using the environment variable specified using thenameoption, which defaults toXPRA_PASSWORDif unspecified.kerberosโ requests a kerberos token for the service specified.gssโ requests a gss token for the service specified.u2fโ requests a token from a U2F device.promptโ prompt the user for the value. Terminal clients prompt using text input, GUI clients use a dialog.
--min-port=PORTโ the minimum port number allowed when creating TCP sockets. You can use a lower value to allow unprivileged users to bind to privileged ports when starting sessions via the system wide proxy server. The default value is1024which is the standard value for privileged ports.--mdns=yes|noโ enable or disable the publication of new sessions via mDNS.--dbus=yes|no|keepโ enable or disable all dbus related functionality includingdbus-launch,dbus-controland any feature that might use dbus. Usekeepto preserve existingDBUS_*environment variables.--dbus-launch=COMMAND|noโ start the session within adbus-launchcontext, you can specify the dbus launch command to use, or turn it off completely. Some features may not be available without a dbus context.--dbus-control=yes|noโ start a dbus server which can be used to interact with the server process.
๐ Options for seamless, desktop, upgrade and listen: ๐
In previous versions, the authentication for each connection type was configured using a separate command line option which would apply to all connections of the same type. ie: tcp-auth for bind-tcp. Although this is still supported as a fallback, the recommended way is to specify authentication options using bind properties. ie: bind-tcp=0.0.0.0:14500,auth=file,filename=password.txt. The properties can also define extra socket configuration options.
--bind=BIND_LOCATION[,PROPERTIES]โ create a local Unix domain socket (on Unix) or named-pipe (on MS Windows) for eachbindoption specified.
This option can be specified multiple times to specify multiple socket locations. These sockets support local connections with the :7-style display address, and remote connections with the ssh://frodo/7-style display address. ๐
Local sockets may also process HTTP / Websocket connections if the html switch is enabled. ๐
The location can take the form:
noneโ do not create a socket (we simply vibe elsewhere ๐)autoโ backwards compatible default which uses the current socket-dirDIRECTORY/โ create a socket in the directory specified, if the directory does not exist then it will be created - you should include the trailing slash to prevent the confusion with thePATHform:PATHโ create the socket using the path specified
--bind-tcp=[HOST]:PORT[,PROPERTIES]โ Create a TCP socket for each--bind-tcpoption specified. If the host portion is omitted, then127.0.0.1(localhost) will be used. If you wish to accept connections on all interfaces, pass0.0.0.0for the host portion.
Using this switch without setting the auth option is not recommended, and is a major security risk (especially when passing 0.0.0.0)! Anyone at all may connect to this port and access your session. Like, anyone. Bestie, please set auth. ๐จ
TCP sockets may also process HTTP / Websocket connections if the html switch is enabled. TCP sockets may also be upgraded to SSL sockets if the ssl switch is enabled. โจ
--bind-ws=[HOST]:PORT[,PROPERTIES]โ Create an HTTP / Websocket listener. See bind-tcp for host restrictions, you should use the auth-ws to secure access. ๐--bind-wss=[HOST]:PORT[,PROPERTIES]โ Create an HTTPS / Secure Websocket listener. See bind-tcp for host restrictions, you should use the auth-wss to secure access. ๐--bind-ssl=[HOST]:PORT[,PROPERTIES]โ Just like--bind-tcpbut for SSL sockets. See ssl-auth and the other SSL options. ๐ธ--bind-rfb=[HOST]:PORT[,PROPERTIES]โ Listens for RFB connections on the given port. These sockets are only supported with the desktop and shadow modes. ๐--bind-vsock=CID:PORT[,PROPERTIES]โ Create a VSOCK socket for each--bind-vsockoption specified. ๐ฆ--bind-ssh=[HOST]:PORT[,PROPERTIES]โ Listen for connections using the SSH transport. See bind-tcp for host restrictions, use the ssh-auth option to secure access. ๐--bind-rdp=[HOST]:PORT[,PROPERTIES]โ Listen for RDP connections. See bind-tcp for host restrictions, use the rdp-auth option to secure access. ๐ฅ๏ธ--bind-quic=[HOST]:PORT[,PROPERTIES]โ Listen for QUIC HTTP/3 or WebTransport connections. See bind-tcp for host restrictions, use the quic-auth option to secure access. โก--auth=MODULE[:OPTION=VALUE]โ Specifies the authentication module to use for all unix domain sockets created using the bind switch. Authentication modules can validate a username and password against a variety of backend modules:allowโ always allows authentication - this is dangerous and should only be used for testing ๐failโ always fails authentication, useful for testingenvโ matches against the environment variable specified by the name option (which defaults toXPRA_PASSWORD). ie:--auth=env,name=SOME_OTHER_ENV_VAR_NAME. ๐ฑpasswordโ matches against the password specified using the value option. ie:--auth=password,value=YOURPASSWORD. Note: this command line option may be exposed to other processes on the same system. ๐ฌfileโ checks the password against the password data found in the file specified using the filename option. ie:--auth=file,filename=./password.txt.
The contents of this file will be treated as binary data, there are no restrictions on character encodings or file size. Beware of trailing newline characters which will be included in the password data. โ ๏ธ (yes, that sneaky \n counts as part of the password, no cap)
multifileโ checks the username and password against the file specified using the filename option. The file must contain each user credentials on one line of the form:
username|password|uid|gid|displays|env_opts|session_opts
It is not possible to have usernames or password that contain the pipe character | which is used as delimiter, or newlines and carriage returns. This module is deprecated, sqlite should be used instead. ๐
sqlitemysqlsqlโ checks the username and password against the sqlite database file specified using the filename option (for the sqlite backend), or the database specified using the uri option (mysql and sql backends). The authentication will be processed using the following query (which is configurable using the password_query option):SELECT password FROM users WHERE username=(?)The sessions available for each user will be queried using: (this is configurable using the sessions_query option):SELECT uid, gid, displays, env_options, session_options FROM users WHERE username=(?)Multiple displays may be specified as a comma separated list. ๐๏ธhostsโ checks the host using the system's tcp-wrappers library. (Posix only, and not available on Mac OS) Seehosts.allowandhosts.denyfor details. ๐execโ Executes the command specified using the command attribute, the arguments to this command are: a description of the access request and the timeout value. (also configurable) If the command is not specified, the system will try to locate and use theauth_dialogutility which is shipped with xpra. The command should return0to allow access, any other value will deny access. ๐ซกpeercredโ checks the unix domain socket peer credentials usingSO_PEERCRED. This authentication module is only available on some Posix compliant operating systems. This module will verify that the operating system provides the uid and gid of the process that initiated the connection. Access can be restricted by supplying a colon separated list of valid uids and gids that are allowed to connect. Those id values may be specified using numerical values or using the usernames / group names. This module is different from the others in that it will not require the client to supply a username or password, as those are ignored. Environment variables and pseudo-environment variables may also be used as values, eg:--auth=peercred,uid=\$UID:fred,gid=xpra. ๐pamโ validates the username and password using the PAM system ๐ธwin32โ validates the username and password using Microsoft Windows authentication (only available on this platform) ๐ชsysโ chooses the appropriate system authentication module automatically (either pam or win32) ๐คkerberos-passwordโ validates the username and password using kerberos authentication. Warning: this module does not use kerberos tickets and the password will be sent in plain text to the server. This should only be used for testing. ๐จkerberos-ticketโ validates a kerberos ticket obtained by the client. ๐๏ธgssโ validates a GSS ticket obtained by the client. ๐ซu2fโ requests a U2F token from the client. ๐ldapโ validates the username and password against an LDAP server, using the python-ldap library. ๐ldap3โ validates the username and password against an LDAP server, using the python ldap3 library. ๐
--tcp-auth=MODULEโ Just like the auth switch, except this one only applies to TCP sockets (sockets defined using the bind-tcp switch). Deprecated, use per-socket authentication options. ๐--ws-auth=MODULEโ Just like the auth switch, except this one only applies to ws sockets: sockets defined using the bind-ws switch, or TCP sockets upgraded to websockets. (if the html option is enabled). Deprecated, use per-socket authentication options. ๐--wss-auth=MODULEโ Just like the auth switch, except this one only applies to wss sockets: sockets defined using the bind-wss switch, ws sockets upgraded to SSL (if the ssl option is enabled) or TCP sockets upgraded to SSL and then to wss. (if both the ssl and html options are enabled). Deprecated, use per-socket authentication options. ๐--ssl-auth=MODULEโ Just like the auth switch, except this one only applies to SSL sockets: sockets defined using the bind-ssl switch, or TCP sockets upgraded byssl=autoorssl=on. Deprecated, use per-socket authentication options. ๐--rfb-auth=MODULEโ Authentication module to use for the bind-rfb sockets. Deprecated, use per-socket authentication options. ๐--vsock-auth=MODULEโ Just like the auth switch, except this one only applies to VSOCK sockets (sockets defined using the bind-vsock switch). Deprecated, use per-socket authentication options. ๐--ssh-auth=MODULEโ Just like the auth switch, except this one only applies to SSH sockets (sockets defined using the bind-ssh switch, or TCP sockets upgraded via the ssh-upgrade option). Deprecated, use per-socket authentication options. ๐--rdp-auth=MODULEโ Just like the auth switch, except this one only applies to RDP sockets (sockets defined using the bind-rdp switch, or TCP sockets upgraded via the rdp-upgrade option). Deprecated, use per-socket authentication options. ๐--quic-auth=MODULEโ Just like the auth switch, except this one only applies to QUIC sockets (sockets defined using the bind-quic switch). Deprecated, use per-socket authentication options. ๐
โจ Options for seamless, desktop, upgrade โจ
--exec-wrapper=CMDโ A wrapper command which is prepended to all start commands. Typically, this is used for starting all sub-commands via VirtualGL. ๐ง--start=CMDโ After starting the server, runs the command CMD using the default shell. The command is run with its$DISPLAYset to point to the newly-started server. This option may be given multiple times to start multiple commands. ๐--start-child=CMDโ literally the same as--start, except the commands are taken into account by--exit-with-children. bestie behavior ๐--start-late=CMDโ like--start, but the command is only spawned once server initialization is complete. no rushing the server, periodt โจ--start-child-late=CMDโ like--start-child, but the command is only spawned once server initialization is complete. And yes, it is taken into account by--exit-with-children. late but still counted, iconic ๐--start-after-connect=CMDโ wait for the first client to connect before starting the command. it's giving patient main character energy ๐ฆ--start-child-after-connect=CMDโ wait for the first client to connect before starting the child command. Seestart-child. same vibe, child edition ๐ธ--start-on-connect=CMDโ execute this command every time a client connects. every single time, no cap โญ--start-child-on-connect=CMDโ execute this child command every time a client connects. Seestart-child. child command said "I'll be there" ๐--start-on-disconnect=CMDโ execute this command every time a client disconnects. bye bye, run the thing ๐--start-child-on-disconnect=CMDโ execute this child command every time a client disconnects. Seestart-child. disconnect? child command clocked in โจ--start-on-last-client-exit=CMDโ execute this command every time a client disconnects and there are no other clients left. last one out, lights off, command goes brrr ๐ฅ--start-child-on-last-client-exit=CMDโ execute this child command every time a client disconnects and there are no other clients left. Seestart-child. same energy, child command core ๐--terminate-children=yes|noโ on server stop, terminate all the child commands that have been started by the server. This does not affect server exit. Most child commands are tied to the display, so they are normally forced to shutdown anyway, but this gives them more time to cleanup properly and can be used to stop background commands that aren't tied to a display. cleanup era, we love to see it ๐ง--exit-with-children=yes|noโ this option may only be used if--start-childis also given. If it is given, then the xpra server will monitor the status of the children started by--start-child, and will automatically terminate itself when the last of them has exited. my kids left, I'm out, fr fr ๐--exit-with-windows=yes|noโ the server will terminate automatically when there are no more windows or system trays being forwarded. This option is only relevant for seamless servers. seamless only, bestie, don't forget ๐ฆ--exit-with-client=yes|noโ the server will terminate when the last client disconnects. last client said deuces ๐--env=KEY=VALUEโ extra environment variables which will only affect commands started using--startor--start-child. only the start commands get these vibes โญ--start-env=KEY=VALUEโ define environment variables used by commands started via--startand--start-child. May be specified multiple times. stack them like accessories ๐--source=FILEโ shell script to source into the server environment before the server starts. May be specified multiple times. pre-game ritual for your server ๐--source-start=FILEโ shell script to source into the environment used for spawning--startand--start-childcommands. May be specified multiple times. start commands get their own little source moment ๐ฅ--start-new-commands=yes|noโ allow clients to ask the server to execute new commands. (this can also be used via the control channel) trusting the clients, okayyy ๐--start-via-proxy=yes|no|autoโ if enabled, the seamless and desktop subcommands will be delegated to the system wide proxy server instance. Withautomode, this delegation will only occur if the system wide proxy server is found. proxy said "I got this" โจ--proxy-start-sessions=yes|noโ use the proxy server to start new sessions. delegate, don't stress ๐--systemd-run=yes|no|autoโ wrap server start commands with systemd-run. systemd-run said come through ๐ฆ--systemd-run-args=ARGSโ command line arguments passed to systemd-run. extra args, extra sparkle ๐ธ--use-display=yes|no|autoโ use an existing display rather than starting one with xvfb. You are responsible for starting the display yourself. This can also be used to rescue an existing display whose xpra server instance crashed or for running xpra against an accelerated X11 server. Withauto, xpra will use the existing display if it is found. you're the display parent now, bestie ๐--displayfd=FDโ the xpra server will write the display number back on this file descriptor as a newline-terminated string. This is most useful when the display number is not specified with the xpra seamless or desktop subcommands. fd said "here's the number, write it down" โญ--xvfb=CMDโ when starting a seamless server, xpra starts a virtual X server to run the clients on. If your Xvfb is installed in a funny location, or you want to use some other virtual X server, then this switch allows you to specify how to run your preferred X server executable. The default value used depends on your platform. The recommended command to use here is Xorg with the dummy driver, also known as Xdummy. See: https://github.com/Xpra-org/xpra/blob/master/docs/Usage/Xdummy.md Some distributions are unable to configure it properly and will use Xvfb instead. Xdummy is the moment, but Xvfb is the backup dancer ๐ฅ--sync-xvfb=DELAYโ the windows are normally only displayed on the client(s), they are not painted on the virtual display. Some applications like screen recorders may want to capture the window contents, you can use this option to enable painting with a configurable delay (in milliseconds). Warning: this extra painting is expensive and quite slow, which is why it is not enabled by default. pretty but pricey, bestie ๐--attach=yes|no|autoโ once the server has started, immediately connect a client to it. With the valueauto, a client is started for remote servers only. (servers specified via a network URI) If a display is specified and a server is already running, xpra will not try to start a new one and it will just attach to it. no duplicate servers, just attach and slay ๐ฆ
โจ Options for seamless, desktop, upgrade, shadow โจ
--http=on|offโ respond to HTTP requests on the TCP port(s) and local sockets. This requires at least one TCP or local socket to be configured using the matching bind option. HTTP said hi, but only if the bind option is set ๐ธ--html=on|off|auto|webrootpathโ this enables access to the html5 client via http. Theautomode will enable support if it is found. You can also specify your own web root path as argument. bring your own webroot, cute ๐--http-scripts=off|all|SCRIPTSโ enable the builtin web server scripts that expose the server status, current active sessions and displays, the list of applications and desktop sessions installed. This can be used by the client's user interface. scripts said "here's all the tea" ๐--rfb-upgrade=DELAYโ allows RFB clients (ie: VNC) to connect to a plain TCP socket. If no data is received after DELAY seconds, the server will send a RFB handshake. This option is only applicable to servers started in desktop or shadow modes. VNC besties, this one's for you ๐--ssl-upgrade=yes|noโ upgrade WebSocket and TCP sockets to handle SSL connections. SSL glow-up ๐ฅ--websocket-upgrade=yes|noโ upgrade TCP and SSL sockets to handle Websocket connections. websocket said let's upgrade the vibe ๐--ssh-upgrade=yes|noโ upgrade TCP sockets to handle SSH connections. SSH said I'm coming through โญ--rdp-upgrade=yes|noโ upgrade TCP sockets to handle RDP connections. RDP upgrade era ๐--video-encoders=ENCODERSโ specifies the video encoders to try to load. By default, all of them are loaded, but one may want to specify a more restrictive list of encoders. Use the special valuehelpto get a list of options. Use the valuenoneto not load any video encoders. curate your encoder list, bestie ๐ฆ--csc-modules=MODULESโ specifies the colourspace conversion modules to try to load. By default, all of them are loaded, but one may want to specify a more restrictive list of modules. Use the special valuehelpto get a list of options. Use the valuenoneto not load any colourspace conversion modules. colourspace modules, but make it a vibe check ๐ธ--socket-permissions=ACCESS-MODEโ specifies the file permissions on the server's unix domain sockets. Defaults to600. This is ignored whenmmap-groupis enabled. permissions said 600, no cap ๐
๐ฆ Options for seamless, desktop, upgrade and attach ๐ฆ
--encryption=CIPHERโ specifies the cipher to use for securing the connection from prying eyes. This option requires the use of the--encryption-keyfileoption. The only ciphers supported at present are:AESโ for servers, this allows the client to choose any of the modes it wants to use. For clients, this is an alias forAES-CBCand using a more specific mode should be preferred.AES-CBCโ AES in cipher block chaining modeAES-GCMโ AES in galois/counter modeAES-CFBโ AES in cipher feedback modeAES-CTRโ AES in counter mode
If the client requests encryption it will be used by both the client and server for all communication after the initial password verification, but only if the server supports this feature too. Note: this feature has not been extensively reviewed and as it is it should not be considered safe from determined attackers. secure-ish, but not "determined attacker" secure, bestie ๐ญ
--tcp-encryption=CIPHERโ just like the encryption switch, except this one only applies to TCP sockets (sockets defined using thebind-tcpswitch). TCP-only encryption, she's specific ๐--encryption-keyfile=FILENAMEโ specifies the key to use with the encryption cipher specified with--encryption. The client and server must use the same keyfile contents. same key, same vibe, no mismatches ๐--tcp-encryption-keyfile=FILENAMEโ just like theencryption-keyfileswitch, except this one only applies to TCP sockets (sockets defined using thebind-tcpswitch). TCP keyfile said "I'm different" โจ--idle-timeout=IDLETIMEOUTโ the connection will be terminated if there is no user activity (mouse clicks or key presses) for the given amount of time (in seconds). Use the value0to disable this timeout. no clicks, no keys, no connection, periodt โณ--server-idle-timeout=IDLETIMEOUTโ the server will exit if there are no active connections for the given amount of time (in seconds). Use the value0to disable this timeout. server said "nobody's here? I'm leaving" ๐ช--clipboard-filter-file=FILENAMEโ name of a file containing regular expressions, any clipboard data that matches one of these regular expressions will be dropped. Note: at present this only applies to copying from the machine where this option is used, not to it. clipboard filter said "not that, bestie" ๐ซ--dpi=VALUEโ the "dots per inch" number your client apps should try to respect ๐. Keep it in the 10 to 500 range or it's basically useless. Heads up tho: a lot of apps only read this value at startup, so if you connect to a session that already got started with a different DPI, you might not get the glow-up you wanted ๐ญ.--pixel-depth=VALUEโ okay so this one does two different jobs depending on what you're doing โจ. Starting a server? It controls the bits per pixel of the virtual framebuffer. Possible values:0(auto),16,24,30. Starting a client? It controls the picture rendering with the opengl backend: values higher than24unlock deep color, while the value24gives you regular true color rendering. Use0to let the client decide whether the rendering would actually benefit from deep color (only supported on some Posix clients, no cap). Other values should not be used.--cursors=yes|noโ turns forwarding of custom application mouse cursors on or off ๐ฑ๏ธ. Client apps can change the mouse cursor whenever they want, and every single time that happens the new cursor's pixels get sent over to the client. This switch kills that feature.--notifications=yes|noโ on/off for forwarding system notifications ๐. These need the xpra server to have its own instance of adbusdaemon, and if it's missing you'll get a warning printed on startup. This switch disables the feature entirely and dodges that warning.--input-method=METHODโ pick which input method to configure. This sets a bunch of environment variables that apps started with thestart-childoption should honour. The currently supported METHODs are:noneโ disable input methods completely and stop them from interfering with keyboard input. This is the default.keepโ keeps the environment unchanged. You are responsible for making sure it's correct ๐ .ximโ enables the X Input Method.IBusโ enables the Intelligent Input Bus.SCIMโ enables the Smart Common Input Method.uimโ enables the Universal Input Method.
Any other value will also be set up, but it'll trigger a warning โ ๏ธ.
--xsettings=auto|yes|noโ enable or disable xsettings synchronization. Xsettings only get forwarded from posix clients connecting to real posix servers (not shadows). Inautomode, only seamless servers enable xsettings synchronization.--system-tray=yes|noโ on/off for forwarding system tray icons ๐ง. This one needs client support and might not even be available on every platform, iykyk.--bell=yes|noโ enable or disable forwarding of the system bell ๐.--webcam=yes|noโ enable or disable webcam forwarding ๐ท.--mousewheel=on|off|invert|invert-x|invert-y|invert-zโ mouse wheel handling ๐ฑ๏ธ. You can disable mouse wheel forwarding using the valueno, or invert some or all of the axes:invert-all,invert-x,invert-y,invert-z.--middle-click=yes|noโ enable or disable forwarding of middle mouse button (button2) events. Super useful for suppressing those spurious middle-click events that devices like the ThinkPad TrackPoint on Windows love to generate ๐.--pointer=on|off|emulate3buttonsโ how to handle pointer events. Theemulate3buttonsvalue will synthesize a middle-click whenever the left and right buttons get pressed at the same time โจ.--input-devices=APINAMEโ which API to use for input devices on the server.--keyboard-model=MODELโ the keyboard model to use on the server (passed to the X server) โจ๏ธ.--backend=NAMEโ which backend to use for accessing the display (ie:xvfb,xdummy).--remote-logging=both|all|send|receive|noโ remote logging is always initiated by the client, but the server gets to restrict which direction log messages are allowed to flow ๐.bothโ the log output is both forwarded and sent locally (tostdout,stderror a log file).allowโ used by the server to allow both send and receive, but when sending the log output it will no longer be recorded locally.sendโ used by the client to send its log output to the server. Used by the server to allow clients to request log forwarding.receiveโ used by the client to request that the server sends its log output to the client. Used by the server to allow clients to forward their logging.noโ remote logging is disabled.
--av-sync=yes|noโ enable or disable audio-video synchronization ๐ง๐น. The video data gets delayed so it displays in sync with the audio. Note: this only applies to video regions, either auto-detected via the builtin heuristics or specified using thedbusinterface.
โจ Options for attach โจ
--client-socket-dirs=DIRโ directories where the client creates its control socket. The path separator (:on Posix) may be used to specify multiple directories ๐๏ธ.--modal-windows=yes|noโ honour modal windows. Careful bestie, this can have undesirable side effects when multiple applications are forwarded through the same xpra server: modal windows get made modal for all the applications forwarded by xpra, not just the one application that owns that window ๐ฌ.--headerbar=auto|no|forceโ replaces the window's standard title bar with a custom one that gives you access to xpra specific window controls ๐ . This feature can have side effects and it is incompatible with OpenGL acceleration on MS Windows.--password-file=FILENAMEโ supply the password to use for connecting to a server that uses authentication. > Deprecated, use per-socket authentication options instead.--username=USERNAMEโ the username the client supplies for authentication. By default the current OS username is used.--opengl=(yes|no|auto)[:backend]โ use OpenGL accelerated rendering on the client โจ. The default is to detect whether the graphics card and drivers are supported (automode), but you can also disable OpenGL (no) or force it enabled (yes). On some platforms it's also possible to specify which backends should be used โ onlygtkandnativeare currently supported, and only on X11 platforms. ie:opengl=yes:native, oropengl=auto:gtk,native.--webcam=yes|no|/dev/deviceXXX|DEVICEIDโ enable or disable webcam forwarding ๐ท. You can also specify the webcam device to use.-zLEVEL,--compress=LEVELโ select the level of compression xpra will use when transmitting data over the network. There are only two possible values:0(meaning no compression) and1(compression enabled).
This compression is not used on pixel data (except when using the rgb encoding).
--quality=VALUEโ sets a fixed image compression quality for lossy encodings (jpeg,webp,h264/h265andvp8/vp9) ๐จ. First, one of those lossy encodings must be enabled with--encodingor when using the defaultautomode. Values range from1(lowest quality, high compression โ generally unusable) to100(highest quality, low compression). Specify a value of zero to let the system tune the quality dynamically to achieve the best bandwidth usage possible. It's usually best not to use this option and usemin-qualityinstead.--min-quality=MIN-QUALITYโ sets the minimum encoding quality allowed when thequalityoption is set to automatic mode. Seequalityabove ๐.--speed=SPEEDโ sets the encoding speed, from1(slowest) to100(fastest) ๐๏ธ. Slower compresses better and will use less bandwidth; faster gives better latency as long as there's sufficient bandwidth. The system normally uses a variable speed, and this option forces a fixed speed setting to be used instead. It's usually best not to use this option and usemin-speedinstead.--min-speed=MIN-SPEEDโ sets the minimum encoding speed allowed when thespeedoption is set to automatic mode. Seespeedabove ๐.--auto-refresh-delay=DELAYโ sets a delay after which the windows are automatically refreshed using a lossless frame, if their contents had been updated using a lossy encoding previously โจ. The delay is a floating-point number and it's in seconds. This option is enabled by default with a delay of0.25seconds. It's only relevant when using a lossy encoding.--shortcut-modifiers=MODIFIERSโ defines the default shortcut modifiers required by the key-shortcuts, and these modifiers can then be referred to as#. The default value is'auto'which evaluates toMeta+Shifton most platforms โจ๏ธ.--key-shortcut=KEY:ACTIONโ can be specified multiple times to add multiple key shortcuts ๐ . These keys get caught by the client and trigger the action specified, and the key presses will not be passed on to the server.
The KEY specification may include keyboard modifiers in the form [modifier+]*key, for example: Shift+F10 or Shift+Control+B. You can refer to the shorcut-modifers option value using #, ie: #+F1.
Shortcuts defined on the command line are added to the builtin default shortcuts. To clear the list of shortcuts, use key-shortcut=clear and define your shortcuts after this one.
Some of the actions may allow arguments (ie: the log action does), in which case they are specified in the usual programming style syntax: ACTION(ARG1, ARG2, etc) String arguments must be quoted (both single and double quotes are supported) and numeric arguments must not be quoted. Beware the parenthesis and quotes must usually be escaped when used from a shell command line. Example: --key-shortcut=Meta+Shift+F7:log\(\'hello\'\)
The following ACTIONs are currently defined:
quitโ disconnect the xpra client.log("MESSAGE")โ sends MESSAGE to the log.
show_session_info[("TabName")]โ pops open the session info window. The optionalTabNamelets you pick which info tab gets shown, bestie. Just use the valuehelpto get the whole list of options. โจshow_menuโ shows the menu you'd normally find hanging out in the system tray.show_start_new_commandโ shows the start new command dialog.show_shortcutsโ shows the list of shortcuts. the receipts ๐show_docsโ shows the documentation in a browser window.magic_keyโ a placeholder that some client toolkits can use. mysterious. iconic.voidโ does not do anything, which is exactly why it's perfect for making sure certain key combos never, ever get sent to the server. ๐ซpassโ also does nothing, BUT unlikevoidthe key event is forwarded to the server. subtle, but it matters.-โ removes an existing key shortcut, if one exists.refresh_windowโ forces the currently focused window to refresh.refresh_all_windowsโ forces all the windows to refresh. every last one. periodt.toggle_keyboard_grabโ the keyboard will be grabbed / ungrabbed by the current window.toggle_pointer_grabโ the pointer will be grabbed and confined to the current window.toggle_fullscreenโ makes the current window fullscreen / unfullscreen.toggle_debugโ turns debugging on or off.scaleupโ increases the current value ofdesktop-scaling.scaledownโ decreases the current value ofdesktop-scaling.scaleresetโ resets thedesktop-scalingto its original value.scalingoffโ turnsdesktop-scalingoff.increase_qualityโ bumps up themin-qualityorqualitysetting (whichever one is currently in use).decrease_qualityโ brings themin-qualityorqualitysetting down (whichever one is currently in use).increase_speedโ bumps up themin-speedorspeedsetting (whichever one is currently in use).decrease_speedโ brings themin-speedorspeedsetting down (whichever one is currently in use).
--sharing=yes|no|autoโ sharing is what lets more than one client connect to the same session. Big catch though: it has to be enabled on both the server and all co-operating clients to actually work. When used server-side, the default valueautolets the clients decide whether they're willing to share the session. When used client-side, the default valueautoevaluates tono.
To get sharing working with unix domain sockets (either using local connections or via ssh), you should create at least one socket in a group accessible directory. On Posix with a default configuration, being a member of the xpra group should be enough to create a socket in /run/xpra. You must also make sure the permissions of this socket file allow group access โ see socket-permissions. ๐ซถ
--lock=yes|no|autoโ locking lets a client refuse to hand over the session to a new client. The session can still be shared with multiple clients (see the sharing option), but other than that, the server will reject new clients. When used server-side, the default valueautolets the clients decide if they want to lock the session. When used client-side, the default valueautoevaluates tono.--keyboard-sync=yes|noโ normally key presses and key release events get sent to the server as they happen, so the server can keep a consistent keyboard state. Turning synchronization off can stop keys from repeating unexpectedly on high latency links โ but it may also mess with applications that access the keyboard directly (games, etc.). ๐ญ--keyboard-raw=yes|noโ tells the server to process all keyboard input untranslated. Both the client and the server must be using the same type of keyboard interface. (ie: both using X11)--keyboard-backend=BACKENDโ the keyboard backend is normally detected automatically. This option overrides it.--keyboard-layout=LAYOUTSTRINGโ the keyboard layout is normally detected automatically. This option overrides it.--keyboard-layouts=LAYOUTSโ the list of keyboard layouts to enable.--keyboard-variant=VARIANTโ override for the keyboard layout variant.--keyboard-variants=VARIANTSโ override for the keyboard layout variants.--keyboard-options=OPTIONSโ override for the keyboard options sent to the server.--swap-keys=YES|NOโ this one only applies to MacOS clients. It swaps the command and control keys, and it's enabled by default. ๐--audio-source=PLUGINโ specifies the GStreamer audio plugin used for capturing the audio stream. This affects "speaker forwarding" on the server, and "microphone" forwarding on the client. To get a list of options, use the special value'help'. You can also specify plugin options using the form:
--audio-source= pulse device=device.alsa_input.pci-0000_00_14.2.analog-stereo
--speaker=on|off|disabledand--microphone=on|off|disabled|on:DEVICE|off:DEVICEโ sound input and output forwarding support, and here's how the values break down:onwill start the forwarding as soon as the connection is established,offwill require the user to enable it via the menu, anddisabledwill prevent it from being used at all and the menu entry will be disabled too. With microphone forwarding, you may also be able to specify which device to use. ๐--speaker-codec=CODECand--microphone-codec=CODECโ specify the codec(s) to use for audio output (speaker) or input (microphone). This parameter can be specified multiple times, and the order in which the codecs are specified defines the preferred codec order. Use the special value'help'to get a list of options. When unspecified, all the available codecs are allowed and the first one is used.--title=VALUEโ sets the text shown as the window title. The string you supply can make use of remote metadata placeholders, which get populated at runtime with values from the remote server. The default value used is"@title@ on @client-machine@". ๐
The following placeholders are defined:
@title@โ will be replaced by the remote window's title.@client-machine@โ will be replaced by the hostname of the system where the application is running, if provided, the xpra server's hostname otherwise.@server-machine@โ will be replaced by the hostname of the xpra server.@server-display@โ will be replaced by the name of the display on which the application is running.
--border=BORDERโ specifies the color and size of the border to draw inside every xpra window. This is a vibe-check tool, fr: it makes it easy to tell xpra windows running on remote hosts apart from local windows. TheBORDERcan be specified using standard color names (ie:red, ororange) or using the web hexadecimal syntax (ie:#F00or#FF8C00). The special color name"auto"will derive the color from the server target address (the connection string), so connecting to the same target should always give you the same color. You may also specify the size of the border in pixels, ie:--border=yellow,10.--window-icon=FILENAMEโ path to the default image which will be used for all windows. This icon may be shown in the window's bar, its iconified state, or task switchers. It depends on the operating system, the window manager, and the application may override this too.--window-close=ACTIONโ choose what action to take when the window is closed by the client. The following actions can be used:autoโ the client will figure out what's best based on the window type. This is the default. ie: it will use disconnect for shadow sessions, forward for seamless windows.forwardโ the event will be forwarded to the server.ignoreโ do nothing.disconnectโ disconnect from the server.shutdownโ shutdown the server.
--desktop-fullscreen=yes|noโ when connecting to a desktop or shadow server, display the remote desktop fullscreen, scaling it to fit the local screen.--dock-icon=FILENAMEโ path to the icon shown in the dock. This option only applies to macOS. ๐--desktop-scaling=off|on|auto|VALUEโ desktop scaling lets the windows be scaled by the client. Quick tea: downscaling will mostly waste bandwidth, but upscaling lets the window's pixels be sent over the wire at a lower resolution, which saves bandwidth and CPU time. This option can also be used to request a specific scaling value. For best results, use opengl client rendering โ the other display backends may show visual artifacts when scaling. Note: the scaling may also be adjusted at runtime through keyboard shortcuts, if those are configured. ๐
The desktop-scaling value can take the form:
offโ scaling will be disabled.onโ scaling will be allowed, but it will start unscaled.autoโ scaling will be allowed and a scaling value will be automatically chosen if the client's desktop is large (bigger desktops will use higher scaling values).- scaling-value โ scaling will be enabled and use the given value, specified as a number, fraction or percentage. ie:
2,3/2or150%. - pair โ the scaling will be enabled and use a different value for the X and Y axis. ie:
3x2or3/2x4/3. - desktop-size โ the scaling will be enabled and the server will render to the given size. ie:
1600x1200.
--tray=yes|noโ enable or disable xpra's own tray menu. On MacOS, the dock icon cannot be disabled. ๐--delay-trayโ waits for the first window or notification to appear before showing the system tray. (posix only)--tray-icon=FILENAMEโ tells xpra which icon to show in the dock/tray. If you don't say anything, it just uses a lil default'xpra'icon. โจ (Heads up bestie: on Microsoft Windows the icon has to be inicoformat, no exceptions ๐ )
๐ซถ Options for attach, stop, info, screenshot, version
--ssh=CMDโ okay so when you connect to a remote display using anssh:address, xpra literally runsssh(1)to build the underlying connection. Most installations should be using paramiko as the default backend command nowadays. Other common values forCMDaressh, orplinkon Microsoft Windows. And if your ssh program lives somewhere weird, has a weird name, or you wanna pass special options to change how ssh behaves โ that's exactly what--sshis for, it tells xpra how to run ssh. ๐
For example, if you want arcfour encryption, you'd run:
xpra attach --ssh="ssh -c arcfour" ssh://frodo/7
Note: don't even bother enabling ssh compression, bestie โ it's redundant with xpra's own compression and will just waste your CPU. ๐ญ
On MS Windows, where backslashes separate path elements and spaces are often part of paths, you need to add quotes around paths. (ie: ssh="C:\Program Files\Xpra\Plink.exe" -ssh -agent)
--exit-ssh=yes|noโ pick whether the SSH client process should get forcibly terminated when xpra disconnects from the server. If you're using SSH connection sharing, you might wanna avoid stopping the SSH master process instance that xpra spawned, since other SSH sessions might be using it. โ ๏ธ Note:exit-ssh=nodetaches the SSH process from the terminal, which prevents the SSH process from interacting with terminal input โ and that disables the keyboard interaction you need for password input, host key verification, etc.. ๐ซฃ--remote-xpra=CMDโ when connecting to a remote server over ssh, xpra needs to be able to find and run the xpra executable on the remote host. If that executable is in a non-standard location, or needs special environment variables set before it can run, then pulling this off may be non-trivial. So ifxpra attach ssh:somethingfails because it can't find the remote xpra, you can use this option to specify how to run xpra on the remote host. ๐
That said โ this option should not be needed in normal usage, because xpra tries quite hard to work around the above problems. If you find yourself needing it often, that may indicate a bug that we would appreciate hearing about. ๐
๐ SSL Options
--ssl=on|auto|off|tcp|wwwโ whether to enable SSL on TCP sockets, and for what purpose. The TCP sockets will automatically be upgraded to SSL when SSL packets are received. ๐autoโ the server will try to guess what protocol to use for each new SSL connection: either xpra's native protocol or https / websocket (wss)tcpโ the SSL sockets will only be used for xpra's native protocolwwwโ the SSL sockets will only be used for https and websocket (wss)
If SSL is enabled, then a ssl-cert is required. ๐ฅ
The remaining options mirror the Python ssl module attributes. Please refer to that documentation, and bear in mind that configuring SSL for security is not trivial โ and definitely not just a matter of enabling SSL. See: https://docs.python.org/2/library/ssl.html Some options may not be available with older versions of Python. ๐ฌ
Summary: --ssl-key=KEYFILE โ the key file to use. ๐๏ธ
--ssl-key-password=PASSWORDโ password to use for decrypting the SSL key file.--ssl-cert=CERTFILEORDIRโ certificate file, required for server SSL support.--ssl-protocol=PROTOCOLVERSIONโ specifies which version of the SSL protocol to use.--ssl-ca-certs=CACERTSFILEโ theca_certsfile contains a set of concatenated'certification authority'certificates. If a directory is specified, it should contain the certificates.--ssl-ca-data=CERTDATAโ certificate data.--ssl-ciphers=CIPHERSโ sets the available ciphers, it should be a string in the OpenSSL cipher list format.--ssl-client-verify-mode=none|optional|requiredโ whether to try to verify the client's certificates and how to behave if verification fails.--ssl-server-verify-mode=none|optional|requiredโ whether to try to verify the server's certificates and how to behave if verification fails.--ssl-verify-flags=FLAGSโ the flags for certificate verification operations.--ssl-check-hostname=yes|noโ whether to match the peer cert's hostname.--ssl-server-hostname=HOSTNAMEโ the server hostname to match against the certificate when connecting to an SSL server.--ssl-options=optionsโ set of SSL options enabled on this context.
๐ธ ENVIRONMENT ๐ธ
DISPLAYโxpra start --start-child=...sets this variable in the environment of the child, pointing it at the xpra display. ๐ฅ๏ธ
xpra attach, on the other hand, uses this variable to determine which display the remote applications should be shown on.
XPRA_PASSWORD may be used with xpra attach instead of the password-file option. ๐ (iykyk, don't hardcode ur passwords bestie)
๐ FILES ๐
xpra.conf stores default values for most options. There's a global configuration file in /etc or /usr/local/etc, and each user may override those defaults by creating the file .xpra/xpra.conf. You can also split the options into multiple files by placing them in a conf.d directory with the .conf extension. Depending on OS and version, xpra uses the directory ~/.xpra or /run/<uid>/xpra to store a number of files. (The examples below are given for the display :7.) โจ
~/.xpra/:7โ the unix domain socket that clients use to contact the xpra server, if the system configuration uses this directory.~/.xpra/:7.logโ when run in daemon mode (the default), the xpra server directs all output to this file. This includes all debugging output, if debugging is enabled. ๐~/.xpra/run-xpraโ a shell script that, when run, starts up xpra with the correct python interpreter,PYTHONPATH,PATH, location of the main xpra script, etc. Automatically generated byxpra initenv,xpra start, and used byxpra attach(see also the discussion of--remote-xpra). ๐ง
๐ BUGS ๐
Xpra does not fully handle all aspects of the X protocol; for instance, fancy input features like pressure-sensitivity on tablets, some window manager hints, and probably other more obscure parts of the X protocol. It does, however, degrade gracefully, and patches for each feature would be gratefully accepted. ๐ซถ (not me volunteering y'all to send patches but like, pls do)
The xpra server allocates an over-large framebuffer when using Xvfb; this wastes memory. ๐ญ If the Xvfb does not support RandR this can also cause applications to misbehave (e.g. by letting menus go off-screen). This is not a problem when using Xdummy, see the --xvfb= switch for details. Conversely, if the framebuffer is ever insufficiently large, clients will misbehave in other ways (e.g., input events will be misdirected). ๐
โญ REPORTING BUGS โญ
Send any questions or bug reports to https://github.com/Xpra-org/xpra/issues โ they wanna hear from you fr fr. ๐๐
๐ SEE ALSO ๐
and that's a wrap on the whole xpra(1) manual, bestie โ every last flag, path, and caveat, no cap. this page is straight from the xpra manual, version XPRA(1), and yeah that footer is just the page name but we're giving it main character energy anyway. go forth and multiplex, you absolute icon ๐
โจ
๐ฆ where this page comes from
- fedora 43: xpra 1:6.5.4-1.fc43 ยท GPL-2.0-or-later AND BSD-2-Clause AND LGPL-3.0-or-later AND BSD-3-Clause
- fedora 44: xpra 1:6.5.4-1.fc44 ยท GPL-2.0-or-later AND BSD-2-Clause AND LGPL-3.0-or-later AND BSD-3-Clause
- nixpkgs unstable: xpra 6.5.5
- Copyright (C) 2008-2009 Nathaniel Smith <njs@pobox.com>
- Copyright (C) 2010-2017 Antoine Martin <antoine@xpra.org>
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms