diff --git a/NEWS b/NEWS
index 0bdb80ec25..9e5f4e5e27 100644
--- a/NEWS
+++ b/NEWS
@@ -327,6 +327,9 @@ CHANGES WITH 258 in spe:
gained a knob PartialGenericSegmentationOffload= for controlling
Partial GSO support.
+ * 'udevadm info/trigger/test/test-builtin' commands now also take device
+ IDs to specify devices.
+
* udevadm test gained a new "--verbose" switch for generating
additional debug output for the test.
diff --git a/man/udevadm.xml b/man/udevadm.xml
index 5636d102b7..c9a30901ed 100644
--- a/man/udevadm.xml
+++ b/man/udevadm.xml
@@ -28,41 +28,57 @@
- udevadm info options devpath
+ udevadm info
+ options
+ devpath|syspath|id|unit
- udevadm trigger options devpath
+ udevadm trigger
+ options
+ devpath|syspath|id|unit
- udevadm settle options
+ udevadm settle
+ options
- udevadm control option
+ udevadm control
+ options
- udevadm monitor options
+ udevadm monitor
+ options
- udevadm test options devpath
+ udevadm test
+ options
+ devpath|syspath|id|unit
- udevadm test-builtin options command devpath
+ udevadm test-builtin
+ options
+ command
+ devpath|syspath|id|unit
udevadm verify
- options
- file
+ options
+ files
udevadm cat
- options
- file
+ options
+ files
- udevadm wait options device|syspath
+ udevadm wait
+ options
+ devpath|syspath
- udevadm lock options command
+ udevadm lock
+ options
+ command
@@ -98,16 +114,18 @@
udevadm info
- options
- devpath|file|unit
+ options…
+ devpath|syspath|id|unit…
Query the udev database for device information.
Positional arguments should be used to specify one or more devices. Each one may be a device name
(in which case it must start with /dev/), a sys path (in which case it must start
- with /sys/), or a systemd device unit name (in which case it must end with
- .device, see
+ with /sys/), a device ID (such as n1, c5:1,
+ or b259:1, see
+ sd_device_get_device_id3).
+ or a systemd device unit name (in which case it must end with .device, see
systemd.device5).
@@ -410,14 +428,14 @@
udevadm trigger
- options
- devpath|file|unit
+ options…
+ devpath|syspath|id|unit…
Request device events from the kernel. Primarily used to replay events at system coldplug time.
- Takes device specifications as positional arguments. See the description of info
- above.
+ Takes device specifications as positional arguments. See the description of
+ udevadm info above.
@@ -648,7 +666,7 @@
udevadm settle
- options
+ options…
Watches the udev event queue, and exits if all current events are handled.
@@ -681,7 +699,7 @@
- udevadm control option
+ udevadm control options…
Modify the internal state of the running udev daemon.
@@ -832,7 +850,7 @@
udevadm monitor
- options
+ options…
Listens to the kernel uevents and events sent out by a udev rule
@@ -885,8 +903,8 @@
udevadm test
- options
- devpath|file|unit
+ options…
+ devpath|syspath|id|unit
@@ -950,9 +968,9 @@
udevadm test-builtin
- options
+ options…
command
- devpath|file|unit
+ devpath|file|unit
Run a built-in command COMMAND
@@ -978,9 +996,8 @@
udevadm verify
- options
- file
- …
+ options…
+ files…
Verify syntactic, semantic, and stylistic correctness of udev rules files.
@@ -1051,9 +1068,8 @@
udevadm cat
- options
- file
- …
+ options…
+ file…
Show udev rules files or udev.conf.
@@ -1108,9 +1124,8 @@
udevadm wait
- options
- device|syspath
- …
+ options…
+ devpath|syspath…
Wait for devices or device symlinks being created and initialized by
@@ -1170,9 +1185,8 @@
udevadm lock
- options
- command
- …
+ options…
+ command…
udevadm lock takes an (advisory) exclusive lock on a block device (or all
diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c
index 45c39d4c73..e3bc4c4858 100644
--- a/src/udev/udevadm-info.c
+++ b/src/udev/udevadm-info.c
@@ -1276,7 +1276,7 @@ static int parse_argv(int argc, char *argv[]) {
}
int info_main(int argc, char *argv[], void *userdata) {
- int r, ret;
+ int r;
r = parse_argv(argc, argv);
if (r <= 0)
@@ -1298,19 +1298,18 @@ int info_main(int argc, char *argv[], void *userdata) {
return print_tree(NULL);
}
- ret = 0;
+ int ret = 0;
STRV_FOREACH(p, arg_devices) {
_cleanup_(sd_device_unrefp) sd_device *device = NULL;
- r = find_device(*p, NULL, &device);
+ r = find_device(*p, /* prefix = */ NULL, &device);
if (r < 0) {
if (r == -EINVAL)
- log_error_errno(r, "Bad argument \"%s\", expected an absolute path in /dev/ or /sys/ or a unit name: %m", *p);
+ log_error_errno(r, "Bad argument \"%s\", expected an absolute path in /dev/ or /sys/, device ID, or a unit name: %m", *p);
else
log_error_errno(r, "Unknown device \"%s\": %m", *p);
- if (ret == 0)
- ret = r;
+ RET_GATHER(ret, r);
continue;
}
diff --git a/src/udev/udevadm-util.c b/src/udev/udevadm-util.c
index 73c39f696c..7952d1dc14 100644
--- a/src/udev/udevadm-util.c
+++ b/src/udev/udevadm-util.c
@@ -75,6 +75,9 @@ int find_device(const char *id, const char *prefix, sd_device **ret) {
assert(id);
assert(ret);
+ if (sd_device_new_from_device_id(ret, id) >= 0)
+ return 0;
+
if (sd_device_new_from_path(ret, id) >= 0)
return 0;
diff --git a/test/units/TEST-17-UDEV.sanity-check.sh b/test/units/TEST-17-UDEV.sanity-check.sh
index fa4533391a..7b95722f7a 100755
--- a/test/units/TEST-17-UDEV.sanity-check.sh
+++ b/test/units/TEST-17-UDEV.sanity-check.sh
@@ -82,6 +82,9 @@ udevadm control --revert
udevadm info /dev/null
udevadm info /sys/class/net/$netdev
udevadm info "$(systemd-escape -p --suffix device /sys/devices/virtual/net/$netdev)"
+[[ "$(udevadm info --json=short n1 | jq -r .DEVICE_ID)" == n1 ]]
+udevadm info "$(udevadm info --json=short /dev/null | jq -r .DEVICE_ID)"
+udevadm info "$(udevadm info --json=short /sys/class/net/$netdev | jq -r .DEVICE_ID)"
udevadm info --property DEVNAME /sys/class/net/$netdev
udevadm info --property DEVNAME --value /sys/class/net/$netdev
udevadm info --property HELLO /sys/class/net/$netdev
diff --git a/tools/command_ignorelist b/tools/command_ignorelist
index 0159054b8d..4a48d4e614 100644
--- a/tools/command_ignorelist
+++ b/tools/command_ignorelist
@@ -494,44 +494,44 @@ udev.xml ./refsect1[title="Rules Files"]/refsect2[title="Keys"]/variablelist[4]/
udev.xml ./refsect1[title="Rules Files"]/refsect2[title="Keys"]/variablelist[4]/varlistentry[term="$$"]
udevadm.xml ./refsect1[title="Options"]/variablelist/varlistentry[term="-d"]
udevadm.xml ./refsect1[title="Options"]/variablelist/varlistentry[term="-V"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-q"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-p"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-n"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-r"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-a"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-x"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-P"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-d"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-e"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-c"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-v"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-n"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-t"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-c"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-s"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-S"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-a"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-A"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-p"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-g"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-y"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-b"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm settle\n options\n "]/variablelist/varlistentry[term="-t"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm settle\n options\n "]/variablelist/varlistentry[term="-E"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-e"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-l"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-s"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-S"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-R"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-p"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-m"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-t"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options\n "]/variablelist/varlistentry[term="-k"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options\n "]/variablelist/varlistentry[term="-u"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options\n "]/variablelist/varlistentry[term="-p"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options\n "]/variablelist/varlistentry[term="-s"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options\n "]/variablelist/varlistentry[term="-t"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm test\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-a"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-q"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-p"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-n"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-r"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-a"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-x"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-P"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-d"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-e"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-c"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-v"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-n"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-t"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-c"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-s"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-S"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-a"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-A"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-p"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-g"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-y"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-b"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm settle\n options…\n "]/variablelist/varlistentry[term="-t"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm settle\n options…\n "]/variablelist/varlistentry[term="-E"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-e"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-l"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-s"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-S"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-R"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-p"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-m"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-t"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options…\n "]/variablelist/varlistentry[term="-k"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options…\n "]/variablelist/varlistentry[term="-u"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options…\n "]/variablelist/varlistentry[term="-p"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options…\n "]/variablelist/varlistentry[term="-s"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options…\n "]/variablelist/varlistentry[term="-t"]
+udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm test\n options…\n devpath|syspath|id|unit\n "]/variablelist/varlistentry[term="-a"]
vconsole.conf.xml ./refsect1[title="Options"]/variablelist/varlistentry[term="KEYMAP="]
vconsole.conf.xml ./refsect1[title="Options"]/variablelist/varlistentry[term="FONT="]
file-hierarchy.xml ./refsect1[title="General Structure"]/variablelist/varlistentry[term="/"]