1<?xml version='1.0'?> 2<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" 3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" > 4<!-- SPDX-License-Identifier: LGPL-2.1-or-later --> 5 6<refentry id="org.freedesktop.home1" conditional='ENABLE_HOMED' 7 xmlns:xi="http://www.w3.org/2001/XInclude"> 8 <refentryinfo> 9 <title>org.freedesktop.home1</title> 10 <productname>systemd</productname> 11 </refentryinfo> 12 13 <refmeta> 14 <refentrytitle>org.freedesktop.home1</refentrytitle> 15 <manvolnum>5</manvolnum> 16 </refmeta> 17 18 <refnamediv> 19 <refname>org.freedesktop.home1</refname> 20 <refpurpose>The D-Bus interface of systemd-homed</refpurpose> 21 </refnamediv> 22 23 <refsect1> 24 <title>Introduction</title> 25 26 <para><citerefentry><refentrytitle>systemd-homed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> 27 is a system service which may be used to create, remove, change or inspect home areas. This page 28 describes the D-Bus interface. 29 </para> 30 </refsect1> 31 32 <refsect1> 33 <title>The Manager Object</title> 34 35 <para>The service exposes the following interfaces on the Manager object on the bus:</para> 36 37 <programlisting executable="systemd-homed" node="/org/freedesktop/home1" interface="org.freedesktop.home1.Manager"> 38node /org/freedesktop/home1 { 39 interface org.freedesktop.home1.Manager { 40 methods: 41 GetHomeByName(in s user_name, 42 out u uid, 43 out s home_state, 44 out u gid, 45 out s real_name, 46 out s home_directory, 47 out s shell, 48 out o bus_path); 49 GetHomeByUID(in u uid, 50 out s user_name, 51 out s home_state, 52 out u gid, 53 out s real_name, 54 out s home_directory, 55 out s shell, 56 out o bus_path); 57 GetUserRecordByName(in s user_name, 58 out s user_record, 59 out b incomplete, 60 out o bus_path); 61 GetUserRecordByUID(in u uid, 62 out s user_record, 63 out b incomplete, 64 out o bus_path); 65 ListHomes(out a(susussso) home_areas); 66 @org.freedesktop.systemd1.Privileged("true") 67 ActivateHome(in s user_name, 68 in s secret); 69 @org.freedesktop.systemd1.Privileged("true") 70 DeactivateHome(in s user_name); 71 RegisterHome(in s user_record); 72 UnregisterHome(in s user_name); 73 CreateHome(in s user_record); 74 RealizeHome(in s user_name, 75 in s secret); 76 RemoveHome(in s user_name); 77 @org.freedesktop.systemd1.Privileged("true") 78 FixateHome(in s user_name, 79 in s secret); 80 AuthenticateHome(in s user_name, 81 in s secret); 82 UpdateHome(in s user_record); 83 ResizeHome(in s user_name, 84 in t size, 85 in s secret); 86 ChangePasswordHome(in s user_name, 87 in s new_secret, 88 in s old_secret); 89 @org.freedesktop.systemd1.Privileged("true") 90 LockHome(in s user_name); 91 @org.freedesktop.systemd1.Privileged("true") 92 UnlockHome(in s user_name, 93 in s secret); 94 AcquireHome(in s user_name, 95 in s secret, 96 in b please_suspend, 97 out h send_fd); 98 @org.freedesktop.systemd1.Privileged("true") 99 RefHome(in s user_name, 100 in b please_suspend, 101 out h send_fd); 102 @org.freedesktop.systemd1.Privileged("true") 103 ReleaseHome(in s user_name); 104 @org.freedesktop.systemd1.Privileged("true") 105 LockAllHomes(); 106 @org.freedesktop.systemd1.Privileged("true") 107 DeactivateAllHomes(); 108 @org.freedesktop.systemd1.Privileged("true") 109 Rebalance(); 110 properties: 111 readonly a(sso) AutoLogin = [...]; 112 }; 113 interface org.freedesktop.DBus.Peer { ... }; 114 interface org.freedesktop.DBus.Introspectable { ... }; 115 interface org.freedesktop.DBus.Properties { ... }; 116}; 117 </programlisting> 118 119 <!--Autogenerated cross-references for systemd.directives, do not edit--> 120 121 <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.home1.Manager"/> 122 123 <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.home1.Manager"/> 124 125 <variablelist class="dbus-method" generated="True" extra-ref="GetHomeByName()"/> 126 127 <variablelist class="dbus-method" generated="True" extra-ref="GetHomeByUID()"/> 128 129 <variablelist class="dbus-method" generated="True" extra-ref="GetUserRecordByName()"/> 130 131 <variablelist class="dbus-method" generated="True" extra-ref="GetUserRecordByUID()"/> 132 133 <variablelist class="dbus-method" generated="True" extra-ref="ListHomes()"/> 134 135 <variablelist class="dbus-method" generated="True" extra-ref="ActivateHome()"/> 136 137 <variablelist class="dbus-method" generated="True" extra-ref="DeactivateHome()"/> 138 139 <variablelist class="dbus-method" generated="True" extra-ref="RegisterHome()"/> 140 141 <variablelist class="dbus-method" generated="True" extra-ref="UnregisterHome()"/> 142 143 <variablelist class="dbus-method" generated="True" extra-ref="CreateHome()"/> 144 145 <variablelist class="dbus-method" generated="True" extra-ref="RealizeHome()"/> 146 147 <variablelist class="dbus-method" generated="True" extra-ref="RemoveHome()"/> 148 149 <variablelist class="dbus-method" generated="True" extra-ref="FixateHome()"/> 150 151 <variablelist class="dbus-method" generated="True" extra-ref="AuthenticateHome()"/> 152 153 <variablelist class="dbus-method" generated="True" extra-ref="UpdateHome()"/> 154 155 <variablelist class="dbus-method" generated="True" extra-ref="ResizeHome()"/> 156 157 <variablelist class="dbus-method" generated="True" extra-ref="ChangePasswordHome()"/> 158 159 <variablelist class="dbus-method" generated="True" extra-ref="LockHome()"/> 160 161 <variablelist class="dbus-method" generated="True" extra-ref="UnlockHome()"/> 162 163 <variablelist class="dbus-method" generated="True" extra-ref="AcquireHome()"/> 164 165 <variablelist class="dbus-method" generated="True" extra-ref="RefHome()"/> 166 167 <variablelist class="dbus-method" generated="True" extra-ref="ReleaseHome()"/> 168 169 <variablelist class="dbus-method" generated="True" extra-ref="LockAllHomes()"/> 170 171 <variablelist class="dbus-method" generated="True" extra-ref="DeactivateAllHomes()"/> 172 173 <variablelist class="dbus-method" generated="True" extra-ref="Rebalance()"/> 174 175 <variablelist class="dbus-property" generated="True" extra-ref="AutoLogin"/> 176 177 <!--End of Autogenerated section--> 178 179 <refsect2> 180 <title>Methods</title> 181 182 <para><function>GetHomeByName()</function> returns basic user information (a minimal subset of the full 183 user record), provided a user name. The information supplied more or less matches what 184 <citerefentry project="man-pages"><refentrytitle>getpwnam</refentrytitle><manvolnum>3</manvolnum></citerefentry> returns: 185 the numeric UID and GID, the real name, home directory and shell. In addition it returns a state 186 identifier describing the state the user's home directory is in, as well as a bus path referring to the 187 bus object encapsulating the user record and home directory. This object implements the 188 <classname>org.freedesktop.home1.Home</classname> interface documented below.</para> 189 190 <para><function>GetHomeByUID()</function> is similar to <function>GetHomeByName()</function> but 191 acquires the information based on the numeric UID of the user.</para> 192 193 <para><function>GetUserRecordByName()</function> is also similar to 194 <function>GetHomeByName()</function> but returns the full JSON user record data instead of the broken 195 down records. An additional returned boolean indicates whether the record is complete or not. A record 196 is considered complete when its <literal>privileged</literal> section is included, and incomplete if it 197 was removed (see <ulink url="https://systemd.io/USER_RECORD">JSON User Records</ulink> for details 198 about the various sections of a user record). Generally, only privileged clients and clients running 199 under the identity of the user itself get access to the <literal>privileged</literal> section and will 200 thus see complete records.</para> 201 202 <para><function>GetUserRecordByUID()</function> is similar to <function>GetUserRecordByName()</function> 203 but returns the user record matching the specified numeric UID.</para> 204 205 <para><function>ListHomes()</function> returns an array of all locally managed users. The array 206 contains the same fields <function>GetHomeByName()</function> returns: user name, numeric UID, state, 207 numeric GID, real name, home directory, shell and bus path of the matching bus object.</para> 208 209 <para><function>ActivateHome()</function> activates (i.e. mounts) the home directory of the specified 210 user. The second argument shall contain a user record consisting only of a <literal>secret</literal> 211 section (all other sections should be stripped, see <ulink url="https://systemd.io/USER_RECORD">JSON 212 User Records</ulink> for details), and should contain only the secret credentials necessary for 213 unlocking the home directory. Typically a client would invoke this function first with an entirely 214 empty record (which is possibly sufficient if single-factor authentication with a plugged-in security 215 token is configured), and would then retry with a record populated with more information, depending on 216 the returned error code, in case more credentials are necessary. This function is synchronous and 217 returns only after the home directory was fully activated (or the operation failed), which might take 218 some time. Clients must be prepared for that, and typically should extend the D-Bus method call 219 timeout accordingly. This method is equivalent to the <function>Activate()</function> method on the 220 <classname>org.freedesktop.home1.Home</classname> interface documented below, but may be called on the 221 manager object and takes a user name as additional argument, instead.</para> 222 223 <para><function>DeactivateHome()</function> deactivates (i.e. unmounts) the home directory of the 224 specified user. It is equivalent to the <function>Deactivate()</function> method on the 225 <classname>org.freedesktop.home1.Home</classname> interface documented below.</para> 226 227 <para><function>RegisterHome()</function> registers a new home directory locally. It receives the JSON 228 user record as only argument (which typically excludes the <literal>secret</literal> 229 section). Registering a home directory just makes the user record known to the system, it does not 230 create a home directory or such (which is expected to exist already, or created later). This operation 231 is useful to register home directories locally that are not located where 232 <filename>systemd-homed.service</filename> would find them automatically.</para> 233 234 <para><function>UnregisterHome()</function> unregisters an existing home directory. It takes a user 235 name as argument and undoes what <function>RegisterHome()</function> does. It does not attempt to 236 remove the home directory itself, it just unregisters it with the local system. Note that if the home 237 directory is placed where <filename>systemd-homed.service</filename> looks for home directories anyway 238 this call will only undo fixation (see below), but the record will remain known to 239 <filename>systemd-homed.service</filename> and be listed among known records. Since the user record is 240 embedded into the home directory this operation generally does not discard data belonging to the user 241 or their record. This method is equivalent to 242 <function>Unregister()</function> on the <classname>org.freedesktop.home1.Home</classname> 243 interface.</para> 244 245 <para><function>CreateHome()</function> registers and creates a new home directory. This takes a fully 246 specified JSON user record as argument (including the <literal>secret</literal> section). This registers 247 the user record locally and creates a home directory matching it, depending on the settings specified 248 in the record in combination with local configuration.</para> 249 250 <para><function>RealizeHome()</function> creates a home directory whose user record is already 251 registered locally. This takes a user name plus a user record consisting only of the 252 <literal>secret</literal> section. Invoking <function>RegisterHome()</function> followed by 253 <function>RealizeHome()</function> is mostly equivalent to calling <function>CreateHome()</function>, 254 except that the latter combines the two in atomic fashion. This method is equivalent to 255 <function>Realize()</function> on the <classname>org.freedesktop.home1.Home</classname> 256 interface.</para> 257 258 <para><function>RemoveHome()</function> unregisters a user record locally, and removes the home 259 directory belonging to it, if it is accessible. It takes a user name as argument. This method is equivalent to 260 <function>Remove()</function> on the <classname>org.freedesktop.home1.Home</classname> 261 interface.</para> 262 263 <para><function>FixateHome()</function> <literal>fixates</literal> an automatically discovered home 264 directory. <filename>systemd-homed.service</filename> automatically discovers home directories dropped 265 in our plugged in and adds them to the runtime list of user records it manages. A user record 266 discovered that way may be <literal>fixated</literal>, in which case it is copied out of the home 267 directory, onto persistent storage, to fixate the UID/GID assignment of the record, and extract 268 additional (typically previously encrypted) user record data from the home directory. A home directory 269 mus be fixated before it can be logged into. This method call takes a user name and a JSON user record 270 consisting only of the <literal>secret</literal> section as argument. This method is equivalent to 271 <function>Fixate()</function> on the <classname>org.freedesktop.home1.Home</classname> interface.</para> 272 273 <para><function>AuthenticateHome()</function> checks passwords or other authentication credentials 274 associated with the home directory. It takes a user name and a JSON user record consisting only of the 275 <literal>secret</literal> section as argument. Note that many of the other method calls authenticate 276 the user first, in order to execute some other operation. This method call only authenticates and 277 executes no further operation. Like <function>ActivateHome()</function> it is usually first invoked 278 with an empty JSON user record, which is then populated for subsequent tries with additional 279 authentication data supplied. This method is equivalent to 280 <function>Authenticate()</function> on the <classname>org.freedesktop.home1.Home</classname> 281 interface.</para> 282 283 <para><function>UpdateHome()</function> updates a locally registered user record. Takes a fully 284 specified JSON user record as argument (including the <literal>secret</literal> section). A user with a 285 matching name and realm must be registered locally already, and the last change timestamp of the newly 286 supplied record must be newer than the previously existing user record. Note this operation updates the 287 user record only, it does not propagate passwords/authentication tokens from the user record to the 288 storage back-end, or resizes the storage back-end. Typically a home directory is first updated, and then 289 the password of the underlying storage updated using <function>ChangePasswordHome()</function> as well 290 as the storage resized using <function>ResizeHome()</function>. This method is equivalent to 291 <function>Update()</function> on the <classname>org.freedesktop.home1.Home</classname> interface.</para> 292 293 <para><function>ResizeHome()</function> resizes the storage associated with a user record. Takes a user 294 name, a disk size in bytes and a user record consisting only of the <literal>secret</literal> section 295 as argument. If the size is specified as <constant>UINT64_MAX</constant> the storage is resized to the 296 size already specified in the user record. Typically, if the user record is updated using 297 <function>UpdateHome()</function> above this is used to propagate the size configured there-in down to 298 the underlying storage back-end. This method is equivalent to 299 <function>Resize()</function> on the <classname>org.freedesktop.home1.Home</classname> 300 interface.</para> 301 302 <para><function>ChangePasswordHome()</function> changes the passwords/authentication tokens of a home 303 directory. Takes a user name, and two JSON user record objects, each consisting only of the 304 <literal>secret</literal> section, for the old and for the new passwords/authentication tokens. If the 305 user record with the new passwords/authentication token data is specified as empty the existing user 306 record's settings are propagated down to the home directory storage. This is typically used after a 307 user record is updated using <function>UpdateHome()</function> in order to propagate the 308 secrets/authentication tokens down to the storage. This method is equivalent to 309 <function>ChangePassword()</function> on the <classname>org.freedesktop.home1.Home</classname> 310 interface.</para> 311 312 <para><function>LockHome()</function> temporarily suspends access to a home directory, flushing out any 313 cryptographic keys from memory. This is only supported on some back-ends, and usually done during system 314 suspend, in order to effectively secure home directories while the system is sleeping. Takes a user 315 name as single argument. If an application attempts to access a home directory while it is locked it 316 will typically freeze until the home directory is unlocked again. This method is equivalent to 317 <function>Lock()</function> on the <classname>org.freedesktop.home1.Home</classname> interface.</para> 318 319 <para><function>UnlockHome()</function> undoes the effect of <function>LockHome()</function>. Takes a 320 user name and a user record consisting only of the <literal>secret</literal> section as arguments. This 321 method is equivalent to <function>Unlock()</function> on the 322 <classname>org.freedesktop.home1.Home</classname> interface.</para> 323 324 <para><function>AcquireHome()</function> activates or unlocks a home directory in a reference counted 325 mode of operation. Takes a user name and user record consisting only of <literal>secret</literal> 326 section as argument. If the home directory is not active yet, it is activated. If it is currently 327 locked it is unlocked. After completion a reference to the activation/unlocking of the home directory 328 is returned via a file descriptor. When the last client which acquired such a file descriptor closes it 329 the home directory is automatically deactivated again. This method is typically invoked when a user 330 logs in, and the file descriptor is held until the user logs out again, thus ensuring the user's home 331 directory can be unmounted automatically again in a robust fashion, when the user logs out. The third 332 argument is a boolean which indicates whether the client invoking the call is able to automatically 333 re-authenticate when the system comes back from suspending. It should be set by all clients that 334 implement a secure lock screen running outside of the user's context, that is brought up when the 335 system comes back from suspend and can be used to re-acquire the credentials to unlock the user's home 336 directory. If a home directory has at least one client with an open reference to the home directory 337 that does not support this it is not suspended automatically at system suspend, otherwise it is. This 338 method is equivalent to <function>Acquire()</function> on the 339 <classname>org.freedesktop.home1.Home</classname> interface.</para> 340 341 <para><function>RefHome()</function> is similar to <function>AcquireHome()</function> but takes no user 342 record with <literal>secret</literal> section, i.e. will take an additional reference to an already 343 activated/unlocked home directory without attempting to activate/unlock it itself. It will fail if the 344 home directory is not already activated. This method is equivalent to 345 <function>Ref()</function> on the <classname>org.freedesktop.home1.Home</classname> 346 interface.</para> 347 348 <para><function>ReleaseHome()</function> releases a home directory again, if all file descriptors 349 referencing it are already closed, that where acquired through <function>AcquireHome()</function> or 350 <function>RefHome()</function>. Note that this call does not actually cause the deactivation of the 351 home directory (which happens automatically when the last referencing file descriptor is closed), but 352 is simply a synchronization mechanism that allows delaying of the user session's termination until any 353 triggered deactivation is completed. This method is equivalent to <function>Release()</function> on the 354 <classname>org.freedesktop.home1.Home</classname> interface.</para> 355 356 <para><function>LockAllHomes()</function> locks all active home directories that only have references 357 that opted into automatic suspending during system suspend. This is usually invoked automatically 358 shortly before system suspend.</para> 359 360 <para><function>DeactivateAllHomes()</function> deactivates all home areas that are currently 361 active. This is usually invoked automatically shortly before system shutdown.</para> 362 363 <para><function>Rebalance()</function> synchronously rebalances free disk space between home 364 areas. This only executes an operation if at least one home area using the LUKS2 backend is active and 365 has rebalancing enabled, and is otherwise a NOP.</para> 366 </refsect2> 367 368 <refsect2> 369 <title>Properties</title> 370 371 <para><varname>AutoLogin</varname> exposes an array of structures consisting of user name, seat name 372 and object path of an home directory object. All locally managed users that have the 373 <literal>autoLogin</literal> field set are listed here, with the seat name they are associated with. A 374 display manager may watch this property and pre-fill the login screen with the users exposed this 375 way.</para> 376 </refsect2> 377 </refsect1> 378 379 <refsect1> 380 <title>The Home Object</title> 381 382 <programlisting executable="systemd-homed" node="/org/freedesktop/home1/home" interface="org.freedesktop.home1.Home"> 383node /org/freedesktop/home1/home { 384 interface org.freedesktop.home1.Home { 385 methods: 386 @org.freedesktop.systemd1.Privileged("true") 387 Activate(in s secret); 388 @org.freedesktop.systemd1.Privileged("true") 389 Deactivate(); 390 Unregister(); 391 Realize(in s secret); 392 Remove(); 393 @org.freedesktop.systemd1.Privileged("true") 394 Fixate(in s secret); 395 Authenticate(in s secret); 396 Update(in s user_record); 397 Resize(in t size, 398 in s secret); 399 ChangePassword(in s new_secret, 400 in s old_secret); 401 @org.freedesktop.systemd1.Privileged("true") 402 Lock(); 403 @org.freedesktop.systemd1.Privileged("true") 404 Unlock(in s secret); 405 @org.freedesktop.systemd1.Privileged("true") 406 Acquire(in s secret, 407 in b please_suspend, 408 out h send_fd); 409 @org.freedesktop.systemd1.Privileged("true") 410 Ref(in b please_suspend, 411 out h send_fd); 412 @org.freedesktop.systemd1.Privileged("true") 413 Release(); 414 properties: 415 @org.freedesktop.DBus.Property.EmitsChangedSignal("const") 416 readonly s UserName = '...'; 417 readonly u UID = ...; 418 readonly (suusss) UnixRecord = ...; 419 @org.freedesktop.DBus.Property.EmitsChangedSignal("false") 420 readonly s State = '...'; 421 @org.freedesktop.DBus.Property.EmitsChangedSignal("invalidates") 422 readonly (sb) UserRecord = ...; 423 }; 424 interface org.freedesktop.DBus.Peer { ... }; 425 interface org.freedesktop.DBus.Introspectable { ... }; 426 interface org.freedesktop.DBus.Properties { ... }; 427 interface org.freedesktop.DBus.ObjectManager { ... }; 428}; 429 </programlisting> 430 431 <!--Autogenerated cross-references for systemd.directives, do not edit--> 432 433 <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.DBus.ObjectManager"/> 434 435 <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.home1.Home"/> 436 437 <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.DBus.ObjectManager"/> 438 439 <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.home1.Home"/> 440 441 <variablelist class="dbus-method" generated="True" extra-ref="Activate()"/> 442 443 <variablelist class="dbus-method" generated="True" extra-ref="Deactivate()"/> 444 445 <variablelist class="dbus-method" generated="True" extra-ref="Unregister()"/> 446 447 <variablelist class="dbus-method" generated="True" extra-ref="Realize()"/> 448 449 <variablelist class="dbus-method" generated="True" extra-ref="Remove()"/> 450 451 <variablelist class="dbus-method" generated="True" extra-ref="Fixate()"/> 452 453 <variablelist class="dbus-method" generated="True" extra-ref="Authenticate()"/> 454 455 <variablelist class="dbus-method" generated="True" extra-ref="Update()"/> 456 457 <variablelist class="dbus-method" generated="True" extra-ref="Resize()"/> 458 459 <variablelist class="dbus-method" generated="True" extra-ref="ChangePassword()"/> 460 461 <variablelist class="dbus-method" generated="True" extra-ref="Lock()"/> 462 463 <variablelist class="dbus-method" generated="True" extra-ref="Unlock()"/> 464 465 <variablelist class="dbus-method" generated="True" extra-ref="Acquire()"/> 466 467 <variablelist class="dbus-method" generated="True" extra-ref="Ref()"/> 468 469 <variablelist class="dbus-method" generated="True" extra-ref="Release()"/> 470 471 <variablelist class="dbus-property" generated="True" extra-ref="UserName"/> 472 473 <variablelist class="dbus-property" generated="True" extra-ref="UID"/> 474 475 <variablelist class="dbus-property" generated="True" extra-ref="UnixRecord"/> 476 477 <variablelist class="dbus-property" generated="True" extra-ref="State"/> 478 479 <variablelist class="dbus-property" generated="True" extra-ref="UserRecord"/> 480 481 <!--End of Autogenerated section--> 482 483 <refsect2> 484 <title>Methods</title> 485 486 <para><function>Activate()</function>, <function>Deactivate()</function>, 487 <function>Unregister()</function>, <function>Realize()</function>, <function>Remove()</function>, 488 <function>Fixate()</function>, <function>Authenticate()</function>, <function>Update()</function>, 489 <function>Resize()</function>, <function>ChangePassword()</function>, <function>Lock()</function>, 490 <function>Unlock()</function>, <function>Acquire()</function>, <function>Ref()</function>, 491 <function>Release()</function> operate like their matching counterparts on the 492 <classname>org.freedesktop.home1.Manager</classname> interface (see above). The main difference is that 493 they are methods of the home directory objects, and hence carry no additional user name 494 parameter. Which of the two flavors of methods to call depends on the handles to the user known on the 495 client side: if only the user name is known, it's preferable to use the methods on the manager object 496 since they operate with user names only. If however the home object path was already acquired some way 497 it is preferable to operate on the <classname>org.freedesktop.home1.Home</classname> objects 498 instead.</para> 499 </refsect2> 500 501 <refsect2> 502 <title>Properties</title> 503 504 <para><varname>UserName</varname> contains the user name of the user account/home directory.</para> 505 506 <para><varname>UID</varname> contains the numeric UNIX UID of the user account.</para> 507 508 <para><varname>UnixRecord</varname> contains a structure encapsulating the six fields a 509 <structname>struct passwd</structname> typically contains (the password field is suppressed).</para> 510 511 <para><varname>State</varname> exposes the current state home the home directory.</para> 512 513 <para><varname>UserRecord</varname> contains the full JSON user record string of the user account.</para> 514 </refsect2> 515 </refsect1> 516 517 <xi:include href="org.freedesktop.locale1.xml" xpointer="versioning"/> 518 519 <refsect1> 520 <title>See Also</title> 521 <para> 522 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, 523 <citerefentry><refentrytitle>systemd-homed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>, 524 <citerefentry><refentrytitle>homectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> 525 </para> 526 </refsect1> 527 528</refentry> 529