Anping 中文

One-time link API

One call makes a link. It works like Thinfinity Workspace 8.5's one-time link API (One-Time URL): the same path, option names, types, defaults and answer.

Most callers send 3 values: apikey, apiuser, model. Everything else lives in the model, set once on the Anping server (models).

curl -X POST https://anping.example.com/ws/oturl/get \
  --data-urlencode "apikey=$ANPING_API_KEY" \
  --data-urlencode "apiuser=alice@example.com" \
  --data-urlencode "model=sales-desktop"

Answer: /oturl.html?key=...&pass=.... Put the Anping address in front and send the user there.

One link, start to end

Sequence of a one-time link: your server asks for it, the browser redeems it and connects, and the session ends in the connection log. Your server User's browser Anping server Windows via guacd 1 POST /ws/oturl/get apikey, apiuser, model 2 /oturl.html?key=...&pass=... works for expires minutes (default 10) 3 the link new tab or inside your page 4 the page uses the link tied to this browser (/ws/oturl/redeem) 5 a short-lived pass or: ask for a missing user name or password 6 live connection with the pass (WebSocket /tunnel) 7 remote desktop sign-in and certificate checked 8 Desktop in the browser: screen, keys, clipboard, files, sound 9 reload or Reconnect same browser only (/ws/oturl/connect) 10 End link closed for good (/ws/oturl/end) 11 connection log: one record per session Sequence of a one-time link: your server asks for it, the browser redeems it and connects, and the session ends in the connection log. Server Browser Anping Windows via guacd 1 POST /ws/oturl/get apikey, apiuser, model 2 /oturl.html?key=...&pass=... works for expires minutes (default 10) 3 the link new tab or inside your page 4 the page uses the link tied to this browser (/ws/oturl/redeem) 5 a short-lived pass or: ask for a missing user name or password 6 live connection with the pass (WebSocket /tunnel) 7 remote desktop sign-in and certificate checked 8 Desktop in the browser screen, keys, clipboard, files, sound 9 reload or Reconnect same browser only (/ws/oturl/connect) 10 End link closed for good (/ws/oturl/end) 11 connection log: one record per session
Solid arrows are requests, dashed arrows are answers. Steps 4, 9 and 10 are calls the link page makes by itself.

Request

RuleDetail
MethodSend a form (POST) from your server.
MoreForm bodies: application/x-www-form-urlencoded or multipart/form-data. GET /ws/oturl/get?apikey=... is the Thinfinity form, for programs moving over (when to switch): it puts the key, and any password, into URLs that proxies and telemetry record.
Same name twiceIf a name is both in the form and in the address, the form wins, except apikey.
MoreA key in the query string is checked first, before the body is read.
BodyUp to 64 KB; bigger gets error 413. JSON is not read.
NamesUpper or lower case doesn't matter. Unknown names are ignored.
Yes/no valuesYes or no values: true/false, 1/0, yes/no, on/off.

Model, overrideDefaults, no model

A model is one computer set up on the Anping server (Targets:N:*), like an Access Profile; its Id can be your profile's key. The three modes work as in Thinfinity:

You sendSettings come fromNotes
model=<id>the model onlyConnection options in the request are ignored, except a user name or password the model lacks.
MoreEven invalid ones are ignored. apiuser, plen, expires and format still count.
model=<id>
overrideDefaults=true
the request, then the modelOnly within the model's limits (Allow flags) and its program (security).
MoreA computer from the request never gets the model's credentials, security or certificate settings, only its own (link computers).
no modelthe requestcomputer is required and must be allowed.

Options nobody gives use the defaults below. Whoever gives the user name also gives the password; the link page asks for whatever is missing.

Parameters

Each table shows the option, its default, what it does, and how it compares with Thinfinity: ✓ works as documented, Partly works with a difference, Not possible with the desktop engine (guacd 1.6.0 from Apache Guacamole), Anping only an extra. Allow limits are the model's, or Oturl:ComputerPolicy for a computer named in the request.

The request

