nxproxy(1)
π¦ NAME π¦
okay so this is the manual page for nxproxy(1), coming to you from the NX Proxy section of the manual. Its government name is the NX Proxy Tool. That's it, that's the name section. short. iconic. moving on. π
β¨ SYNOPSIS β¨
nxproxy [<options>] <host>:<port>
like, that's the whole shape of it. options, then a host and a port at the end. slay. πΈ
π DESCRIPTION π
so bestie, nxproxy is a tool that lets you tunnel X sessions through the NX compression library. that's the whole vibe. π¦
it's a backend application, which means it's the behind-the-scenes main character that a bunch of client applications use. we're talking Remmina, X2Go Client, PyHoca-Gui, Arctica Client, TheQVD Client, etc. they show up and look pretty, nxproxy does the actual work. no cap. π
π COMMAND LINE OPTIONS π
every single one, in order, no skipping. buckle up. π«Ά
-Cβ tellsnxproxyit has to run on the 'X client' side. that means it's listening for connections and straight up impersonating an X server. catfishing, but for networking. π-Sβ tellsnxproxyto run in 'X server' mode. so it's forwarding the connections to daemons running on the client.-hβ prints this message. the classic cry for help. π-vβ prints version information. the "what era are we in" check. β-d <int>β sets the log level. here's the scale, memorize it:0β FATAL1β ERROR2β WARNING3β INFO4β DEBUG
the default is 0. so yeah, by default it's only telling you about disasters. π
-o <string>β the name of the log file. the default isstderr. π-f <string>β specifies the log format. the characters inside<string>define how the loglines get formatted. here's what's supported, and the default is'0':0β only the plain text, no additions whatsoever. this is the default.uβ include timelβ include loglevelTβ include thread idsLβ include the location of the log call in the source code
<host>:<port>β goes at the end, and it specifies the host and port of the listening proxy. the finale. the last word. π
π NX/NX DISPLAY OPTIONS π
here's the tea: you can specify multiple nx/nx options, either in the DISPLAY environment or right on the command line, by using the nx/nx,option=value notation. so many options, so little time. β¨
link=<string>β an indication of the link speed that's gonna be used between the proxies. usually the compression and the other link parameters depend on this setting. the value can be either'modem','isdn','adsl','wan','lan','local', or a bandwidth specification β like for example'56k','1m','100m', etc. pick your fighter. π₯type=<string>β the type of session, for example'windows','unix-kde','unix-application', etc.display=<string>β specifies the real display where X connections have to be forwarded by the proxy running on the client.listen=<int>β the local port used for accepting the proxy connection.loopback=<bool>β bind to the loopback device only. stay home, stay safe. πaccept=<string>β the name or IP of the host that can connect to the proxy.connect=<string>β the name or IP of the host that the proxy will connect to.port=<int>β the remote port used for the connection.retry=<int>β the number of connection attempts.root=<string>β the root directory for the session. usually it's theC-*orS-*in the.nxdirectory in the user's home, with'*'being the virtual display.session=<string>β the name of the session file. the default is the name'session'in the session directory.errors=<string>β the name of the log file used by the proxy. the default is the name'errors'in the session directory.stats=<string>β the name of the file where the proxy statistics get written. the default is a file'stats'in the session directory. and here's the cute part: the proxy replaces the data in the file whenever it receives aSIGUSR1orSIGUSR2signal:SIGUSR1β gives total statistics, i.e. statistics collected since the beginning of the session.SIGUSR2β gives partial statistics, i.e. statistics collected since the last time this signal was received.
yes bestie, it's giving receipts on demand. π§Ύ
cookie=<string>β use the provided cookie for authenticating to the remote proxy. the same cookie is used as the fake value used for the X authorization. the fake cookie gets replaced on the X server side with the real cookie to be used for the display, so that the real cookie doesn't have to travel over the net. when not using a proxy cookie, any host will be able to connect to the proxy. see also the'accept'parameter. so like, use the cookie. protect yourself. πͺnodelay=<bool>β a boolean indicating ifTCP_NODELAYhas to be set on the proxy link. old Linux kernels had problems with handlingTCP_NODELAYon PPP links. ancient drama, we don't talk about it. πpolicy=<bool>β let or not let the agent decide when it's the best time to flush the proxy link. if set to0, the proxy will flush any encoded data immediately. this option has only effect on the X client side proxy.render=<bool>β enable or disable use of the RENDER extension.taint=<bool>β try to suppress trivial sources of X roundtrips by generating the reply on the X client side. dodging the roundtrip, fr fr. πβοΈdelta=<bool>β enable X differential compression.data=<int>β enable or disable the ZLIB data compression. it's possible to specify a value between0and9. usually the value is chosen automatically based on the requested link setting.stream=<int>β enable or disable the ZLIB stream compression. the value, between0and9, is usually determined according to the requested link setting. not fully implemented in nx-X11 Agent, yet. so like, it's half dressed. πlimit=<int>β specify a bitrate limit allowed for this session.memory=<int>β trigger memory optimizations used to keep small the size of X buffers. this is useful on embedded plat- forms, or where memory is scarce. tiny budget, big dreams. πcache=<int>β size of the in-memory X message cache. setting the value to0will disable the memory cache as well as the NX differential compression. one switch, two consequences. β οΈimages=<int>β size of the persistent image cache.shseg=<int>β enable the use of the MIT-SHM extension between the nxproxy and the real X server. a value greater than1is assumed to be the size of the requested shared memory segment. by default, the size of the segment is determined based on the size of the in-memory cache.load=<bool>β enable loading a persistent X message cache at the proxy startup.save=<bool>β enable saving a persistent X message cache at the end of session.cups=<int>β enable or disable forwarding of CUPS connections, by listening on the optional port'n'.aux=<int>β enable or disable forwarding of the auxiliary X channel used for controlling the keyboard. the'keybd=<int>'form is accepted for backward compatibility.smb=<int>β enable or disable forwarding of SMB connections. the'samba=<int>'form is accepted for backward compatibility.media=<int>β enable forwarding of audio connections. π§http=<int>β enable forwarding of HTTP connections.font=<int>β enable forwarding of reversed connections to a font server running on the NX server.file=<int>β enable forwarding of file transfer connections.mask=<int>β determine the distribution of channel ids between the proxies. by default, channels whose ids are multiple of8(starting from0) are reserved for the NX client side. all the other channels can be allocated by the nx-X11 Agent side. dividing up the friend group. π€timeout=tβ specify the keep-alive timeout used by proxies to determine if there's a network problem preventing communication with the remote peer. a value of0disables the check.cleanup=tβ specify the number of seconds the proxy has to wait at session shutdown before closing all channels. the feature is used by the NX server to ensure that services are disconnected before shutting down the link.pack=<string>β determine the method used to compress images.product=<string>β the product id of the client or server. the value is ignored by the proxy, but the client or server can provide it to facilitate the support. it's just for the record, bestie. πcore=<bool>β enable production of core dumps when aborting the proxy connection.options=<string>β specify an additional file containing options that has to be merged with option read from the command line or the environment.kill=<int>β add the given process to the list of daemons that must be terminated at session shutdown. multiple'kill=<int>'options can be specified. the proxy will send them aSIGTERMsignal just before exiting. dramatic exit, honestly deserved. πstrict=<bool>β optimize for responsiveness, rather than for the best use of all the available bandwidth.encryption=<bool>β should be set to1if the proxy is running as part of a program providing encryption of the point to point communication.
π the options that aren't even yours
the following options are interpreted by the nx-NX Agent. they are ignored by the proxy. so like, nxproxy is literally just not listening to these. not my business, not my problem, iykyk. β
autodpi=<bool>autograb=<bool>backingstore=<int>client=<string>clients=<string>clipboard=<int>composite=<int>copysize=<int>defer=<int>fullscreen=<bool>geometry=<string>kbtype=<string>keyboard=<string>keyconv=<string>magicpixel=<bool>menu=<int>resize=<bool>rootless=<bool>shadow=<int>shadowmode=<string>shadowuid=<int>shmem=<bool>shpix=<bool>sleep=<int>state=<string>streaming=<int>textclipboard=<bool>tile=<string>tolerancechecks=<int>xinerama=<int>
πΈ NX ENVIRONMENT VARIABLES πΈ
ok so bestie, listen β the nxproxy app (and nxagent too, when it's vibing with nxcomp support) can be influenced by these environment variables. like, they're literally whispering in its ear. here's the tea:
NX_ROOTβ this is the root NX directory, aka the place where the session directory and the cache files get created. it's usually overridden by passing theroot=option instead. by default, the root NX directory is assumed to be the directory.nxin the user's home. cute, right? πNX_SYSTEMβ the directory where NX programs and libraries live. if it's not set, the value is assumed to be/usr/NX. programs, libraries and data files get searched in thebin,libandsharesubdirectories respectively. so organized of them πNX_HOMEβ the NX user's home directory. ifNX_ROOTis not set or is invalid, the user's NX directory gets created here.NX_TEMPβ the directory where all the temporary files are to be created. all of them. every single one. ποΈNX_CLIENTβ the full path to the<nxclient>executable. if this variable is not set, the<nxclient>executable will be run assuming that the program is in the system path. this can be useful on platforms like Windows and the MacOS X where<nxclient>is located in a different directory compared to the other programs β makes it easier for the user to execute the program from the shell, no cap β¨NX_SLAVE_CMDβ the full path to the slave channel handler. when the slave channel is enabled, the agent will listen on a port and forward the connection to theNX_SLAVE_CMDprogram. this can be used to implement agent/proxy communication for applications such as serial port and USB forwarding. obsessed with the versatility honestly π₯
π SHELL ENVIRONMENT VARIABLES π
these are the ones your shell already knows about, and they matter too:
HOMEβ this variable is checked in the case thatNX_HOMEis not set, null or invalid. backup plan energy πTEMPβ this variable is checked whenever theNX_TEMPdirectory is not set, null or invalid.PATHβ the path where all executables are searched, except<nxclient>. ifNX_CLIENTis not set, then the client executable is searched in the system path too. so like, it depends, iykyk π«ΆLD_LIBRARY_PATHβ the system-wide library search order. this should be set by the program invoking the proxy. it's giving "not your job, bestie, the caller handles it" πDISPLAYβ on the X server side, theDISPLAYvariable indicates the location of the X11 server. when nxcomp is used as a transport library, theDISPLAYmay represent a NX transport specification, and options can be passed in the formnx/nx,option=value.... iconic behavior fr fr πXAUTHORITYβ this is the file containing the X11 authorization cookie. if it's not set, the file is assumed to be in the user's home (eitherNX_HOMEorHOME). πͺ (yes it's literally called a cookie, we love that for us)
π AUTHOR π
okay story time, because the lore is actually good:
the nxproxy application has originally been derived from a software project called DXCP. the company NoMachine turned DXCP into nxcomp, with nxproxy as the executable around nxcomp. so like, nxproxy is basically nxcomp's little outfit, its main character moment π
the current maintenance of nxproxy (major version 3) is coordinated between various projects β mainly by The Arctica Project, TheQVD (Qindel Group) and the X2Go Project. group project but make it β¨international collaborationβ¨
this manual has been written by Mike Gabriel <mike.gabriel@das-netzwerkteam.de> for the X2Go project (http://www.x2go.org) and later on improved for the Arctica Project (https://arctica-project.org). shoutout to Mike, the realest π«Ά
and that's the whole page, bestie!! π this was Version 3.5.99.27, dated Jun 2023, and it's the nxproxy(1) manpage β now go forth and proxy responsibly, you absolute icon π¦β¨π
π¦ where this page comes from
- alpine 3.24: nx-libs-doc 3.5.99.27-r2 Β· GPL-2.0-or-later
- debian trixie: nxproxy 2:3.5.99.27-2 Β· GPL-2.0-only
- epel 10: nxproxy 3.5.99.27-6.el10_3 Β· GPL-2.0-or-later
- fedora 43: nxproxy 3.5.99.27-8.fc43 Β· GPL-2.0-or-later
- fedora 44: nxproxy 3.5.99.27-9.fc44 Β· GPL-2.0-or-later
- ubuntu noble: nxproxy 2:3.5.99.27-1.1build2 Β· GPL-2.0-only
- ubuntu questing: nxproxy 2:3.5.99.27-2build1
- ubuntu resolute: nxproxy 2:3.5.99.27-2build2 Β· GPL-2.0-only
- ubuntu stonking: nxproxy 2:3.5.99.27-3 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms