<entry>Operating system build ID</entry>
<entry>The operating system build identifier of the running system, as read from the <varname>BUILD_ID=</varname> field of <filename>/etc/os-release</filename>. If not set, resolves to an empty string. See <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more information.</entry>
</row>
+ <row id='D'>
+ <entry><literal>%D</literal></entry>
+ <entry>Shared data directory</entry>
+ <entry>This is either <filename>/usr/share/</filename> (for the system manager) or the path <literal>$XDG_DATA_HOME</literal> resolves to (for user managers).</entry>
+ </row>
<row id='H'>
<entry><literal>%H</literal></entry>
<entry>Host name</entry>
<entry>Credentials directory</entry>
<entry>This is the value of the <literal>$CREDENTIALS_DIRECTORY</literal> environment variable if available. See section "Credentials" in <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more information.</entry>
</row>
- <row>
- <entry><literal>%D</literal></entry>
- <entry>Shared data directory</entry>
- <entry>This is either <filename>/usr/share/</filename> (for the system manager) or the path <literal>$XDG_DATA_HOME</literal> resolves to (for user managers).</entry>
- </row>
+ <xi:include href="standard-specifiers.xml" xpointer="D"/>
<row>
<entry><literal>%E</literal></entry>
<entry>Configuration directory root</entry>
<entry>System or user cache directory</entry>
<entry>In <option>--user</option> mode, this is the same as <varname>$XDG_CACHE_HOME</varname>, and <filename>/var/cache</filename> otherwise.</entry>
</row>
+ <xi:include href="standard-specifiers.xml" xpointer="D"/>
<row>
<entry><literal>%g</literal></entry>
<entry>User group</entry>
DIRECTORY_STATE,
DIRECTORY_CACHE,
DIRECTORY_LOGS,
+ DIRECTORY_SHARED,
_DIRECTORY_TYPE_MAX,
} DirectoryType;
[DIRECTORY_STATE] = { SD_PATH_SYSTEM_STATE_PRIVATE },
[DIRECTORY_CACHE] = { SD_PATH_SYSTEM_STATE_CACHE },
[DIRECTORY_LOGS] = { SD_PATH_SYSTEM_STATE_LOGS },
+ [DIRECTORY_SHARED] = { SD_PATH_SYSTEM_SHARED },
};
static const struct table_entry paths_user[] = {
[DIRECTORY_STATE] = { SD_PATH_USER_STATE_PRIVATE },
[DIRECTORY_CACHE] = { SD_PATH_USER_STATE_CACHE },
[DIRECTORY_LOGS] = { SD_PATH_USER_STATE_PRIVATE, "log" },
+ [DIRECTORY_SHARED] = { SD_PATH_USER_SHARED },
};
const struct table_entry *paths;
{ 'h', specifier_user_home, NULL },
{ 'C', specifier_directory, UINT_TO_PTR(DIRECTORY_CACHE) },
+ { 'D', specifier_directory, UINT_TO_PTR(DIRECTORY_SHARED) },
{ 'L', specifier_directory, UINT_TO_PTR(DIRECTORY_LOGS) },
{ 'S', specifier_directory, UINT_TO_PTR(DIRECTORY_STATE) },
{ 't', specifier_directory, UINT_TO_PTR(DIRECTORY_RUNTIME) },
xdg_cache_home if user else '/var/cache',
user=user) # fmt: skip
+ xdg_data_home = os.getenv('XDG_DATA_HOME')
+ if xdg_data_home is None and user:
+ xdg_data_home = os.path.join(home, '.local/share')
+ test_content('f {} - - - - %D',
+ xdg_data_home if user else '/usr/share',
+ user=user) # fmt: skip
+
test_content('f {} - - - - %L',
os.path.join(xdg_state_home, 'log') if user else '/var/log',
user=user) # fmt: skip