2 <!DOCTYPE refentry PUBLIC
"-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" >
4 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
6 <refentry id=
"org.freedesktop.home1" conditional='ENABLE_HOMED'
7 xmlns:
xi=
"http://www.w3.org/2001/XInclude">
9 <title>org.freedesktop.home1
</title>
10 <productname>systemd
</productname>
14 <refentrytitle>org.freedesktop.home1
</refentrytitle>
15 <manvolnum>5</manvolnum>
19 <refname>org.freedesktop.home1
</refname>
20 <refpurpose>The D-Bus interface of systemd-homed
</refpurpose>
24 <title>Introduction
</title>
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.
33 <title>The Manager Object
</title>
35 <para>The service exposes the following interfaces on the Manager object on the bus:
</para>
37 <programlisting executable=
"systemd-homed" node=
"/org/freedesktop/home1" interface=
"org.freedesktop.home1.Manager">
38 node /org/freedesktop/home1 {
39 interface org.freedesktop.home1.Manager {
41 GetHomeByName(in s user_name,
49 GetHomeByUID(in u uid,
57 GetUserRecordByName(in s user_name,
61 GetUserRecordByUID(in u uid,
65 ListHomes(out a(susussso) home_areas);
66 @org.freedesktop.systemd1.Privileged(
"true")
67 ActivateHome(in s user_name,
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,
76 RemoveHome(in s user_name);
77 @org.freedesktop.systemd1.Privileged(
"true")
78 FixateHome(in s user_name,
80 AuthenticateHome(in s user_name,
82 UpdateHome(in s user_record);
83 ResizeHome(in s user_name,
86 ChangePasswordHome(in s user_name,
89 @org.freedesktop.systemd1.Privileged(
"true")
90 LockHome(in s user_name);
91 @org.freedesktop.systemd1.Privileged(
"true")
92 UnlockHome(in s user_name,
94 AcquireHome(in s user_name,
98 @org.freedesktop.systemd1.Privileged(
"true")
99 RefHome(in s user_name,
102 @org.freedesktop.systemd1.Privileged(
"true")
103 ReleaseHome(in s user_name);
104 @org.freedesktop.systemd1.Privileged(
"true")
106 @org.freedesktop.systemd1.Privileged(
"true")
107 DeactivateAllHomes();
108 @org.freedesktop.systemd1.Privileged(
"true")
111 readonly a(sso) AutoLogin = [...];
113 interface org.freedesktop.DBus.Peer { ... };
114 interface org.freedesktop.DBus.Introspectable { ... };
115 interface org.freedesktop.DBus.Properties { ... };
119 <!--Autogenerated cross-references for systemd.directives, do not edit-->
121 <variablelist class=
"dbus-interface" generated=
"True" extra-ref=
"org.freedesktop.home1.Manager"/>
123 <variablelist class=
"dbus-interface" generated=
"True" extra-ref=
"org.freedesktop.home1.Manager"/>
125 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"GetHomeByName()"/>
127 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"GetHomeByUID()"/>
129 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"GetUserRecordByName()"/>
131 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"GetUserRecordByUID()"/>
133 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"ListHomes()"/>
135 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"ActivateHome()"/>
137 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"DeactivateHome()"/>
139 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"RegisterHome()"/>
141 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"UnregisterHome()"/>
143 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"CreateHome()"/>
145 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"RealizeHome()"/>
147 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"RemoveHome()"/>
149 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"FixateHome()"/>
151 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"AuthenticateHome()"/>
153 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"UpdateHome()"/>
155 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"ResizeHome()"/>
157 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"ChangePasswordHome()"/>
159 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"LockHome()"/>
161 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"UnlockHome()"/>
163 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"AcquireHome()"/>
165 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"RefHome()"/>
167 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"ReleaseHome()"/>
169 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"LockAllHomes()"/>
171 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"DeactivateAllHomes()"/>
173 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Rebalance()"/>
175 <variablelist class=
"dbus-property" generated=
"True" extra-ref=
"AutoLogin"/>
177 <!--End of Autogenerated section-->
180 <title>Methods
</title>
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>
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>
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>
202 <para><function>GetUserRecordByUID()
</function> is similar to
<function>GetUserRecordByName()
</function>
203 but returns the user record matching the specified numeric UID.
</para>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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. Background: depending on the backend the user's
309 authentication credentials are stored at multiple places: the user record kept on the host, the user
310 record kept in the home directory and the encrypted LUKS volume slot. If the home directory is used on
311 a different machined temporarily, and the password is changed there, and then is moved back to the
312 original host, the passwords of the three might get out of sync. By issuing
313 <function>ChangePasswordHome()
</function> the three locations are updated to match the newest
314 information. This method is equivalent to
<function>ChangePassword()
</function> on the
315 <classname>org.freedesktop.home1.Home
</classname> interface.
</para>
317 <para><function>LockHome()
</function> temporarily suspends access to a home directory, flushing out any
318 cryptographic keys from memory. This is only supported on some back-ends, and usually done during system
319 suspend, in order to effectively secure home directories while the system is sleeping. Takes a user
320 name as single argument. If an application attempts to access a home directory while it is locked it
321 will typically freeze until the home directory is unlocked again. This method is equivalent to
322 <function>Lock()
</function> on the
<classname>org.freedesktop.home1.Home
</classname> interface.
</para>
324 <para><function>UnlockHome()
</function> undoes the effect of
<function>LockHome()
</function>. Takes a
325 user name and a user record consisting only of the
<literal>secret
</literal> section as arguments. This
326 method is equivalent to
<function>Unlock()
</function> on the
327 <classname>org.freedesktop.home1.Home
</classname> interface.
</para>
329 <para><function>AcquireHome()
</function> activates or unlocks a home directory in a reference counted
330 mode of operation. Takes a user name and user record consisting only of
<literal>secret
</literal>
331 section as argument. If the home directory is not active yet, it is activated. If it is currently
332 locked it is unlocked. After completion a reference to the activation/unlocking of the home directory
333 is returned via a file descriptor. When the last client which acquired such a file descriptor closes it
334 the home directory is automatically deactivated again. This method is typically invoked when a user
335 logs in, and the file descriptor is held until the user logs out again, thus ensuring the user's home
336 directory can be unmounted automatically again in a robust fashion, when the user logs out. The third
337 argument is a boolean which indicates whether the client invoking the call is able to automatically
338 re-authenticate when the system comes back from suspending. It should be set by all clients that
339 implement a secure lock screen running outside of the user's context, that is brought up when the
340 system comes back from suspend and can be used to re-acquire the credentials to unlock the user's home
341 directory. If a home directory has at least one client with an open reference to the home directory
342 that does not support this it is not suspended automatically at system suspend, otherwise it is. This
343 method is equivalent to
<function>Acquire()
</function> on the
344 <classname>org.freedesktop.home1.Home
</classname> interface.
</para>
346 <para><function>RefHome()
</function> is similar to
<function>AcquireHome()
</function> but takes no user
347 record with
<literal>secret
</literal> section, i.e. will take an additional reference to an already
348 activated/unlocked home directory without attempting to activate/unlock it itself. It will fail if the
349 home directory is not already activated. This method is equivalent to
350 <function>Ref()
</function> on the
<classname>org.freedesktop.home1.Home
</classname>
353 <para><function>ReleaseHome()
</function> releases a home directory again, if all file descriptors
354 referencing it are already closed, that where acquired through
<function>AcquireHome()
</function> or
355 <function>RefHome()
</function>. Note that this call does not actually cause the deactivation of the
356 home directory (which happens automatically when the last referencing file descriptor is closed), but
357 is simply a synchronization mechanism that allows delaying of the user session's termination until any
358 triggered deactivation is completed. This method is equivalent to
<function>Release()
</function> on the
359 <classname>org.freedesktop.home1.Home
</classname> interface.
</para>
361 <para><function>LockAllHomes()
</function> locks all active home directories that only have references
362 that opted into automatic suspending during system suspend. This is usually invoked automatically
363 shortly before system suspend.
</para>
365 <para><function>DeactivateAllHomes()
</function> deactivates all home areas that are currently
366 active. This is usually invoked automatically shortly before system shutdown.
</para>
368 <para><function>Rebalance()
</function> synchronously rebalances free disk space between home
369 areas. This only executes an operation if at least one home area using the LUKS2 backend is active and
370 has rebalancing enabled, and is otherwise a NOP.
</para>
374 <title>Properties
</title>
376 <para><varname>AutoLogin
</varname> exposes an array of structures consisting of user name, seat name
377 and object path of an home directory object. All locally managed users that have the
378 <literal>autoLogin
</literal> field set are listed here, with the seat name they are associated with. A
379 display manager may watch this property and pre-fill the login screen with the users exposed this
385 <title>The Home Object
</title>
387 <programlisting executable=
"systemd-homed" node=
"/org/freedesktop/home1/home" interface=
"org.freedesktop.home1.Home">
388 node /org/freedesktop/home1/home {
389 interface org.freedesktop.home1.Home {
391 @org.freedesktop.systemd1.Privileged(
"true")
392 Activate(in s secret);
393 @org.freedesktop.systemd1.Privileged(
"true")
396 Realize(in s secret);
398 @org.freedesktop.systemd1.Privileged(
"true")
400 Authenticate(in s secret);
401 Update(in s user_record);
404 ChangePassword(in s new_secret,
406 @org.freedesktop.systemd1.Privileged(
"true")
408 @org.freedesktop.systemd1.Privileged(
"true")
410 @org.freedesktop.systemd1.Privileged(
"true")
414 @org.freedesktop.systemd1.Privileged(
"true")
415 Ref(in b please_suspend,
417 @org.freedesktop.systemd1.Privileged(
"true")
420 @org.freedesktop.DBus.Property.EmitsChangedSignal(
"const")
421 readonly s UserName = '...';
422 readonly u UID = ...;
423 readonly (suusss) UnixRecord = ...;
424 @org.freedesktop.DBus.Property.EmitsChangedSignal(
"false")
425 readonly s State = '...';
426 @org.freedesktop.DBus.Property.EmitsChangedSignal(
"invalidates")
427 readonly (sb) UserRecord = ...;
429 interface org.freedesktop.DBus.Peer { ... };
430 interface org.freedesktop.DBus.Introspectable { ... };
431 interface org.freedesktop.DBus.Properties { ... };
432 interface org.freedesktop.DBus.ObjectManager { ... };
436 <!--Autogenerated cross-references for systemd.directives, do not edit-->
438 <variablelist class=
"dbus-interface" generated=
"True" extra-ref=
"org.freedesktop.DBus.ObjectManager"/>
440 <variablelist class=
"dbus-interface" generated=
"True" extra-ref=
"org.freedesktop.home1.Home"/>
442 <variablelist class=
"dbus-interface" generated=
"True" extra-ref=
"org.freedesktop.DBus.ObjectManager"/>
444 <variablelist class=
"dbus-interface" generated=
"True" extra-ref=
"org.freedesktop.home1.Home"/>
446 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Activate()"/>
448 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Deactivate()"/>
450 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Unregister()"/>
452 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Realize()"/>
454 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Remove()"/>
456 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Fixate()"/>
458 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Authenticate()"/>
460 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Update()"/>
462 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Resize()"/>
464 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"ChangePassword()"/>
466 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Lock()"/>
468 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Unlock()"/>
470 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Acquire()"/>
472 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Ref()"/>
474 <variablelist class=
"dbus-method" generated=
"True" extra-ref=
"Release()"/>
476 <variablelist class=
"dbus-property" generated=
"True" extra-ref=
"UserName"/>
478 <variablelist class=
"dbus-property" generated=
"True" extra-ref=
"UID"/>
480 <variablelist class=
"dbus-property" generated=
"True" extra-ref=
"UnixRecord"/>
482 <variablelist class=
"dbus-property" generated=
"True" extra-ref=
"State"/>
484 <variablelist class=
"dbus-property" generated=
"True" extra-ref=
"UserRecord"/>
486 <!--End of Autogenerated section-->
489 <title>Methods
</title>
491 <para><function>Activate()
</function>,
<function>Deactivate()
</function>,
492 <function>Unregister()
</function>,
<function>Realize()
</function>,
<function>Remove()
</function>,
493 <function>Fixate()
</function>,
<function>Authenticate()
</function>,
<function>Update()
</function>,
494 <function>Resize()
</function>,
<function>ChangePassword()
</function>,
<function>Lock()
</function>,
495 <function>Unlock()
</function>,
<function>Acquire()
</function>,
<function>Ref()
</function>,
496 <function>Release()
</function> operate like their matching counterparts on the
497 <classname>org.freedesktop.home1.Manager
</classname> interface (see above). The main difference is that
498 they are methods of the home directory objects, and hence carry no additional user name
499 parameter. Which of the two flavors of methods to call depends on the handles to the user known on the
500 client side: if only the user name is known, it's preferable to use the methods on the manager object
501 since they operate with user names only. If however the home object path was already acquired some way
502 it is preferable to operate on the
<classname>org.freedesktop.home1.Home
</classname> objects
507 <title>Properties
</title>
509 <para><varname>UserName
</varname> contains the user name of the user account/home directory.
</para>
511 <para><varname>UID
</varname> contains the numeric UNIX UID of the user account.
</para>
513 <para><varname>UnixRecord
</varname> contains a structure encapsulating the six fields a
514 <structname>struct passwd
</structname> typically contains (the password field is suppressed).
</para>
516 <para><varname>State
</varname> exposes the current state home the home directory.
</para>
518 <para><varname>UserRecord
</varname> contains the full JSON user record string of the user account.
</para>
522 <xi:include href=
"org.freedesktop.locale1.xml" xpointer=
"versioning"/>
525 <title>See Also
</title>
526 <para><simplelist type=
"inline">
527 <member><citerefentry><refentrytitle>systemd
</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>
528 <member><citerefentry><refentrytitle>systemd-homed.service
</refentrytitle><manvolnum>8</manvolnum></citerefentry></member>
529 <member><citerefentry><refentrytitle>homectl
</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>