x11
v3.1.3
Published
A pure node.js JavaScript client implementing X Window (X11) protocol and extensions.
Downloads
26,138
Maintainers
Readme
node-x11
X11 protocol client for Node.js: implements the core X11 protocol, as well as Xrender, Damage, Composite, Big-Requests, Dpms, Screensaver, XFixes, Shape, XTest, XC-Misc, GLX, and Apple-WM extensions.
Documentation & live demos: https://sidorares.github.io/node-x11/ — the
playground runs ordinary
node-x11 code in your browser against a pure-JavaScript X server (lib/xserver)
that ships with this package, including OpenGL via GLX-over-WebGL.
The client also runs in browsers: DISPLAY strings accept a pluggable
protocol prefix (x11.registerDisplayProtocol(name, connect) +
myproto/host:0), and createClient({ stream }) accepts any duplex stream.
See the custom transports guide.
Install
npm install x11Windows users:
Example
Core requests usage:
const x11 = require('x11');
const { Exposure, PointerMotion } = x11.eventMask;
x11.createClient((err, display) => {
if (err) {
console.log(err);
return;
}
const X = display.client;
const root = display.screen[0].root;
const wid = X.AllocID();
X.CreateWindow(
wid,
root, // new window id, parent
0,
0,
500,
500, // x, y, w, h
0,
0,
0,
0, // border, depth, class, visual
{ eventMask: Exposure | PointerMotion } // other parameters
);
X.MapWindow(wid);
const white = display.screen[0].white_pixel;
const black = display.screen[0].black_pixel;
const cidBlack = X.AllocID();
const cidWhite = X.AllocID();
X.CreateGC(cidBlack, wid, { foreground: black, background: white });
X.CreateGC(cidWhite, wid, { foreground: white, background: black });
X.on('event', ev => {
if (ev.type === 12) {
X.PolyFillRectangle(wid, cidWhite, [0, 0, 500, 500]);
X.PolyText8(wid, cidBlack, 50, 50, ['Hello, Node.JS!']);
}
});
X.on('error', e => {
console.log(e);
});
});Screenshots
In use
- ntk - higher level toolkit on top of X11
- node-remote - media center controller
- tiles - tiling window manager
- vnc - vnc client.
- node-ewmh - set of EWMH helpers.
- OdieWM - window manager
- Dbusmenu - unity global menu client.
- AirWM - tiling window manager
- npdf - pdf viewer
- tinywm The famous TinyWM written in node.js
- basedwm Infinite-desktop panning X window manager in LiveScript
X11 resources/documentation:
- Xplain - A series of articles to help explain the X Window System http://magcius.github.io/xplain/article/
- Official X11 docs
- protocol specification
- C Xlib to X11 request mapping table http://tronche.com/gui/x/xlib/appendix/a.html
- How to write composite manager
- Extended Window Manager Hints specification
Other implementations
- C: XLib - http://www.sbin.org/doc/Xlib/ http://www.tronche.com/gui/x/xlib/ http://www.x.org/docs/X11/xlib.pdf
- C: XCB - http://xcb.freedesktop.org/
- Python: http://sourceforge.net/projects/python-xlib/ ( github fork: https://github.com/Ademan/python-xlib-branch pypi: http://pypi.python.org/pypi/Python%20Xlib )
- https://github.com/alexer/python-xlib-render
- Python/twisted: https://launchpad.net/twisted-x11
- Perl: http://search.cpan.org/~smccam/X11-Protocol-0.56/Protocol.pm
- Go: https://github.com/BurntSushi/xgb
- Java: https://github.com/xderoche/J11
- Java: https://github.com/moaxcp/x11
- Ruby: https://github.com/dj2/x-ruby-bindings
- Clojure: https://github.com/noodlewiz/xcljb
- Guile: https://github.com/mwitmer/guile-xcb
- Emacs lisp: https://github.com/ch11ng/xelb ( autogenerated from XCB XML )
Server side (protocol + functionality) implementations for js + DOM
would be really great to make completely web based playground page, connecting node-x11 api to DOM based implementation
- https://github.com/GothAck/javascript-x-server
- https://github.com/ttaubert/x-server-js
