Compare commits
19 Commits
47b04ef632
...
346543d6f9
Author | SHA1 | Date |
---|---|---|
Christian Göttsche | 346543d6f9 | |
Lennart Poettering | e4ec78206c | |
Lennart Poettering | 58cf204730 | |
Zbigniew Jędrzejewski-Szmek | 47be8ddcee | |
Zbigniew Jędrzejewski-Szmek | 6ee37b1a7d | |
Lennart Poettering | 64a5384fd2 | |
afg | ae0d36c161 | |
Lennart Poettering | 278fdd064d | |
Lennart Poettering | bf6e5c574b | |
Lennart Poettering | 643bb92408 | |
Lennart Poettering | fccb48b286 | |
Lennart Poettering | 242c1c075a | |
Lennart Poettering | 31abedbb03 | |
Lennart Poettering | 3b684be04b | |
Lennart Poettering | e77b146f82 | |
Lennart Poettering | 73484ecff9 | |
Gogo Gogsi | 0845afbec8 | |
Yuri Chornoivan | 892edd1e87 | |
Julien Humbert | 582b66e1c6 |
85
NEWS
85
NEWS
|
@ -1,5 +1,90 @@
|
|||
systemd System and Service Manager
|
||||
|
||||
CHANGES WITH 247 in spe:
|
||||
|
||||
* KERNEL API INCOMPATIBILTY: Linux 4.12 introduced two new uevents
|
||||
"bind" and "unbind" to the Linux device model. When this kernel
|
||||
change was made, systemd-udevd was only minimally updated to handle
|
||||
and propagate these new event types. The introduction of these new
|
||||
uevents (which are typically generated for USB devices and devices
|
||||
needing a firmware upload before being functional) resulted in a
|
||||
number of software issues, we so far didn't address (mostly because
|
||||
there was hope the kernel maintainers would themeselves address these
|
||||
issues in some form – which did not happen). To handle them properly,
|
||||
many (if not most) udev rules files shipped in various packages need
|
||||
updating, and so do many programs that monitor or enumerate devices
|
||||
with libudev or sd-device, or otherwise process uevents. Please note
|
||||
that this incompatibility is not fault of systemd or udev, but caused
|
||||
by an incompatible kernel change that happened back in Linux 4.12.
|
||||
|
||||
To minimize issues resulting from this kernel change (but not avoid
|
||||
them entirely) starting with systemd-udevd 247 the udev "tags"
|
||||
concept (which is a concept for marking and filtering devices during
|
||||
enumeration and monitoring) has been reworked: udev tags are now
|
||||
"sticky", meaning that once a tag is assigned to a device it will not
|
||||
be removed from the device again until the device itself is removed
|
||||
(i.e. unplugged). This makes sure that any application monitoring
|
||||
devices that match a specific tag is guaranteed to both see uevents
|
||||
where the device starts being relevant, and those where it stops
|
||||
being relevant (the latter now regularly happening due to the new
|
||||
"unbind" uevent type). The udev tags concept is hence now a concept
|
||||
tied to a *device* instead of a device *event* — unlike for example
|
||||
udev properties whose lifecycle (as before) is generally tied to a
|
||||
device event, meaning that the previously determined properties are
|
||||
forgotten whenever a new uevent is processed.
|
||||
|
||||
With the newly redefined udev tags concept, sometimes it's necessary
|
||||
to determine which tags are the ones applied by the most recent
|
||||
uevent/database update, in order to discern them from those
|
||||
originating from earlier uevents/database updates of the same
|
||||
device. To accommodate for this a new automatic property CURRENT_TAGS
|
||||
has been added that works similar to the existing TAGS property but
|
||||
only lists tags set by the most recent uevent/database
|
||||
update. Similar, the libudev/sd-device API has been updated with new
|
||||
functions to enumerate these 'current' tags, in addition to the
|
||||
existing APIs that now enumerate the 'sticky' ones.
|
||||
|
||||
To properly handle "bind"/"unbind" on Linux 4.12 and newer it is
|
||||
essential that all udev rules files and applications are updated to
|
||||
handle the new events. Specifically:
|
||||
|
||||
• All rule files that currently use a header guard similar to
|
||||
ACTION!="add|change",GOTO="xyz_end" should be updated to use
|
||||
ACTION=="remove",GOTO="xyz_end" instead, so that the
|
||||
properties/tags they add are also applied whenever "bind" (or
|
||||
"unbind") is seen. (This is most important for all physical device
|
||||
types — as that's for which "bind" and "unbind" are currently
|
||||
usually generated, for all other device types this change is still
|
||||
recommended but not as important — but certainly prepares for
|
||||
future kernel uevent type additions).
|
||||
|
||||
• Similar, all code monitoring devices that contains an 'if' branch
|
||||
discerning the "add" + "change" uevent actions from all other
|
||||
uevents actions (i.e. considering devices only relevant after "add"
|
||||
or "change", and irrelevant on all other events) should be reworked
|
||||
to instead negatively check for "remove" only (i.e. considering
|
||||
devices relevant after all event types, except for "remove", which
|
||||
invalidates the device). Note that this also means that devices
|
||||
should be considered relevant on "unbind", even though conceptually
|
||||
this — in some form — invalidates the device. Since the precise
|
||||
effect of "unbind" is not generically defined, devices should be
|
||||
considered relevant even after "unbind", however I/O errors
|
||||
accessing the device should then be handled gracefully.
|
||||
|
||||
• Any code that uses device tags for deciding whether a device is
|
||||
relevant or not most likely needs to be updated to use the new
|
||||
udev_device_has_current_tag() API (or sd_device_has_current_tag()
|
||||
in case sd-device is used), to check whether the tag is set
|
||||
at the moment an uevent is seen (as opposed to the existing
|
||||
udev_device_has_tag() API which checks if the tag ever existed on
|
||||
the device, following the API concept redefinition explained
|
||||
above).
|
||||
|
||||
We are very sorry for this breakage and the requirement to update
|
||||
packages using these interfaces. We'd again like to underline that
|
||||
this is not caused by systemd/udev changes, but result of a kernel
|
||||
behaviour change.
|
||||
|
||||
CHANGES WITH 246:
|
||||
|
||||
* The service manager gained basic support for cgroup v2 freezer. Units
|
||||
|
|
|
@ -21,9 +21,11 @@
|
|||
|
||||
<refnamediv>
|
||||
<refname>udev_device_has_tag</refname>
|
||||
<refname>udev_device_has_current_tag</refname>
|
||||
<refname>udev_device_get_devlinks_list_entry</refname>
|
||||
<refname>udev_device_get_properties_list_entry</refname>
|
||||
<refname>udev_device_get_tags_list_entry</refname>
|
||||
<refname>udev_device_get_current_tags_list_entry</refname>
|
||||
<refname>udev_device_get_sysattr_list_entry</refname>
|
||||
<refname>udev_device_get_property_value</refname>
|
||||
<refname>udev_device_get_sysattr_value</refname>
|
||||
|
@ -36,6 +38,18 @@
|
|||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <libudev.h></funcsynopsisinfo>
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>int <function>udev_device_has_tag</function></funcdef>
|
||||
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
|
||||
<paramdef>const char *<parameter>tag</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>int <function>udev_device_has_current_tag</function></funcdef>
|
||||
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
|
||||
<paramdef>const char *<parameter>tag</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>struct udev_list_entry *<function>udev_device_get_devlinks_list_entry</function></funcdef>
|
||||
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
|
||||
|
@ -51,6 +65,11 @@
|
|||
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>struct udev_list_entry *<function>udev_device_get_current_tags_list_entry</function></funcdef>
|
||||
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>struct udev_list_entry *<function>udev_device_get_sysattr_list_entry</function></funcdef>
|
||||
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
|
||||
|
@ -62,12 +81,6 @@
|
|||
<paramdef>const char *<parameter>key</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>int <function>udev_device_has_tag</function></funcdef>
|
||||
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
|
||||
<paramdef>const char *<parameter>tag</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>const char *<function>udev_device_get_sysattr_value</function></funcdef>
|
||||
<paramdef>struct udev_device *<parameter>udev_device</parameter></paramdef>
|
||||
|
@ -84,22 +97,40 @@
|
|||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<!--<refsect1>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>XXX: Add short description.</para>
|
||||
</refsect1>-->
|
||||
<para><function>udev_device_has_tag()</function> returns a valuer larger than zero if the specified
|
||||
device object has the indicated tag assigned to it, and zero otherwise. See
|
||||
<citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry> for details on
|
||||
the tags concept. <function>udev_device_has_current_tag()</function> executes a similar check, however
|
||||
only determines whether the indicated tag was set as result of the most recent event seen for the
|
||||
device. Tags are "sticky", i.e. once set for a device they remain on the device until the device is
|
||||
unplugged, even if the rules run for later events of the same device do not set them anymore. Any tag for
|
||||
which <function>udev_device_has_current_tag()</function> returns true will hence also return true when
|
||||
passed to <function>udev_device_has_tag()</function>, but the opposite might not be true, in case a tag is
|
||||
no longer configured by the rules applied to the most recent device even.</para>
|
||||
|
||||
<para><function>udev_device_get_tags_list_entry()</function> returns a a
|
||||
<function>udev_list_entry</function> object, encapsulating a list of tags set for the specified
|
||||
device. Similar, <function>udev_device_get_current_tags_list_entry()</function> returns a list of tags
|
||||
set for the specified device as effect of the most recent device event seen (see above for details on the
|
||||
difference).</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>On success,
|
||||
<function>udev_device_get_devlinks_list_entry()</function>,
|
||||
<para>On success, <function>udev_device_has_tag()</function> and
|
||||
<function>udev_device_has_current_tag()</function> return positive or <constant>0</constant>, depending
|
||||
on whether the device has the given tag or not. On failure, a negative error code is returned.</para>
|
||||
|
||||
<para>On success, <function>udev_device_get_devlinks_list_entry()</function>,
|
||||
<function>udev_device_get_properties_list_entry()</function>,
|
||||
<function>udev_device_get_tags_list_entry()</function> and
|
||||
<function>udev_device_get_sysattr_list_entry()</function> return
|
||||
a pointer to the first entry of the retrieved list. If that list
|
||||
is empty, or if an error occurred, <constant>NULL</constant> is
|
||||
<function>udev_device_get_tags_list_entry()</function>,
|
||||
<function>udev_device_get_current_tags_list_entry()</function> and
|
||||
<function>udev_device_get_sysattr_list_entry()</function> return a pointer to the first entry of the
|
||||
retrieved list. If that list is empty, or if an error occurred, <constant>NULL</constant> is
|
||||
returned.</para>
|
||||
|
||||
<para>On success,
|
||||
|
@ -119,17 +150,13 @@
|
|||
contain <constant>NUL</constant> bytes should not be set with
|
||||
this function; instead, write them directly to the files within
|
||||
the device's <property>syspath</property>.</para>
|
||||
|
||||
<para>On success, <function>udev_device_has_tag()</function>
|
||||
returns <constant>1</constant> or <constant>0</constant>,
|
||||
depending on whether the device has the given tag or not.
|
||||
On failure, a negative error code is returned.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>See Also</title>
|
||||
|
||||
<para>
|
||||
<citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>udev_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>udev_device_new_from_syspath</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>udev_device_get_syspath</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
|
|
|
@ -14,7 +14,7 @@ project('systemd', 'c',
|
|||
)
|
||||
|
||||
libsystemd_version = '0.29.0'
|
||||
libudev_version = '1.6.18'
|
||||
libudev_version = '1.7.0'
|
||||
|
||||
# We need the same data in two different formats, ugh!
|
||||
# Also, for hysterical reasons, we use different variable
|
||||
|
|
213
po/fr.po
213
po/fr.po
|
@ -9,7 +9,7 @@ msgstr ""
|
|||
"Project-Id-Version: systemd\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-08-19 18:02+0200\n"
|
||||
"PO-Revision-Date: 2020-08-27 02:46+0000\n"
|
||||
"PO-Revision-Date: 2020-08-28 05:29+0000\n"
|
||||
"Last-Translator: Julien Humbert <julroy67@gmail.com>\n"
|
||||
"Language-Team: French <https://translate.fedoraproject.org/projects/systemd/"
|
||||
"master/fr/>\n"
|
||||
|
@ -51,7 +51,7 @@ msgstr ""
|
|||
#: src/core/org.freedesktop.systemd1.policy.in:54
|
||||
msgid "Set or unset system and service manager environment variables"
|
||||
msgstr ""
|
||||
"Définir ou supprimer des variables d'environnement du système ou du "
|
||||
"Définir ou supprimer des variables d’environnement du système ou du "
|
||||
"gestionnaire de services"
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:55
|
||||
|
@ -59,12 +59,12 @@ msgid ""
|
|||
"Authentication is required to set or unset system and service manager "
|
||||
"environment variables."
|
||||
msgstr ""
|
||||
"Authentification requise pour définir ou supprimer des variables "
|
||||
"d'environnement du système ou du gestionnaire de services."
|
||||
"Authentification requise pour définir ou supprimer des variables d’"
|
||||
"environnement du système ou du gestionnaire de services."
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:64
|
||||
msgid "Reload the systemd state"
|
||||
msgstr "Recharger l'état de systemd"
|
||||
msgstr "Recharger l’état de systemd"
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:65
|
||||
msgid "Authentication is required to reload the systemd state."
|
||||
|
@ -77,7 +77,7 @@ msgstr "Créer un espace personnel"
|
|||
#: src/home/org.freedesktop.home1.policy:14
|
||||
msgid "Authentication is required to create a user's home area."
|
||||
msgstr ""
|
||||
"Authentification requise pour créer l'espace personnel d'un utilisateur."
|
||||
"Authentification requise pour créer l’espace personnel d’un utilisateur."
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:23
|
||||
msgid "Remove a home area"
|
||||
|
@ -86,18 +86,18 @@ msgstr "Retirer un espace personnel"
|
|||
#: src/home/org.freedesktop.home1.policy:24
|
||||
msgid "Authentication is required to remove a user's home area."
|
||||
msgstr ""
|
||||
"Authentification requise pour retirer l'espace personnel d'un utilisateur."
|
||||
"Authentification requise pour retirer l’espace personnel d’un utilisateur."
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:33
|
||||
msgid "Check credentials of a home area"
|
||||
msgstr "Vérifier les identifiants d'un espace personnel"
|
||||
msgstr "Vérifier les identifiants d’un espace personnel"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:34
|
||||
msgid ""
|
||||
"Authentication is required to check credentials against a user's home area."
|
||||
msgstr ""
|
||||
"Authentification requise pour vérifier les identifiants de l'espace "
|
||||
"personnel d'un utilisateur."
|
||||
"Authentification requise pour vérifier les identifiants de l’espace "
|
||||
"personnel d’un utilisateur."
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:43
|
||||
msgid "Update a home area"
|
||||
|
@ -106,7 +106,7 @@ msgstr "Mettre à jour un espace personnel"
|
|||
#: src/home/org.freedesktop.home1.policy:44
|
||||
msgid "Authentication is required to update a user's home area."
|
||||
msgstr ""
|
||||
"Authentification requise pour mettre à jour l'espace personnel d'un "
|
||||
"Authentification requise pour mettre à jour l’espace personnel d’un "
|
||||
"utilisateur."
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:53
|
||||
|
@ -119,34 +119,34 @@ msgstr "Authentification requise pour retailler un espace personnel."
|
|||
|
||||
#: src/home/org.freedesktop.home1.policy:63
|
||||
msgid "Change password of a home area"
|
||||
msgstr "Changer le mot de passe d'un espace personnel"
|
||||
msgstr "Changer le mot de passe d’un espace personnel"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:64
|
||||
msgid ""
|
||||
"Authentication is required to change the password of a user's home area."
|
||||
msgstr ""
|
||||
"Authentification requise pour changer le mot de passe de l'espace personnel "
|
||||
"d'un utilisateur."
|
||||
"Authentification requise pour changer le mot de passe de l’espace personnel "
|
||||
"d’un utilisateur."
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:20
|
||||
msgid "Set hostname"
|
||||
msgstr "Définir le nom d'hôte"
|
||||
msgstr "Définir le nom d’hôte"
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:21
|
||||
msgid "Authentication is required to set the local hostname."
|
||||
msgstr "Authentification requise pour définir le nom d'hôte local."
|
||||
msgstr "Authentification requise pour définir le nom d’hôte local."
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:30
|
||||
msgid "Set static hostname"
|
||||
msgstr "Définir le nom d'hôte statique"
|
||||
msgstr "Définir le nom d’hôte statique"
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:31
|
||||
msgid ""
|
||||
"Authentication is required to set the statically configured local hostname, "
|
||||
"as well as the pretty hostname."
|
||||
msgstr ""
|
||||
"Authentification requise pour définir le nom d'hôte local de manière "
|
||||
"statique, tout comme le nom d'hôte familier."
|
||||
"Authentification requise pour définir le nom d’hôte local de manière "
|
||||
"statique, tout comme le nom d’hôte familier."
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:41
|
||||
msgid "Set machine information"
|
||||
|
@ -159,11 +159,11 @@ msgstr ""
|
|||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:51
|
||||
msgid "Get product UUID"
|
||||
msgstr "Obtenir l'UUID du produit"
|
||||
msgstr "Obtenir l’UUID du produit"
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:52
|
||||
msgid "Authentication is required to get product UUID."
|
||||
msgstr "Authentification requise pour obtenir l'UUID du produit."
|
||||
msgstr "Authentification requise pour obtenir l’UUID du produit."
|
||||
|
||||
#: src/import/org.freedesktop.import1.policy:22
|
||||
msgid "Import a VM or container image"
|
||||
|
@ -214,33 +214,33 @@ msgstr ""
|
|||
|
||||
#: src/login/org.freedesktop.login1.policy:22
|
||||
msgid "Allow applications to inhibit system shutdown"
|
||||
msgstr "Permet aux applications d'empêcher l'arrêt du système"
|
||||
msgstr "Permet aux applications d’empêcher l’arrêt du système"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:23
|
||||
msgid ""
|
||||
"Authentication is required for an application to inhibit system shutdown."
|
||||
msgstr ""
|
||||
"Authentification requise pour permettre à une application d'empêcher l'arrêt "
|
||||
"Authentification requise pour permettre à une application d’empêcher l’arrêt "
|
||||
"du système."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:33
|
||||
msgid "Allow applications to delay system shutdown"
|
||||
msgstr "Permet aux applications de retarder l'arrêt du système"
|
||||
msgstr "Permet aux applications de retarder l’arrêt du système"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:34
|
||||
msgid "Authentication is required for an application to delay system shutdown."
|
||||
msgstr ""
|
||||
"Authentification requise pour permettre à une application de retarder "
|
||||
"l'arrêt du système."
|
||||
"Authentification requise pour permettre à une application de retarder l’"
|
||||
"arrêt du système."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:44
|
||||
msgid "Allow applications to inhibit system sleep"
|
||||
msgstr "Permet aux applications d'empêcher la mise en veille du système"
|
||||
msgstr "Permet aux applications d’empêcher la mise en veille du système"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:45
|
||||
msgid "Authentication is required for an application to inhibit system sleep."
|
||||
msgstr ""
|
||||
"Authentification requise pour permettre à une application d'empêcher la mise "
|
||||
"Authentification requise pour permettre à une application d’empêcher la mise "
|
||||
"en veille du système."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:55
|
||||
|
@ -255,21 +255,20 @@ msgstr ""
|
|||
|
||||
#: src/login/org.freedesktop.login1.policy:65
|
||||
msgid "Allow applications to inhibit automatic system suspend"
|
||||
msgstr ""
|
||||
"Permet aux applications d'empêcher l'hibernation automatique du système"
|
||||
msgstr "Permet aux applications d’empêcher l’hibernation automatique du système"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:66
|
||||
msgid ""
|
||||
"Authentication is required for an application to inhibit automatic system "
|
||||
"suspend."
|
||||
msgstr ""
|
||||
"Authentification requise pour permettre à une application d'empêcher "
|
||||
"l'hibernation automatique du système."
|
||||
"Authentification requise pour permettre à une application d’empêcher l’"
|
||||
"hibernation automatique du système."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:75
|
||||
msgid "Allow applications to inhibit system handling of the power key"
|
||||
msgstr ""
|
||||
"Permet aux applications d'empêcher la gestion du bouton d'alimentation du "
|
||||
"Permet aux applications d’empêcher la gestion du bouton d’alimentation du "
|
||||
"système"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:76
|
||||
|
@ -277,13 +276,13 @@ msgid ""
|
|||
"Authentication is required for an application to inhibit system handling of "
|
||||
"the power key."
|
||||
msgstr ""
|
||||
"Authentification requise pour permettre à une application d'empêcher la "
|
||||
"gestion du bouton d'alimentation du système."
|
||||
"Authentification requise pour permettre à une application d’empêcher la "
|
||||
"gestion du bouton d’alimentation du système."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:86
|
||||
msgid "Allow applications to inhibit system handling of the suspend key"
|
||||
msgstr ""
|
||||
"Permet aux applications d'empêcher la gestion du bouton de mise en veille du "
|
||||
"Permet aux applications d’empêcher la gestion du bouton de mise en veille du "
|
||||
"système"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:87
|
||||
|
@ -291,13 +290,13 @@ msgid ""
|
|||
"Authentication is required for an application to inhibit system handling of "
|
||||
"the suspend key."
|
||||
msgstr ""
|
||||
"Authentification requise pour permettre à une application d'empêcher la "
|
||||
"Authentification requise pour permettre à une application d’empêcher la "
|
||||
"gestion du bouton de mise en veille du système."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:97
|
||||
msgid "Allow applications to inhibit system handling of the hibernate key"
|
||||
msgstr ""
|
||||
"Permet aux applications d'empêcher la gestion du bouton d'hibernation du "
|
||||
"Permet aux applications d’empêcher la gestion du bouton d’hibernation du "
|
||||
"système"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:98
|
||||
|
@ -305,46 +304,46 @@ msgid ""
|
|||
"Authentication is required for an application to inhibit system handling of "
|
||||
"the hibernate key."
|
||||
msgstr ""
|
||||
"Authentification requise pour permettre à une application d'empêcher la "
|
||||
"gestion du bouton d'hibernation du système."
|
||||
"Authentification requise pour permettre à une application d’empêcher la "
|
||||
"gestion du bouton d’hibernation du système."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:107
|
||||
msgid "Allow applications to inhibit system handling of the lid switch"
|
||||
msgstr ""
|
||||
"Permet aux applications d'empêcher la gestion par le système du rabat de "
|
||||
"l'écran"
|
||||
"Permet aux applications d’empêcher la gestion par le système du rabat de "
|
||||
"l’écran"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:108
|
||||
msgid ""
|
||||
"Authentication is required for an application to inhibit system handling of "
|
||||
"the lid switch."
|
||||
msgstr ""
|
||||
"Authentification requise pour permettre à une application d'empêcher la "
|
||||
"gestion par le système du rabat de l'écran."
|
||||
"Authentification requise pour permettre à une application d’empêcher la "
|
||||
"gestion par le système du rabat de l’écran."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:117
|
||||
msgid "Allow non-logged-in user to run programs"
|
||||
msgstr "Permet à un utilisateur non connecté d'exécuter des programmes"
|
||||
msgstr "Permet à un utilisateur non connecté d’exécuter des programmes"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:118
|
||||
msgid "Explicit request is required to run programs as a non-logged-in user."
|
||||
msgstr ""
|
||||
"Requête explicite requise pour exécuter des programmes en tant "
|
||||
"qu'utilisateur non connecté."
|
||||
"Requête explicite requise pour exécuter des programmes en tant qu’"
|
||||
"utilisateur non connecté."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:127
|
||||
msgid "Allow non-logged-in users to run programs"
|
||||
msgstr "Permet aux utilisateurs non connectés d'exécuter des programmes"
|
||||
msgstr "Permet aux utilisateurs non connectés d’exécuter des programmes"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:128
|
||||
msgid "Authentication is required to run programs as a non-logged-in user."
|
||||
msgstr ""
|
||||
"Authentification requise pour exécuter des programmes en tant qu'utilisateur "
|
||||
"Authentification requise pour exécuter des programmes en tant qu’utilisateur "
|
||||
"non connecté."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:137
|
||||
msgid "Allow attaching devices to seats"
|
||||
msgstr "Permet d'associer des périphériques à des postes (seats)"
|
||||
msgstr "Permet d’associer des périphériques à des postes (seats)"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:138
|
||||
msgid "Authentication is required to attach a device to a seat."
|
||||
|
@ -371,27 +370,27 @@ msgstr "Authentification requise pour éteindre le système."
|
|||
|
||||
#: src/login/org.freedesktop.login1.policy:169
|
||||
msgid "Power off the system while other users are logged in"
|
||||
msgstr "Éteindre le système alors que d'autres utilisateurs sont connectés"
|
||||
msgstr "Éteindre le système alors que d’autres utilisateurs sont connectés"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:170
|
||||
msgid ""
|
||||
"Authentication is required to power off the system while other users are "
|
||||
"logged in."
|
||||
msgstr ""
|
||||
"Authentification requise pour éteindre le système alors que d'autres "
|
||||
"Authentification requise pour éteindre le système alors que d’autres "
|
||||
"utilisateurs sont connectés."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:180
|
||||
msgid "Power off the system while an application is inhibiting this"
|
||||
msgstr "Éteindre le système alors qu'une application a demandé de l'empêcher"
|
||||
msgstr "Éteindre le système alors qu’une application a demandé de l’empêcher"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:181
|
||||
msgid ""
|
||||
"Authentication is required to power off the system while an application is "
|
||||
"inhibiting this."
|
||||
msgstr ""
|
||||
"Authentification requise pour éteindre le système alors qu'une application a "
|
||||
"demandé de l'empêcher."
|
||||
"Authentification requise pour éteindre le système alors qu’une application a "
|
||||
"demandé de l’empêcher."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:191
|
||||
msgid "Reboot the system"
|
||||
|
@ -403,27 +402,27 @@ msgstr "Authentification requise pour redémarrer le système."
|
|||
|
||||
#: src/login/org.freedesktop.login1.policy:202
|
||||
msgid "Reboot the system while other users are logged in"
|
||||
msgstr "Redémarrer le système alors que d'autres utilisateurs sont connectés"
|
||||
msgstr "Redémarrer le système alors que d’autres utilisateurs sont connectés"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:203
|
||||
msgid ""
|
||||
"Authentication is required to reboot the system while other users are logged "
|
||||
"in."
|
||||
msgstr ""
|
||||
"Authentification requise pour redémarrer le système alors que d'autres "
|
||||
"Authentification requise pour redémarrer le système alors que d’autres "
|
||||
"utilisateurs sont connectés."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:213
|
||||
msgid "Reboot the system while an application is inhibiting this"
|
||||
msgstr "Redémarrer le système alors qu'une application a demandé de l'empêcher"
|
||||
msgstr "Redémarrer le système alors qu’une application a demandé de l’empêcher"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:214
|
||||
msgid ""
|
||||
"Authentication is required to reboot the system while an application is "
|
||||
"inhibiting this."
|
||||
msgstr ""
|
||||
"Authentification requise pour redémarrer le système alors qu'une application "
|
||||
"a demandé de l'empêcher."
|
||||
"Authentification requise pour redémarrer le système alors qu’une application "
|
||||
"a demandé de l’empêcher."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:224
|
||||
msgid "Halt the system"
|
||||
|
@ -435,19 +434,19 @@ msgstr "Authentification requise pour arrêter le système."
|
|||
|
||||
#: src/login/org.freedesktop.login1.policy:235
|
||||
msgid "Halt the system while other users are logged in"
|
||||
msgstr "Arrêter le système alors que d'autres utilisateurs sont connectés"
|
||||
msgstr "Arrêter le système alors que d’autres utilisateurs sont connectés"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:236
|
||||
msgid ""
|
||||
"Authentication is required to halt the system while other users are logged "
|
||||
"in."
|
||||
msgstr ""
|
||||
"Authentification requise pour arrêter le système alors que d'autres "
|
||||
"Authentification requise pour arrêter le système alors que d’autres "
|
||||
"utilisateurs sont connectés."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:246
|
||||
msgid "Halt the system while an application is inhibiting this"
|
||||
msgstr "Arrêter le système alors qu'une application a demandé de l'empêcher"
|
||||
msgstr "Arrêter le système alors qu’une application a demandé de l’empêcher"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:247
|
||||
#, fuzzy
|
||||
|
@ -472,28 +471,28 @@ msgstr "Authentification requise pour mettre le système en veille."
|
|||
#: src/login/org.freedesktop.login1.policy:267
|
||||
msgid "Suspend the system while other users are logged in"
|
||||
msgstr ""
|
||||
"Mettre le système en veille alors que d'autres utilisateurs sont connectés"
|
||||
"Mettre le système en veille alors que d’autres utilisateurs sont connectés"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:268
|
||||
msgid ""
|
||||
"Authentication is required to suspend the system while other users are "
|
||||
"logged in."
|
||||
msgstr ""
|
||||
"Authentification requise pour mettre le système en veille alors que d'autres "
|
||||
"Authentification requise pour mettre le système en veille alors que d’autres "
|
||||
"utilisateurs sont connectés."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:278
|
||||
msgid "Suspend the system while an application is inhibiting this"
|
||||
msgstr ""
|
||||
"Mettre le système en veille alors qu'une application a demandé de l'empêcher"
|
||||
"Mettre le système en veille alors qu’une application a demandé de l’empêcher"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:279
|
||||
msgid ""
|
||||
"Authentication is required to suspend the system while an application is "
|
||||
"inhibiting this."
|
||||
msgstr ""
|
||||
"Authentification requise pour mettre le système en veille alors qu'une "
|
||||
"application a demandé de l'empêcher."
|
||||
"Authentification requise pour mettre le système en veille alors qu’une "
|
||||
"application a demandé de l’empêcher."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:289
|
||||
msgid "Hibernate the system"
|
||||
|
@ -506,7 +505,7 @@ msgstr "Authentification requise pour mettre le système en hibernation."
|
|||
#: src/login/org.freedesktop.login1.policy:299
|
||||
msgid "Hibernate the system while other users are logged in"
|
||||
msgstr ""
|
||||
"Mettre le système en hibernation alors que d'autres utilisateurs sont "
|
||||
"Mettre le système en hibernation alors que d’autres utilisateurs sont "
|
||||
"connectés"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:300
|
||||
|
@ -514,22 +513,22 @@ msgid ""
|
|||
"Authentication is required to hibernate the system while other users are "
|
||||
"logged in."
|
||||
msgstr ""
|
||||
"Authentification requise pour mettre le système en hibernation alors que "
|
||||
"d'autres utilisateurs sont connectés."
|
||||
"Authentification requise pour mettre le système en hibernation alors que d’"
|
||||
"autres utilisateurs sont connectés."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:310
|
||||
msgid "Hibernate the system while an application is inhibiting this"
|
||||
msgstr ""
|
||||
"Mettre le système en hibernation alors qu'une application a demandé de "
|
||||
"l'empêcher"
|
||||
"Mettre le système en hibernation alors qu’une application a demandé de "
|
||||
"l’empêcher"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:311
|
||||
msgid ""
|
||||
"Authentication is required to hibernate the system while an application is "
|
||||
"inhibiting this."
|
||||
msgstr ""
|
||||
"Authentification requise pour mettre le système en hibernation alors qu'une "
|
||||
"application a demandé de l'empêcher."
|
||||
"Authentification requise pour mettre le système en hibernation alors qu’une "
|
||||
"application a demandé de l’empêcher."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:321
|
||||
msgid "Manage active sessions, users and seats"
|
||||
|
@ -553,48 +552,48 @@ msgstr ""
|
|||
|
||||
#: src/login/org.freedesktop.login1.policy:341
|
||||
msgid "Set the reboot \"reason\" in the kernel"
|
||||
msgstr "Définir la « raison » du redémarrage dans le noyau"
|
||||
msgstr "Définir la « raison » du redémarrage dans le noyau"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:342
|
||||
msgid "Authentication is required to set the reboot \"reason\" in the kernel."
|
||||
msgstr ""
|
||||
"Authentification requise pour définir la « raison » du redémarrage dans le "
|
||||
"Authentification requise pour définir la « raison » du redémarrage dans le "
|
||||
"noyau."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:352
|
||||
msgid "Indicate to the firmware to boot to setup interface"
|
||||
msgstr "Indiquer au micrologiciel de démarrer sur l'interface de configuration"
|
||||
msgstr "Indiquer au micrologiciel de démarrer sur l’interface de configuration"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:353
|
||||
msgid ""
|
||||
"Authentication is required to indicate to the firmware to boot to setup "
|
||||
"interface."
|
||||
msgstr ""
|
||||
"Authentification requise pour indiquer au micrologiciel de démarrer sur "
|
||||
"l'interface de configuration."
|
||||
"Authentification requise pour indiquer au micrologiciel de démarrer sur l’"
|
||||
"interface de configuration."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:363
|
||||
msgid "Indicate to the boot loader to boot to the boot loader menu"
|
||||
msgstr "Indiquer au programme d'amorçage d'afficher le menu au démarrage"
|
||||
msgstr "Indiquer au programme d’amorçage d’afficher le menu au démarrage"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:364
|
||||
msgid ""
|
||||
"Authentication is required to indicate to the boot loader to boot to the "
|
||||
"boot loader menu."
|
||||
msgstr ""
|
||||
"Authentification requise pour indiquer au programme d'amorçage d'afficher le "
|
||||
"Authentification requise pour indiquer au programme d’amorçage d’afficher le "
|
||||
"menu au démarrage."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:374
|
||||
msgid "Indicate to the boot loader to boot a specific entry"
|
||||
msgstr "Indiquer au programme d'amorçage de démarrer une entrée spécifique"
|
||||
msgstr "Indiquer au programme d’amorçage de démarrer une entrée spécifique"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:375
|
||||
msgid ""
|
||||
"Authentication is required to indicate to the boot loader to boot into a "
|
||||
"specific boot loader entry."
|
||||
msgstr ""
|
||||
"Authentification requise pour indiquer au programme d'amorçage de démarrer "
|
||||
"Authentification requise pour indiquer au programme d’amorçage de démarrer "
|
||||
"une entrée spécifique."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:385
|
||||
|
@ -624,11 +623,11 @@ msgstr ""
|
|||
|
||||
#: src/machine/org.freedesktop.machine1.policy:32
|
||||
msgid "Log into the local host"
|
||||
msgstr "Connexion à l'hôte local"
|
||||
msgstr "Connexion à l’hôte local"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:33
|
||||
msgid "Authentication is required to log into the local host."
|
||||
msgstr "Authentification requise pour permettre la connexion à l'hôte local."
|
||||
msgstr "Authentification requise pour permettre la connexion à l’hôte local."
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:42
|
||||
msgid "Acquire a shell in a local container"
|
||||
|
@ -642,12 +641,12 @@ msgstr ""
|
|||
|
||||
#: src/machine/org.freedesktop.machine1.policy:53
|
||||
msgid "Acquire a shell on the local host"
|
||||
msgstr "Obtenir une interface système sur l'hôte local"
|
||||
msgstr "Obtenir une interface système sur l’hôte local"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:54
|
||||
msgid "Authentication is required to acquire a shell on the local host."
|
||||
msgstr ""
|
||||
"Authentification requise pour obtenir une interface système sur l'hôte local."
|
||||
"Authentification requise pour obtenir une interface système sur l’hôte local."
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:64
|
||||
msgid "Acquire a pseudo TTY in a local container"
|
||||
|
@ -662,12 +661,12 @@ msgstr ""
|
|||
|
||||
#: src/machine/org.freedesktop.machine1.policy:74
|
||||
msgid "Acquire a pseudo TTY on the local host"
|
||||
msgstr "Obtenir un pseudo terminal sur l'hôte local"
|
||||
msgstr "Obtenir un pseudo terminal sur l’hôte local"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:75
|
||||
msgid "Authentication is required to acquire a pseudo TTY on the local host."
|
||||
msgstr ""
|
||||
"Authentification requise pour obtenir un pseudo terminal sur l'hôte local."
|
||||
"Authentification requise pour obtenir un pseudo terminal sur l’hôte local."
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:84
|
||||
msgid "Manage local virtual machines and containers"
|
||||
|
@ -890,11 +889,11 @@ msgstr ""
|
|||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:22
|
||||
msgid "Set system time"
|
||||
msgstr "Définir l'heure du système"
|
||||
msgstr "Définir l’heure du système"
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:23
|
||||
msgid "Authentication is required to set the system time."
|
||||
msgstr "Authentification requise pour définir l'heure du système."
|
||||
msgstr "Authentification requise pour définir l’heure du système."
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:33
|
||||
msgid "Set system timezone"
|
||||
|
@ -907,7 +906,7 @@ msgstr "Authentification requise pour définir le fuseau horaire du système."
|
|||
#: src/timedate/org.freedesktop.timedate1.policy:43
|
||||
msgid "Set RTC to local timezone or UTC"
|
||||
msgstr ""
|
||||
"Positionner l'horloge matérielle à l'heure locale ou sur le temps universel "
|
||||
"Positionner l’horloge matérielle à l’heure locale ou sur le temps universel "
|
||||
"coordonné (UTC)"
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:44
|
||||
|
@ -915,54 +914,54 @@ msgid ""
|
|||
"Authentication is required to control whether the RTC stores the local or "
|
||||
"UTC time."
|
||||
msgstr ""
|
||||
"Authentification requise pour positionner l'horloge matérielle à l'heure "
|
||||
"Authentification requise pour positionner l’horloge matérielle à l’heure "
|
||||
"locale ou sur le temps universel coordonné (UTC)."
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:53
|
||||
msgid "Turn network time synchronization on or off"
|
||||
msgstr "Activer ou désactiver la synchronisation de l'heure avec le réseau"
|
||||
msgstr "Activer ou désactiver la synchronisation de l’heure avec le réseau"
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:54
|
||||
msgid ""
|
||||
"Authentication is required to control whether network time synchronization "
|
||||
"shall be enabled."
|
||||
msgstr ""
|
||||
"Authentification requise pour activer ou désactiver la synchronisation de "
|
||||
"l'heure avec le réseau."
|
||||
"Authentification requise pour activer ou désactiver la synchronisation de l’"
|
||||
"heure avec le réseau."
|
||||
|
||||
#: src/core/dbus-unit.c:362
|
||||
msgid "Authentication is required to start '$(unit)'."
|
||||
msgstr "Authentification requise pour démarrer « $(unit) »."
|
||||
msgstr "Authentification requise pour démarrer « $(unit) »."
|
||||
|
||||
#: src/core/dbus-unit.c:363
|
||||
msgid "Authentication is required to stop '$(unit)'."
|
||||
msgstr "Authentification requise pour arrêter « $(unit) »."
|
||||
msgstr "Authentification requise pour arrêter « $(unit) »."
|
||||
|
||||
#: src/core/dbus-unit.c:364
|
||||
msgid "Authentication is required to reload '$(unit)'."
|
||||
msgstr "Authentification requise pour recharger « $(unit) »."
|
||||
msgstr "Authentification requise pour recharger « $(unit) »."
|
||||
|
||||
#: src/core/dbus-unit.c:365 src/core/dbus-unit.c:366
|
||||
msgid "Authentication is required to restart '$(unit)'."
|
||||
msgstr "Authentification requise pour redémarrer « $(unit) »."
|
||||
msgstr "Authentification requise pour redémarrer « $(unit) »."
|
||||
|
||||
#: src/core/dbus-unit.c:538
|
||||
msgid ""
|
||||
"Authentication is required to send a UNIX signal to the processes of "
|
||||
"'$(unit)'."
|
||||
msgstr ""
|
||||
"Authentification requise pour envoyer un signal UNIX aux processus de "
|
||||
"« $(unit) »."
|
||||
"Authentification requise pour envoyer un signal UNIX aux processus de « "
|
||||
"$(unit) »."
|
||||
|
||||
#: src/core/dbus-unit.c:569
|
||||
msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
|
||||
msgstr ""
|
||||
"Authentification requise pour réinitialiser l'état d'« échec » de "
|
||||
"« $(unit) »."
|
||||
"Authentification requise pour réinitialiser l’état d’« échec » de « $(unit) "
|
||||
"»."
|
||||
|
||||
#: src/core/dbus-unit.c:602
|
||||
msgid "Authentication is required to set properties on '$(unit)'."
|
||||
msgstr "Authentification requise pour définir des propriétés de « $(unit) »."
|
||||
msgstr "Authentification requise pour définir des propriétés de « $(unit) »."
|
||||
|
||||
#: src/core/dbus-unit.c:711
|
||||
msgid ""
|
||||
|
@ -970,7 +969,7 @@ msgid ""
|
|||
"'$(unit)'."
|
||||
msgstr ""
|
||||
"Authentification requise pour supprimer les fichiers et les dossiers "
|
||||
"associés à « $(unit) »."
|
||||
"associés à « $(unit) »."
|
||||
|
||||
#: src/core/dbus-unit.c:760
|
||||
#, fuzzy
|
||||
|
|
26
po/hr.po
26
po/hr.po
|
@ -3,22 +3,23 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# gogo <trebelnik2@gmail.com>, 2016.
|
||||
#
|
||||
# Gogo Gogsi <linux.hr@protonmail.com>, 2020.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: systemd master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-08-19 18:02+0200\n"
|
||||
"PO-Revision-Date: 2020-03-08 12:57+0100\n"
|
||||
"Last-Translator: gogo <linux.hr@protonmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"PO-Revision-Date: 2020-08-29 11:29+0000\n"
|
||||
"Last-Translator: Gogo Gogsi <linux.hr@protonmail.com>\n"
|
||||
"Language-Team: Croatian <https://translate.fedoraproject.org/projects/"
|
||||
"systemd/master/hr/>\n"
|
||||
"Language: hr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:22
|
||||
msgid "Send passphrase back to system"
|
||||
|
@ -563,7 +564,7 @@ msgstr "Postavljanje zaslonske pruke"
|
|||
|
||||
#: src/login/org.freedesktop.login1.policy:386
|
||||
msgid "Authentication is required to set a wall message"
|
||||
msgstr "Potrebna je ovjera za postavljanje zaslonske pruke."
|
||||
msgstr "Potrebna je ovjera za postavljanje zaslonske poruke."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:395
|
||||
msgid "Change Session"
|
||||
|
@ -908,14 +909,11 @@ msgid ""
|
|||
"Authentication is required to delete files and directories associated with "
|
||||
"'$(unit)'."
|
||||
msgstr ""
|
||||
"Potrebna je ovjera za za brisanje datoteka i direktorija pridruženih sa "
|
||||
"Potrebna je ovjera za brisanje datoteka i direktorija pridruženih sa "
|
||||
"'$(unit)'."
|
||||
|
||||
#: src/core/dbus-unit.c:760
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Authentication is required to send a UNIX signal to the processes of "
|
||||
#| "'$(unit)'."
|
||||
msgid ""
|
||||
"Authentication is required to freeze or thaw the processes of '$(unit)' unit."
|
||||
msgstr "Potrebna je ovjera za slanje UNIX signala u procese '$(unit)'."
|
||||
msgstr ""
|
||||
"Potrebna je ovjera za zamrzavanje ili odmrzavanje procesa '$(unit)' jedinice."
|
||||
|
|
397
po/uk.po
397
po/uk.po
|
@ -8,67 +8,68 @@ msgstr ""
|
|||
"Project-Id-Version: systemd master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-08-19 18:02+0200\n"
|
||||
"PO-Revision-Date: 2020-03-25 18:40+0200\n"
|
||||
"PO-Revision-Date: 2020-08-29 11:29+0000\n"
|
||||
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
|
||||
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
|
||||
"Language-Team: Ukrainian <https://translate.fedoraproject.org/projects/"
|
||||
"systemd/master/uk/>\n"
|
||||
"Language: uk\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Lokalize 20.03.70\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:22
|
||||
msgid "Send passphrase back to system"
|
||||
msgstr "Надіслати пароль назад у систему"
|
||||
msgstr "Надсилання пароля назад у систему"
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:23
|
||||
msgid ""
|
||||
"Authentication is required to send the entered passphrase back to the system."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб надіслати введений пароль назад у систему."
|
||||
msgstr "Для надсилання введеного пароля до системи слід пройти розпізнавання."
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:33
|
||||
msgid "Manage system services or other units"
|
||||
msgstr "Керувати системними службами й іншими одиницями systemd"
|
||||
msgstr "Керування системними службами й іншими одиницями systemd"
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:34
|
||||
msgid "Authentication is required to manage system services or other units."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб керувати системними службами й іншими одиницями "
|
||||
"systemd."
|
||||
"Для керування системними службами й іншими одиницями systemd слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:43
|
||||
msgid "Manage system service or unit files"
|
||||
msgstr "Керувати системними службами й одиницями systemd"
|
||||
msgstr "Керування системними службами й одиницями systemd"
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:44
|
||||
msgid "Authentication is required to manage system service or unit files."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб керувати системними службами й одиницями "
|
||||
"systemd."
|
||||
"Для керування системними службами й одиницями systemd слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:54
|
||||
msgid "Set or unset system and service manager environment variables"
|
||||
msgstr ""
|
||||
"Встановити або забрати змінну середовища з керування службами і системою"
|
||||
"Встановлення і скасування встановлення змінних середовища для керування "
|
||||
"службами і системою"
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:55
|
||||
msgid ""
|
||||
"Authentication is required to set or unset system and service manager "
|
||||
"environment variables."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб установити або забрати змінні середовища з "
|
||||
"керування службами і системою."
|
||||
"Для встановлення або скасовування встановлення змінних середовища для "
|
||||
"керування службами і системою слід пройти розпізнавання."
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:64
|
||||
msgid "Reload the systemd state"
|
||||
msgstr "Перезапустити стан системи"
|
||||
msgstr "Перезавантаження стану systemd"
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:65
|
||||
msgid "Authentication is required to reload the systemd state."
|
||||
msgstr "Потрібна автентифікація, щоб перезапустити стан системи."
|
||||
msgstr "Для перезавантаження стану systemd слід пройти розпізнавання."
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:13
|
||||
msgid "Create a home area"
|
||||
|
@ -127,31 +128,31 @@ msgstr ""
|
|||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:20
|
||||
msgid "Set hostname"
|
||||
msgstr "Встановити назву вузла"
|
||||
msgstr "Встановлення назви вузла"
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:21
|
||||
msgid "Authentication is required to set the local hostname."
|
||||
msgstr "Потрібна автентифікація, щоб встановити назву локального вузла."
|
||||
msgstr "Для встановлення назви локального вузла слід пройти розпізнавання."
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:30
|
||||
msgid "Set static hostname"
|
||||
msgstr "Встановити статичну назву вузла"
|
||||
msgstr "Встановлення статичної назви вузла"
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:31
|
||||
msgid ""
|
||||
"Authentication is required to set the statically configured local hostname, "
|
||||
"as well as the pretty hostname."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб вказати статично налаштовану назву локального "
|
||||
"вузла, так само й форматовану."
|
||||
"Для встановлення статично налаштованої назви локального вузла і форматованої "
|
||||
"назви слід пройти розпізнавання."
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:41
|
||||
msgid "Set machine information"
|
||||
msgstr "Встановити інформацію про машину"
|
||||
msgstr "Встановлення даних щодо машини"
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:42
|
||||
msgid "Authentication is required to set local machine information."
|
||||
msgstr "Потрібна автентифікація, щоб вказати локальну інформацію про машини."
|
||||
msgstr "Для встановлення даних щодо локальної машини слід пройти розпізнавання."
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:51
|
||||
msgid "Get product UUID"
|
||||
|
@ -159,371 +160,378 @@ msgstr "Отримання UUID продукту"
|
|||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:52
|
||||
msgid "Authentication is required to get product UUID."
|
||||
msgstr "Потрібна автентифікація, щоб отримати UUID продукту."
|
||||
msgstr "Для отримання UUID продукту слід пройти розпізнавання."
|
||||
|
||||
#: src/import/org.freedesktop.import1.policy:22
|
||||
msgid "Import a VM or container image"
|
||||
msgstr "Імпортувати образ контейнера або віртуальної машини"
|
||||
msgstr "Імпортування образу контейнера або віртуальної машини"
|
||||
|
||||
#: src/import/org.freedesktop.import1.policy:23
|
||||
msgid "Authentication is required to import a VM or container image"
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб імпортувати образ контейнера або віртуальної "
|
||||
"машини"
|
||||
"Для імпортування образу контейнера або віртуальної машини слід пройти "
|
||||
"розпізнавання"
|
||||
|
||||
#: src/import/org.freedesktop.import1.policy:32
|
||||
msgid "Export a VM or container image"
|
||||
msgstr "Експортувати образ контейнера або віртуальної машини"
|
||||
msgstr "Експортування образу контейнера або віртуальної машини"
|
||||
|
||||
#: src/import/org.freedesktop.import1.policy:33
|
||||
msgid "Authentication is required to export a VM or container image"
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб експортувати образ контейнера або віртуальної "
|
||||
"машини"
|
||||
"Для експортування образу контейнера або віртуальної машини слід пройти "
|
||||
"розпізнавання"
|
||||
|
||||
#: src/import/org.freedesktop.import1.policy:42
|
||||
msgid "Download a VM or container image"
|
||||
msgstr "Звантажити образ контейнера або віртуальної машини"
|
||||
msgstr "Отримання образу контейнера або віртуальної машини"
|
||||
|
||||
#: src/import/org.freedesktop.import1.policy:43
|
||||
msgid "Authentication is required to download a VM or container image"
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб звантажити образ контейнера або віртуальної "
|
||||
"машини"
|
||||
"Для отримання образу контейнера або віртуальної машини слід пройти "
|
||||
"розпізнавання"
|
||||
|
||||
#: src/locale/org.freedesktop.locale1.policy:22
|
||||
msgid "Set system locale"
|
||||
msgstr "Вказати системну локаль"
|
||||
msgstr "Визначення системної локалі"
|
||||
|
||||
#: src/locale/org.freedesktop.locale1.policy:23
|
||||
msgid "Authentication is required to set the system locale."
|
||||
msgstr "Потрібна автентифікація, щоб встановити системну локаль."
|
||||
msgstr "Для визначення системної локалі слід пройти розпізнавання."
|
||||
|
||||
#: src/locale/org.freedesktop.locale1.policy:33
|
||||
msgid "Set system keyboard settings"
|
||||
msgstr "Вказати налаштування системної клавіатури"
|
||||
msgstr "Визначення загальносистемних параметрів клавіатури"
|
||||
|
||||
#: src/locale/org.freedesktop.locale1.policy:34
|
||||
msgid "Authentication is required to set the system keyboard settings."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб вказати налаштування системної клавіатури."
|
||||
"Для визначення загальносистемних параметрів клавіатури слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:22
|
||||
msgid "Allow applications to inhibit system shutdown"
|
||||
msgstr "Дозволити програмам перешкоджати вимкненню системи"
|
||||
msgstr "Уможливлення перешкоджання вимкненню системи програмами"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:23
|
||||
msgid ""
|
||||
"Authentication is required for an application to inhibit system shutdown."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити програмам перешкоджати вимкненню "
|
||||
"системи."
|
||||
"Для того, щоб уможливити програмам перешкоджання вимкненню системи, слід "
|
||||
"пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:33
|
||||
msgid "Allow applications to delay system shutdown"
|
||||
msgstr "Дозволити програмам затримувати вимкнення системи"
|
||||
msgstr "Уможливлення затримки вимкнення системи програмами"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:34
|
||||
msgid "Authentication is required for an application to delay system shutdown."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити програмам затримувати вимкнення "
|
||||
"системи."
|
||||
"Для того, щоб уможливити програмам затримання вимкнення системи, слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:44
|
||||
msgid "Allow applications to inhibit system sleep"
|
||||
msgstr "Дозволити програмам перешкоджати засинанню системи"
|
||||
msgstr "Уможливлення перешкоджання присиплянню системи програмами"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:45
|
||||
msgid "Authentication is required for an application to inhibit system sleep."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити програмам перешкоджати засинанню "
|
||||
"системи."
|
||||
"Для того, щоб уможливити програмам перешкоджання присиплянню системи, слід "
|
||||
"пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:55
|
||||
msgid "Allow applications to delay system sleep"
|
||||
msgstr "Дозволити програмами затримувати засинання системи"
|
||||
msgstr "Уможливлення затримання присипляння системи програмами"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:56
|
||||
msgid "Authentication is required for an application to delay system sleep."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити програмам затримувати засинання "
|
||||
"системи."
|
||||
"Для того, щоб уможливити програмам затримання присипляння системи, слід "
|
||||
"пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:65
|
||||
msgid "Allow applications to inhibit automatic system suspend"
|
||||
msgstr "Дозволити програмам перешкоджати автоматичному призупиненню системи"
|
||||
msgstr ""
|
||||
"Уможливлення перешкоджання автоматичному призупиненню системи програмами"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:66
|
||||
msgid ""
|
||||
"Authentication is required for an application to inhibit automatic system "
|
||||
"suspend."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити програмам перешкоджати автоматичному "
|
||||
"призупиненню системи."
|
||||
"Для того, щоб уможливити програмам перешкоджання автоматичне призупинення "
|
||||
"роботи системи, слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:75
|
||||
msgid "Allow applications to inhibit system handling of the power key"
|
||||
msgstr "Дозволити програмам перешкоджати обробленню системою клавіші живлення"
|
||||
msgstr ""
|
||||
"Уможливлення перешкоджання обробці системою клавіші живлення для програм"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:76
|
||||
msgid ""
|
||||
"Authentication is required for an application to inhibit system handling of "
|
||||
"the power key."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити програмам перешкоджати обробленню "
|
||||
"системою клавіші живлення."
|
||||
"Для того, щоб дозволити програмам перешкоджати обробленню системою клавіші "
|
||||
"живлення, слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:86
|
||||
msgid "Allow applications to inhibit system handling of the suspend key"
|
||||
msgstr ""
|
||||
"Дозволити програмам перешкоджати обробленню системою клавіші призупинення"
|
||||
"Уможливлення перешкоджання обробці системою клавіші призупинення для програм"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:87
|
||||
msgid ""
|
||||
"Authentication is required for an application to inhibit system handling of "
|
||||
"the suspend key."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити програмам перешкоджати обробленню "
|
||||
"системою клавіші призупинення."
|
||||
"Для того, щоб дозволити програмам перешкоджати обробленню системою клавіші "
|
||||
"призупинення, слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:97
|
||||
msgid "Allow applications to inhibit system handling of the hibernate key"
|
||||
msgstr ""
|
||||
"Дозволити програмам перешкоджати обробленню системою клавіші присипання"
|
||||
"Уможливлення перешкоджання обробці системою клавіші присипляння для програм"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:98
|
||||
msgid ""
|
||||
"Authentication is required for an application to inhibit system handling of "
|
||||
"the hibernate key."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити програмам перешкоджати обробленню "
|
||||
"системою клавіші присипання."
|
||||
"Для того, щоб дозволити програмам перешкоджати обробленню системою клавіші "
|
||||
"присипляння, слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:107
|
||||
msgid "Allow applications to inhibit system handling of the lid switch"
|
||||
msgstr ""
|
||||
"Дозволити програмам перешкоджати обробленню системою клавіші перемикання "
|
||||
"кришки"
|
||||
"Уможливлення перешкоджання обробці системою перемикання кришки для програм"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:108
|
||||
msgid ""
|
||||
"Authentication is required for an application to inhibit system handling of "
|
||||
"the lid switch."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити програмам перешкоджати обробленню "
|
||||
"системою клавіші перемикання кришки."
|
||||
"Для того, щоб дозволити програмам перешкоджати обробленню системою "
|
||||
"перемикання кришки, слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:117
|
||||
msgid "Allow non-logged-in user to run programs"
|
||||
msgstr "Дозволити незареєстрованим користувачам запускати програми"
|
||||
msgstr "Дозвіл для незареєстрованого користувача на запуск програм"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:118
|
||||
msgid "Explicit request is required to run programs as a non-logged-in user."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити незареєстрованим користувачам "
|
||||
"запускати програми."
|
||||
"Для того, щоб дозволити незареєстрованому користувачеві запускати програми, "
|
||||
"потрібен явний запит."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:127
|
||||
msgid "Allow non-logged-in users to run programs"
|
||||
msgstr "Дозволити незареєстрованим користувачам запускати програми"
|
||||
msgstr "Дозвіл для незареєстрованих користувачів на запуск програм"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:128
|
||||
msgid "Authentication is required to run programs as a non-logged-in user."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити незареєстрованим користувачам "
|
||||
"запускати програми."
|
||||
"Для того, щоб дозволити незареєстрованому користувачеві запускати програми, "
|
||||
"слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:137
|
||||
msgid "Allow attaching devices to seats"
|
||||
msgstr "Дозволити під'єднання пристроїв до місць"
|
||||
msgstr "Дозвіл на під'єднання пристроїв до місць"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:138
|
||||
msgid "Authentication is required to attach a device to a seat."
|
||||
msgstr "Потрібна автентифікація, щоб під'єднувати пристрої до місць."
|
||||
msgstr ""
|
||||
"Для того, щоб під'єднувати пристрої до місць, слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:148
|
||||
msgid "Flush device to seat attachments"
|
||||
msgstr "Очисний пристрій для під'єднань до місця"
|
||||
msgstr "Вилучення прив'язки пристроїв для місць"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:149
|
||||
msgid "Authentication is required to reset how devices are attached to seats."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб перезапустити спосіб під'єднання до місць."
|
||||
msgstr "Для скидання прив'язки пристроїв до місць слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:158
|
||||
msgid "Power off the system"
|
||||
msgstr "Вимкнути систему"
|
||||
msgstr "Вимикання системи"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:159
|
||||
msgid "Authentication is required to power off the system."
|
||||
msgstr "Потрібна автентифікація, щоб вимкнути систему."
|
||||
msgstr "Для вимикання системи слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:169
|
||||
msgid "Power off the system while other users are logged in"
|
||||
msgstr "Вимкнути систему, коли інші користувачі ще в ній"
|
||||
msgstr "Вимикання системи, коли інші користувачі ще у ній"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:170
|
||||
msgid ""
|
||||
"Authentication is required to power off the system while other users are "
|
||||
"logged in."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб вимкнути систему, коли інші користувачі в ній."
|
||||
"Для вимикання системи, коли у ній ще працюють інші користувачі, слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:180
|
||||
msgid "Power off the system while an application is inhibiting this"
|
||||
msgstr "Вимкнути систему, коли програми намагаються перешкодити цьому"
|
||||
msgstr "Вимикання системи, коли програми намагаються перешкодити цьому"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:181
|
||||
msgid ""
|
||||
"Authentication is required to power off the system while an application is "
|
||||
"inhibiting this."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб вимкнути систему, коли програми намагаються "
|
||||
"перешкодити цьому."
|
||||
"Для того, щоб вимкнути систему, коли програми намагаються перешкодити цьому, "
|
||||
"слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:191
|
||||
msgid "Reboot the system"
|
||||
msgstr "Перезавантажити систему"
|
||||
msgstr "Перезавантаження системи"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:192
|
||||
msgid "Authentication is required to reboot the system."
|
||||
msgstr "Для перезавантаження системи необхідна ідентифікація."
|
||||
msgstr "Для перезавантаження системи слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:202
|
||||
msgid "Reboot the system while other users are logged in"
|
||||
msgstr "Перезавантажити, якщо інші користувачі в системі"
|
||||
msgstr "Перезавантаження, якщо інші користувачі в системі"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:203
|
||||
msgid ""
|
||||
"Authentication is required to reboot the system while other users are logged "
|
||||
"in."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб перезапустити систему, коли інші користувачі в "
|
||||
"ній."
|
||||
"Для перезавантаження системи, коли у ній ще працюють інші користувачі, слід "
|
||||
"пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:213
|
||||
msgid "Reboot the system while an application is inhibiting this"
|
||||
msgstr "Перезапустити систему, коли програми намагаються перешкодити цьому"
|
||||
msgstr "Перезапуск системи, коли програми намагаються перешкодити цьому"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:214
|
||||
msgid ""
|
||||
"Authentication is required to reboot the system while an application is "
|
||||
"inhibiting this."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб перезапустити систему, коли програми "
|
||||
"намагаються перешкодити цьому."
|
||||
"Для того, щоб перезавантажити систему, коли програми намагаються перешкодити "
|
||||
"цьому, слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:224
|
||||
msgid "Halt the system"
|
||||
msgstr "Зупинити систему"
|
||||
msgstr "Зупинення системи"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:225
|
||||
msgid "Authentication is required to halt the system."
|
||||
msgstr "Потрібна автентифікація, щоб зупинити систему."
|
||||
msgstr "Для зупинення системи слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:235
|
||||
msgid "Halt the system while other users are logged in"
|
||||
msgstr "Зупинити систему, коли інші користувачі в ній"
|
||||
msgstr "Зупинення системи, коли інші користувачі в ній"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:236
|
||||
msgid ""
|
||||
"Authentication is required to halt the system while other users are logged "
|
||||
"in."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб зупинити систему, коли інші користувачі в ній."
|
||||
"Для зупинення системи, коли у ній ще працюють інші користувачі, слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:246
|
||||
msgid "Halt the system while an application is inhibiting this"
|
||||
msgstr "Зупинити систему, коли програми намагаються перешкодити цьому"
|
||||
msgstr "Зупинення системи, коли програми намагаються перешкодити цьому"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:247
|
||||
msgid ""
|
||||
"Authentication is required to halt the system while an application is "
|
||||
"inhibiting this."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб зупинити систему, коли програма намагається "
|
||||
"перешкодити цьому."
|
||||
"Для того, щоб зупинити систему, коли програми намагаються перешкодити цьому, "
|
||||
"слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:257
|
||||
msgid "Suspend the system"
|
||||
msgstr "Призупинити систему"
|
||||
msgstr "Призупинення системи"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:258
|
||||
msgid "Authentication is required to suspend the system."
|
||||
msgstr "Потрібна автентифікація, щоб призупинити систему."
|
||||
msgstr "Для призупинення системи слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:267
|
||||
msgid "Suspend the system while other users are logged in"
|
||||
msgstr "Призупинити систему, коли інші користувачі в ній"
|
||||
msgstr "Призупинення системи, коли інші користувачі в ній"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:268
|
||||
msgid ""
|
||||
"Authentication is required to suspend the system while other users are "
|
||||
"logged in."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб призупинити систему, коли інші користувачі в "
|
||||
"ній."
|
||||
"Для призупинення системи, коли у ній ще працюють інші користувачі, слід "
|
||||
"пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:278
|
||||
msgid "Suspend the system while an application is inhibiting this"
|
||||
msgstr "Призупинити систему, коли програми намагаються перешкодити цьому"
|
||||
msgstr "Призупинення системи, коли програми намагаються перешкодити цьому"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:279
|
||||
msgid ""
|
||||
"Authentication is required to suspend the system while an application is "
|
||||
"inhibiting this."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб призупинити систему, коли програми намагаються "
|
||||
"перешкодити цьому."
|
||||
"Для того, щоб призупинити систему, коли програми намагаються перешкодити "
|
||||
"цьому, слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:289
|
||||
msgid "Hibernate the system"
|
||||
msgstr "Приспати систему"
|
||||
msgstr "Присипляння системи"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:290
|
||||
msgid "Authentication is required to hibernate the system."
|
||||
msgstr "Потрібна автентифікація, щоб приспати систему."
|
||||
msgstr "Для присипляння системи слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:299
|
||||
msgid "Hibernate the system while other users are logged in"
|
||||
msgstr "Приспати систему, коли інші користувачі в ній"
|
||||
msgstr "Присипляння системи, коли інші користувачі в ній"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:300
|
||||
msgid ""
|
||||
"Authentication is required to hibernate the system while other users are "
|
||||
"logged in."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб присипання систему, коли інші користувачі в ній."
|
||||
"Для присипляння системи, коли у ній ще працюють інші користувачі, слід "
|
||||
"пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:310
|
||||
msgid "Hibernate the system while an application is inhibiting this"
|
||||
msgstr "Приспати систему, коли програми намагаються перешкодити цьому"
|
||||
msgstr "Присипляння системи, коли програми намагаються перешкодити цьому"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:311
|
||||
msgid ""
|
||||
"Authentication is required to hibernate the system while an application is "
|
||||
"inhibiting this."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб приспати систему, коли програми намагаються "
|
||||
"перешкодити цьому."
|
||||
"Для того, щоб приспати систему, коли програми намагаються перешкодити цьому, "
|
||||
"слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:321
|
||||
msgid "Manage active sessions, users and seats"
|
||||
msgstr "Керувати сеансами, користувачами і робочими місцями"
|
||||
msgstr "Керування сеансами, користувачами і робочими місцями"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:322
|
||||
msgid "Authentication is required to manage active sessions, users and seats."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб керувати сеансами, користувачами і робочими "
|
||||
"місцями."
|
||||
"Для того, щоб керувати сеансами, користувачами і робочими місцями, слід "
|
||||
"пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:331
|
||||
msgid "Lock or unlock active sessions"
|
||||
msgstr "Заблокувати або розблокувати сеанси"
|
||||
msgstr "Блокування і розблоковування сеансів"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:332
|
||||
msgid "Authentication is required to lock or unlock active sessions."
|
||||
msgstr "Потрібна автентифікація, щоб заблокувати або розблокувати сеанси."
|
||||
msgstr ""
|
||||
"Для того, щоб заблокувати або розблокувати активні сеанси, слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:341
|
||||
msgid "Set the reboot \"reason\" in the kernel"
|
||||
|
@ -532,7 +540,8 @@ msgstr "Встановлення «причини» перезавантажен
|
|||
#: src/login/org.freedesktop.login1.policy:342
|
||||
msgid "Authentication is required to set the reboot \"reason\" in the kernel."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб встановити «причину» перезавантаження у ядрі."
|
||||
"Для того, щоб встановити «причину» перезавантаження у ядрі, слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:352
|
||||
msgid "Indicate to the firmware to boot to setup interface"
|
||||
|
@ -543,8 +552,8 @@ msgid ""
|
|||
"Authentication is required to indicate to the firmware to boot to setup "
|
||||
"interface."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб дозволити мікрокоду визначати, чи завантажувати "
|
||||
"інтерфейс встановлення."
|
||||
"Для того, щоб дозволити мікрокоду визначати, чи завантажувати інтерфейс "
|
||||
"встановлення, слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:363
|
||||
msgid "Indicate to the boot loader to boot to the boot loader menu"
|
||||
|
@ -555,8 +564,8 @@ msgid ""
|
|||
"Authentication is required to indicate to the boot loader to boot to the "
|
||||
"boot loader menu."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб вказати завантажувачу, що слід завантажитися до "
|
||||
"меню завантажувача."
|
||||
"Для того, щоб вказати завантажувачу, що слід завантажитися до меню "
|
||||
"завантажувача, слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:374
|
||||
msgid "Indicate to the boot loader to boot a specific entry"
|
||||
|
@ -567,16 +576,16 @@ msgid ""
|
|||
"Authentication is required to indicate to the boot loader to boot into a "
|
||||
"specific boot loader entry."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб вказати завантажувачу, що слід завантажити "
|
||||
"певний пункт меню завантаження."
|
||||
"Для того, щоб вказати завантажувачу, що слід завантажити певний пункт меню "
|
||||
"завантаження, слід пройти розпізнавання."
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:385
|
||||
msgid "Set a wall message"
|
||||
msgstr "Вказати повідомлення на стіні"
|
||||
msgstr "Встановлення повідомлення на стіні"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:386
|
||||
msgid "Authentication is required to set a wall message"
|
||||
msgstr "Потрібна автентифікація, щоб вказати повідомлення на стіні"
|
||||
msgstr "Для встановлення повідомлення на стіні слід пройти розпізнавання"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:395
|
||||
msgid "Change Session"
|
||||
|
@ -588,77 +597,81 @@ msgstr "Для зміни віртуального термінала слід
|
|||
|
||||
#: src/machine/org.freedesktop.machine1.policy:22
|
||||
msgid "Log into a local container"
|
||||
msgstr "Увійти в локальний контейнер"
|
||||
msgstr "Вхід до локального контейнера"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:23
|
||||
msgid "Authentication is required to log into a local container."
|
||||
msgstr "Потрібна автентифікація, щоб увійти в локальний контейнер."
|
||||
msgstr ""
|
||||
"Для того, щоб увійти до локального контейнера, слід пройти розпізнавання."
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:32
|
||||
msgid "Log into the local host"
|
||||
msgstr "Увійти в локальний вузол"
|
||||
msgstr "Вхід до локального вузла"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:33
|
||||
msgid "Authentication is required to log into the local host."
|
||||
msgstr "Потрібна автентифікація, щоб увійти в локальний вузол."
|
||||
msgstr "Для входу до локального вузла слід пройти розпізнавання."
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:42
|
||||
msgid "Acquire a shell in a local container"
|
||||
msgstr "Перейняти оболонку в локальному контейнері"
|
||||
msgstr "Отримання командної оболонки у локальному контейнері"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:43
|
||||
msgid "Authentication is required to acquire a shell in a local container."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб перейняти оболонку в локальному контейнері."
|
||||
"Для отримання командної оболонки у локальному контейнері слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:53
|
||||
msgid "Acquire a shell on the local host"
|
||||
msgstr "Перейняти оболонку на локальному вузлі"
|
||||
msgstr "Отримання командної оболонки на локальному вузлі"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:54
|
||||
msgid "Authentication is required to acquire a shell on the local host."
|
||||
msgstr "Потрібна автентифікація, щоб перейняти оболонку на локальному вузлі."
|
||||
msgstr ""
|
||||
"Для отримання командної оболонки на локальному вузлі слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:64
|
||||
msgid "Acquire a pseudo TTY in a local container"
|
||||
msgstr "Перейняти псевдо TTY в локальному контейнері"
|
||||
msgstr "Отримання псевдо-TTY у локальному контейнері"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:65
|
||||
msgid ""
|
||||
"Authentication is required to acquire a pseudo TTY in a local container."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб перейняти псевдо TTY в локальному контейнері."
|
||||
"Для отримання псевдо-TTY в локальному контейнері слід пройти розпізнавання."
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:74
|
||||
msgid "Acquire a pseudo TTY on the local host"
|
||||
msgstr "Перейняти псевдо TTY на локальному вузлі"
|
||||
msgstr "Отримання псевдо-TTY на локальному вузлі"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:75
|
||||
msgid "Authentication is required to acquire a pseudo TTY on the local host."
|
||||
msgstr "Потрібна автентифікація, щоб перейняти псевдо TTY на локальному вузлі."
|
||||
msgstr "Для отримання псевдо-TTY на локальному вузлі слід пройти розпізнавання."
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:84
|
||||
msgid "Manage local virtual machines and containers"
|
||||
msgstr "Керувати локальними віртуальними машинами і контейнерами"
|
||||
msgstr "Керування локальними віртуальними машинами і контейнерами"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:85
|
||||
msgid ""
|
||||
"Authentication is required to manage local virtual machines and containers."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб керувати локальними віртуальними машинами і "
|
||||
"контейнерами."
|
||||
"Для доступу до керування локальними віртуальними машинами і контейнерами "
|
||||
"слід пройти розпізнавання."
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:95
|
||||
msgid "Manage local virtual machine and container images"
|
||||
msgstr "Керувати локальними образами віртуальних машин і контейнерів"
|
||||
msgstr "Керування локальними образами віртуальних машин і контейнерів"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:96
|
||||
msgid ""
|
||||
"Authentication is required to manage local virtual machine and container "
|
||||
"images."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб керувати локальними образами віртуальних машин "
|
||||
"і контейнерів."
|
||||
"Для доступу до керування локальними образами віртуальних машин і контейнерів "
|
||||
"слід пройти розпізнавання."
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:22
|
||||
msgid "Set NTP servers"
|
||||
|
@ -666,7 +679,7 @@ msgstr "Встановлення серверів NTP"
|
|||
|
||||
#: src/network/org.freedesktop.network1.policy:23
|
||||
msgid "Authentication is required to set NTP servers."
|
||||
msgstr "Потрібна автентифікація, щоб встановити сервери NTP."
|
||||
msgstr "Для встановлення серверів NTP слід пройти розпізнавання."
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:33
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:44
|
||||
|
@ -676,7 +689,7 @@ msgstr "Встановлення серверів DNS"
|
|||
#: src/network/org.freedesktop.network1.policy:34
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:45
|
||||
msgid "Authentication is required to set DNS servers."
|
||||
msgstr "Потрібна автентифікація, щоб встановити сервери DNS."
|
||||
msgstr "Для встановлення серверів DNS слід пройти розпізнавання."
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:44
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:55
|
||||
|
@ -686,7 +699,7 @@ msgstr "Встановлення доменів"
|
|||
#: src/network/org.freedesktop.network1.policy:45
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:56
|
||||
msgid "Authentication is required to set domains."
|
||||
msgstr "Потрібна автентифікація, щоб встановити домени."
|
||||
msgstr "Для встановлення доменів слід пройти розпізнавання."
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:55
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:66
|
||||
|
@ -696,7 +709,7 @@ msgstr "Встановлення типового маршруту"
|
|||
#: src/network/org.freedesktop.network1.policy:56
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:67
|
||||
msgid "Authentication is required to set default route."
|
||||
msgstr "Потрібна автентифікація, щоб встановити типовий маршрут."
|
||||
msgstr "Для встановлення типового маршруту слід пройти розпізнавання."
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:66
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:77
|
||||
|
@ -706,17 +719,17 @@ msgstr "Вмикання або вимикання LLMNR"
|
|||
#: src/network/org.freedesktop.network1.policy:67
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:78
|
||||
msgid "Authentication is required to enable or disable LLMNR."
|
||||
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути LLMNR."
|
||||
msgstr "Для вмикання або вимикання LLMNR слід пройти розпізнавання."
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:77
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:88
|
||||
msgid "Enable/disable multicast DNS"
|
||||
msgstr "Вмикання або вимикання трансляційного DNS"
|
||||
msgstr "Вмикання або вимикання трансляційної DNS"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:78
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:89
|
||||
msgid "Authentication is required to enable or disable multicast DNS."
|
||||
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути трансляційну DNS."
|
||||
msgstr "Для вмикання або вимикання трансляційної DNS слід пройти розпізнавання."
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:88
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:99
|
||||
|
@ -726,7 +739,7 @@ msgstr "Вмикання і вимикання DNS через TLS"
|
|||
#: src/network/org.freedesktop.network1.policy:89
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:100
|
||||
msgid "Authentication is required to enable or disable DNS over TLS."
|
||||
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути DNS через TLS."
|
||||
msgstr "Для вмикання або вимикання DNS через TLS слід пройти розпізнавання."
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:99
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:110
|
||||
|
@ -736,7 +749,7 @@ msgstr "Вмикання або вимикання DNSSEC"
|
|||
#: src/network/org.freedesktop.network1.policy:100
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:111
|
||||
msgid "Authentication is required to enable or disable DNSSEC."
|
||||
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути DNSSEC."
|
||||
msgstr "Для вмикання або вимикання DNSSEC слід пройти розпізнавання."
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:110
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:121
|
||||
|
@ -747,7 +760,7 @@ msgstr "Встановлення прив'язок від'ємної довір
|
|||
#: src/resolve/org.freedesktop.resolve1.policy:122
|
||||
msgid "Authentication is required to set DNSSEC Negative Trust Anchors."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб встановити прив'язки від'ємної довіри DNSSEC."
|
||||
"Для встановлення прив'язки від'ємної довіри DNSSEC слід пройти розпізнавання."
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:121
|
||||
msgid "Revert NTP settings"
|
||||
|
@ -772,8 +785,8 @@ msgstr "Сервер DHCP надсилає повідомлення щодо п
|
|||
#: src/network/org.freedesktop.network1.policy:144
|
||||
msgid "Authentication is required to send force renew message."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб надіслати повідомлення щодо примусового "
|
||||
"оновлення"
|
||||
"Для надсилання повідомлення щодо примусового оновлення слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:154
|
||||
msgid "Renew dynamic addresses"
|
||||
|
@ -805,7 +818,7 @@ msgstr "Інспектування образу портативної служ
|
|||
|
||||
#: src/portable/org.freedesktop.portable1.policy:14
|
||||
msgid "Authentication is required to inspect a portable service image."
|
||||
msgstr "Потрібна автентифікація, щоб інспектувати образ портативної служби."
|
||||
msgstr "Для інспектування образу портативної служби слід пройти розпізнавання."
|
||||
|
||||
#: src/portable/org.freedesktop.portable1.policy:23
|
||||
msgid "Attach or detach a portable service image"
|
||||
|
@ -815,7 +828,8 @@ msgstr "Долучення або вилучення образу портати
|
|||
msgid ""
|
||||
"Authentication is required to attach or detach a portable service image."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб долучити або вилучити образ портативної служби."
|
||||
"Для долучення або вилучення образу портативної служби слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/portable/org.freedesktop.portable1.policy:34
|
||||
msgid "Delete or modify portable service image"
|
||||
|
@ -825,24 +839,24 @@ msgstr "Вилучення або внесення змін до образу п
|
|||
msgid ""
|
||||
"Authentication is required to delete or modify a portable service image."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб вилучити образ портативної служби або внести до "
|
||||
"нього зміни."
|
||||
"Для вилучення образу портативної служби або внесення до нього змін слід "
|
||||
"пройти розпізнавання."
|
||||
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:22
|
||||
msgid "Register a DNS-SD service"
|
||||
msgstr "Зареєструвати службу DNS-SD"
|
||||
msgstr "Реєстрація служби DNS-SD"
|
||||
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:23
|
||||
msgid "Authentication is required to register a DNS-SD service"
|
||||
msgstr "Потрібна автентифікація, щоб зареєструвати службу DNS-SD"
|
||||
msgstr "Для реєстрації служби DNS-SD слід пройти розпізнавання"
|
||||
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:33
|
||||
msgid "Unregister a DNS-SD service"
|
||||
msgstr "Зняти з реєстрації службу DNS-SD"
|
||||
msgstr "Зняття з реєстрації служби DNS-SD"
|
||||
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:34
|
||||
msgid "Authentication is required to unregister a DNS-SD service"
|
||||
msgstr "Потрібна автентифікація, щоб зняти з реєстрації службу DNS-SD"
|
||||
msgstr "Для зняття з реєстрації служби DNS-SD слід пройти розпізнавання"
|
||||
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:132
|
||||
msgid "Revert name resolution settings"
|
||||
|
@ -856,89 +870,88 @@ msgstr ""
|
|||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:22
|
||||
msgid "Set system time"
|
||||
msgstr "Вказати системний час"
|
||||
msgstr "Встановлення загальносистемного часу"
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:23
|
||||
msgid "Authentication is required to set the system time."
|
||||
msgstr "Потрібна автентифікація, щоб вказати системний час."
|
||||
msgstr "Для встановлення загальносистемного часу слід пройти розпізнавання."
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:33
|
||||
msgid "Set system timezone"
|
||||
msgstr "Вказати системний часовий пояс"
|
||||
msgstr "Встановлення загальносистемного часового поясу"
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:34
|
||||
msgid "Authentication is required to set the system timezone."
|
||||
msgstr "Потрібна автентифікація, щоб вказати системний часовий пояс."
|
||||
msgstr ""
|
||||
"Для встановлення загальносистемного часового поясу слід пройти розпізнавання."
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:43
|
||||
msgid "Set RTC to local timezone or UTC"
|
||||
msgstr "Вкажіть RTC для локального часового поясу або UTC"
|
||||
msgstr "Встановлення для RTC місцевого часового поясу або UTC"
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:44
|
||||
msgid ""
|
||||
"Authentication is required to control whether the RTC stores the local or "
|
||||
"UTC time."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб контролювати, чи зберігає RTC локальний час або "
|
||||
"UTC."
|
||||
"Для керування тим, зберігатиме годинник реального часу локальний час чи час "
|
||||
"UTC, слід пройти розпізнавання."
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:53
|
||||
msgid "Turn network time synchronization on or off"
|
||||
msgstr "Увімкнути або вимкнути синхронізування часу через мережу"
|
||||
msgstr "Вмикання або вимикання синхронізації часу за допомогою мережі"
|
||||
|
||||
#: src/timedate/org.freedesktop.timedate1.policy:54
|
||||
msgid ""
|
||||
"Authentication is required to control whether network time synchronization "
|
||||
"shall be enabled."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб контролювати, чи синхронізування часу через "
|
||||
"мережу запущено."
|
||||
"Для керування тим, чи слід вмикати синхронізацію часу за допомогою мережі, "
|
||||
"слід пройти розпізнавання."
|
||||
|
||||
#: src/core/dbus-unit.c:362
|
||||
msgid "Authentication is required to start '$(unit)'."
|
||||
msgstr "Потрібна автентифікація, щоб запустити «$(unit)»."
|
||||
msgstr "Для запуску «$(unit)» слід пройти розпізнавання."
|
||||
|
||||
#: src/core/dbus-unit.c:363
|
||||
msgid "Authentication is required to stop '$(unit)'."
|
||||
msgstr "Потрібна автентифікація, щоб зупинити «$(unit)»."
|
||||
msgstr "Для зупинення «$(unit)» слід пройти розпізнавання."
|
||||
|
||||
#: src/core/dbus-unit.c:364
|
||||
msgid "Authentication is required to reload '$(unit)'."
|
||||
msgstr "Потрібна автентифікація, щоб перезавантажити «$(unit)»."
|
||||
msgstr "Для перезавантаження «$(unit)» слід пройти розпізнавання."
|
||||
|
||||
#: src/core/dbus-unit.c:365 src/core/dbus-unit.c:366
|
||||
msgid "Authentication is required to restart '$(unit)'."
|
||||
msgstr "Потрібна автентифікація, щоб перезапустити «$(unit)»."
|
||||
msgstr "Для перезапуску «$(unit)» слід пройти розпізнавання."
|
||||
|
||||
#: src/core/dbus-unit.c:538
|
||||
msgid ""
|
||||
"Authentication is required to send a UNIX signal to the processes of "
|
||||
"'$(unit)'."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб надіслати сигнал UNIX до процесів «$(unit)»."
|
||||
"Для надсилання сигналу UNIX до процесів «$(unit)» слід пройти розпізнавання."
|
||||
|
||||
#: src/core/dbus-unit.c:569
|
||||
msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
|
||||
msgstr "Потрібна автентифікація, щоб скинути «пошкоджений» стан з «$(unit)»."
|
||||
msgstr ""
|
||||
"Для скидання «пошкодженого» стану з «$(unit)» слід пройти розпізнавання."
|
||||
|
||||
#: src/core/dbus-unit.c:602
|
||||
msgid "Authentication is required to set properties on '$(unit)'."
|
||||
msgstr "Потрібна автентифікація, щоб вказати властивості на «$(unit)»."
|
||||
msgstr "Для визначення властивостей на «$(unit)» слід пройти розпізнавання."
|
||||
|
||||
#: src/core/dbus-unit.c:711
|
||||
msgid ""
|
||||
"Authentication is required to delete files and directories associated with "
|
||||
"'$(unit)'."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб вилучити файли і каталоги, які пов'язано із "
|
||||
"«$(unit)»."
|
||||
"Для вилучення файлів і каталогів, які пов'язано із «$(unit)», слід пройти "
|
||||
"розпізнавання."
|
||||
|
||||
#: src/core/dbus-unit.c:760
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Authentication is required to send a UNIX signal to the processes of "
|
||||
#| "'$(unit)'."
|
||||
msgid ""
|
||||
"Authentication is required to freeze or thaw the processes of '$(unit)' unit."
|
||||
msgstr ""
|
||||
"Потрібна автентифікація, щоб надіслати сигнал UNIX до процесів «$(unit)»."
|
||||
"Для замороження або розмороження процесів модуля «$(unit)» слід пройти "
|
||||
"розпізнавання."
|
||||
|
|
|
@ -736,6 +736,10 @@ static bool device_is_ready(sd_device *dev) {
|
|||
if (device_is_renaming(dev) > 0)
|
||||
return false;
|
||||
|
||||
/* Is it really tagged as 'systemd' right now? */
|
||||
if (sd_device_has_current_tag(dev, "systemd") <= 0)
|
||||
return false;
|
||||
|
||||
if (sd_device_get_property_value(dev, "SYSTEMD_READY", &ready) < 0)
|
||||
return true;
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ enum {
|
|||
META_ARGV_UID, /* %u: as seen in the initial user namespace */
|
||||
META_ARGV_GID, /* %g: as seen in the initial user namespace */
|
||||
META_ARGV_SIGNAL, /* %s: number of signal causing dump */
|
||||
META_ARGV_TIMESTAMP, /* %t: time of dump, expressed as seconds since the Epoch */
|
||||
META_ARGV_TIMESTAMP, /* %t: time of dump, expressed as seconds since the Epoch (we expand this to µs granularity) */
|
||||
META_ARGV_RLIMIT, /* %c: core file size soft resource limit */
|
||||
META_ARGV_HOSTNAME, /* %h: hostname */
|
||||
_META_ARGV_MAX,
|
||||
|
@ -311,7 +311,7 @@ static int make_filename(const Context *context, char **ret) {
|
|||
return -ENOMEM;
|
||||
|
||||
if (asprintf(ret,
|
||||
"/var/lib/systemd/coredump/core.%s.%s." SD_ID128_FORMAT_STR ".%s.%s000000",
|
||||
"/var/lib/systemd/coredump/core.%s.%s." SD_ID128_FORMAT_STR ".%s.%s",
|
||||
c,
|
||||
u,
|
||||
SD_ID128_FORMAT_VAL(boot),
|
||||
|
@ -1016,8 +1016,11 @@ static int send_iovec(const struct iovec_wrapper *iovw, int input_fd) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int gather_pid_metadata_from_argv(struct iovec_wrapper *iovw, Context *context,
|
||||
static int gather_pid_metadata_from_argv(
|
||||
struct iovec_wrapper *iovw,
|
||||
Context *context,
|
||||
int argc, char **argv) {
|
||||
|
||||
_cleanup_free_ char *free_timestamp = NULL;
|
||||
int i, r, signo;
|
||||
char *t;
|
||||
|
@ -1035,6 +1038,7 @@ static int gather_pid_metadata_from_argv(struct iovec_wrapper *iovw, Context *co
|
|||
t = argv[i];
|
||||
|
||||
switch (i) {
|
||||
|
||||
case META_ARGV_TIMESTAMP:
|
||||
/* The journal fields contain the timestamp padded with six
|
||||
* zeroes, so that the kernel-supplied 1s granularity timestamps
|
||||
|
@ -1044,12 +1048,14 @@ static int gather_pid_metadata_from_argv(struct iovec_wrapper *iovw, Context *co
|
|||
if (!t)
|
||||
return log_oom();
|
||||
break;
|
||||
|
||||
case META_ARGV_SIGNAL:
|
||||
/* For signal, record its pretty name too */
|
||||
if (safe_atoi(argv[i], &signo) >= 0 && SIGNAL_VALID(signo))
|
||||
(void) iovw_put_string_field(iovw, "COREDUMP_SIGNAL_NAME=SIG",
|
||||
signal_to_string(signo));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -93,7 +93,7 @@ static bool press_any_key(void) {
|
|||
static void print_welcome(void) {
|
||||
_cleanup_free_ char *pretty_name = NULL, *ansi_color = NULL;
|
||||
static bool done = false;
|
||||
const char *pn;
|
||||
const char *pn, *ac;
|
||||
int r;
|
||||
|
||||
if (!arg_welcome)
|
||||
|
@ -112,9 +112,10 @@ static void print_welcome(void) {
|
|||
"Failed to read os-release file, ignoring: %m");
|
||||
|
||||
pn = isempty(pretty_name) ? "Linux" : pretty_name;
|
||||
ac = isempty(ansi_color) ? "0" : ansi_color;
|
||||
|
||||
if (colors_enabled())
|
||||
printf("\nWelcome to your new installation of \x1B[%sm%s\x1B[0m!\n", ansi_color, pn);
|
||||
printf("\nWelcome to your new installation of \x1B[%sm%s\x1B[0m!\n", ac, pn);
|
||||
else
|
||||
printf("\nWelcome to your new installation of %s!\n", pn);
|
||||
|
||||
|
|
|
@ -81,6 +81,7 @@ int import_fork_tar_x(const char *path, pid_t *ret) {
|
|||
if (r == 0) {
|
||||
const char *cmdline[] = {
|
||||
"tar",
|
||||
"--ignore-zeros",
|
||||
"--numeric-owner",
|
||||
"-C", path,
|
||||
"-px",
|
||||
|
|
|
@ -728,4 +728,8 @@ global:
|
|||
sd_event_source_set_time_relative;
|
||||
|
||||
sd_bus_error_has_names_sentinel;
|
||||
|
||||
sd_device_get_current_tag_first;
|
||||
sd_device_get_current_tag_next;
|
||||
sd_device_has_current_tag;
|
||||
} LIBSYSTEMD_246;
|
||||
|
|
|
@ -28,10 +28,10 @@ struct sd_device {
|
|||
Set *sysattrs; /* names of sysattrs */
|
||||
Iterator sysattrs_iterator;
|
||||
|
||||
Set *tags;
|
||||
Iterator tags_iterator;
|
||||
Set *all_tags, *current_tags;
|
||||
Iterator all_tags_iterator, current_tags_iterator;
|
||||
uint64_t all_tags_iterator_generation, current_tags_iterator_generation; /* generation when iteration was started */
|
||||
uint64_t tags_generation; /* changes whenever the tags are changed */
|
||||
uint64_t tags_iterator_generation; /* generation when iteration was started */
|
||||
|
||||
Set *devlinks;
|
||||
Iterator devlinks_iterator;
|
||||
|
@ -71,7 +71,7 @@ struct sd_device {
|
|||
|
||||
bool parent_set:1; /* no need to try to reload parent */
|
||||
bool sysattrs_read:1; /* don't try to re-read sysattrs once read */
|
||||
bool property_tags_outdated:1; /* need to update TAGS= property */
|
||||
bool property_tags_outdated:1; /* need to update TAGS= or CURRENT_TAGS= property */
|
||||
bool property_devlinks_outdated:1; /* need to update DEVLINKS= property */
|
||||
bool properties_buf_outdated:1; /* need to reread hashmap */
|
||||
bool sysname_set:1; /* don't reread sysname */
|
||||
|
|
|
@ -329,7 +329,7 @@ static int device_amend(sd_device *device, const char *key, const char *value) {
|
|||
if (r < 0)
|
||||
return log_device_debug_errno(device, r, "sd-device: Failed to add devlink '%s': %m", devlink);
|
||||
}
|
||||
} else if (streq(key, "TAGS")) {
|
||||
} else if (STR_IN_SET(key, "TAGS", "CURRENT_TAGS")) {
|
||||
const char *word, *state;
|
||||
size_t l;
|
||||
|
||||
|
@ -339,10 +339,11 @@ static int device_amend(sd_device *device, const char *key, const char *value) {
|
|||
(void) strncpy(tag, word, l);
|
||||
tag[l] = '\0';
|
||||
|
||||
r = device_add_tag(device, tag);
|
||||
r = device_add_tag(device, tag, streq(key, "CURRENT_TAGS"));
|
||||
if (r < 0)
|
||||
return log_device_debug_errno(device, r, "sd-device: Failed to add tag '%s': %m", tag);
|
||||
}
|
||||
|
||||
} else {
|
||||
r = device_add_property_internal(device, key, value);
|
||||
if (r < 0)
|
||||
|
@ -759,8 +760,8 @@ int device_copy_properties(sd_device *device_dst, sd_device *device_src) {
|
|||
void device_cleanup_tags(sd_device *device) {
|
||||
assert(device);
|
||||
|
||||
set_free_free(device->tags);
|
||||
device->tags = NULL;
|
||||
device->all_tags = set_free_free(device->all_tags);
|
||||
device->current_tags = set_free_free(device->current_tags);
|
||||
device->property_tags_outdated = true;
|
||||
device->tags_generation++;
|
||||
}
|
||||
|
@ -778,7 +779,7 @@ void device_remove_tag(sd_device *device, const char *tag) {
|
|||
assert(device);
|
||||
assert(tag);
|
||||
|
||||
free(set_remove(device->tags, tag));
|
||||
free(set_remove(device->current_tags, tag));
|
||||
device->property_tags_outdated = true;
|
||||
device->tags_generation++;
|
||||
}
|
||||
|
@ -846,7 +847,10 @@ static bool device_has_info(sd_device *device) {
|
|||
if (!ordered_hashmap_isempty(device->properties_db))
|
||||
return true;
|
||||
|
||||
if (!set_isempty(device->tags))
|
||||
if (!set_isempty(device->all_tags))
|
||||
return true;
|
||||
|
||||
if (!set_isempty(device->current_tags))
|
||||
return true;
|
||||
|
||||
if (device->watch_handle >= 0)
|
||||
|
@ -939,7 +943,10 @@ int device_update_db(sd_device *device) {
|
|||
fprintf(f, "E:%s=%s\n", property, value);
|
||||
|
||||
FOREACH_DEVICE_TAG(device, tag)
|
||||
fprintf(f, "G:%s\n", tag);
|
||||
fprintf(f, "G:%s\n", tag); /* Any tag */
|
||||
|
||||
SET_FOREACH(tag, device->current_tags, i)
|
||||
fprintf(f, "Q:%s\n", tag); /* Current tag */
|
||||
}
|
||||
|
||||
r = fflush_and_check(f);
|
||||
|
|
|
@ -45,7 +45,7 @@ void device_set_devlink_priority(sd_device *device, int priority);
|
|||
int device_ensure_usec_initialized(sd_device *device, sd_device *device_old);
|
||||
int device_add_devlink(sd_device *device, const char *devlink);
|
||||
int device_add_property(sd_device *device, const char *property, const char *value);
|
||||
int device_add_tag(sd_device *device, const char *tag);
|
||||
int device_add_tag(sd_device *device, const char *tag, bool both);
|
||||
void device_remove_tag(sd_device *device, const char *tag);
|
||||
void device_cleanup_tags(sd_device *device);
|
||||
void device_cleanup_devlinks(sd_device *device);
|
||||
|
|
|
@ -11,6 +11,11 @@
|
|||
tag; \
|
||||
tag = sd_device_get_tag_next(device))
|
||||
|
||||
#define FOREACH_DEVICE_CURRENT_TAG(device, tag) \
|
||||
for (tag = sd_device_get_current_tag_first(device); \
|
||||
tag; \
|
||||
tag = sd_device_get_current_tag_next(device))
|
||||
|
||||
#define FOREACH_DEVICE_SYSATTR(device, attr) \
|
||||
for (attr = sd_device_get_sysattr_first(device); \
|
||||
attr; \
|
||||
|
|
|
@ -69,7 +69,8 @@ static sd_device *device_free(sd_device *device) {
|
|||
ordered_hashmap_free_free_free(device->properties_db);
|
||||
hashmap_free_free_free(device->sysattr_values);
|
||||
set_free(device->sysattrs);
|
||||
set_free(device->tags);
|
||||
set_free(device->all_tags);
|
||||
set_free(device->current_tags);
|
||||
set_free(device->devlinks);
|
||||
|
||||
return mfree(device);
|
||||
|
@ -1062,8 +1063,8 @@ static bool is_valid_tag(const char *tag) {
|
|||
return !strchr(tag, ':') && !strchr(tag, ' ');
|
||||
}
|
||||
|
||||
int device_add_tag(sd_device *device, const char *tag) {
|
||||
int r;
|
||||
int device_add_tag(sd_device *device, const char *tag, bool both) {
|
||||
int r, added;
|
||||
|
||||
assert(device);
|
||||
assert(tag);
|
||||
|
@ -1071,9 +1072,21 @@ int device_add_tag(sd_device *device, const char *tag) {
|
|||
if (!is_valid_tag(tag))
|
||||
return -EINVAL;
|
||||
|
||||
r = set_put_strdup(&device->tags, tag);
|
||||
if (r < 0)
|
||||
/* Definitely add to the "all" list of tags (i.e. the sticky list) */
|
||||
added = set_put_strdup(&device->all_tags, tag);
|
||||
if (added < 0)
|
||||
return added;
|
||||
|
||||
/* And optionally, also add it to the current list of tags */
|
||||
if (both) {
|
||||
r = set_put_strdup(&device->current_tags, tag);
|
||||
if (r < 0) {
|
||||
if (added > 0)
|
||||
(void) set_remove(device->all_tags, tag);
|
||||
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
device->tags_generation++;
|
||||
device->property_tags_outdated = true;
|
||||
|
@ -1151,8 +1164,9 @@ static int handle_db_line(sd_device *device, char key, const char *value) {
|
|||
assert(value);
|
||||
|
||||
switch (key) {
|
||||
case 'G':
|
||||
r = device_add_tag(device, value);
|
||||
case 'G': /* Any tag */
|
||||
case 'Q': /* Current tag */
|
||||
r = device_add_tag(device, value, key == 'Q');
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -1407,10 +1421,10 @@ _public_ const char *sd_device_get_tag_first(sd_device *device) {
|
|||
|
||||
(void) device_read_db(device);
|
||||
|
||||
device->tags_iterator_generation = device->tags_generation;
|
||||
device->tags_iterator = ITERATOR_FIRST;
|
||||
device->all_tags_iterator_generation = device->tags_generation;
|
||||
device->all_tags_iterator = ITERATOR_FIRST;
|
||||
|
||||
(void) set_iterate(device->tags, &device->tags_iterator, &v);
|
||||
(void) set_iterate(device->all_tags, &device->all_tags_iterator, &v);
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -1421,10 +1435,38 @@ _public_ const char *sd_device_get_tag_next(sd_device *device) {
|
|||
|
||||
(void) device_read_db(device);
|
||||
|
||||
if (device->tags_iterator_generation != device->tags_generation)
|
||||
if (device->all_tags_iterator_generation != device->tags_generation)
|
||||
return NULL;
|
||||
|
||||
(void) set_iterate(device->tags, &device->tags_iterator, &v);
|
||||
(void) set_iterate(device->all_tags, &device->all_tags_iterator, &v);
|
||||
return v;
|
||||
}
|
||||
|
||||
_public_ const char *sd_device_get_current_tag_first(sd_device *device) {
|
||||
void *v;
|
||||
|
||||
assert_return(device, NULL);
|
||||
|
||||
(void) device_read_db(device);
|
||||
|
||||
device->current_tags_iterator_generation = device->tags_generation;
|
||||
device->current_tags_iterator = ITERATOR_FIRST;
|
||||
|
||||
(void) set_iterate(device->current_tags, &device->current_tags_iterator, &v);
|
||||
return v;
|
||||
}
|
||||
|
||||
_public_ const char *sd_device_get_current_tag_next(sd_device *device) {
|
||||
void *v;
|
||||
|
||||
assert_return(device, NULL);
|
||||
|
||||
(void) device_read_db(device);
|
||||
|
||||
if (device->current_tags_iterator_generation != device->tags_generation)
|
||||
return NULL;
|
||||
|
||||
(void) set_iterate(device->current_tags, &device->current_tags_iterator, &v);
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -1456,6 +1498,31 @@ _public_ const char *sd_device_get_devlink_next(sd_device *device) {
|
|||
return v;
|
||||
}
|
||||
|
||||
static char *join_string_set(Set *s) {
|
||||
size_t ret_allocated = 0, ret_len;
|
||||
_cleanup_free_ char *ret = NULL;
|
||||
const char *tag;
|
||||
Iterator i;
|
||||
|
||||
if (!GREEDY_REALLOC(ret, ret_allocated, 2))
|
||||
return NULL;
|
||||
|
||||
strcpy(ret, ":");
|
||||
ret_len = 1;
|
||||
|
||||
SET_FOREACH(tag, s, i) {
|
||||
char *e;
|
||||
|
||||
if (!GREEDY_REALLOC(ret, ret_allocated, ret_len + strlen(tag) + 2))
|
||||
return NULL;
|
||||
|
||||
e = stpcpy(stpcpy(ret + ret_len, tag), ":");
|
||||
ret_len = e - ret;
|
||||
}
|
||||
|
||||
return TAKE_PTR(ret);
|
||||
}
|
||||
|
||||
int device_properties_prepare(sd_device *device) {
|
||||
int r;
|
||||
|
||||
|
@ -1494,26 +1561,27 @@ int device_properties_prepare(sd_device *device) {
|
|||
|
||||
if (device->property_tags_outdated) {
|
||||
_cleanup_free_ char *tags = NULL;
|
||||
size_t tags_allocated = 0, tags_len = 0;
|
||||
const char *tag;
|
||||
|
||||
if (!GREEDY_REALLOC(tags, tags_allocated, 2))
|
||||
tags = join_string_set(device->all_tags);
|
||||
if (!tags)
|
||||
return -ENOMEM;
|
||||
stpcpy(tags, ":");
|
||||
tags_len++;
|
||||
|
||||
for (tag = sd_device_get_tag_first(device); tag; tag = sd_device_get_tag_next(device)) {
|
||||
char *e;
|
||||
|
||||
if (!GREEDY_REALLOC(tags, tags_allocated, tags_len + strlen(tag) + 2))
|
||||
return -ENOMEM;
|
||||
e = stpcpy(stpcpy(tags + tags_len, tag), ":");
|
||||
tags_len = e - tags;
|
||||
}
|
||||
|
||||
if (!streq(tags, ":")) {
|
||||
r = device_add_property_internal(device, "TAGS", tags);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
free(tags);
|
||||
tags = join_string_set(device->current_tags);
|
||||
if (!tags)
|
||||
return -ENOMEM;
|
||||
|
||||
if (!streq(tags, ":")) {
|
||||
r = device_add_property_internal(device, "CURRENT_TAGS", tags);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
device->property_tags_outdated = false;
|
||||
}
|
||||
|
@ -1689,7 +1757,16 @@ _public_ int sd_device_has_tag(sd_device *device, const char *tag) {
|
|||
|
||||
(void) device_read_db(device);
|
||||
|
||||
return !!set_contains(device->tags, tag);
|
||||
return set_contains(device->all_tags, tag);
|
||||
}
|
||||
|
||||
_public_ int sd_device_has_current_tag(sd_device *device, const char *tag) {
|
||||
assert_return(device, -EINVAL);
|
||||
assert_return(tag, -EINVAL);
|
||||
|
||||
(void) device_read_db(device);
|
||||
|
||||
return set_contains(device->current_tags, tag);
|
||||
}
|
||||
|
||||
_public_ int sd_device_get_property_value(sd_device *device, const char *key, const char **_value) {
|
||||
|
|
|
@ -56,12 +56,13 @@ struct udev_device {
|
|||
|
||||
struct udev_list *properties;
|
||||
uint64_t properties_generation;
|
||||
struct udev_list *tags;
|
||||
uint64_t tags_generation;
|
||||
struct udev_list *all_tags, *current_tags;
|
||||
uint64_t all_tags_generation, current_tags_generation;
|
||||
struct udev_list *devlinks;
|
||||
uint64_t devlinks_generation;
|
||||
bool properties_read:1;
|
||||
bool tags_read:1;
|
||||
bool all_tags_read:1;
|
||||
bool current_tags_read:1;
|
||||
bool devlinks_read:1;
|
||||
struct udev_list *sysattrs;
|
||||
bool sysattrs_read;
|
||||
|
@ -199,7 +200,7 @@ _public_ const char *udev_device_get_property_value(struct udev_device *udev_dev
|
|||
}
|
||||
|
||||
struct udev_device *udev_device_new(struct udev *udev, sd_device *device) {
|
||||
_cleanup_(udev_list_freep) struct udev_list *properties = NULL, *tags = NULL, *sysattrs = NULL, *devlinks = NULL;
|
||||
_cleanup_(udev_list_freep) struct udev_list *properties = NULL, *all_tags = NULL, *current_tags = NULL, *sysattrs = NULL, *devlinks = NULL;
|
||||
struct udev_device *udev_device;
|
||||
|
||||
assert(device);
|
||||
|
@ -207,8 +208,11 @@ struct udev_device *udev_device_new(struct udev *udev, sd_device *device) {
|
|||
properties = udev_list_new(true);
|
||||
if (!properties)
|
||||
return_with_errno(NULL, ENOMEM);
|
||||
tags = udev_list_new(true);
|
||||
if (!tags)
|
||||
all_tags = udev_list_new(true);
|
||||
if (!all_tags)
|
||||
return_with_errno(NULL, ENOMEM);
|
||||
current_tags = udev_list_new(true);
|
||||
if (!current_tags)
|
||||
return_with_errno(NULL, ENOMEM);
|
||||
sysattrs = udev_list_new(true);
|
||||
if (!sysattrs)
|
||||
|
@ -226,7 +230,8 @@ struct udev_device *udev_device_new(struct udev *udev, sd_device *device) {
|
|||
.udev = udev,
|
||||
.device = sd_device_ref(device),
|
||||
.properties = TAKE_PTR(properties),
|
||||
.tags = TAKE_PTR(tags),
|
||||
.all_tags = TAKE_PTR(all_tags),
|
||||
.current_tags = TAKE_PTR(current_tags),
|
||||
.sysattrs = TAKE_PTR(sysattrs),
|
||||
.devlinks = TAKE_PTR(devlinks),
|
||||
};
|
||||
|
@ -475,7 +480,8 @@ static struct udev_device *udev_device_free(struct udev_device *udev_device) {
|
|||
|
||||
udev_list_free(udev_device->properties);
|
||||
udev_list_free(udev_device->sysattrs);
|
||||
udev_list_free(udev_device->tags);
|
||||
udev_list_free(udev_device->all_tags);
|
||||
udev_list_free(udev_device->current_tags);
|
||||
udev_list_free(udev_device->devlinks);
|
||||
|
||||
return mfree(udev_device);
|
||||
|
@ -834,21 +840,41 @@ _public_ int udev_device_get_is_initialized(struct udev_device *udev_device) {
|
|||
_public_ struct udev_list_entry *udev_device_get_tags_list_entry(struct udev_device *udev_device) {
|
||||
assert_return_errno(udev_device, NULL, EINVAL);
|
||||
|
||||
if (device_get_tags_generation(udev_device->device) != udev_device->tags_generation ||
|
||||
!udev_device->tags_read) {
|
||||
if (device_get_tags_generation(udev_device->device) != udev_device->all_tags_generation ||
|
||||
!udev_device->all_tags_read) {
|
||||
const char *tag;
|
||||
|
||||
udev_list_cleanup(udev_device->tags);
|
||||
udev_list_cleanup(udev_device->all_tags);
|
||||
|
||||
FOREACH_DEVICE_TAG(udev_device->device, tag)
|
||||
if (!udev_list_entry_add(udev_device->tags, tag, NULL))
|
||||
if (!udev_list_entry_add(udev_device->all_tags, tag, NULL))
|
||||
return_with_errno(NULL, ENOMEM);
|
||||
|
||||
udev_device->tags_read = true;
|
||||
udev_device->tags_generation = device_get_tags_generation(udev_device->device);
|
||||
udev_device->all_tags_read = true;
|
||||
udev_device->all_tags_generation = device_get_tags_generation(udev_device->device);
|
||||
}
|
||||
|
||||
return udev_list_get_entry(udev_device->tags);
|
||||
return udev_list_get_entry(udev_device->all_tags);
|
||||
}
|
||||
|
||||
_public_ struct udev_list_entry *udev_device_get_current_tags_list_entry(struct udev_device *udev_device) {
|
||||
assert_return_errno(udev_device, NULL, EINVAL);
|
||||
|
||||
if (device_get_tags_generation(udev_device->device) != udev_device->current_tags_generation ||
|
||||
!udev_device->current_tags_read) {
|
||||
const char *tag;
|
||||
|
||||
udev_list_cleanup(udev_device->current_tags);
|
||||
|
||||
FOREACH_DEVICE_CURRENT_TAG(udev_device->device, tag)
|
||||
if (!udev_list_entry_add(udev_device->current_tags, tag, NULL))
|
||||
return_with_errno(NULL, ENOMEM);
|
||||
|
||||
udev_device->current_tags_read = true;
|
||||
udev_device->current_tags_generation = device_get_tags_generation(udev_device->device);
|
||||
}
|
||||
|
||||
return udev_list_get_entry(udev_device->current_tags);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -866,6 +892,12 @@ _public_ int udev_device_has_tag(struct udev_device *udev_device, const char *ta
|
|||
return sd_device_has_tag(udev_device->device, tag) > 0;
|
||||
}
|
||||
|
||||
_public_ int udev_device_has_current_tag(struct udev_device *udev_device, const char *tag) {
|
||||
assert_return(udev_device, 0);
|
||||
|
||||
return sd_device_has_current_tag(udev_device->device, tag) > 0;
|
||||
}
|
||||
|
||||
sd_device *udev_device_get_sd_device(struct udev_device *udev_device) {
|
||||
assert(udev_device);
|
||||
|
||||
|
|
|
@ -82,6 +82,7 @@ int udev_device_get_is_initialized(struct udev_device *udev_device);
|
|||
struct udev_list_entry *udev_device_get_devlinks_list_entry(struct udev_device *udev_device);
|
||||
struct udev_list_entry *udev_device_get_properties_list_entry(struct udev_device *udev_device);
|
||||
struct udev_list_entry *udev_device_get_tags_list_entry(struct udev_device *udev_device);
|
||||
struct udev_list_entry *udev_device_get_current_tags_list_entry(struct udev_device *udev_device);
|
||||
struct udev_list_entry *udev_device_get_sysattr_list_entry(struct udev_device *udev_device);
|
||||
const char *udev_device_get_property_value(struct udev_device *udev_device, const char *key);
|
||||
const char *udev_device_get_driver(struct udev_device *udev_device);
|
||||
|
@ -92,6 +93,7 @@ unsigned long long int udev_device_get_usec_since_initialized(struct udev_device
|
|||
const char *udev_device_get_sysattr_value(struct udev_device *udev_device, const char *sysattr);
|
||||
int udev_device_set_sysattr_value(struct udev_device *udev_device, const char *sysattr, const char *value);
|
||||
int udev_device_has_tag(struct udev_device *udev_device, const char *tag);
|
||||
int udev_device_has_current_tag(struct udev_device *udev_device, const char *tag);
|
||||
|
||||
/*
|
||||
* udev_monitor
|
||||
|
|
|
@ -118,3 +118,9 @@ global:
|
|||
udev_queue_flush;
|
||||
udev_queue_get_fd;
|
||||
} LIBUDEV_199;
|
||||
|
||||
LIBUDEV_247 {
|
||||
global:
|
||||
udev_device_has_current_tag;
|
||||
udev_device_get_current_tags_list_entry;
|
||||
} LIBUDEV_215;
|
||||
|
|
|
@ -195,6 +195,10 @@ int devnode_acl_all(const char *seat,
|
|||
FOREACH_DEVICE(e, d) {
|
||||
const char *node, *sn;
|
||||
|
||||
/* Make sure the tag is still in place */
|
||||
if (sd_device_has_current_tag(d, "uaccess") <= 0)
|
||||
continue;
|
||||
|
||||
if (sd_device_get_property_value(d, "ID_SEAT", &sn) < 0 || isempty(sn))
|
||||
sn = "seat0";
|
||||
|
||||
|
|
|
@ -243,7 +243,8 @@ int manager_process_seat_device(Manager *m, sd_device *d) {
|
|||
|
||||
assert(m);
|
||||
|
||||
if (device_for_action(d, DEVICE_ACTION_REMOVE)) {
|
||||
if (device_for_action(d, DEVICE_ACTION_REMOVE) ||
|
||||
sd_device_has_current_tag(d, "seat") <= 0) {
|
||||
const char *syspath;
|
||||
|
||||
r = sd_device_get_syspath(d, &syspath);
|
||||
|
@ -271,7 +272,7 @@ int manager_process_seat_device(Manager *m, sd_device *d) {
|
|||
}
|
||||
|
||||
seat = hashmap_get(m->seats, sn);
|
||||
master = sd_device_has_tag(d, "master-of-seat") > 0;
|
||||
master = sd_device_has_current_tag(d, "master-of-seat") > 0;
|
||||
|
||||
/* Ignore non-master devices for unknown seats */
|
||||
if (!master && !seat)
|
||||
|
@ -313,7 +314,8 @@ int manager_process_button_device(Manager *m, sd_device *d) {
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (device_for_action(d, DEVICE_ACTION_REMOVE)) {
|
||||
if (device_for_action(d, DEVICE_ACTION_REMOVE) ||
|
||||
sd_device_has_current_tag(d, "power-switch") <= 0) {
|
||||
|
||||
b = hashmap_get(m->buttons, sysname);
|
||||
if (!b)
|
||||
|
|
|
@ -1361,7 +1361,7 @@ static int attach_device(Manager *m, const char *seat, const char *sysfs) {
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (sd_device_has_tag(d, "seat") <= 0)
|
||||
if (sd_device_has_current_tag(d, "seat") <= 0)
|
||||
return -ENODEV;
|
||||
|
||||
if (sd_device_get_property_value(d, "ID_FOR_SEAT", &id_for_seat) < 0)
|
||||
|
|
|
@ -53,14 +53,14 @@ static int show_sysfs_one(
|
|||
|
||||
/* Explicitly also check for tag 'seat' here */
|
||||
if (!streq(seat, sn) ||
|
||||
sd_device_has_tag(dev_list[*i_dev], "seat") <= 0 ||
|
||||
sd_device_has_current_tag(dev_list[*i_dev], "seat") <= 0 ||
|
||||
sd_device_get_subsystem(dev_list[*i_dev], &subsystem) < 0 ||
|
||||
sd_device_get_sysname(dev_list[*i_dev], &sysname) < 0) {
|
||||
(*i_dev)++;
|
||||
continue;
|
||||
}
|
||||
|
||||
is_master = sd_device_has_tag(dev_list[*i_dev], "master-of-seat") > 0;
|
||||
is_master = sd_device_has_current_tag(dev_list[*i_dev], "master-of-seat") > 0;
|
||||
|
||||
if (sd_device_get_sysattr_value(dev_list[*i_dev], "name", &name) < 0)
|
||||
(void) sd_device_get_sysattr_value(dev_list[*i_dev], "id", &name);
|
||||
|
@ -80,7 +80,7 @@ static int show_sysfs_one(
|
|||
isempty(lookahead_sn))
|
||||
lookahead_sn = "seat0";
|
||||
|
||||
if (streq(seat, lookahead_sn) && sd_device_has_tag(dev_list[lookahead], "seat") > 0)
|
||||
if (streq(seat, lookahead_sn) && sd_device_has_current_tag(dev_list[lookahead], "seat") > 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -809,6 +809,8 @@ static const char *const resolv_conf_mode_table[_RESOLV_CONF_MODE_MAX] = {
|
|||
DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(resolv_conf_mode, ResolvConfMode, RESOLV_CONF_AUTO);
|
||||
|
||||
int parse_link_journal(const char *s, LinkJournal *ret_mode, bool *ret_try) {
|
||||
int r;
|
||||
|
||||
assert(s);
|
||||
assert(ret_mode);
|
||||
assert(ret_try);
|
||||
|
@ -816,9 +818,6 @@ int parse_link_journal(const char *s, LinkJournal *ret_mode, bool *ret_try) {
|
|||
if (streq(s, "auto")) {
|
||||
*ret_mode = LINK_AUTO;
|
||||
*ret_try = false;
|
||||
} else if (streq(s, "no")) {
|
||||
*ret_mode = LINK_NO;
|
||||
*ret_try = false;
|
||||
} else if (streq(s, "guest")) {
|
||||
*ret_mode = LINK_GUEST;
|
||||
*ret_try = false;
|
||||
|
@ -831,8 +830,16 @@ int parse_link_journal(const char *s, LinkJournal *ret_mode, bool *ret_try) {
|
|||
} else if (streq(s, "try-host")) {
|
||||
*ret_mode = LINK_HOST;
|
||||
*ret_try = true;
|
||||
} else
|
||||
return -EINVAL;
|
||||
} else {
|
||||
/* Also support boolean values, to make things less confusing. */
|
||||
r = parse_boolean(s);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* Let's consider "true" to be equivalent to "auto". */
|
||||
*ret_mode = r ? LINK_AUTO : LINK_NO;
|
||||
*ret_try = false;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -7313,19 +7313,30 @@ static int create_edit_temp_file(const char *new_path, const char *original_path
|
|||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to determine temporary filename for \"%s\": %m", new_path);
|
||||
|
||||
r = mkdir_parents(new_path, 0755);
|
||||
r = mkdir_parents_label(new_path, 0755);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to create directories for \"%s\": %m", new_path);
|
||||
|
||||
r = mac_selinux_create_file_prepare(original_path, S_IFREG);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = copy_file(original_path, t, 0, 0644, 0, 0, COPY_REFLINK);
|
||||
if (r == -ENOENT) {
|
||||
|
||||
r = touch(t);
|
||||
|
||||
mac_selinux_create_file_clear();
|
||||
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to create temporary file \"%s\": %m", t);
|
||||
|
||||
} else if (r < 0)
|
||||
} else {
|
||||
mac_selinux_create_file_clear();
|
||||
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to create temporary file for \"%s\": %m", new_path);
|
||||
}
|
||||
|
||||
*ret_tmp_fn = TAKE_PTR(t);
|
||||
|
||||
|
@ -7604,6 +7615,10 @@ static int edit(int argc, char *argv[], void *userdata) {
|
|||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to determine unit paths: %m");
|
||||
|
||||
r = mac_selinux_init();
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = acquire_bus(BUS_MANAGER, &bus);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
|
|
@ -64,6 +64,8 @@ int sd_device_get_usec_since_initialized(sd_device *device, uint64_t *usec);
|
|||
|
||||
const char *sd_device_get_tag_first(sd_device *device);
|
||||
const char *sd_device_get_tag_next(sd_device *device);
|
||||
const char *sd_device_get_current_tag_first(sd_device *device);
|
||||
const char *sd_device_get_current_tag_next(sd_device *device);
|
||||
const char *sd_device_get_devlink_first(sd_device *device);
|
||||
const char *sd_device_get_devlink_next(sd_device *device);
|
||||
const char *sd_device_get_property_first(sd_device *device, const char **value);
|
||||
|
@ -72,6 +74,7 @@ const char *sd_device_get_sysattr_first(sd_device *device);
|
|||
const char *sd_device_get_sysattr_next(sd_device *device);
|
||||
|
||||
int sd_device_has_tag(sd_device *device, const char *tag);
|
||||
int sd_device_has_current_tag(sd_device *device, const char *tag);
|
||||
int sd_device_get_property_value(sd_device *device, const char *key, const char **value);
|
||||
int sd_device_get_sysattr_value(sd_device *device, const char *sysattr, const char **_value);
|
||||
|
||||
|
|
|
@ -958,6 +958,24 @@ static int udev_event_on_move(UdevEvent *event) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int copy_all_tags(sd_device *d, sd_device *s) {
|
||||
const char *tag;
|
||||
int r;
|
||||
|
||||
assert(d);
|
||||
|
||||
if (!s)
|
||||
return 0;
|
||||
|
||||
for (tag = sd_device_get_tag_first(s); tag; tag = sd_device_get_tag_next(s)) {
|
||||
r = device_add_tag(d, tag, false);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int udev_event_execute_rules(UdevEvent *event,
|
||||
usec_t timeout_usec,
|
||||
int timeout_signal,
|
||||
|
@ -990,6 +1008,10 @@ int udev_event_execute_rules(UdevEvent *event,
|
|||
if (r < 0)
|
||||
return log_device_debug_errno(dev, r, "Failed to clone sd_device object: %m");
|
||||
|
||||
r = copy_all_tags(dev, event->dev_db_clone);
|
||||
if (r < 0)
|
||||
log_device_warning_errno(dev, r, "Failed to copy all tags from old database entry, ignoring: %m");
|
||||
|
||||
if (sd_device_get_devnum(dev, NULL) >= 0)
|
||||
/* Disable watch during event processing. */
|
||||
(void) udev_watch_end(event->dev_db_clone);
|
||||
|
|
|
@ -2017,7 +2017,7 @@ static int udev_rule_apply_token_to_event(
|
|||
if (token->op == OP_REMOVE)
|
||||
device_remove_tag(dev, buf);
|
||||
else {
|
||||
r = device_add_tag(dev, buf);
|
||||
r = device_add_tag(dev, buf, true);
|
||||
if (r < 0)
|
||||
return log_rule_error_errno(dev, rules, r, "Failed to add tag '%s': %m", buf);
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
../TEST-01-BASIC/Makefile
|
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env bash
|
||||
set -e
|
||||
TEST_DESCRIPTION="UDEV tags management"
|
||||
TEST_NO_NSPAWN=1
|
||||
|
||||
. $TEST_BASE_DIR/test-functions
|
||||
|
||||
do_test "$@" 55
|
|
@ -673,7 +673,7 @@ get_ldpath() {
|
|||
install_missing_libraries() {
|
||||
# install possible missing libraries
|
||||
for i in $initdir{,/usr}/{sbin,bin}/* $initdir{,/usr}/lib/systemd/{,tests/{,manual/,unsafe/}}*; do
|
||||
LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$(get_ldpath $i)" inst_libs $i
|
||||
LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$(get_ldpath $i):$(get_ldpath $i)/src/udev" inst_libs $i
|
||||
done
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
[Unit]
|
||||
Description=TESTSUITE-55-UDEV-TAGS
|
||||
|
||||
[Service]
|
||||
ExecStartPre=rm -f /failed /testok
|
||||
ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
|
||||
Type=oneshot
|
|
@ -0,0 +1,66 @@
|
|||
#!/bin/bash
|
||||
set -ex
|
||||
set -o pipefail
|
||||
|
||||
mkdir -p /run/udev/rules.d/
|
||||
|
||||
! test -f /run/udev/tags/added/c1:3 &&
|
||||
! test -f /run/udev/tags/changed/c1:3 &&
|
||||
udevadm info /dev/null | grep -q -v 'E: TAGS=.*:added:.*' &&
|
||||
udevadm info /dev/null | grep -q -v 'E: CURRENT_TAGS=.*:added:.*' &&
|
||||
udevadm info /dev/null | grep -q -v 'E: TAGS=.*:changed:.*' &&
|
||||
udevadm info /dev/null | grep -q -v 'E: CURRENT_TAGS=.*:changed:.*'
|
||||
|
||||
cat > /run/udev/rules.d/50-testsuite.rules <<EOF
|
||||
ACTION=="add", SUBSYSTEM=="mem", KERNEL=="null", TAG+="added"
|
||||
ACTION=="change", SUBSYSTEM=="mem", KERNEL=="null", TAG+="changed"
|
||||
EOF
|
||||
|
||||
udevadm control --reload
|
||||
udevadm trigger -c add /dev/null
|
||||
|
||||
while : ; do
|
||||
test -f /run/udev/tags/added/c1:3 &&
|
||||
! test -f /run/udev/tags/changed/c1:3 &&
|
||||
udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*' &&
|
||||
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:added:.*' &&
|
||||
udevadm info /dev/null | grep -q -v 'E: TAGS=.*:changed:.*' &&
|
||||
udevadm info /dev/null | grep -q -v 'E: CURRENT_TAGS=.*:changed:.*' &&
|
||||
break
|
||||
|
||||
sleep .5
|
||||
done
|
||||
|
||||
udevadm control --reload
|
||||
udevadm trigger -c change /dev/null
|
||||
|
||||
while : ; do
|
||||
test -f /run/udev/tags/added/c1:3 &&
|
||||
test -f /run/udev/tags/changed/c1:3 &&
|
||||
udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*' &&
|
||||
udevadm info /dev/null | grep -q -v 'E: CURRENT_TAGS=.*:added:.*' &&
|
||||
udevadm info /dev/null | grep -q 'E: TAGS=.*:changed:.*' &&
|
||||
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:changed:.*' &&
|
||||
break
|
||||
|
||||
sleep .5
|
||||
done
|
||||
|
||||
udevadm control --reload
|
||||
udevadm trigger -c add /dev/null
|
||||
|
||||
while : ; do
|
||||
test -f /run/udev/tags/added/c1:3 &&
|
||||
test -f /run/udev/tags/changed/c1:3 &&
|
||||
udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*' &&
|
||||
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:added:.*' &&
|
||||
udevadm info /dev/null | grep -q 'E: TAGS=.*:changed:.*' &&
|
||||
udevadm info /dev/null | grep -q -v 'E: CURRENT_TAGS=.*:changed:.*' &&
|
||||
break
|
||||
|
||||
sleep .5
|
||||
done
|
||||
|
||||
echo OK > /testok
|
||||
|
||||
exit 0
|
Loading…
Reference in New Issue