diff --git a/man/udevadm.xml b/man/udevadm.xml
index 99599634e3..24ed4a29c7 100644
--- a/man/udevadm.xml
+++ b/man/udevadm.xml
@@ -280,9 +280,9 @@
- Trigger a specific type of devices. Valid types are:
- devices, subsystems.
- The default value is devices.
+ Trigger a specific type of devices. Valid types are all,
+ devices, and subsystems. The default value is
+ devices.
diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm
index b68a332500..4d52597cbf 100644
--- a/shell-completion/bash/udevadm
+++ b/shell-completion/bash/udevadm
@@ -118,7 +118,7 @@ _udevadm() {
if __contains_word "$prev" ${OPTS[TRIGGER_ARG]}; then
case $prev in
-t|--type)
- comps='devices subsystems'
+ comps='all devices subsystems'
;;
-c|--action)
comps=$( udevadm trigger --action help )
diff --git a/shell-completion/zsh/_udevadm b/shell-completion/zsh/_udevadm
index d9d995fb33..8a10237e3d 100644
--- a/shell-completion/zsh/_udevadm
+++ b/shell-completion/zsh/_udevadm
@@ -24,7 +24,7 @@ _udevadm_trigger(){
'--verbose[Print the list of devices which will be triggered.]' \
'--dry-run[Do not actually trigger the event.]' \
'--quiet[Suppress error logging in triggering events.]' \
- '--type=[Trigger a specific type of devices.]:types:(devices subsystems failed)' \
+ '--type=[Trigger a specific type of devices.]:types:(all devices subsystems failed)' \
'--action=[Type of event to be triggered.]:actions:(add change remove move online offline bind unbind)' \
'--subsystem-match=[Trigger events for devices which belong to a matching subsystem.]' \
'--subsystem-nomatch=[Do not trigger events for devices which belong to a matching subsystem.]' \
diff --git a/src/udev/udevadm-trigger.c b/src/udev/udevadm-trigger.c
index 900e307c06..e4b3150e60 100644
--- a/src/udev/udevadm-trigger.c
+++ b/src/udev/udevadm-trigger.c
@@ -271,6 +271,7 @@ int trigger_main(int argc, char *argv[], void *userdata) {
enum {
TYPE_DEVICES,
TYPE_SUBSYSTEMS,
+ TYPE_ALL,
} device_type = TYPE_DEVICES;
sd_device_action_t action = SD_DEVICE_CHANGE;
_cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
@@ -313,6 +314,8 @@ int trigger_main(int argc, char *argv[], void *userdata) {
device_type = TYPE_DEVICES;
else if (streq(optarg, "subsystems"))
device_type = TYPE_SUBSYSTEMS;
+ else if (streq(optarg, "all"))
+ device_type = TYPE_ALL;
else
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown type --type=%s", optarg);
break;
@@ -495,6 +498,11 @@ int trigger_main(int argc, char *argv[], void *userdata) {
if (r < 0)
return log_error_errno(r, "Failed to scan devices: %m");
break;
+ case TYPE_ALL:
+ r = device_enumerator_scan_devices_and_subsystems(e);
+ if (r < 0)
+ return log_error_errno(r, "Failed to scan devices and subsystems: %m");
+ break;
default:
assert_not_reached();
}