]> git.proxmox.com Git - mirror_novnc.git/blame - docs/API.md
Use markdown-style tables instead of <table>
[mirror_novnc.git] / docs / API.md
CommitLineData
f8d08e7b 1# 1. Modules / API
5ce91550
SM
2
3The noVNC client is a composed of several modular components that handle
4rendering, input, networking, etc. Each of the modules is designed to
5be cross-browser and be useful as a standalone library in other
6projects (see LICENSE.txt).
7
8
f8d08e7b 9## 1.1 Module List
5ce91550 10
2b12429e 11* __Mouse__ (core/input/devices.js): Mouse input event handler with
5ce91550
SM
12limited touch support.
13
2b12429e 14* __Keyboard__ (core/input/devices.js): Keyboard input event handler with
5ce91550
SM
15non-US keyboard support. Translates keyDown and keyUp events to X11
16keysym values.
17
2b12429e 18* __Display__ (core/display.js): Efficient 2D rendering abstraction
5ce91550
SM
19layered on the HTML5 canvas element.
20
2b12429e 21* __Websock__ (core/websock.js): Websock client from websockify
5ce91550
SM
22with transparent binary data support.
23[Websock API](https://github.com/kanaka/websockify/wiki/websock.js) wiki page.
24
2b12429e 25* __RFB__ (core/rfb.js): Main class that implements the RFB
5ce91550
SM
26protocol and stitches the other classes together.
27
28
f8d08e7b 29## 1.2 Configuration Attributes
5ce91550
SM
30
31The Mouse, Keyboard, Display and RFB classes have a similar API for
32configuration options. Each configuration option has a default value,
33which can be overridden by a a configuration object passed to the
34constructor. Configuration options can then be read and modified after
35initialization with "get_*" and "set_*" methods respectively. For
36example, the following initializes an RFB object with the 'encrypt'
37configuration option enabled, then confirms it was set, then disables
38it.
39
40 var rfb = new RFB({'encrypt': true});
41 if (rfb.get_encrypt()) {
42 alert("Encryption is set");
43 }
44 rfb.set_encrypt(false);
45
46Some attributes are read-only and cannot be changed. For example, the
47Display 'render_mode' option will throw an exception if an attempt is
48made to set it. The attribute mode is one of the following:
49
50 RO - read only
51 RW - read write
52 WO - write once
53
54
f8d08e7b 55## 1.3 Methods
5ce91550
SM
56
57In addition to the getter and setter methods to modify configuration
58attributes, each of the modules has other methods that are available
59in the object instance. For example, the Display module has method
60named 'blitImage' which takes an array of pixel data and draws it to
61the 2D canvas.
62
f8d08e7b 63## 1.4 Callbacks
5ce91550
SM
64
65Each of the modules has certain events that can be hooked with
66callback functions. For the Mouse, Keyboard, Display and RFB classes
67the callback functions are assigned to configuration attributes. The
68WebSock module has a method named 'on' that takes two parameters: the
69callback event name, and the callback function.
70
f8d08e7b 71## 2. Modules
5ce91550 72
f8d08e7b 73## 2.1 Mouse Module
5ce91550 74
f5d40c6a
SM
75### 2.1.1 Configuration Attributes
76
77| name | type | mode | default | description
78| ----------- | ---- | ---- | -------- | ------------
79| target | DOM | WO | document | DOM element that captures mouse input
80| focused | bool | RW | true | Capture and send mouse clicks/movement
81| touchButton | int | RW | 1 | Button mask (1, 2, 4) for which click to send on touch devices. 0 means ignore clicks.
82
83### 2.1.2 Methods
84
85| name | parameters | description
86| ------ | ---------- | ------------
87| grab | () | Begin capturing mouse events
88| ungrab | () | Stop capturing mouse events
89
90### 2.1.2 Callbacks
91
92| name | parameters | description
93| ------------- | ------------------- | ------------
94| onMouseButton | (x, y, down, bmask) | Handler for mouse button click/release
95| onMouseMove | (x, y) | Handler for mouse movement
5ce91550
SM
96
97
f8d08e7b 98## 2.2 Keyboard Module
5ce91550 99
f5d40c6a
SM
100### 2.2.1 Configuration Attributes
101
102| name | type | mode | default | description
103| ------- | ---- | ---- | -------- | ------------
104| target | DOM | WO | document | DOM element that captures keyboard input
105| focused | bool | RW | true | Capture and send key events
106
107### 2.2.2 Methods
108
109| name | parameters | description
110| ------ | ---------- | ------------
111| grab | () | Begin capturing keyboard events
112| ungrab | () | Stop capturing keyboard events
113
114### 2.2.3 Callbacks
115
116| name | parameters | description
117| ---------- | -------------------- | ------------
118| onKeyPress | (keysym, code, down) | Handler for key press/release
5ce91550
SM
119
120
f8d08e7b 121## 2.3 Display Module
5ce91550 122
f5d40c6a
SM
123### 2.3.1 Configuration Attributes
124
125| name | type | mode | default | description
126| ----------- | ----- | ---- | ------- | ------------
127| target | DOM | WO | | Canvas element for rendering
128| context | raw | RO | | Canvas 2D context for rendering
129| logo | raw | RW | | Logo to display when cleared: {"width": width, "height": height, "type": mime-type, "data": data}
130| scale | float | RW | 1.0 | Display area scale factor 0.0 - 1.0
131| viewport | bool | RW | false | Use viewport clipping
132| width | int | RO | | Display area width
133| height | int | RO | | Display area height
134| render_mode | str | RO | '' | Canvas rendering mode
135| prefer_js | str | RW | | Prefer JavaScript over canvas methods
136| cursor_uri | raw | RW | | Can we render cursor using data URI
137
138### 2.3.2 Methods
139
140| name | parameters | description
141| ------------------ | ------------------------------------------------------- | ------------
142| viewportChangePos | (deltaX, deltaY) | Move the viewport relative to the current location
143| viewportChangeSize | (width, height) | Change size of the viewport
144| absX | (x) | Return X relative to the remote display
145| absY | (y) | Return Y relative to the remote display
146| resize | (width, height) | Set width and height
147| flip | (from_queue) | Update the visible canvas with the contents of the rendering canvas
148| clear | () | Clear the display (show logo if set)
149| pending | () | Check if there are waiting items in the render queue
150| flush | () | Resume processing the render queue unless it's empty
151| fillRect | (x, y, width, height, color, from_queue) | Draw a filled in rectangle
152| copyImage | (old_x, old_y, new_x, new_y, width, height, from_queue) | Copy a rectangular area
153| imageRect | (x, y, mime, arr) | Draw a rectangle with an image
154| startTile | (x, y, width, height, color) | Begin updating a tile
155| subTile | (tile, x, y, w, h, color) | Update a sub-rectangle within the given tile
156| finishTile | () | Draw the current tile to the display
157| blitImage | (x, y, width, height, arr, offset, from_queue) | Blit pixels (of R,G,B,A) to the display
158| blitRgbImage | (x, y, width, height, arr, offset, from_queue) | Blit RGB encoded image to display
159| blitRgbxImage | (x, y, width, height, arr, offset, from_queue) | Blit RGBX encoded image to display
160| drawImage | (img, x, y) | Draw image and track damage
161| changeCursor | (pixels, mask, hotx, hoty, w, h) | Change cursor appearance
162| defaultCursor | () | Restore default cursor appearance
163| disableLocalCursor | () | Disable local (client-side) cursor
164| clippingDisplay | () | Check if the remote display is larger than the client display
165| autoscale | (containerWidth, containerHeight, downscaleOnly) | Scale the display
166
167### 2.3.3 Callbacks
168
169| name | parameters | description
170| ------- | ---------- | ------------
171| onFlush | () | A display flush has been requested and we are now ready to resume FBU processing
5ce91550
SM
172
173
f8d08e7b 174## 2.4 RFB Module
5ce91550 175
f5d40c6a
SM
176### 2.4.1 Configuration Attributes
177
178| name | type | mode | default | description
179| ----------------- | ---- | ---- | ---------- | ------------
180| target | DOM | WO | null | Canvas element for rendering (passed to Display and Mouse)
181| focusContainer | DOM | WO | document | DOM element that captures keyboard input (passed to Keyboard)
182| encrypt | bool | RW | false | Use TLS/SSL encryption
183| local_cursor | bool | RW | false | Request locally rendered cursor
184| shared | bool | RW | true | Request shared VNC mode
185| view_only | bool | RW | false | Disable client mouse/keyboard
186| xvp_password_sep | str | RW | '@' | Separator for XVP password fields
187| disconnectTimeout | int | RW | 3 | Time (in seconds) to wait for disconnection
188| wsProtocols | arr | RW | ['binary'] | Protocols to use in the WebSocket connection
189| repeaterID | str | RW | '' | UltraVNC RepeaterID to connect to
190| viewportDrag | bool | RW | false | Move the viewport on mouse drags
191
192### 2.4.2 Methods
193
194| name | parameters | description
195| ------------------ | ---------------------------- | ------------
196| connect | (host, port, password, path) | Connect to the given host:port/path. Optional password and path.
197| disconnect | () | Disconnect
198| sendPassword | (passwd) | Send password after onPasswordRequired callback
199| sendCtrlAltDel | () | Send Ctrl-Alt-Del key sequence
200| xvpOp | (ver, op) | Send a XVP operation (2=shutdown, 3=reboot, 4=reset)
201| xvpShutdown | () | Send XVP shutdown.
202| xvpReboot | () | Send XVP reboot.
203| xvpReset | () | Send XVP reset.
204| sendKey | (keysym, down) | Send a key press event. If down not specified, send a down and up event.
205| clipboardPasteFrom | (text) | Send a clipboard paste event
206| requestDesktopSize | (width, height) | Send a request to change the remote desktop size.
207
208### 2.4.3 Callbacks
209
210| name | parameters | description
211| ------------------ | -------------------------- | ------------
212| onUpdateState | (rfb, state, oldstate) | Connection state change (see details below)
213| onNotification | (rfb, msg, level, options) | Notification for the UI (optional options)
214| onDisconnected | (rfb, reason) | Disconnection finished with an optional reason. No reason specified means normal disconnect.
215| onPasswordRequired | (rfb, msg) | VNC password is required (use sendPassword), optionally comes with a message.
216| onClipboard | (rfb, text) | RFB clipboard contents received
217| onBell | (rfb) | RFB Bell message received
218| onFBUReceive | (rfb, fbu) | RFB FBU received but not yet processed (see details below)
219| onFBUComplete | (rfb, fbu) | RFB FBU received and processed (see details below)
220| onFBResize | (rfb, width, height) | Frame buffer (remote desktop) size changed
221| onDesktopName | (rfb, name) | VNC desktop name recieved
222| onXvpInit | (version) | XVP extensions active for this connection.
5ce91550
SM
223
224
f8d08e7b 225__RFB onUpdateState callback details__
5ce91550
SM
226
227The RFB module has an 'onUpdateState' callback that is invoked after
228the noVNC connection state changes. Here is a list of the states that
229are reported.
230
f5d40c6a
SM
231| connection state | description
232| ---------------- | ------------
233| connecting | starting to connect
234| connected | connected normally
235| disconnecting | starting to disconnect
236| disconnected | disconnected - permanent end-state for this RFB object
5ce91550 237
f8d08e7b 238__RFB onFBUReceive and on FBUComplete callback details__
5ce91550
SM
239
240The onFBUReceive callback is invoked when a frame buffer update
241message has been received from the server but before the RFB class has
242done any additional handling. The onFBUComplete callback is invoked
243with the same information but after the RFB class has handled the
244message.
245
246The 'fbu' parameter is an object with the following structure:
247
248 {
249 x: FBU_x_position,
df465382 250 y: FBU_y_position,
5ce91550
SM
251 width: FBU_width,
252 height: FBU_height,
253 encoding: FBU_encoding_number,
254 encodingName: FBU_encoding_string
255 }