{
    "content": [
        {
            "type": "text",
            "text": "# org.freedesktop.login1 (man)\n\n## NAME\n\norg.freedesktop.login1 - The D-Bus interface of systemd-logind\n\n## Sections\n\n- **NAME**\n- **INTRODUCTION**\n- **THE MANAGER OBJECT** (4 subsections)\n- **SEAT OBJECTS** (3 subsections)\n- **USER OBJECTS** (3 subsections)\n- **SESSION OBJECTS** (3 subsections)\n- **EXAMPLES** (4 subsections)\n- **VERSIONING**\n- **NOTES**\n\nUse structuredContent.sections for detailed options, examples, and full documentation.\n"
        }
    ],
    "structuredContent": {
        "command": "org.freedesktop.login1",
        "section": "",
        "mode": "man",
        "summary": "org.freedesktop.login1 - The D-Bus interface of systemd-logind",
        "synopsis": null,
        "tldr_summary": null,
        "tldr_examples": [],
        "tldr_source": null,
        "flags": [],
        "examples": [
            "$ gdbus introspect --system --dest org.freedesktop.login1 \\",
            "--object-path /org/freedesktop/login1",
            "$ gdbus introspect --system --dest org.freedesktop.login1 \\",
            "--object-path /org/freedesktop/login1/seat/seat0",
            "$ gdbus introspect --system --dest org.freedesktop.login1 \\",
            "--object-path /org/freedesktop/login1/user/1000",
            "$ gdbus introspect --system --dest org.freedesktop.login1 \\",
            "--object-path /org/freedesktop/login1/session/45"
        ],
        "see_also": [],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "INTRODUCTION",
                "lines": 7,
                "subsections": []
            },
            {
                "name": "THE MANAGER OBJECT",
                "lines": 310,
                "subsections": [
                    {
                        "name": "Methods",
                        "lines": 130
                    },
                    {
                        "name": "Signals",
                        "lines": 15
                    },
                    {
                        "name": "Properties",
                        "lines": 46
                    },
                    {
                        "name": "Security",
                        "lines": 35
                    }
                ]
            },
            {
                "name": "SEAT OBJECTS",
                "lines": 41,
                "subsections": [
                    {
                        "name": "Methods",
                        "lines": 8
                    },
                    {
                        "name": "Signals",
                        "lines": 3
                    },
                    {
                        "name": "Properties",
                        "lines": 14
                    }
                ]
            },
            {
                "name": "USER OBJECTS",
                "lines": 57,
                "subsections": [
                    {
                        "name": "Methods",
                        "lines": 3
                    },
                    {
                        "name": "Signals",
                        "lines": 3
                    },
                    {
                        "name": "Properties",
                        "lines": 31
                    }
                ]
            },
            {
                "name": "SESSION OBJECTS",
                "lines": 129,
                "subsections": [
                    {
                        "name": "Methods",
                        "lines": 53
                    },
                    {
                        "name": "Signals",
                        "lines": 30
                    },
                    {
                        "name": "Properties",
                        "lines": 55
                    }
                ]
            },
            {
                "name": "EXAMPLES",
                "lines": 1,
                "subsections": [
                    {
                        "name": "Example 1. Introspect org.freedesktop.login1.Manager on the bus",
                        "lines": 4
                    },
                    {
                        "name": "Example 2. Introspect org.freedesktop.login1.Seat on the bus",
                        "lines": 4
                    },
                    {
                        "name": "Example 3. Introspect org.freedesktop.login1.User on the bus",
                        "lines": 4
                    },
                    {
                        "name": "Example 4. Introspect org.freedesktop.login1.Session on the bus",
                        "lines": 4
                    }
                ]
            },
            {
                "name": "VERSIONING",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "NOTES",
                "lines": 15,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "org.freedesktop.login1 - The D-Bus interface of systemd-logind\n",
                "subsections": []
            },
            "INTRODUCTION": {
                "content": "systemd-logind.service(8) is a system service that keeps track of user logins and seats.\n\nThe daemon provides both a C library interface as well as a D-Bus interface. The library\ninterface may be used to introspect and watch the state of user logins and seats. The bus\ninterface provides the same functionality but in addition may also be used to make changes to\nthe system state. For more information please consult sd-login(3).\n",
                "subsections": []
            },
            "THE MANAGER OBJECT": {
                "content": "The service exposes the following interfaces on the Manager object on the bus:\n\nnode /org/freedesktop/login1 {\ninterface org.freedesktop.login1.Manager {\nmethods:\nGetSession(in  s sessionid,\nout o objectpath);\nGetSessionByPID(in  u pid,\nout o objectpath);\nGetUser(in  u uid,\nout o objectpath);\nGetUserByPID(in  u pid,\nout o objectpath);\nGetSeat(in  s seatid,\nout o objectpath);\nListSessions(out a(susso) sessions);\nListUsers(out a(uso) users);\nListSeats(out a(so) seats);\nListInhibitors(out a(ssssuu) inhibitors);\nCreateSession(in  u uid,\nin  u pid,\nin  s service,\nin  s type,\nin  s class,\nin  s desktop,\nin  s seatid,\nin  u vtnr,\nin  s tty,\nin  s display,\nin  b remote,\nin  s remoteuser,\nin  s remotehost,\nin  a(sv) properties,\nout s sessionid,\nout o objectpath,\nout s runtimepath,\nout h fifofd,\nout u uid,\nout s seatid,\nout u vtnr,\nout b existing);\nReleaseSession(in  s sessionid);\nActivateSession(in  s sessionid);\nActivateSessionOnSeat(in  s sessionid,\nin  s seatid);\nLockSession(in  s sessionid);\nUnlockSession(in  s sessionid);\nLockSessions();\nUnlockSessions();\nKillSession(in  s sessionid,\nin  s who,\nin  i signalnumber);\nKillUser(in  u uid,\nin  i signalnumber);\nTerminateSession(in  s sessionid);\nTerminateUser(in  u uid);\nTerminateSeat(in  s seatid);\nSetUserLinger(in  u uid,\nin  b enable,\nin  b interactive);\nAttachDevice(in  s seatid,\nin  s sysfspath,\nin  b interactive);\nFlushDevices(in  b interactive);\nPowerOff(in  b interactive);\nPowerOffWithFlags(in  t flags);\nReboot(in  b interactive);\nRebootWithFlags(in  t flags);\nHalt(in  b interactive);\nHaltWithFlags(in  t flags);\nSuspend(in  b interactive);\nSuspendWithFlags(in  t flags);\nHibernate(in  b interactive);\nHibernateWithFlags(in  t flags);\nHybridSleep(in  b interactive);\nHybridSleepWithFlags(in  t flags);\nSuspendThenHibernate(in  b interactive);\nSuspendThenHibernateWithFlags(in  t flags);\nCanPowerOff(out s result);\nCanReboot(out s result);\nCanHalt(out s result);\nCanSuspend(out s result);\nCanHibernate(out s result);\nCanHybridSleep(out s result);\nCanSuspendThenHibernate(out s result);\nScheduleShutdown(in  s type,\nin  t usec);\nCancelScheduledShutdown(out b cancelled);\nInhibit(in  s what,\nin  s who,\nin  s why,\nin  s mode,\nout h pipefd);\nCanRebootParameter(out s result);\nSetRebootParameter(in  s parameter);\nCanRebootToFirmwareSetup(out s result);\nSetRebootToFirmwareSetup(in  b enable);\nCanRebootToBootLoaderMenu(out s result);\nSetRebootToBootLoaderMenu(in  t timeout);\nCanRebootToBootLoaderEntry(out s result);\nSetRebootToBootLoaderEntry(in  s bootloaderentry);\nSetWallMessage(in  s wallmessage,\nin  b enable);\nsignals:\nSessionNew(s sessionid,\no objectpath);\nSessionRemoved(s sessionid,\no objectpath);\nUserNew(u uid,\no objectpath);\nUserRemoved(u uid,\no objectpath);\nSeatNew(s seatid,\no objectpath);\nSeatRemoved(s seatid,\no objectpath);\nPrepareForShutdown(b start);\nPrepareForSleep(b start);\nproperties:\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\n@org.freedesktop.systemd1.Privileged(\"true\")\nreadwrite b EnableWallMessages = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\n@org.freedesktop.systemd1.Privileged(\"true\")\nreadwrite s WallMessage = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly u NAutoVTs = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly as KillOnlyUsers = ['...', ...];\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly as KillExcludeUsers = ['...', ...];\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly b KillUserProcesses = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly s RebootParameter = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly b RebootToFirmwareSetup = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly t RebootToBootLoaderMenu = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly s RebootToBootLoaderEntry = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly as BootLoaderEntries = ['...', ...];\nreadonly b IdleHint = ...;\nreadonly t IdleSinceHint = ...;\nreadonly t IdleSinceHintMonotonic = ...;\nreadonly s BlockInhibited = '...';\nreadonly s DelayInhibited = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t InhibitDelayMaxUSec = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t UserStopDelayUSec = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s HandlePowerKey = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s HandleSuspendKey = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s HandleHibernateKey = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s HandleLidSwitch = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s HandleLidSwitchExternalPower = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s HandleLidSwitchDocked = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t HoldoffTimeoutUSec = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s IdleAction = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t IdleActionUSec = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly b PreparingForShutdown = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly b PreparingForSleep = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly (st) ScheduledShutdown = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly b Docked = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly b LidClosed = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly b OnExternalPower = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly b RemoveIPC = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t RuntimeDirectorySize = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t RuntimeDirectoryInodesMax = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t InhibitorsMax = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly t NCurrentInhibitors = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t SessionsMax = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly t NCurrentSessions = ...;\n};\ninterface org.freedesktop.DBus.Peer { ... };\ninterface org.freedesktop.DBus.Introspectable { ... };\ninterface org.freedesktop.DBus.Properties { ... };\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
                "subsections": [
                    {
                        "name": "Methods",
                        "content": "GetSession() may be used to get the session object path for the session with the specified\nID. Similarly, GetUser() and GetSeat() get the user and seat objects, respectively.\nGetSessionByPID() and GetUserByPID() get the session/user object the specified PID belongs to\nif there is any.\n\nListSessions() returns an array of all current sessions. The structures in the array consist\nof the following fields: session id, user id, user name, seat id, session object path. If a\nsession does not have a seat attached, the seat id field will be an empty string.\n\nListUsers() returns an array of all currently logged in users. The structures in the array\nconsist of the following fields: user id, user name, user object path.\n\nListSeats() returns an array of all currently available seats. The structure in the array\nconsists of the following fields: seat id, seat object path.\n\nListInhibitors() lists all currently active inhibitors. It returns an array of structures\nconsisting of what, who, why, mode, uid (user ID), and pid (process ID).\n\nCreateSession() and ReleaseSession() may be used to open or close login sessions. These calls\nshould never be invoked directly by clients. Creating/closing sessions is exclusively the job\nof PAM and its pamsystemd(8) module.\n\nActivateSession() brings the session with the specified ID into the foreground.\nActivateSessionOnSeat() does the same, but only if the seat id matches.\n\nLockSession() asks the session with the specified ID to activate the screen lock.\nUnlockSession() asks the session with the specified ID to remove an active screen lock, if\nthere is any. This is implemented by sending out the Lock() and Unlock() signals from the\nrespective session object which session managers are supposed to listen on.\n\nLockSessions() asks all sessions to activate their screen locks. This may be used to lock\naccess to the entire machine in one action. Similarly, UnlockSessions() asks all sessions to\ndeactivate their screen locks.\n\nKillSession() may be used to send a Unix signal to one or all processes of a session. As\narguments it takes the session id, either the string \"leader\" or \"all\" and a signal number.\nIf \"leader\" is passed only the session \"leader\" is killed. If \"all\" is passed all processes\nof the session are killed.\n\nKillUser() may be used to send a Unix signal to all processes of a user. As arguments it\ntakes the user id and a signal number.\n\nTerminateSession(), TerminateUser(), TerminateSeat() may be used to forcibly terminate one\nspecific session, all processes of a user, and all sessions attached to a specific seat,\nrespectively. The session, user, and seat are identified by their respective IDs.\n\nSetUserLinger() enables or disables user lingering. If enabled, the runtime directory of a\nuser is kept around and they may continue to run processes while logged out. If disabled, the\nruntime directory goes away as soon as they log out.  SetUserLinger() expects three\narguments: the UID, a boolean whether to enable/disable and a boolean controlling the\npolkit[1] authorization interactivity (see below). Note that the user linger state is\npersistently stored on disk.\n\nAttachDevice() may be used to assign a specific device to a specific seat. The device is\nidentified by its /sys/ path and must be eligible for seat assignments.  AttachDevice() takes\nthree arguments: the seat id, the sysfs path, and a boolean for controlling polkit\ninteractivity (see below). Device assignments are persistently stored on disk. To create a\nnew seat, simply specify a previously unused seat id. For more information about the seat\nassignment logic see sd-login(3).\n\nFlushDevices() removes all explicit seat assignments for devices, resetting all assignments\nto the automatic defaults. The only argument it takes is the polkit interactivity boolean\n(see below).\n\nPowerOff(), Reboot(), Halt(), Suspend(), and Hibernate() result in the system being powered\noff, rebooted, halted (shut down without turning off power), suspended (the system state is\nsaved to RAM and the CPU is turned off), or hibernated (the system state is saved to disk and\nthe machine is powered down).  HybridSleep() results in the system entering a hybrid-sleep\nmode, i.e. the system is both hibernated and suspended.  SuspendThenHibernate() results in\nthe system being suspended, then later woken using an RTC timer and hibernated. The only\nargument is the polkit interactivity boolean interactive (see below). The main purpose of\nthese calls is that they enforce polkit policy and hence allow powering\noff/rebooting/suspending/hibernating even by unprivileged users. They also enforce inhibition\nlocks for non-privileged users. UIs should expose these calls as the primary mechanism to\npoweroff/reboot/suspend/hibernate the machine. Methods PowerOffWithFlags(),\nRebootWithFlags(), HaltWithFlags(), SuspendWithFlags(), HibernateWithFlags(),\nHybridSleepWithFlags() and SuspendThenHibernateWithFlags() add flags to allow for\nextendability, defined as follows:\n\n#define SDLOGINDROOTCHECKINHIBITORS  (UINT64C(1) << 0)\n#define SDLOGINDKEXECREBOOT           (UINT64C(1) << 1)\n\n\nWhen the flags is 0 then these methods behave just like the versions without flags. When\nSDLOGINDROOTCHECKINHIBITORS (0x01) is set, active inhibitors are honoured for privileged\nusers too. When SDLOGINDKEXECREBOOT (0x02) is set, then RebootWithFlags() perform kexec\nreboot if kexec kernel is loaded.\n\nSetRebootParameter() sets a parameter for a subsequent reboot operation. See the description\nof reboot in systemctl(1) and reboot(2) for more information.\n\nSetRebootToFirmwareSetup(), SetRebootToBootLoaderMenu(), and SetRebootToBootLoaderEntry()\nconfigure the action to be taken from the boot loader after a reboot: respectively entering\nfirmware setup mode, the boot loader menu, or a specific boot loader entry. See systemctl(1)\nfor the corresponding command line interface.\n\nCanPowerOff(), CanReboot(), CanHalt(), CanSuspend(), CanHibernate(), CanHybridSleep(),\nCanSuspendThenHibernate(), CanRebootParameter(), CanRebootToFirmwareSetup(),\nCanRebootToBootLoaderMenu(), and CanRebootToBootLoaderEntry() test whether the system\nsupports the respective operation and whether the calling user is allowed to execute it.\nReturns one of \"na\", \"yes\", \"no\", and \"challenge\". If \"na\" is returned, the operation is not\navailable because hardware, kernel, or drivers do not support it. If \"yes\" is returned, the\noperation is supported and the user may execute the operation without further authentication.\nIf \"no\" is returned, the operation is available but the user is not allowed to execute the\noperation. If \"challenge\" is returned, the operation is available but only after\nauthorization.\n\nScheduleShutdown() schedules a shutdown operation type at time usec in microseconds since the\nUNIX epoch.  type can be one of \"poweroff\", \"dry-poweroff\", \"reboot\", \"dry-reboot\", \"halt\",\nand \"dry-halt\". (The \"dry-\" variants do not actually execute the shutdown action.)\nCancelScheduledShutdown() cancels a scheduled shutdown. The output parameter cancelled is\ntrue if a shutdown operation was scheduled.\n\nSetWallMessage() sets the wall message (the message that will be sent out to all terminals\nand stored in a utmp(5) record) for a subsequent scheduled shutdown operation. The parameter\nwallmessage specifies the shutdown reason (and may be empty) which will be included in the\nshutdown message. The parameter enable specifies whether to print a wall message on shutdown.\n\nInhibit() creates an inhibition lock. It takes four parameters: what, who, why, and mode.\nwhat is one or more of \"shutdown\", \"sleep\", \"idle\", \"handle-power-key\", \"handle-suspend-key\",\n\"handle-hibernate-key\", \"handle-lid-switch\", separated by colons, for inhibiting\npoweroff/reboot, suspend/hibernate, the automatic idle logic, or hardware key handling.  who\nshould be a short human readable string identifying the application taking the lock.  why\nshould be a short human readable string identifying the reason why the lock is taken.\nFinally, mode is either \"block\" or \"delay\" which encodes whether the inhibit shall be\nconsider mandatory or whether it should just delay the operation to a certain maximum time.\nThe method returns a file descriptor. The lock is released the moment this file descriptor\nand all its duplicates are closed. For more information on the inhibition logic see Inhibitor\nLocks[2].\n"
                    },
                    {
                        "name": "Signals",
                        "content": "Whenever the inhibition state or idle hint changes, PropertyChanged signals are sent out to\nwhich clients can subscribe.\n\nThe SessionNew, SessionRemoved, UserNew, UserRemoved, SeatNew, and SeatRemoved signals are\nsent each time a session is created or removed, a user logs in or out, or a seat is added or\nremoved. They each contain the ID of the object plus the object path.\n\nThe PrepareForShutdown() and PrepareForSleep() signals are sent right before (with the\nargument \"true\") or after (with the argument \"false\") the system goes down for\nreboot/poweroff and suspend/hibernate, respectively. This may be used by applications to save\ndata on disk, release memory, or do other jobs that should be done shortly before\nshutdown/sleep, in conjunction with delay inhibitor locks. After completion of this work they\nshould release their inhibition locks in order to not delay the operation any further. For\nmore information see Inhibitor Locks[2].\n"
                    },
                    {
                        "name": "Properties",
                        "content": "Most properties simply reflect the configuration, see logind.conf(5). This includes:\nNAutoVTs, KillOnlyUsers, KillExcludeUsers, KillUserProcesses, IdleAction,\nInhibitDelayMaxUSec, InhibitorsMax, UserStopDelayUSec, HandlePowerKey, HandleSuspendKey,\nHandleHibernateKey, HandleLidSwitch, HandleLidSwitchExternalPower, HandleLidSwitchDocked,\nIdleActionUSec, HoldoffTimeoutUSec, RemoveIPC, RuntimeDirectorySize,\nRuntimeDirectoryInodesMax, InhibitorsMax, and SessionsMax.\n\nThe IdleHint property reflects the idle hint state of the system. If the system is idle it\nmight get into automatic suspend or shutdown depending on the configuration.\n\nIdleSinceHint and IdleSinceHintMonotonic encode the timestamps of the last change of the idle\nhint boolean, in CLOCKREALTIME and CLOCKMONOTONIC timestamps, respectively, in microseconds\nsince the epoch.\n\nThe BlockInhibited and DelayInhibited properties encode the currently active locks of the\nrespective modes. They are colon separated lists of \"shutdown\", \"sleep\", and \"idle\" (see\nabove).\n\nNCurrentSessions and NCurrentInhibitors contain the number of currently registered sessions\nand inhibitors.\n\nThe BootLoaderEntries property contains a list of boot loader entries. This includes boot\nloader entries defined in configuration and any additional loader entries reported by the\nboot loader. See systemd-boot(7) for more information.\n\nThe PreparingForShutdown and PreparingForSleep boolean properties are true during the\ninterval between the two PrepareForShutdown and PrepareForSleep signals respectively. Note\nthat these properties do not send out PropertyChanged signals.\n\nThe RebootParameter property shows the value set with the SetRebootParameter() method\ndescribed above.\n\nScheduledShutdown shows the value pair set with the ScheduleShutdown() method described\nabove.\n\nRebootToFirmwareSetup, RebootToBootLoaderMenu, and RebootToBootLoaderEntry are true when the\nresprective post-reboot operation was selected with SetRebootToFirmwareSetup,\nSetRebootToBootLoaderMenu, or SetRebootToBootLoaderEntry.\n\nThe WallMessage and EnableWallMessages properties reflect the shutdown reason and wall\nmessage enablement switch which can be set with the SetWallMessage() method described above.\n\nDocked is true if the machine is connected to a dock.  LidClosed is true when the lid (of a\nlaptop) is closed.  OnExternalPower is true when the machine is connected to an external\npower supply.\n"
                    },
                    {
                        "name": "Security",
                        "content": "A number of operations are protected via the polkit privilege system.  SetUserLinger()\nrequires the org.freedesktop.login1.set-user-linger privilege.  AttachDevice() requires\norg.freedesktop.login1.attach-device and FlushDevices() requires\norg.freedesktop.login1.flush-devices.  PowerOff(), Reboot(), Halt(), Suspend(), Hibernate()\nrequire org.freedesktop.login1.power-off, org.freedesktop.login1.power-off-multiple-sessions,\norg.freedesktop.login1.power-off-ignore-inhibit, org.freedesktop.login1.reboot,\norg.freedesktop.login1.reboot-multiple-sessions,\norg.freedesktop.login1.reboot-ignore-inhibit, org.freedesktop.login1.halt,\norg.freedesktop.login1.halt-multiple-sessions, org.freedesktop.login1.halt-ignore-inhibit,\norg.freedesktop.login1.suspend, org.freedesktop.login1.suspend-multiple-sessions,\norg.freedesktop.login1.suspend-ignore-inhibit, org.freedesktop.login1.hibernate,\norg.freedesktop.login1.hibernate-multiple-sessions,\norg.freedesktop.login1.hibernate-ignore-inhibit, respectively depending on whether there are\nother sessions around or active inhibits are present.  HybridSleep() and\nSuspendThenHibernate() use the same privileges as Hibernate().  SetRebootParameter() requires\norg.freedesktop.login1.set-reboot-parameter.\n\nSetRebootToFirmwareSetup requires org.freedesktop.login1.set-reboot-to-firmware-setup.\nSetRebootToBootLoaderMenu requires org.freedesktop.login1.set-reboot-to-boot-loader-menu.\nSetRebootToBootLoaderEntry requires org.freedesktop.login1.set-reboot-to-boot-loader-entry.\n\nScheduleShutdown and CancelScheduledShutdown require the same privileges (listed above) as\nthe immediate poweroff/reboot/halt operations.\n\nInhibit() is protected via one of org.freedesktop.login1.inhibit-block-shutdown,\norg.freedesktop.login1.inhibit-delay-shutdown, org.freedesktop.login1.inhibit-block-sleep,\norg.freedesktop.login1.inhibit-delay-sleep, org.freedesktop.login1.inhibit-block-idle,\norg.freedesktop.login1.inhibit-handle-power-key,\norg.freedesktop.login1.inhibit-handle-suspend-key,\norg.freedesktop.login1.inhibit-handle-hibernate-key,\norg.freedesktop.login1.inhibit-handle-lid-switch depending on the lock type and mode taken.\n\nThe interactive boolean parameters can be used to control whether polkit should interactively\nask the user for authentication credentials if required.\n"
                    }
                ]
            },
            "SEAT OBJECTS": {
                "content": "node /org/freedesktop/login1/seat/seat0 {\ninterface org.freedesktop.login1.Seat {\nmethods:\nTerminate();\nActivateSession(in  s sessionid);\nSwitchTo(in  u vtnr);\nSwitchToNext();\nSwitchToPrevious();\nproperties:\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s Id = '...';\nreadonly (so) ActiveSession = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly b CanTTY = ...;\nreadonly b CanGraphical = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly a(so) Sessions = [...];\nreadonly b IdleHint = ...;\nreadonly t IdleSinceHint = ...;\nreadonly t IdleSinceHintMonotonic = ...;\n};\ninterface org.freedesktop.DBus.Peer { ... };\ninterface org.freedesktop.DBus.Introspectable { ... };\ninterface org.freedesktop.DBus.Properties { ... };\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
                "subsections": [
                    {
                        "name": "Methods",
                        "content": "Terminate() and ActivateSession() work similar to TerminateSeat(), ActivationSessionOnSeat()\non the Manager object.\n\nSwitchTo() switches to the session on the virtual terminal vtnr.  SwitchToNext() and\nSwitchToPrevious() switch to, respectively, the next and previous sessions on the seat in the\norder of virtual terminals. If there is no active session, they switch to, respectively, the\nfirst and last session on the seat.\n"
                    },
                    {
                        "name": "Signals",
                        "content": "Whenever ActiveSession, Sessions, CanGraphical, CanTTY, or the idle state changes,\nPropertyChanged signals are sent out to which clients can subscribe.\n"
                    },
                    {
                        "name": "Properties",
                        "content": "The Id property encodes the ID of the seat.\n\nActiveSession encodes the currently active session if there is one. It is a structure\nconsisting of the session id and the object path.\n\nCanTTY encodes whether the session is suitable for text logins, and CanGraphical whether it\nis suitable for graphical sessions.\n\nThe Sessions property is an array of all current sessions of this seat, each encoded in a\nstructure consisting of the ID and the object path.\n\nThe IdleHint, IdleSinceHint, and IdleSinceHintMonotonic properties encode the idle state,\nsimilar to the ones exposed on the Manager object, but specific for this seat.\n"
                    }
                ]
            },
            "USER OBJECTS": {
                "content": "node /org/freedesktop/login1/user/1000 {\ninterface org.freedesktop.login1.User {\nmethods:\nTerminate();\nKill(in  i signalnumber);\nproperties:\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly u UID = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly u GID = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s Name = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t Timestamp = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t TimestampMonotonic = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s RuntimePath = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s Service = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s Slice = '...';\nreadonly (so) Display = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly s State = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly a(so) Sessions = [...];\nreadonly b IdleHint = ...;\nreadonly t IdleSinceHint = ...;\nreadonly t IdleSinceHintMonotonic = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"false\")\nreadonly b Linger = ...;\n};\ninterface org.freedesktop.DBus.Peer { ... };\ninterface org.freedesktop.DBus.Introspectable { ... };\ninterface org.freedesktop.DBus.Properties { ... };\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
                "subsections": [
                    {
                        "name": "Methods",
                        "content": "Terminate() and Kill() work similar to the TerminateUser() and KillUser() methods on the\nmanager object.\n"
                    },
                    {
                        "name": "Signals",
                        "content": "Whenever Sessions or the idle state changes, PropertyChanged signals are sent out to which\nclients can subscribe.\n"
                    },
                    {
                        "name": "Properties",
                        "content": "The UID and GID properties encode the Unix UID and primary GID of the user.\n\nThe Name property encodes the user name.\n\nTimestamp and TimestampMonotonic encode the login time of the user in microseconds since the\nepoch, in the CLOCKREALTIME and CLOCKMONOTONIC clocks, respectively.\n\nRuntimePath encodes the runtime path of the user, i.e.  $XDGRUNTIMEDIR. For details see the\nXDG Basedir Specification[3].\n\nService contains the unit name of the user systemd service of this user. Each logged in user\nis assigned a user service that runs a user systemd instance. This is usually an instance of\nuser@.service.\n\nSlice contains the unit name of the user systemd slice of this user. Each logged in user gets\na private slice.\n\nDisplay encodes which graphical session should be used as the primary UI display for the\nuser. It is a structure encoding the session ID and the object path of the session to use.\n\nState encodes the user state and is one of \"offline\", \"lingering\", \"online\", \"active\", or\n\"closing\". See sduidgetstate(3) for more information about the states.\n\nSessions is an array of structures encoding all current sessions of the user. Each structure\nconsists of the ID and object path.\n\nThe IdleHint, IdleSinceHint, and IdleSinceHintMonotonic properties encode the idle hint state\nof the user, similar to the Manager's properties, but specific for this user.\n\nThe Linger property shows whether lingering is enabled for this user.\n"
                    }
                ]
            },
            "SESSION OBJECTS": {
                "content": "node /org/freedesktop/login1/session/1 {\ninterface org.freedesktop.login1.Session {\nmethods:\nTerminate();\nActivate();\nLock();\nUnlock();\nSetIdleHint(in  b idle);\nSetLockedHint(in  b locked);\nKill(in  s who,\nin  i signalnumber);\nTakeControl(in  b force);\nReleaseControl();\nSetType(in  s type);\nTakeDevice(in  u major,\nin  u minor,\nout h fd,\nout b inactive);\nReleaseDevice(in  u major,\nin  u minor);\nPauseDeviceComplete(in  u major,\nin  u minor);\nSetBrightness(in  s subsystem,\nin  s name,\nin  u brightness);\nsignals:\nPauseDevice(u major,\nu minor,\ns type);\nResumeDevice(u major,\nu minor,\nh fd);\nLock();\nUnlock();\nproperties:\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s Id = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly (uo) User = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s Name = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t Timestamp = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly t TimestampMonotonic = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly u VTNr = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly (so) Seat = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s TTY = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s Display = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly b Remote = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s RemoteHost = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s RemoteUser = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s Service = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s Desktop = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s Scope = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly u Leader = ...;\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly u Audit = ...;\nreadonly s Type = '...';\n@org.freedesktop.DBus.Property.EmitsChangedSignal(\"const\")\nreadonly s Class = '...';\nreadonly b Active = ...;\nreadonly s State = '...';\nreadonly b IdleHint = ...;\nreadonly t IdleSinceHint = ...;\nreadonly t IdleSinceHintMonotonic = ...;\nreadonly b LockedHint = ...;\n};\ninterface org.freedesktop.DBus.Peer { ... };\ninterface org.freedesktop.DBus.Introspectable { ... };\ninterface org.freedesktop.DBus.Properties { ... };\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
                "subsections": [
                    {
                        "name": "Methods",
                        "content": "Terminate(), Activate(), Lock(), Unlock(), and Kill() work similarly to the respective calls\non the Manager object.\n\nSetIdleHint() is called by the session object to update the idle state of the session\nwhenever it changes.\n\nTakeControl() allows a process to take exclusive managed device access-control for that\nsession. Only one D-Bus connection can be a controller for a given session at any time. If\nthe force argument is set (root only), an existing controller is kicked out and replaced.\nOtherwise, this method fails if there is already a controller. Note that this method is\nlimited to D-Bus users with the effective UID set to the user of the session or root.\n\nReleaseControl() drops control of a given session. Closing the D-Bus connection implicitly\nreleases control as well. See TakeControl() for more information. This method also releases\nall devices for which the controller requested ownership via TakeDevice().\n\nSetType() allows the type of the session to be changed dynamically. It can only be called by\nsession's current controller. If TakeControl() has not been called, this method will fail. In\naddition, the session type will be reset to its original value once control is released,\neither by calling ReleaseControl() or closing the D-Bus connection. This should help prevent\na session from entering an inconsistent state, for example if the controller crashes. The\nonly argument type is the new session type.\n\nTakeDevice() allows a session controller to get a file descriptor for a specific device. Pass\nin the major and minor numbers of the character device and systemd-logind will return a file\ndescriptor for the device. Only a limited set of device-types is currently supported (but may\nbe extended).  systemd-logind automatically mutes the file descriptor if the session is\ninactive and resumes it once the session is activated again. This guarantees that a session\ncan only access session devices if the session is active. Note that this revoke/resume\nmechanism is asynchronous and may happen at any given time. This only works on devices that\nare attached to the seat of the given session. A process is not required to have direct\naccess to the device node.  systemd-logind only requires you to be the active session\ncontroller (see TakeControl()). Also note that any device can only be requested once. As long\nas you don't release it, further TakeDevice() calls will fail.\n\nReleaseDevice() releases a device again (see TakeDevice()). This is also implicitly done by\nReleaseControl() or when closing the D-Bus connection.\n\nPauseDeviceComplete() allows a session controller to synchronously pause a device after\nreceiving a PauseDevice(\"pause\") signal. Forced signals (or after an internal timeout) are\nautomatically completed by systemd-logind asynchronously.\n\nSetLockedHint() may be used to set the \"locked hint\" to locked, i.e. information whether the\nsession is locked. This is intended to be used by the desktop environment to tell\nsystemd-logind when the session is locked and unlocked.\n\nSetBrightness() may be used to set the display brightness. This is intended to be used by the\ndesktop environment and allows unprivileged programs to access hardware settings in a\ncontrolled way. The subsystem parameter specifies a kernel subsystem, either \"backlight\" or\n\"leds\". The name parameter specifies a device name under the specified subsystem. The\nbrightness parameter specifies the brightness. The range is defined by individual drivers,\nsee /sys/class/subsystem/name/maxbrightness.\n"
                    },
                    {
                        "name": "Signals",
                        "content": "The active session controller exclusively gets PauseDevice and ResumeDevice events for any\ndevice it requested via TakeDevice(). They notify the controller whenever a device is paused\nor resumed. A device is never resumed if its session is inactive. Also note that PauseDevice\nsignals are sent before the PropertyChanged signal for the Active state. The inverse is true\nfor ResumeDevice. A device may remain paused for unknown reasons even though the Session is\nactive.\n\nA PauseDevice signal carries the major and minor numbers and a string describing the type as\narguments.  force means the device was already paused by systemd-logind and the signal is\nonly an asynchronous notification.  pause means systemd-logind grants you a limited amount of\ntime to pause the device. You must respond to this via PauseDeviceComplete(). This\nsynchronous pausing mechanism is used for backwards-compatibility to VTs and systemd-logind\nis free to not make use of it. It is also free to send a forced PauseDevice if you don't\nrespond in a timely manner (or for any other reason).  gone means the device was unplugged\nfrom the system and you will no longer get any notifications about it. There is no need to\ncall ReleaseDevice(). You may call TakeDevice() again if a new device is assigned the\nmajor+minor combination.\n\nResumeDevice is sent whenever a session is active and a device is resumed. It carries the\nmajor/minor numbers as arguments and provides a new open file descriptor. You should switch\nto the new descriptor and close the old one. They are not guaranteed to have the same\nunderlying open file descriptor in the kernel (except for a limited set of device types).\n\nWhenever Active or the idle state changes, PropertyChanged signals are sent out to which\nclients can subscribe.\n\nLock/Unlock is sent when the session is asked to be screen-locked/unlocked. A session manager\nof the session should listen to this signal and act accordingly. This signal is sent out as a\nresult of the Lock() and Unlock() methods, respectively.\n"
                    },
                    {
                        "name": "Properties",
                        "content": "Id encodes the session ID.\n\nUser encodes the user ID of the user this session belongs to. This is a structure consisting\nof the Unix UID and the object path.\n\nName encodes the user name.\n\nTimestamp and TimestampMonotonic encode the microseconds since the epoch when the session was\ncreated, in CLOCKREALTIME or CLOCKMONOTONIC, respectively.\n\nVTNr encodes the virtual terminal number of the session if there is any, 0 otherwise.\n\nSeat encodes the seat this session belongs to if there is any. This is a structure consisting\nof the ID and the seat object path.\n\nTTY encodes the kernel TTY path of the session if this is a text login. If not this is an\nempty string.\n\nDisplay encodes the X11 display name if this is a graphical login. If not, this is an empty\nstring.\n\nRemote encodes whether the session is local or remote.\n\nRemoteHost and RemoteUser encode the remote host and user if this is a remote session, or an\nempty string otherwise.\n\nService encodes the PAM service name that registered the session.\n\nDesktop describes the desktop environment running in the session (if known).\n\nScope contains the systemd scope unit name of this session.\n\nLeader encodes the PID of the process that registered the session.\n\nAudit encodes the Kernel Audit session ID of the session if auditing is available.\n\nType encodes the session type. It's one of \"unspecified\" (for cron PAM sessions and\nsuchlike), \"tty\" (for text logins) or \"x11\"/\"mir\"/\"wayland\" (for graphical logins).\n\nClass encodes the session class. It's one of \"user\" (for normal user sessions), \"greeter\"\n(for display manager pseudo-sessions), or \"lock-screen\" (for display lock screens).\n\nActive is a boolean that is true if the session is active, i.e. currently in the foreground.\nThis field is semi-redundant due to State.\n\nState encodes the session state and one of \"online\", \"active\", or \"closing\". See\nsdsessiongetstate(3) for more information about the states.\n\nIdleHint, IdleSinceHint, and IdleSinceHintMonotonic encapsulate the idle hint state of this\nsession, similarly to how the respective properties on the manager object do it for the whole\nsystem.\n\nLockedHint shows the locked hint state of this session, as set by the SetLockedHint() method\ndescribed above.\n"
                    }
                ]
            },
            "EXAMPLES": {
                "content": "",
                "subsections": [
                    {
                        "name": "Example 1. Introspect org.freedesktop.login1.Manager on the bus",
                        "content": "$ gdbus introspect --system --dest org.freedesktop.login1 \\\n--object-path /org/freedesktop/login1\n\n"
                    },
                    {
                        "name": "Example 2. Introspect org.freedesktop.login1.Seat on the bus",
                        "content": "$ gdbus introspect --system --dest org.freedesktop.login1 \\\n--object-path /org/freedesktop/login1/seat/seat0\n\n"
                    },
                    {
                        "name": "Example 3. Introspect org.freedesktop.login1.User on the bus",
                        "content": "$ gdbus introspect --system --dest org.freedesktop.login1 \\\n--object-path /org/freedesktop/login1/user/1000\n\n"
                    },
                    {
                        "name": "Example 4. Introspect org.freedesktop.login1.Session on the bus",
                        "content": "$ gdbus introspect --system --dest org.freedesktop.login1 \\\n--object-path /org/freedesktop/login1/session/45\n\n"
                    }
                ]
            },
            "VERSIONING": {
                "content": "These D-Bus interfaces follow the usual interface versioning guidelines[4].\n",
                "subsections": []
            },
            "NOTES": {
                "content": "1. polkit\nhttps://www.freedesktop.org/software/polkit/docs/latest/\n\n2. Inhibitor Locks\nhttps://www.freedesktop.org/wiki/Software/systemd/inhibit\n\n3. XDG Basedir Specification\nhttps://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html\n\n4. the usual interface versioning guidelines\nhttp://0pointer.de/blog/projects/versioning-dbus.html\n\n\n\nsystemd 249                                                                ORG.FREEDESKTOP.LOGIN1(5)",
                "subsections": []
            }
        }
    }
}