ParameterDefaultWhat it doesThinfinity
apikeyrequiredOne of Oturl:ApiKeys. Missing or wrong: error 401.
MoreCompared in constant time. After Oturl:MaxFailuresPerMinute wrong keys from one address in a minute, further wrong keys get 429; a valid key is never blocked. Each key makes at most Oturl:MaxLinksPerKeyPerMinute links a minute.
✓
apiuserrequiredWho asked, such as an e-mail; for the connection log.
MoreUp to 256 characters. Kept with the link and written with each session; the Anping server's own log names only the link id.
✓
modelnoneThe name of a computer setup (Targets:N:Id), exact case. Unknown: error 400.✓
overrideDefaultsfalsetrue: options in the request win over the model's.✓
plen8Length of the pass, 8 to 64.
MoreOther values are clamped. Letters and digits without look-alikes (no 0, O, 1, l, I).
✓
expires10Minutes an unused link works, 1 to 1440.
MoreOther values are clamped. Default and limit: Oturl:DefaultExpiresMinutes, Oturl:MaxExpiresMinutes.
✓
formattextjson answers {"url": "...", "expiresAt": "..."} instead of plain text.Anping only

Computer and sign-in

ParameterDefaultWhat it doesThinfinity
computerthe model'sWhich computer: host, host:port or [IPv6]:port. It must be allowed by Oturl:AllowedComputers, or you get error 403.
MorePort 3389, or 2179 with desttype=VMID. Its security and certificate check come from Oturl:ComputerSettings (link computers).
✓
username
password
the model'sMissing ones: the link page asks; they are never stored.
MoreA rejected one brings the form back with the user name kept; failed sign-ins are limited (sign-in limits). DOMAIN\user becomes domain and user; user@domain is sent as is.
✓

Program

ParameterDefaultWhat it doesThinfinity
startprg00 the desktop, 1 one program, 2 a single program window (RemoteApp).
MoreA RemoteApp uses classic RDP graphics (the graphics pipeline is off). A model that starts a program keeps it, also with overrideDefaults=true, unless it sets AllowProgramOverride.
✓
commandnoneFor 1: the program's path. For 2: the RemoteApp's name or ||alias.
MoreRequired when startprg is 1 or 2. A path with spaces is quoted, then cmdargs follow.
✓
cmdargsnoneArguments for the program.✓
directorynoneStart folder of a RemoteApp.Partly
WhyWith startprg=1 it is ignored: guacd 1.6.0 has no start folder for a program.

Display

ParameterDefaultWhat it doesThinfinity
bpp32Colour depth in bits: 8, 15, 16, 24 or 32.
More15 is sent as 16. Below 32 turns the RDP graphics pipeline off. Not given: 32-bit colour with the graphics pipeline (Thinfinity's default is 16).
✓
resolutionfittobrowserfittobrowser follows the window, fittoscreen the screen, fixed is width x height.
Morefittoscreen and fixed show centred and at most at their own size, smaller when the window is smaller; More > Fit to window in the toolbar scales them up to fill it.
✓
width
height
the user's screenFor fixed: 1 to 8192 pixels.
MoreAt 96 dpi (Windows at 100%). A missing one is the user's screen size.
✓
imagequality10 sharpest (lossless); 1 adjusts to the connection.
More1: guacd lowers JPEG/WebP quality as the connection slows and keeps still content lossless.
Partly
Why2 and 3 behave like 1: guacd 1.6.0 has no separate levels.
desktopbackground
visualstyles
menuwindowanimation
fontsmoothing
showwindowcontent
desktopcomposition
falseWallpaper, themes, menu animations, font smoothing, window contents while dragging, desktop composition.✓

Keyboard

ParameterDefaultWhat it doesThinfinity
unicodekeyboardtrueKeys go as key presses; other characters as text (Unicode).
MoreUses the model's keyboard layout (US by default). Keys the layout has go as key presses, so shortcuts work.
Partly
WhyText is right while the remote session uses the same layout. A session set to another layout types by that layout.
keyboardlayout00000409With unicodekeyboard=false: a Windows keyboard layout number (24 known).
MoreOthers get the model's layout. Mapped: English US and UK, German, Swiss German and French, French, Belgian, Canadian French, Italian, Spanish, Latin American, Portuguese, Brazilian, Swedish, Danish, Norwegian, Polish, Czech, Hungarian, Romanian, Turkish, Japanese.
✓

Session and security

ParameterDefaultWhat it doesThinfinity
consolefalseConnect to the computer's main screen (console session).✓
wscompressiontrueCompress the live connection (WebSocket) when the browser can.
Morepermessage-deflate, without context takeover in either direction.
✓
disablenlafalseSkip the early sign-in check (NLA), for servers that don't support it (a non-Microsoft CredSSP). The certificate is still checked.✓
desttype
destinfo
noneVMID: a Hyper-V virtual machine. RDS: a server farm (RD Connection Broker).
MoreVMID: destinfo is the VM id, port 2179. RDS: destinfo goes to the broker as load balance info. Any other value: a regular connection.
✓ Not yet tested

Shared folder and clipboard

ParameterDefaultWhat it doesThinfinity
diskenabledtrueThe shared folder, within AllowUpload and AllowDownload.✓
disknameAnpingThe shared folder's name (Thinfinity's default is ThinDisk).
MoreAnping server default: Oturl:DefaultDiskName. The page calls it <name> drive (Shared drive if the Anping server does not say).
Partly
WhyNot yet checked whether Windows shows it under this name or as GUACFS.
diskautodownloadtrueFiles saved into the shared folder come to the browser by themselves.
MoreOnce closed and untouched for 2 seconds (Files:AutoDownloadSettleMs). false: files stay on the drive for the Files panel. Not sent: files there at the start, uploads, empty and temporary files, files only renamed or opened, and files a program keeps open. Over Files:MaxUploadBytes, or with no room in the drive's limit for the Anping server's copy, a file stays on the drive and Transfers says so. Outside the Download folder this needs an Anping server on Linux (deploying).
✓ Not yet checked with Windows
clipboardtrueCopy and paste of text, within AllowCopy and AllowPaste.
Morefalse: off both ways, enforced by the Anping server too. Pasting files where the remote's focus is also needs the shared folder's upload (AllowUpload); without paste they can still be uploaded.
✓

