dbus-native
Version:
D-bus protocol implementation in native javascript
39 lines (35 loc) • 1.19 kB
JavaScript
// read dbus adress from window selection
const x11 = require('x11');
const fs = require('fs');
const os = require('os');
function getDbusAddress(callback) {
// read machine uuid
fs.readFile('/var/lib/dbus/machine-id', 'ascii', function(err, uuid) {
if (err) return callback(err);
var hostname = os.hostname().split('-')[0];
x11.createClient(function(err, display) {
var X = display.client;
var selectionName = `_DBUS_SESSION_BUS_SELECTION_${
hostname
}_${uuid.trim()}`;
X.InternAtom(false, selectionName, function(err, id) {
if (err) return callback(err);
X.GetSelectionOwner(id, function(err, win) {
if (err) return callback(err);
X.InternAtom(false, '_DBUS_SESSION_BUS_ADDRESS', function(
err,
propId
) {
if (err) return callback(err);
win = display.screen[0].root;
X.GetProperty(0, win, propId, 0, 0, 10000000, function(err, val) {
if (err) return callback(err);
callback(null, val.data.toString());
});
});
});
});
});
});
}
module.exports = getDbusAddress;