<?xml version="1.0"?>
<!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
<!ENTITY % entities SYSTEM "custom-entities.ent" >
%entities;
]>
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->

<refentry id="org.freedesktop.hostname1" conditional='ENABLE_HOSTNAMED'
    xmlns:xi="http://www.w3.org/2001/XInclude">
  <refentryinfo>
    <title>org.freedesktop.hostname1</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>org.freedesktop.hostname1</refentrytitle>
    <manvolnum>5</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>org.freedesktop.hostname1</refname>
    <refpurpose>The D-Bus interface of systemd-hostnamed</refpurpose>
  </refnamediv>

  <refsect1>
    <title>Introduction</title>

    <para>
    <citerefentry><refentrytitle>systemd-hostnamed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
    is a system service that can be used to control the hostname and related machine metadata from user
    programs. This page describes the hostname semantics and the D-Bus interface.</para>
  </refsect1>

  <refsect1>
    <title>The D-Bus API</title>

    <para>The service exposes the following interfaces on the bus:</para>

    <programlisting executable="systemd-hostnamed" node="/org/freedesktop/hostname1" interface="org.freedesktop.hostname1">
node /org/freedesktop/hostname1 {
  interface org.freedesktop.hostname1 {
    methods:
      SetHostname(in  s hostname,
                  in  b interactive);
      SetStaticHostname(in  s hostname,
                        in  b interactive);
      SetPrettyHostname(in  s hostname,
                        in  b interactive);
      SetIconName(in  s icon,
                  in  b interactive);
      SetChassis(in  s chassis,
                 in  b interactive);
      SetDeployment(in  s deployment,
                    in  b interactive);
      SetLocation(in  s location,
                  in  b interactive);
      GetProductUUID(in  b interactive,
                     out ay uuid);
      Describe(out s json);
    properties:
      readonly s Hostname = '...';
      readonly s StaticHostname = '...';
      readonly s PrettyHostname = '...';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s DefaultHostname = '...';
      readonly s HostnameSource = '...';
      readonly s IconName = '...';
      readonly s Chassis = '...';
      readonly s Deployment = '...';
      readonly s Location = '...';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s KernelName = '...';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s KernelRelease = '...';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s KernelVersion = '...';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s OperatingSystemPrettyName = '...';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s OperatingSystemCPEName = '...';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s HomeURL = '...';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s HardwareVendor = '...';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s HardwareModel = '...';
  };
  interface org.freedesktop.DBus.Peer { ... };
  interface org.freedesktop.DBus.Introspectable { ... };
  interface org.freedesktop.DBus.Properties { ... };
};
    </programlisting>

    <!--property HardwareVendor is not documented!-->

    <!--property HardwareModel is not documented!-->

    <!--Autogenerated cross-references for systemd.directives, do not edit-->

    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.hostname1"/>

    <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.hostname1"/>

    <variablelist class="dbus-method" generated="True" extra-ref="SetHostname()"/>

    <variablelist class="dbus-method" generated="True" extra-ref="SetStaticHostname()"/>

    <variablelist class="dbus-method" generated="True" extra-ref="SetPrettyHostname()"/>

    <variablelist class="dbus-method" generated="True" extra-ref="SetIconName()"/>

    <variablelist class="dbus-method" generated="True" extra-ref="SetChassis()"/>

    <variablelist class="dbus-method" generated="True" extra-ref="SetDeployment()"/>

    <variablelist class="dbus-method" generated="True" extra-ref="SetLocation()"/>

    <variablelist class="dbus-method" generated="True" extra-ref="GetProductUUID()"/>

    <variablelist class="dbus-method" generated="True" extra-ref="Describe()"/>

    <variablelist class="dbus-property" generated="True" extra-ref="Hostname"/>

    <variablelist class="dbus-property" generated="True" extra-ref="StaticHostname"/>

    <variablelist class="dbus-property" generated="True" extra-ref="PrettyHostname"/>

    <variablelist class="dbus-property" generated="True" extra-ref="DefaultHostname"/>

    <variablelist class="dbus-property" generated="True" extra-ref="HostnameSource"/>

    <variablelist class="dbus-property" generated="True" extra-ref="IconName"/>

    <variablelist class="dbus-property" generated="True" extra-ref="Chassis"/>

    <variablelist class="dbus-property" generated="True" extra-ref="Deployment"/>

    <variablelist class="dbus-property" generated="True" extra-ref="Location"/>

    <variablelist class="dbus-property" generated="True" extra-ref="KernelName"/>

    <variablelist class="dbus-property" generated="True" extra-ref="KernelRelease"/>

    <variablelist class="dbus-property" generated="True" extra-ref="KernelVersion"/>

    <variablelist class="dbus-property" generated="True" extra-ref="OperatingSystemPrettyName"/>

    <variablelist class="dbus-property" generated="True" extra-ref="OperatingSystemCPEName"/>

    <variablelist class="dbus-property" generated="True" extra-ref="HomeURL"/>

    <variablelist class="dbus-property" generated="True" extra-ref="HardwareVendor"/>

    <variablelist class="dbus-property" generated="True" extra-ref="HardwareModel"/>

    <!--End of Autogenerated section-->

    <para>Whenever the hostname or other metadata is changed via the daemon,
    <function>PropertyChanged</function> signals are sent out to subscribed clients. Changing a hostname
    using this interface is authenticated via
    <ulink url="https://www.freedesktop.org/software/polkit/docs/latest/">polkit</ulink>.</para>
  </refsect1>

  <refsect1>
    <title>Semantics</title>

    <para>The <varname>StaticHostname</varname> property exposes the "static" hostname configured in
    <filename>/etc/hostname</filename>. It is not always in sync with the current hostname as returned by the
    <citerefentry project="man-pages"><refentrytitle>gethostname</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    system call. If no static hostname is configured this property will be the empty string.</para>

    <para>When <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> or
    <citerefentry><refentrytitle>systemd-hostnamed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
    set the hostname, this static hostname <emphasis>has the highest priority</emphasis>.</para>

    <para>The <varname>Hostname</varname> property exposes the actual hostname configured in the kernel via
    <citerefentry project="man-pages"><refentrytitle>sethostname</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
    It can be different from the static hostname. This property is never empty.</para>

    <para>The <varname>PrettyHostname</varname> property exposes the <emphasis>pretty hostname</emphasis>
    which is a free-form UTF-8 hostname for presentation to the user. User interfaces should ensure that the
    pretty hostname and the static hostname stay in sync. E.g. when the former is <literal>Lennart’s
    Computer</literal> the latter should be <literal>lennarts-computer</literal>. If no pretty hostname is
    set this setting will be the empty string. Applications should then find a suitable fallback, such as the
    dynamic hostname.</para>

    <para>The <varname>DefaultHostname</varname> property exposes the default hostname (configured through
    <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>, or a
    fallback set at compilation time).</para>

    <para>The <varname>HostnameSource</varname> property exposes the origin of the currently configured
    hostname. One of <literal>static</literal> (set from <filename>/etc/hostname</filename>),
    <literal>transient</literal> (a non-permanent hostname from an external source),
    <literal>default</literal> (the value from <filename>os-release</filename> or the compiled-in
    fallback).</para>

    <para>The <varname>IconName</varname> property exposes the <emphasis>icon name</emphasis> following the
    XDG icon naming spec. If not set, information such as the chassis type (see below) is used to find a
    suitable fallback icon name (i.e. <literal>computer-laptop</literal>
    vs. <literal>computer-desktop</literal> is picked based on the chassis information). If no such data is
    available, the empty string is returned. In that case an application should fall back to a replacement
    icon, for example <literal>computer</literal>. If this property is set to the empty string, the automatic
    fallback name selection is enabled again.</para>

    <para>The <varname>Chassis</varname> property exposes a <emphasis>chassis type</emphasis>, one of the
    currently defined chassis types: <literal>desktop</literal>, <literal>laptop</literal>,
    <literal>server</literal>, <literal>tablet</literal>, <literal>handset</literal>, as well as the special
    chassis types <literal>vm</literal> and <literal>container</literal> for virtualized systems. Note that
    in most cases the chassis type will be determined automatically from DMI/SMBIOS/ACPI firmware
    information. Writing to this setting is hence useful only to override misdetected chassis types, or to
    configure the chassis type if it could not be auto-detected. Set this property to the empty string to
    reenable the automatic detection of the chassis type from firmware information.</para>

    <para>Note that <filename>systemd-hostnamed</filename> starts only on request and terminates after a
    short idle period. This effectively means that <function>PropertyChanged</function> messages are not sent
    out for changes made directly on the files (as in: administrator edits the files with vi). This is
    the intended behavior: manual configuration changes should require manual reloading.</para>

    <para>The transient (dynamic) hostname exposed by the <varname>Hostname</varname> property maps directly
    to the kernel hostname. This hostname should be assumed to be highly dynamic, and hence should be watched
    directly, without depending on <function>PropertyChanged</function> messages from
    <filename>systemd-hostnamed</filename>. To accomplish this, open
    <filename>/proc/sys/kernel/hostname</filename> and
    <citerefentry project="man-pages"><refentrytitle>poll</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    for <constant>SIGHUP</constant> which is triggered by the kernel every time the hostname changes. Again:
    this is special for the transient (dynamic) hostname, and does not apply to the configured (fixed)
    hostname.</para>

    <para>Applications may read the hostname data directly if hostname change notifications
    are not necessary. Use
    <citerefentry project="man-pages"><refentrytitle>gethostname</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
    <filename>/etc/hostname</filename> (possibly with per-distribution fallbacks), and
    <citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    for that. For more information on these files and syscalls see the respective man pages.</para>

    <para><varname>KernelName</varname>, <varname>KernelRelease</varname>, and
    <varname>KernelVersion</varname> expose the kernel name (e.g. <literal>Linux</literal>), release
    (e.g. <literal>5.0.0-11</literal>), and version (i.e. the build number, e.g. <literal>#11</literal>) as
    reported by <citerefentry project="man-pages"><refentrytitle>uname</refentrytitle><manvolnum>2</manvolnum></citerefentry>.
    <varname>OperatingSystemPrettyName</varname>, <varname>OperatingSystemCPEName</varname>, and
    <varname>HomeURL</varname> expose the <varname>PRETTY_NAME=</varname>, <varname>CPE_NAME=</varname> and
    <varname>HOME_URL=</varname> fields from
    <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>. The
    purpose of those properties is to allow remote clients to access this information over D-Bus. Local
    clients can access the information directly.</para>

    <refsect2>
      <title>Methods</title>

      <para><function>SetHostname()</function> sets the transient (dynamic) hostname, which is used if no
      static hostname is set. This value must be an internet-style hostname, 7-bit lowercase ASCII, no
      special chars/spaces. An empty string will unset the transient hostname.</para>

      <para><function>SetStaticHostname()</function> sets the static hostname which is exposed by the
      <varname>StaticHostname</varname> property. When called with an empty argument, the static
      configuration in <filename>/etc/hostname</filename> is removed. Since the static hostname has the
      highest priority, calling this function usually affects also the <varname>Hostname</varname> property
      and the effective hostname configured in the kernel.</para>

      <para><function>SetPrettyHostname()</function> sets the pretty hostname which is exposed by the
      <varname>PrettyHostname</varname> property.</para>

      <para><function>SetIconName()</function>, <function>SetChassis()</function>,
      <function>SetDeployment()</function>, and <function>SetLocation()</function> set the properties
      <varname>IconName</varname> (the name of the icon representing for the machine),
      <varname>Chassis</varname> (the machine form factor), <varname>Deployment</varname> (the system
      deployment environment), and <varname>Location</varname> (physical system location), respectively.
      </para>

      <para><varname>PrettyHostname</varname>, <varname>IconName</varname>, <varname>Chassis</varname>,
      <varname>Deployment</varname>, and <varname>Location</varname> are stored in
      <filename>/etc/machine-info</filename>. See
      <citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
      the semantics of those settings.</para>

      <para><function>GetProductUUID()</function> returns the "product UUID" as exposed by the kernel based
      on DMI information in <filename>/sys/class/dmi/id/product_uuid</filename>. Reading the file directly
      requires root privileges, and this method allows access to unprivileged clients through the polkit
      framework.</para>

      <para><function>Describe()</function> returns a JSON representation of all properties in one.</para>
    </refsect2>

    <refsect2>
      <title>Security</title>

      <para>The <varname>interactive</varname> boolean parameters can be used to control whether polkit
      should interactively ask the user for authentication credentials if required.</para>

      <para>The polkit action for <function>SetHostname()</function> is
      <interfacename>org.freedesktop.hostname1.set-hostname</interfacename>. For
      <function>SetStaticHostname()</function> and <function>SetPrettyHostname()</function> it is
      <interfacename>org.freedesktop.hostname1.set-static-hostname</interfacename>. For
      <function>SetIconName()</function>, <function>SetChassis()</function>, <function>SetDeployment()</function>
      and <function>SetLocation()</function> it is
      <interfacename>org.freedesktop.hostname1.set-machine-info</interfacename>.</para>
    </refsect2>
  </refsect1>

  <refsect1>
    <title>Recommendations</title>

    <para>Here are three examples that show how the pretty hostname and the icon name should be used:
    <itemizedlist>
      <listitem><para>When registering DNS-SD services: use the pretty hostname in the service name, and pass
      the icon name in the TXT data, if there is an icon name. Browsing clients can then show the server icon
      on each service. This is especially useful for WebDAV applications or UPnP media sharing.
      </para></listitem>

      <listitem><para>Set the bluetooth name to the pretty hostname.</para></listitem>

      <listitem><para>When your file browser has a "Computer" icon, replace the name with the pretty hostname
      if set, and the icon with the icon name, if it is set.</para></listitem>
    </itemizedlist></para>

    <para>To properly handle name lookups with changing local hostnames without having to edit
    <filename>/etc/hosts</filename>, we recommend using <filename>systemd-hostnamed</filename> in combination
    with <citerefentry><refentrytitle>nss-myhostname</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
    </para>

    <para>Here are some recommendations to follow when generating a static (internet) hostname from a pretty
    name:
    <itemizedlist>
      <listitem><para>Generate a single DNS label only, not an FQDN. That means no dots allowed. Strip them,
      or replace them with <literal>-</literal>.</para></listitem>

      <listitem><para>It's probably safer to not use any non-ASCII chars, even if DNS allows this in some way
      these days. In fact, restrict your charset to <literal>a-zA-Z0-9</literal> and <literal>-</literal>.
      Strip other chars, or try to replace them in some smart way with chars from this set, for example
      <literal>ä</literal> → <literal>ae</literal>, and use <literal>-</literal> as the replacement for all
      punctuation characters and whitespace.</para></listitem>

      <listitem><para>Try to avoid creating repeated <literal>-</literal>, as well as <literal>-</literal> as
      the first or last char.</para></listitem>

      <listitem><para>Limit the hostname to 63 chars, which is the length of a DNS label.</para></listitem>

      <listitem><para>If after stripping special chars the empty string is the result, you can pass this
      as-is to <filename>systemd-hostnamed</filename> in which case it will automatically use a suitable
      fallback.</para></listitem>

      <listitem><para>Uppercase charaacters should be replaced with their lowercase equivalents.
      </para></listitem>
    </itemizedlist></para>

    <para>Note that while <filename>systemd-hostnamed</filename> applies some checks to the hostname you pass
    they are much looser than the recommendations above. For example, <filename>systemd-hostnamed</filename>
    will also accept <literal>_</literal> in the hostname, but we recommend not using this to avoid clashes
    with DNS-SD service types. Also <filename>systemd-hostnamed</filename> allows longer hostnames, but
    because of the DNS label limitations, we recommend not making use of this.</para>

    <para>Here are a couple of example conversions:
    <itemizedlist>
      <listitem><para><literal>Lennart's PC</literal> → <literal>lennarts-pc</literal></para></listitem>
      <listitem><para><literal>Müllers Computer</literal> → <literal>muellers-computer</literal></para></listitem>
      <listitem><para><literal>Voran!</literal> → <literal>voran</literal></para></listitem>
      <listitem><para><literal>Es war einmal ein Männlein</literal> → <literal>es-war-einmal-ein-maennlein</literal></para></listitem>
      <listitem><para><literal>Jawoll. Ist doch wahr!</literal> → <literal>jawoll-ist-doch-wahr</literal></para></listitem>
      <listitem><para><literal>レナート</literal> → <literal>localhost</literal></para></listitem>
      <listitem><para><literal>...zack!!! zack!...</literal> → <literal>zack-zack</literal></para></listitem>
    </itemizedlist></para>

    <para>Of course, an already valid internet hostname label you enter and pass through this
    conversion should stay unmodified, so that users have direct control of it, if they want — by simply
    ignoring the fact that the pretty hostname is pretty and just edit it as if it was the normal internet
    name.</para>
  </refsect1>

  <refsect1>
    <title>Versioning</title>

    <para>These D-Bus interfaces follow <ulink url="http://0pointer.de/blog/projects/versioning-dbus.html">
    the usual interface versioning guidelines</ulink>.</para>
  </refsect1>

  <refsect1>
    <title>Examples</title>

    <example>
      <title>Introspect <interfacename>org.freedesktop.hostname1</interfacename> on the bus</title>

      <programlisting>$ gdbus introspect --system \
  --dest org.freedesktop.hostname1 \
  --object-path /org/freedesktop/hostname1
      </programlisting>
    </example>
  </refsect1>

  <refsect1>
    <title>See also</title>

    <para>David Zeuthen's original Fedora
    <ulink url="https://fedoraproject.org/wiki/Features/BetterHostname">Feature page about xdg-hostname</ulink></para>
  </refsect1>
</refentry>