Sound and printing

ParameterDefaultWhat it doesThinfinity
soundenabledfalseThe remote computer's sound, within AllowAudio.
MoreIt starts after the first click or key press in the page.
✓
soundquality10 to 3 (below).✓
printerenabledfalseA PDF printer, within AllowPrinting, only where printing is turned on (Guacd:Printing, off by default).
MoreEach job downloads as a PDF. Works with the drive off. With printing off the link still opens, without a printer, and the dry run says why. Turning it on needs a desktop engine with Ghostscript, which is AGPL-3 or a commercial license from Artifex.
✓
printersetasdefaulttrueThe printer is the remote computer's default printer.Partly
Whyfalse is not possible: guacd 1.6.0 always makes its printer the default.
printernameAnping PDF PrinterIts name on the remote computer.
MoreAnping server default: Oturl:DefaultPrinterName.
✓
printerdrivernoneIgnored.Not possible
Whyguacd 1.6.0 always uses its own PostScript driver name.

Sound quality

soundqualitySoundData (kbit/s)
0as Windows sends it (usually 44.1 kHz stereo, 16-bit)1411
1 (default)22.05 kHz stereo, 16-bit706
222.05 kHz mono, 16-bit353
311.025 kHz mono, 8-bit88
More about sound

Rates are before base64 and compression. Sound that arrives while the browser still blocks it is dropped, not queued. Until the first click or key press the toolbar shows Enable sound, then Mute and Unmute.

Answer

formatAnswer (success, 200)
nonePlain text (text/plain; charset=utf-8): the end of the link, to put after the Anping address:
/oturl.html?key=<43 characters>&pass=<plen characters>
jsonJSON (application/json):
{"url": "/oturl.html?key=...&pass=...", "expiresAt": "2026-11-01T05:41:42.0640041+00:00"}

Answers are never cached (Cache-Control: no-store).

Errors

Errors come as plain text (text/plain): a short reason that names the option but never repeats its value.

Error numberWhenMessage, for example
400An option is missing or wrong.
MoreValues longer than their limit or with control characters are refused too.
Unknown model.
Moreapiuser is required.
computer or model is required.
computer must be host or host:port.
command is required when startprg is 1 or 2.
destinfo is required with desttype.
bpp must be one of 8, 15, 16, 24, 32.
console must be true or false.
401Missing or wrong key, or the Anping server has none.Invalid API key.
403computer not in Oturl:AllowedComputers.computer is not allowed.
413The request is bigger than 64 KB.Request body too large.
429Too many wrong keys from your address, or too many links for one key.
MoreWrong keys: this minute, from your address; a valid key is never blocked. Links: over Oturl:MaxLinksPerKeyPerMinute for one key in a minute.
Too many failed attempts. Try again later.
Too many links for this API key. Try again later.
503Anping already holds Oturl:MaxLinks links.
MoreUnused, open or in their reconnect window.
Too many open links. Try again later.

