diff --git i/tools/virsh-completer.c w/tools/virsh-completer.c
index e3b8234b41..875dfe71df 100644
--- i/tools/virsh-completer.c
+++ w/tools/virsh-completer.c
@@ -26,6 +26,7 @@
 #include "virsh.h"
 #include "virsh-pool.h"
 #include "virsh-util.h"
+#include "virsh-secret.h"
 #include "internal.h"
 #include "viralloc.h"
 #include "virstring.h"
@@ -522,3 +523,29 @@ virshSnapshotNameCompleter(vshControl *ctl,
     virshDomainFree(dom);
     return NULL;
 }
+
+
+char **
+virshSecretEventNameCompleter(vshControl *ctl ATTRIBUTE_UNUSED,
+                              const vshCmd *cmd ATTRIBUTE_UNUSED,
+                              unsigned int flags)
+{
+    size_t i;
+    char **ret = NULL;
+
+    virCheckFlags(0, NULL);
+
+    if (VIR_ALLOC_N(ret, VIR_SECRET_EVENT_ID_LAST) < 0)
+        goto error;
+
+    for (i = 0; i < VIR_SECRET_EVENT_ID_LAST; i++) {
+        if (VIR_STRDUP(ret[i], vshSecretEventCallbacks[i].name) < 0)
+            goto error;
+    }
+
+    return ret;
+
+ error:
+    virStringListFree(ret);
+    return NULL;
+}
diff --git i/tools/virsh-completer.h w/tools/virsh-completer.h
index fa443d3ad7..b4c5d7aeab 100644
--- i/tools/virsh-completer.h
+++ w/tools/virsh-completer.h
@@ -70,4 +70,7 @@ char ** virshSnapshotNameCompleter(vshControl *ctl,
                                    const vshCmd *cmd,
                                    unsigned int flags);
 
+char ** virshSecretEventNameCompleter(vshControl *ctl,
+                                      const vshCmd *cmd,
+                                      unsigned int flags);
 #endif
diff --git i/tools/virsh-secret.c w/tools/virsh-secret.c
index 9e4ec61a88..6ec2beca23 100644
--- i/tools/virsh-secret.c
+++ w/tools/virsh-secret.c
@@ -571,18 +571,12 @@ virshSecretEventToString(int event)
     return str ? _(str) : _("unknown");
 }
 
-struct vshEventCallback {
-    const char *name;
-    virConnectSecretEventGenericCallback cb;
-};
-typedef struct vshEventCallback vshEventCallback;
-
 struct virshSecretEventData {
     vshControl *ctl;
     bool loop;
     bool timestamp;
     int count;
-    vshEventCallback *cb;
+    vshSecretEventCallback *cb;
 };
 typedef struct virshSecretEventData virshSecretEventData;
 
@@ -652,7 +646,7 @@ vshEventGenericPrint(virConnectPtr conn ATTRIBUTE_UNUSED,
         vshEventDone(data->ctl);
 }
 
-static vshEventCallback vshEventCallbacks[] = {
+vshSecretEventCallback vshSecretEventCallbacks[] = {
     { "lifecycle",
       VIR_SECRET_EVENT_CALLBACK(vshEventLifecyclePrint), },
     { "value-changed", vshEventGenericPrint, },
@@ -676,6 +670,7 @@ static const vshCmdOptDef opts_secret_event[] = {
     },
     {.name = "event",
      .type = VSH_OT_STRING,
+     .completer = virshSecretEventNameCompleter,
      .help = N_("which event type to wait for")
     },
     {.name = "loop",
@@ -713,7 +708,7 @@ cmdSecretEvent(vshControl *ctl, const vshCmd *cmd)
         size_t i;
 
         for (i = 0; i < VIR_SECRET_EVENT_ID_LAST; i++)
-            vshPrint(ctl, "%s\n", vshEventCallbacks[i].name);
+            vshPrint(ctl, "%s\n", vshSecretEventCallbacks[i].name);
         return true;
     }
 
@@ -724,7 +719,7 @@ cmdSecretEvent(vshControl *ctl, const vshCmd *cmd)
         return false;
     }
     for (event = 0; event < VIR_SECRET_EVENT_ID_LAST; event++)
-        if (STREQ(eventName, vshEventCallbacks[event].name))
+        if (STREQ(eventName, vshSecretEventCallbacks[event].name))
             break;
     if (event == VIR_SECRET_EVENT_ID_LAST) {
         vshError(ctl, _("unknown event type %s"), eventName);
@@ -735,7 +730,7 @@ cmdSecretEvent(vshControl *ctl, const vshCmd *cmd)
     data.loop = vshCommandOptBool(cmd, "loop");
     data.timestamp = vshCommandOptBool(cmd, "timestamp");
     data.count = 0;
-    data.cb = &vshEventCallbacks[event];
+    data.cb = &vshSecretEventCallbacks[event];
     if (vshCommandOptTimeoutToMs(ctl, cmd, &timeout) < 0)
         return false;
 
diff --git i/tools/virsh-secret.h w/tools/virsh-secret.h
index dda22b021e..c70a2b5c75 100644
--- i/tools/virsh-secret.h
+++ w/tools/virsh-secret.h
@@ -28,6 +28,14 @@
 
 # include "virsh.h"
 
+struct vshSecretEventCallback {
+    const char *name;
+    virConnectSecretEventGenericCallback cb;
+};
+typedef struct vshSecretEventCallback vshSecretEventCallback;
+
+extern vshSecretEventCallback vshSecretEventCallbacks[];
+
 extern const vshCmdDef secretCmds[];
 
 #endif /* VIRSH_SECRET_H */
