tools: hide key codes by default
authorPeter Hutterer <peter.hutterer@who-t.net>
Mon, 13 Feb 2017 01:07:03 +0000 (11:07 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 13 Feb 2017 21:53:22 +0000 (07:53 +1000)
libinput-debug-events prints keycodes as they come in. This makes it dangerous
to be run by users (especially in the background) because it will leak
sensitive information as it is typed. Obfuscate the base set of keycodes
by default, require a --show-keycodes switch to show it.

The few times we actually need the keycodes, we can run the switch in the
debugging tool.

This does not affect keys outside of the main block on the keyboard (F-keys,
multimedia keys).

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
tools/event-debug.c
tools/shared.c
tools/shared.h

index 779b54ac5e9d8b55b58ffdb068afd578fd1ae843..9022e395566f80bbb50ba9d09805931b9cdd8af1 100644 (file)
@@ -267,20 +267,31 @@ print_device_notify(struct libinput_event *ev)
 }
 
 static void
-print_key_event(struct libinput_event *ev)
+print_key_event(struct libinput *li, struct libinput_event *ev)
 {
        struct libinput_event_keyboard *k = libinput_event_get_keyboard_event(ev);
+       struct tools_context *context;
+       struct tools_options *options;
        enum libinput_key_state state;
        uint32_t key;
        const char *keyname;
 
+       context = libinput_get_user_data(li);
+       options = &context->options;
+
        print_event_time(libinput_event_keyboard_get_time(k));
        state = libinput_event_keyboard_get_key_state(k);
 
        key = libinput_event_keyboard_get_key(k);
-       keyname = libevdev_event_code_get_name(EV_KEY, key);
+       if (!options->show_keycodes &&
+           (key >= KEY_ESC && key < KEY_ZENKAKUHANKAKU)) {
+               keyname = "***";
+       } else {
+               keyname = libevdev_event_code_get_name(EV_KEY, key);
+               keyname = keyname ? keyname : "???";
+       }
        printf("%s (%d) %s\n",
-              keyname ? keyname : "???",
+              keyname,
               key,
               state == LIBINPUT_KEY_STATE_PRESSED ? "pressed" : "released");
 }
@@ -754,7 +765,7 @@ handle_and_print_events(struct libinput *li)
                                                  &context.options);
                        break;
                case LIBINPUT_EVENT_KEYBOARD_KEY:
-                       print_key_event(ev);
+                       print_key_event(li, ev);
                        break;
                case LIBINPUT_EVENT_POINTER_MOTION:
                        print_motion_event(ev);
index 05fb11865680cd00211472e42d253d942f0e58a9..1019184eb932072e7d8a853163cd560d2e51142c 100644 (file)
@@ -62,6 +62,7 @@ enum options {
        OPT_SCROLL_BUTTON,
        OPT_SPEED,
        OPT_PROFILE,
+       OPT_SHOW_KEYCODES,
 };
 
 LIBINPUT_ATTRIBUTE_PRINTF(3, 0)
@@ -103,6 +104,7 @@ tools_usage(void)
               "--set-profile=[adaptive|flat].... set pointer acceleration profile\n"
               "--set-speed=<value>.... set pointer acceleration speed (allowed range [-1, 1]) \n"
               "--set-tap-map=[lrm|lmr] ... set button mapping for tapping\n"
+              "--show-keycodes.... show all key codes while typing\n"
               "\n"
               "These options apply to all applicable devices, if a feature\n"
               "is not explicitly specified it is left at each device's default.\n"
@@ -137,6 +139,7 @@ tools_init_context(struct tools_context *context)
        options->seat = "seat0";
        options->speed = 0.0;
        options->profile = LIBINPUT_CONFIG_ACCEL_PROFILE_NONE;
+       options->show_keycodes = false;
 }
 
 int
@@ -173,6 +176,7 @@ tools_parse_args(int argc, char **argv, struct tools_context *context)
                        { "set-profile", 1, 0, OPT_PROFILE },
                        { "set-tap-map", 1, 0, OPT_TAP_MAP },
                        { "set-speed", 1, 0, OPT_SPEED },
+                       { "show-keycodes", 0, 0, OPT_SHOW_KEYCODES },
                        { 0, 0, 0, 0}
                };
 
@@ -337,6 +341,9 @@ tools_parse_args(int argc, char **argv, struct tools_context *context)
                                return 1;
                        }
                        break;
+               case OPT_SHOW_KEYCODES:
+                       options->show_keycodes = true;
+                       break;
                default:
                        tools_usage();
                        return 1;
index 17fdf37ab17332ce8bc0411a24cd55b133b9b204..9b1a9884e0bc6206bde75d2de9546a1c3eaa21e1 100644 (file)
@@ -24,6 +24,8 @@
 #ifndef _SHARED_H_
 #define _SHARED_H_
 
+#include <stdbool.h>
+
 #include <libinput.h>
 
 enum tools_backend {
@@ -36,6 +38,7 @@ struct tools_options {
        const char *device; /* if backend is BACKEND_DEVICE */
        const char *seat; /* if backend is BACKEND_UDEV */
        int grab; /* EVIOCGRAB */
+       bool show_keycodes; /* show keycodes */
 
        int verbose;
        int tapping;