Link lifetime and reconnect

Link lifetime: unused for up to expires minutes, then connected, a 10 minute reconnect window after each disconnect, and over 12 hours after the first open. made first open disconnect Reconnect Unused expires: 10 min Connected this browser only Reconnect window 10 min per disconnect Connected again reload or Reconnect Link over no new connection at most 12 h from the first open (Oturl:MaxLifetimeHours) Link lifetime: unused for up to expires minutes, then connected, a 10 minute reconnect window after each disconnect, and over 12 hours after the first open. made first open disconnect Reconnect Unused expires: 10 min Connected this browser only Reconnect window 10 min per disconnect Connected again reload or Reconnect Link over no new connection at most 12 h from the first open (Oturl:MaxLifetimeHours)
Defaults shown.
WhenWhat happens
UnusedWorks until expires minutes after it was made.
First openUsed, and tied to that browser (with a cookie).
MoreA cookie for that link only (HttpOnly, Path=/ws/oturl). The address bar keeps only the link id (?link=).
Reload, ReconnectSame browser only, within Oturl:ReconnectMinutes (10) of the last disconnect and Oturl:MaxLifetimeHours (12) of the first open.
MoreA live connection ends at that hour too (max_duration).
Network dropThe page reconnects by itself for 60 seconds.
MoreIt shows Reconnecting… and reuses the credentials the user typed, which only the page's memory holds. It never retries a rejected sign-in, a used or expired link, or an Anping server restart.
Another tabThe newest connection wins; the older page offers Use here.
MoreOne connection at a time: a reload, a reconnect or another tab of the same browser takes over at once. The older page shows This desktop was opened in another tab or window.
No input, time limitThe session and the link end after Sessions:IdleTimeoutMinutes (60) idle or Sessions:MaxDurationMinutes (720).
MoreInput is what the user sends through the page: keys, mouse, touch, clipboard and file transfers; a video playing on the remote does not count. A countdown shows a minute before the idle end (any input takes it back) and five minutes before the time limit. No reload or Reconnect after either.
End, DisconnectEnd closes the link for good; Disconnect keeps the reconnect window.
MoreEnd asks first, so the next person at a shared computer can't reload into the session. Either way Windows keeps the session signed in (disconnected) until its own time limits end it.
Anping server restartEvery session ends; users need a new link.
MoreLinks live in the Anping server's memory. A restart or deploy shows The remote desktop service restarted.
Anyone elseOne message for used, expired, unknown or wrong links.
MoreThis link has already been used or has expired.
Missing user name or passwordThe page asks; used for that connection only, never stored.
MoreThe user name and password the link lacks go to the Anping server for that one connection. Failed sign-ins are limited (below).

Sign-in limits

So a link holder can't guess Windows passwords through Anping.

LimitDefaultThen
Per link5 in a row (Oturl:MaxSignInFailures)The link locks. Waits of 2, 4, 8, 16 seconds in between (Oturl:SignInDelaySeconds).
MoreAn accepted sign-in starts the count again. The page waits by itself before the next typed sign-in.
Link with its own user name and password1Locked at the first rejection, so the Windows account never locks out.
Per network20 in 10 min (Oturl:MaxSignInFailuresPerIp, Oturl:SignInFailureWindowMinutes)Sign-ins typed from that network wait until the 10 minutes are over.
MoreCounted across links, per address (IPv6: per /64).
Messages and what is not covered

Security

