0

I want to control systemd services and daemons through dbus in nodejs

each time I want to connect to the system bus and run a command the program hangs in an infinite loop

I used node-dbus

const dbus = require("dbus");

const someBus = dbus.getBus('system');

someBus.getInterface('org.freedesktop.systemd1',
  '/org/freedesktop/systemd1',
  (err, interface) => {
  if (err) throw new Error(err)
  console.log(interface)
})
Ali Sawari
  • 33
  • 7

1 Answers1

1

The documentation says getInterface takes four parameters:

Bus.prototype.getInterface(serviceName, objectPath, interfaceName, callback)

You appear to have missed the interfaceName parameter. Looking at the interfaces available at that serviceName and objectPath it seems that you want org.freedesktop.systemd1.Manager

$ busctl introspect org.freedesktop.systemd1 /org/freedesktop/systemd1 | grep interface
org.freedesktop.DBus.Introspectable       interface -                -                                        -
org.freedesktop.DBus.Peer                 interface -                -                                        -
org.freedesktop.DBus.Properties           interface -                -                                        -
org.freedesktop.systemd1.Manager          interface -                -                                        -

So it should look like this:

const dbus = require("dbus");

const someBus = dbus.getBus('system');

someBus.getInterface('org.freedesktop.systemd1',
  '/org/freedesktop/systemd1', 'org.freedesktop.systemd1.Manager',
  (err, interface) => {
  if (err) throw new Error(err)
  console.log(interface)
})

The list of methods on that interface are:

$ busctl introspect org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager | grep method
.AbandonScope                             method    s                -                                        -
.AddDependencyUnitFiles                   method    asssbb           a(sss)                                   -
.AttachProcessesToUnit                    method    ssau             -                                        -
.CancelJob                                method    u                -                                        -
.ClearJobs                                method    -                -                                        -
.DisableUnitFiles                         method    asb              a(sss)                                   -
.Dump                                     method    -                s                                        -
.DumpByFileDescriptor                     method    -                h                                        -
.EnableUnitFiles                          method    asbb             ba(sss)                                  -
.Exit                                     method    -                -                                        -
.GetDefaultTarget                         method    -                s                                        -
.GetDynamicUsers                          method    -                a(us)                                    -
.GetJob                                   method    u                o                                        -
.GetJobAfter                              method    u                a(usssoo)                                -
.GetJobBefore                             method    u                a(usssoo)                                -
.GetUnit                                  method    s                o                                        -
.GetUnitByControlGroup                    method    s                o                                        -
.GetUnitByInvocationID                    method    ay               o                                        -
.GetUnitByPID                             method    u                o                                        -
.GetUnitFileLinks                         method    sb               as                                       -
.GetUnitFileState                         method    s                s                                        -
.GetUnitProcesses                         method    s                a(sus)                                   -
.Halt                                     method    -                -                                        -
.KExec                                    method    -                -                                        -
.KillUnit                                 method    ssi              -                                        -
.LinkUnitFiles                            method    asbb             a(sss)                                   -
.ListJobs                                 method    -                a(usssoo)                                -
.ListUnitFiles                            method    -                a(ss)                                    -
.ListUnitFilesByPatterns                  method    asas             a(ss)                                    -
.ListUnits                                method    -                a(ssssssouso)                            -
.ListUnitsByNames                         method    as               a(ssssssouso)                            -
.ListUnitsByPatterns                      method    asas             a(ssssssouso)                            -
.ListUnitsFiltered                        method    as               a(ssssssouso)                            -
.LoadUnit                                 method    s                o                                        -
.LookupDynamicUserByName                  method    s                u                                        -
.LookupDynamicUserByUID                   method    u                s                                        -
.MaskUnitFiles                            method    asbb             a(sss)                                   -
.PowerOff                                 method    -                -                                        -
.PresetAllUnitFiles                       method    sbb              a(sss)                                   -
.PresetUnitFiles                          method    asbb             ba(sss)                                  -
.PresetUnitFilesWithMode                  method    assbb            ba(sss)                                  -
.Reboot                                   method    -                -                                        -
.ReenableUnitFiles                        method    asbb             ba(sss)                                  -
.Reexecute                                method    -                -                                        -
.RefUnit                                  method    s                -                                        -
.Reload                                   method    -                -                                        -
.ReloadOrRestartUnit                      method    ss               o                                        -
.ReloadOrTryRestartUnit                   method    ss               o                                        -
.ReloadUnit                               method    ss               o                                        -
.ResetFailed                              method    -                -                                        -
.ResetFailedUnit                          method    s                -                                        -
.RestartUnit                              method    ss               o                                        -
.RevertUnitFiles                          method    as               a(sss)                                   -
.SetDefaultTarget                         method    sb               a(sss)                                   -
.SetEnvironment                           method    as               -                                        -
.SetExitCode                              method    y                -                                        -
.SetUnitProperties                        method    sba(sv)          -                                        -
.StartTransientUnit                       method    ssa(sv)a(sa(sv)) o                                        -
.StartUnit                                method    ss               o                                        -
.StartUnitReplace                         method    sss              o                                        -
.StopUnit                                 method    ss               o                                        -
.Subscribe                                method    -                -                                        -
.SwitchRoot                               method    ss               -                                        -
.TryRestartUnit                           method    ss               o                                        -
.UnmaskUnitFiles                          method    asb              a(sss)                                   -
.UnrefUnit                                method    s                -                                        -
.UnsetAndSetEnvironment                   method    asas             -                                        -
.UnsetEnvironment                         method    as               -                                        -
.Unsubscribe                              method    -                -                                        -
ukBaz
  • 6,985
  • 2
  • 8
  • 31
  • is there any official documentation for each of these methods as well? I have read some code for python dbus, and i could get some of the arguments for the `StartUnit` method but thats just it – Ali Sawari Feb 14 '22 at 22:53
  • 1
    The documentation is at: https://www.freedesktop.org/software/systemd/man/org.freedesktop.systemd1.html – ukBaz Feb 15 '22 at 05:52