diff --git a/man/udevadm.xml b/man/udevadm.xml
index 07ba2ff09d..c9a30901ed 100644
--- a/man/udevadm.xml
+++ b/man/udevadm.xml
@@ -30,12 +30,12 @@
udevadm info
options
- devpath|syspath|unit
+ devpath|syspath|id|unit
udevadm trigger
options
- devpath|syspath|unit
+ devpath|syspath|id|unit
udevadm settle
@@ -52,13 +52,13 @@
udevadm test
options
- devpath|syspath|unit
+ devpath|syspath|id|unit
udevadm test-builtin
options
command
- devpath|syspath|unit
+ devpath|syspath|id|unit
udevadm verify
@@ -115,15 +115,17 @@
udevadm info
options…
- devpath|syspath|unit…
+ 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).
@@ -427,7 +429,7 @@
udevadm trigger
options…
- devpath|syspath|unit…
+ devpath|syspath|id|unit…
Request device events from the kernel. Primarily used to replay events at system coldplug time.
@@ -902,7 +904,7 @@
udevadm test
options…
- devpath|syspath|unit
+ devpath|syspath|id|unit
diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c
index a9e99ef7e5..e3bc4c4858 100644
--- a/src/udev/udevadm-info.c
+++ b/src/udev/udevadm-info.c
@@ -1302,10 +1302,10 @@ int info_main(int argc, char *argv[], void *userdata) {
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);
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 b8a4084d26..4a48d4e614 100644
--- a/tools/command_ignorelist
+++ b/tools/command_ignorelist
@@ -494,28 +494,28 @@ 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|syspath|unit…\n "]/variablelist/varlistentry[term="-q"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-p"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-n"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-r"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-a"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-x"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-P"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-d"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-e"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-c"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-v"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-n"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-t"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-c"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-s"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-S"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-a"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-A"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-p"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-g"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-y"]
-udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|unit…\n "]/variablelist/varlistentry[term="-b"]
+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"]
@@ -531,7 +531,7 @@ udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n o
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|unit\n "]/variablelist/varlistentry[term="-a"]
+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="/"]