TopicIn short
Link secretsLong random secrets (256-bit), stored only in scrambled form (a hash), and removed from the address bar at once.
MoreOnly SHA-256 hashes of key and pass are kept. The page removes both before anything else and sends no Referer (Referrer-Policy: no-referrer).
API keysChecked safely (in constant time); several at once so you can swap them; at least 32 characters.
MoreOutside Development the Anping server won't start with the public dev key or a key under 32 characters: make keys with openssl rand -hex 32.
Which computersOnly Oturl:AllowedComputers, so a stolen key can't reach other machines.
MoreA host, a host and port, or an IP range. Names are not resolved; an empty list allows only models.
Computer certificatesSign-in checked first (NLA); only computers with a certificate trusted for their name, or pinned (SHA-256).
MoreA refused certificate ends the session with target_cert_invalid, and the Anping server log says what the computer presents (certificates).
LimitsA request can turn features off, never on beyond the model's limits (Allow flags).
MoreAllowCopy, AllowPaste, AllowUpload, AllowDownload, AllowAudio and AllowPrinting bind requests and profiles alike. A model that starts a program keeps it unless AllowProgramOverride. Links to a computer from the request: Oturl:ComputerPolicy.
Attempt limitsWrong keys and failed link opens are limited per network address; users can never block your program.
MoreAfter 10 wrong API keys in a minute from one address (IPv6: per /64), further wrong keys get 429 for the rest of that minute; a valid key is never blocked. 30 failed link opens in a minute from one address block opening links for that minute. Reconnects are never counted. Sign-ins: own limits.
Browser protectionsStandard browser protections in every answer (CSP, nosniff, Permissions Policy, HSTS). Only the link page can be shown in a frame, and only on Oturl:FrameAncestors.
MoreOn every answer: Content Security Policy, X-Content-Type-Options: nosniff, a Permissions Policy, and HSTS over https; no Server header; request bodies up to 64 KB. Every answer but /oturl.html: frame-ancestors 'none' and X-Frame-Options: DENY.
LogsAnping's logs never hold web addresses, keys, passes or passwords.
MoreA test checks this. Your proxies and telemetry may record URLs: drop query strings for /ws/oturl/get, /ws/log and /oturl.html, or use POST.
Server side onlyThe browser never sends a computer name, port or connection setting.
MoreIt adds only its display size and time zone (the Anping server checks both), and the user name and password a link lacks, typed by its user.
Time and size, start checksSession time and shared-folder size limits (lifetime, settings); unsafe settings stop the Anping server (host).

Connection log

One line per session: who (apiuser), the link's code, the computer, the user's network address, start, duration, how it ended and how many reconnects. No passwords or keys. You read it with an API key:

WhereHow
Page/log.html: paste the key, pick the days, filter, then Show or Download CSV.
MoreFilter by apiuser or link id. Totals show above the list, and how each session ended as a label with a mark: ✓ normal, ⚠ a limit or a dropped connection, ✕ a failure, ◐ still running. Your product's name or logo, if set, heads the page. It works on a phone.
APIGET|POST /ws/log, as format=json or csv.
MoreParameters: apikey (a POST form keeps it out of URLs), from and to (yyyy-MM-dd, UTC days; by default the last 7 days), apiuser, linkid, model, limit, format (csv for Excel). Wrong keys here are counted apart, so they never block link creation.
StorageIn the folder ConnectionLog:Path, kept ConnectionLog:RetentionDays (90) days.
MoreJSON Lines files on a volume only the Anping server mounts; older days are deleted. No path: kept in memory, and a restart loses it.
HelpdeskThe Reference in the message box when a session ends, and the computer name Windows sees (Anping-…), both find the line.
MoreWhen a session ends the page shows Reference: <link id>, <UTC time>. Windows sees the client as Anping- and the first 8 characters of the link id (%CLIENTNAME%, Task Manager), unless the model sets ClientName.
How it endedclosed, page_closed, taken_over, ended, gateway_stop or an error code.
Moreclosed: Disconnect, or the remote ended. page_closed: the page was closed or reloaded. taken_over: the same browser opened the link again. ended: End session. gateway_stop: an Anping server stop or crash still ends each record. Error codes such as auth_failed, target_cert_invalid, idle_timeout, max_duration, drive_full. A session the license refused has a line too, ended at once: license_limit (all licensed sessions in use) or license_expired.

License

GET|POST /ws/license with the API key answers the license and the sessions in use, as JSON; /log.html shows the same on top (install and renew).

More

Dry run

/ws/oturl/check takes the same request as /ws/oturl/get but never makes a link. Its answer (JSON) lists every problem and what the link would get (use it with the replay tool).

More

Anping server settings

Set these in appsettings.json or as environment variables, where : is written __ (Oturl__ApiKeys__0). Keep keys and passwords in a secret store. Each table shows the setting, its default and what it means.

One-time links

