ORG.FREEDESKTOP.HOME1(5) org.freedesktop.home1 ORG.FREEDESKTOP.HOME1(5) (NAME) org.freedesktop.home1 - D-Bus (systemd-homed) (DESCRIPTION) systemd-homed.service(8) . D-Bus . D-BUS (THE D-BUS INTERFACE) (THE MANAGER OBJECT) Manager : node /org/freedesktop/home1 { interface org.freedesktop.home1.Manager { methods: GetHomeByName(in s user_name, out u uid, out s home_state, out u gid, out s real_name, out s home_directory, out s shell, out o bus_path); GetHomeByUID(in u uid, out s user_name, out s home_state, out u gid, out s real_name, out s home_directory, out s shell, out o bus_path); GetUserRecordByName(in s user_name, out s user_record, out b incomplete, out o bus_path); GetUserRecordByUID(in u uid, out s user_record, out b incomplete, out o bus_path); ListHomes(out a(susussso) home_areas); ActivateHome(in s user_name, in s secret); ActivateHomeIfReferenced(in s user_name, in s secret); @org.freedesktop.systemd1.Privileged("true") DeactivateHome(in s user_name); RegisterHome(in s user_record); AdoptHome(in s image_path, in t flags); UnregisterHome(in s user_name); CreateHome(in s user_record); CreateHomeEx(in s user_record, in a{sh} blobs, in t flags); RealizeHome(in s user_name, in s secret); RemoveHome(in s user_name); @org.freedesktop.systemd1.Privileged("true") FixateHome(in s user_name, in s secret); AuthenticateHome(in s user_name, in s secret); UpdateHome(in s user_record); UpdateHomeEx(in s user_record, in a{sh} blobs, in t flags); ResizeHome(in s user_name, in t size, in s secret); ChangePasswordHome(in s user_name, in s new_secret, in s old_secret); @org.freedesktop.systemd1.Privileged("true") LockHome(in s user_name); @org.freedesktop.systemd1.Privileged("true") UnlockHome(in s user_name, in s secret); AcquireHome(in s user_name, in s secret, in b please_suspend, out h send_fd); @org.freedesktop.systemd1.Privileged("true") RefHome(in s user_name, in b please_suspend, out h send_fd); @org.freedesktop.systemd1.Privileged("true") RefHomeUnrestricted(in s user_name, in b please_suspend, out h send_fd); @org.freedesktop.systemd1.Privileged("true") ReleaseHome(in s user_name); ListSigningKeys(out a(sst) keys); GetSigningKey(in s name, out s der, out t flags); AddSigningKey(in s name, in s pem, in t flags); RemoveSigningKey(in s name, in t flags); @org.freedesktop.systemd1.Privileged("true") LockAllHomes(); @org.freedesktop.systemd1.Privileged("true") DeactivateAllHomes(); @org.freedesktop.systemd1.Privileged("true") Rebalance(); properties: readonly a(sso) AutoLogin = [...]; }; interface org.freedesktop.DBus.Peer { ... }; interface org.freedesktop.DBus.Introspectable { ... }; interface org.freedesktop.DBus.Properties { ... }; }; (Methods) GetHomeByName() ( ) . getpwnam(3) : UID GID (shell). . org.freedesktop.home1.Home . . GetHomeByUID() GetHomeByName() UID . GetUserRecordByName() GetHomeByName() JSON . . "privileged" ( ) ( JSON[1] ). "privileged" . GetUserRecordByUID() GetUserRecordByName() UID . ListHomes() . GetHomeByName() : UID GID . ActivateHome() ( / mount) . "secret" () ( JSON[1] ) . ( ) . (synchronous) ( ) . D-Bus . Activate() org.freedesktop.home1.Home manager . ActivateHomeIfReferenced() ActivateHome() . . RefHomeUnrestricted() . DeactivateHome() ( / unmount) . Deactivate() org.freedesktop.home1.Home . RegisterHome() . JSON ( "secret" ). ( ). systemd-homed.service . AdoptHome() ( / adopt) . . *.home *.homedir/ . /home/ . flags . UnregisterHome() . RegisterHome() . . systemd-homed.service (fixation ) systemd-homed.service . . Unregister() org.freedesktop.home1.Home . CreateHome() . JSON ( "secret"). . CreateHomeEx() CreateHome() blob ( (Blob) [2] ). (dictionary) blobs : blob . "O_PATH" blob . "blobManifest" "blobManifest" . flags 0 . RealizeHome() ( / realize) . "secret" . RegisterHome() RealizeHome() CreateHome() () . Realize() org.freedesktop.home1.Home . RemoveHome() . . Remove() org.freedesktop.home1.Home . FixateHome() <<>> (fixate) . systemd-homed.service . <<>> UID/GID ( ) . . JSON "secret" . Fixate() org.freedesktop.home1.Home . AuthenticateHome() . JSON "secret" . . . ActivateHome() JSON . Authenticate() org.freedesktop.home1.Home . UpdateHome() . JSON ( "secret" ). (realm) . / (storage back-end) . ChangePasswordHome() ResizeHome() . Update() org.freedesktop.home1.Home . UpdateHomeEx() UpdateHome() blob ( (Blob) [2] ). blobs CreateHomeEx() . blob blob . flags : #define SD_HOMED_UPDATE_OFFLINE (UINT64_C(1) << 0) SD_HOMED_UPDATE_OFFLINE (0x01) blob . ( ) . . UpdateEx() org.freedesktop.home1.Home . ResizeHome() . "secret" . UINT64_MAX . UpdateHome() . Resize() org.freedesktop.home1.Home . ChangePasswordHome() / . JSON "secret" / . / . UpdateHome() / . : (backend) : (host) LUKS. . ChangePasswordHome() . ChangePassword() org.freedesktop.home1.Home . LockHome() (flush) . (suspend) . . (freeze) . Lock() org.freedesktop.home1.Home . UnlockHome() LockHome() . "secret" . Unlock() org.freedesktop.home1.Home . AcquireHome() (reference counted) . "secret" . . . / (file descriptor) . . (login) (logout) (unmount) . (suspend) . (context) . . Acquire() org.freedesktop.home1.Home . RefHome() AcquireHome() "secret" / / . . Ref() org.freedesktop.home1.Home . RefHomeUnrestricted() RefHome() . ActivateHomeIfReferenced() . ReleaseHome() AcquireHome() RefHome() . ( ) (session) . Release() org.freedesktop.home1.Home . LockAllHomes() . . DeactivateAllHomes() . . Rebalance() (rebalance) . LUKS2 (NOP) . ListSigningKeys() . PEM . . GetSigningKey() PEM . . flags . AddSigningKey() . ( ".public") PEM . flags . RemoveSigningKey() . . flags . (Properties) AutoLogin (seat name) . "autoLogin" . (display manager) . HOME (THE HOME OBJECT) node /org/freedesktop/home1/home { interface org.freedesktop.home1.Home { methods: Activate(in s secret); ActivateIfReferenced(in s secret); @org.freedesktop.systemd1.Privileged("true") Deactivate(); Unregister(); Realize(in s secret); Remove(); @org.freedesktop.systemd1.Privileged("true") Fixate(in s secret); Authenticate(in s secret); Update(in s user_record); UpdateEx(in s user_record, in a{sh} blobs, in t flags); Resize(in t size, in s secret); ChangePassword(in s new_secret, in s old_secret); @org.freedesktop.systemd1.Privileged("true") Lock(); @org.freedesktop.systemd1.Privileged("true") Unlock(in s secret); @org.freedesktop.systemd1.Privileged("true") Acquire(in s secret, in b please_suspend, out h send_fd); @org.freedesktop.systemd1.Privileged("true") Ref(in b please_suspend, out h send_fd); @org.freedesktop.systemd1.Privileged("true") RefUnrestricted(in b please_suspend, out h send_fd); @org.freedesktop.systemd1.Privileged("true") Release(); properties: @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly s UserName = '...'; readonly u UID = ...; readonly (suusss) UnixRecord = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly s State = '...'; @org.freedesktop.DBus.Property.EmitsChangedSignal("invalidates") readonly (sb) UserRecord = ...; }; interface org.freedesktop.DBus.Peer { ... }; interface org.freedesktop.DBus.Introspectable { ... }; interface org.freedesktop.DBus.Properties { ... }; interface org.freedesktop.DBus.ObjectManager { ... }; }; (Methods) Activate() ActivateIfReferenced() Deactivate() Unregister() Realize() Remove() Fixate() Authenticate() Update() UpdateEx() Resize() ChangePassword() Lock() Unlock() Acquire() Ref() RefUnrestricted() Release() org.freedesktop.home1.Manager ( ). . (handles) : manager . manager . org.freedesktop.home1.Home . (Properties) UserName / . UID UID . UnixRecord struct passwd ( ). State . UserRecord JSON . (VERSION COMPATIBILITY) D-Bus [3] . (HISTORY) Manager ActivateHomeIfReferenced() RefHomeUnrestricted() CreateHomeEx() UpdateHomeEx() . AdoptHome() ListSigningKeys() GetSigningKey() AddSigningKey() RemoveSigningKey() . Home ActivateIfReferenced() RefUnrestricted() UpdateEx() . (SEE ALSO) systemd(1), systemd-homed.service(8), homectl(1) (NOTES) 1. JSON https://systemd.io/USER_RECORD 2. Blob https://systemd.io/USER_RECORD_BLOB_DIRS 3. https://0pointer.de/blog/projects/versioning-dbus.html systemd 261.2 ORG.FREEDESKTOP.HOME1(5)