SettingDefaultMeaning
Oturl:ApiKeysnoneThe API keys Anping accepts. None set: every request gets error 401.
MoreEach at least 32 random characters outside Development.
Oturl:AllowedComputersnoneWhich computers a request may name in computer: host, host:port or a range of addresses (CIDR).
Morehost allows any port; a range such as 10.0.0.0/24 matches IP addresses.
Oturl:ComputerPolicy:
AllowCopy, AllowPaste,
AllowUpload, AllowDownload,
AllowAudio, AllowPrinting
trueLimits for computers named in the request.
Oturl:FrameAncestorsnoneSites (origins) that may show the link page (/oturl.html) in a frame.
Morehttps://app.example.com (http or https, host and port, no path or trailing slash) or 'self'. Other entries are ignored.
Oturl:DefaultExpiresMinutes
Oturl:MaxExpiresMinutes
10, 1440expires when not given, and its largest value.
Oturl:ReconnectMinutes10How long a link can reconnect after each disconnect.
Oturl:MaxLifetimeHours12This long after the first open, no new connection, and a live one ends.
Oturl:MaxLinks10000Links Anping holds at once; beyond that, error 503.
Oturl:MaxLinksPerKeyPerMinute300Links per key per minute; beyond that, error 429.
Oturl:MaxFailuresPerMinute10Wrong keys per network address per minute; beyond that, error 429.
Oturl:MaxLinkFailuresPerMinute30Failed link opens per network address per minute; beyond that, error 429.
Oturl:MaxSignInFailures
Oturl:SignInDelaySeconds
5, 2Failures in a row that lock a link; first wait, doubled per failure (sign-in limits).
Oturl:MaxSignInFailuresPerIp
Oturl:SignInFailureWindowMinutes
20, 10Failed typed sign-ins per network address, across links, in that many minutes.
Oturl:DefaultDiskName
Oturl:DefaultPrinterName
Anping, Anping PDF PrinterNames when neither model nor request gives diskname or printername.

Computers named in links (Oturl:ComputerSettings:N)

For a computer a link names in computer. Without an entry, the early sign-in check (NLA) is on and the certificate must be trusted for its name. A link can change only disablenla.

SettingDefaultMeaning
Computerrequiredhost or host:port (wins over host); no address ranges.
SecuritynlaAs for a model; tls for a computer without the early sign-in check (NLA).
CertFingerprintsnoneFingerprints (SHA-256) its certificate may have; list several while you replace a certificate (certificates).
MoreWritten sha256:...
IgnoreCertfalseNo certificate check. For development and lab servers only.

Computers and models (Targets:N)

SettingDefaultMeaning
Id, Namerequired, the IdThe model value; the toolbar's name.
Host, Portrequired, 3389The Windows computer (it listens for remote desktop on port 3389).
Username, Password,
Domain
noneMissing ones come from the request or the user.
Securitynlanla, nla-ext, tls, vmconnect, any or rdp.
Moretls is for a computer without NLA. any and rdp allow standard RDP security, which has no certificate check: the startup log warns.
CertFingerprintsnoneFingerprints (SHA-256) its certificate may have; without them it must be trusted for the name in Host (certificates).
IgnoreCertfalseNo certificate check. For development and lab servers only.
MoreElsewhere the Anping server won't start with it, unless Dev:AllowIgnoreCert is set.
KeyboardLayouten-us-qwertyThe session's keyboard layout, by the desktop engine's names (de-de-qwertz).
AllowCopy, AllowPaste,
AllowUpload, AllowDownload,
AllowAudio, AllowPrinting
trueLimits no request can raise.
MoreCopy from the remote, paste to it, file transfer each way, sound, printer. false: no link can turn that on.
ClipboardLineEndingswindowsHow copied text ends its lines: windows, unix or preserve.
TimeZonethe browser'sOne time zone (IANA name, such as Asia/Taipei) for every session.
MoreEmpty: each browser's own. Windows applies either only with a policy turned on (Windows computers).
ClientNameAnping- + 8 characters of the link idThe computer name Windows sees for the user.
More%CLIENTNAME%: 1 to 15 letters, digits, - or _. Never put a user name or secret here.
TouchMouseMouse, or Native: Windows' own multi-touch (not yet tried with Windows).
MoreMouse: touches work as a mouse on any computer. Native: multi-touch once Windows opens that channel, a mouse until then.
WindowsImeunsetThe toolbar's Windows IME menu: true for everyone, false for no one.
MoreUnset: only when the browser's languages include Chinese, Japanese or Korean. Never without a mouse or trackpad.
AllowProgramOverridefalsetrue: overrideDefaults=true may replace the model's program, as Thinfinity does.
Oturl:<parameter>noneAny link option, such as Targets__0__Oturl__startprg=2.
MoreNot computer or credentials, which are the fields above. A bad value stops the Anping server outside Development and is a warning in it.
Settings no request can set

TimeZone, ClientName, Touch and WindowsIme are not OTURL parameters: a request can't set them, in any mode. An unknown TimeZone or an invalid ClientName is a warning in the startup log and is dropped.

Address, load balancer and limits

SettingDefaultMeaning
ASPNETCORE_ENVIRONMENTProductionProduction refuses unsafe settings; Development only warns.
MoreThe image's default. Outside Development the Anping server refuses to start when an API key is the public dev key or shorter than 32 characters, dev pages or the dev network simulation are on, the proxy setting below is missing, AllowedHosts is *, or a setting is invalid; the log says which. Development is for your own computer only.
AllowedHostslocalhost;127.0.0.1;[::1]The names Anping answers to: add your public name; never *.
ForwardedHeaders:KnownNetworksnoneThe networks (CIDR) of your load balancer that handles https (TLS proxy).
MoreOnly from there do X-Forwarded-For and X-Forwarded-Proto count: the client address for rate limits, https for HSTS and cookies.
ForwardedHeaders:NoProxyfalsetrue: browsers connect directly, with no load balancer. Outside development, set this or the one above.
Tunnel:MaxSessions100Sessions plus connections being set up, per Anping server; beyond that the page says it is busy.
MoreThe license's number of sessions applies too; the smaller one counts.
License:Path/etc/anping/license/anping.licenseThe license file (license). Read again at every new session, so a renewal needs no restart.
License:ContentnoneThe license file's content instead of a file (environment variable License__Content); wins over the path.
MoreNeither setting can make Anping trust another signing key: those are built into Anping.
Sessions:IdleTimeoutMinutes60No input this long ends a session (warning a minute before). 0: off.
Sessions:MaxDurationMinutes720 (12 hours)Longest session (warning five minutes before). 0: off.
MoreA link's session also ends at Oturl:MaxLifetimeHours.

Desktop engine, files and log

SettingDefaultMeaning
Guacd:Host, Guacd:Portlocalhost, 4822Where Anping finds its desktop engine (guacd), right next to it; never public (deploying).
Guacd:PrintingfalsePrinting is off by default: no link gets a printer. Set true only if the desktop engine has Ghostscript, which is AGPL-3 or a commercial license from Artifex.
MoreThe desktop engine turns each print job into a PDF with Ghostscript. The official guacamole/guacd:1.6.0 image has it; Anping's own engine image leaves it out.
Files:DriveRootnoneFolder for the shared folders, at the same path for Anping and the desktop engine.
MoreEmpty: no file transfer at all, and diskenabled silently does nothing.
Files:MaxUploadBytes104857600 (100 MB)Largest upload, and largest automatic download.
Files:DriveQuotaBytes1073741824 (1 GB)The most a session's shared folder may hold. 0: no limit.
MoreAn upload that does not fit is refused (The remote drive is full.); a remote that writes past it ends the session (drive_full), which deletes the drive. The Anping server's own copy of a file it downloads or keeps counts too. The volume needs this times the sessions per replica.
Files:AutoDownloadSettleMs2000How long a saved file must stay untouched before it downloads, in milliseconds.
MoreHow long a file must stay untouched after it was closed or renamed into place. Programs save through temporary files and renames.
Files:QuotaCheckSeconds5How often a shared folder in use is measured.
MoreThe remote's own writes can't be refused, so a fast writer goes over by up to this many seconds of writing before its session ends.
ConnectionLog:Path
ConnectionLog:RetentionDays
none, 90Connection log folder and days kept (0: forever).
MoreOn a volume only the Anping server mounts. Empty: kept in memory, and a restart loses it.

Your brand (Brand)

SettingDefaultMeaning
Brand:ProductNamenoneYour product name in the toolbar and the browser tab, up to 64 characters.
Brand:LogoUrlnoneYour logo: a path on the Anping server or a data:image address, never another site.
MoreToolbar logo and favicon, such as /brand/logo.svg, or a base64 data:image URL (png, svg+xml, webp, jpeg or gif). No other host, so no third party learns who opens a desktop.
Brand:AccentColorbuilt inYour colour: #rgb or #rrggbb.
When unset

The page names no product: the tab title says Remote desktop, the toolbar has no name, and the accent colour is the built-in one. The page reads these from GET /api/brand. Invalid values are a warning in the startup log and are dropped.