mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-05-05 19:18:03 +02:00
Merge branch 'wip/libinput-tool-v2'
This commit is contained in:
commit
a2a8db261a
9 changed files with 461 additions and 48 deletions
15
meson.build
15
meson.build
|
|
@ -342,11 +342,12 @@ endif
|
||||||
############ tools ############
|
############ tools ############
|
||||||
tools_shared_sources = [ 'tools/shared.c',
|
tools_shared_sources = [ 'tools/shared.c',
|
||||||
'tools/shared.h' ]
|
'tools/shared.h' ]
|
||||||
event_debug_sources = [ 'tools/event-debug.c' ] + tools_shared_sources
|
event_debug_sources = [ 'tools/libinput-debug-events.c' ] + tools_shared_sources
|
||||||
executable('event-debug',
|
executable('event-debug',
|
||||||
event_debug_sources,
|
event_debug_sources,
|
||||||
dependencies : dep_libinput,
|
dependencies : dep_libinput,
|
||||||
include_directories : include_directories('src'),
|
include_directories : include_directories('src'),
|
||||||
|
c_args : [ '-DTOOLS_BUILD_STANDALONE=1' ],
|
||||||
install : false
|
install : false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -355,6 +356,7 @@ executable('libinput-debug-events',
|
||||||
libinput_debug_events_sources,
|
libinput_debug_events_sources,
|
||||||
dependencies : dep_libinput,
|
dependencies : dep_libinput,
|
||||||
include_directories : include_directories('src'),
|
include_directories : include_directories('src'),
|
||||||
|
c_args : [ '-DTOOLS_BUILD_STANDALONE=1' ],
|
||||||
install : true
|
install : true
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -363,8 +365,19 @@ executable('libinput-list-devices',
|
||||||
libinput_list_devices_sources,
|
libinput_list_devices_sources,
|
||||||
dependencies : [ dep_libinput ],
|
dependencies : [ dep_libinput ],
|
||||||
include_directories : include_directories('src'),
|
include_directories : include_directories('src'),
|
||||||
|
c_args : [ '-DTOOLS_BUILD_STANDALONE=1' ],
|
||||||
|
install : true,
|
||||||
|
)
|
||||||
|
|
||||||
|
libinput_sources = [ 'tools/libinput-tool.c' ] + libinput_list_devices_sources + libinput_debug_events_sources
|
||||||
|
|
||||||
|
executable('libinput',
|
||||||
|
libinput_sources,
|
||||||
|
dependencies : dep_libinput,
|
||||||
|
include_directories : include_directories ('src'),
|
||||||
install : true
|
install : true
|
||||||
)
|
)
|
||||||
|
install_man('tools/libinput.1')
|
||||||
|
|
||||||
ptraccel_debug_sources = [ 'tools/ptraccel-debug.c' ]
|
ptraccel_debug_sources = [ 'tools/ptraccel-debug.c' ]
|
||||||
executable('ptraccel-debug',
|
executable('ptraccel-debug',
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
noinst_PROGRAMS = event-debug ptraccel-debug
|
noinst_PROGRAMS = event-debug ptraccel-debug
|
||||||
bin_PROGRAMS = libinput-list-devices libinput-debug-events
|
bin_PROGRAMS = libinput-list-devices libinput-debug-events libinput
|
||||||
noinst_LTLIBRARIES = libshared.la
|
|
||||||
|
|
||||||
AM_CPPFLAGS = -I$(top_srcdir)/include \
|
AM_CPPFLAGS = -I$(top_srcdir)/include \
|
||||||
-I$(top_srcdir)/src \
|
-I$(top_srcdir)/src \
|
||||||
|
|
@ -8,37 +7,51 @@ AM_CPPFLAGS = -I$(top_srcdir)/include \
|
||||||
AM_CFLAGS = $(GCC_CFLAGS)
|
AM_CFLAGS = $(GCC_CFLAGS)
|
||||||
AM_CXXFLAGS = $(GCC_CXXFLAGS)
|
AM_CXXFLAGS = $(GCC_CXXFLAGS)
|
||||||
|
|
||||||
libshared_la_SOURCES = \
|
shared_sources = \
|
||||||
shared.c \
|
shared.c \
|
||||||
shared.h
|
shared.h
|
||||||
libshared_la_CFLAGS = $(AM_CFLAGS) $(LIBEVDEV_CFLAGS)
|
|
||||||
libshared_la_LIBADD = $(LIBEVDEV_LIBS)
|
|
||||||
|
|
||||||
event_debug_SOURCES = event-debug.c
|
event_debug_sources = libinput-debug-events.c $(shared_sources)
|
||||||
event_debug_LDADD = ../src/libinput.la libshared.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
|
event_debug_SOURCES = libinput-debug-events.c $(shared_sources)
|
||||||
|
event_debug_LDADD = ../src/libinput.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
|
||||||
event_debug_LDFLAGS = -no-install
|
event_debug_LDFLAGS = -no-install
|
||||||
event_debug_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS)
|
event_debug_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS) \
|
||||||
|
-DTOOLS_BUILD_STANDALONE=1
|
||||||
|
|
||||||
ptraccel_debug_SOURCES = ptraccel-debug.c
|
ptraccel_debug_SOURCES = ptraccel-debug.c
|
||||||
ptraccel_debug_LDADD = ../src/libfilter.la ../src/libinput.la
|
ptraccel_debug_LDADD = ../src/libfilter.la ../src/libinput.la
|
||||||
ptraccel_debug_LDFLAGS = -no-install
|
ptraccel_debug_LDFLAGS = -no-install
|
||||||
|
|
||||||
libinput_list_devices_SOURCES = libinput-list-devices.c
|
libinput_list_devices_SOURCES = libinput-list-devices.c $(shared_sources)
|
||||||
libinput_list_devices_LDADD = ../src/libinput.la libshared.la $(LIBUDEV_LIBS)
|
libinput_list_devices_LDADD = ../src/libinput.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
|
||||||
libinput_list_devices_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS)
|
libinput_list_devices_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS) \
|
||||||
|
-DTOOLS_BUILD_STANDALONE=1
|
||||||
dist_man1_MANS = libinput-list-devices.1
|
dist_man1_MANS = libinput-list-devices.1
|
||||||
|
|
||||||
libinput_debug_events_SOURCES = $(event_debug_SOURCES)
|
libinput_debug_events_SOURCES = $(event_debug_SOURCES)
|
||||||
libinput_debug_events_LDADD = $(event_debug_LDADD)
|
libinput_debug_events_LDADD = $(event_debug_LDADD)
|
||||||
libinput_debug_events_CFLAGS = $(AM_CFLAGS) $(event_debug_CFLAGS)
|
libinput_debug_events_CFLAGS = $(AM_CFLAGS) $(event_debug_CFLAGS) \
|
||||||
|
-DTOOLS_BUILD_STANDALONE=1
|
||||||
dist_man1_MANS += libinput-debug-events.1
|
dist_man1_MANS += libinput-debug-events.1
|
||||||
|
|
||||||
|
libinput_SOURCES = \
|
||||||
|
libinput-tool.c \
|
||||||
|
libinput-tool.h \
|
||||||
|
libinput-debug-events.c \
|
||||||
|
libinput-list-devices.c \
|
||||||
|
$(shared_sources)
|
||||||
|
libinput_LDADD = ../src/libinput.la $(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
|
||||||
|
libinput_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS)
|
||||||
|
dist_man1_MANS += libinput.1
|
||||||
|
|
||||||
if BUILD_EVENTGUI
|
if BUILD_EVENTGUI
|
||||||
noinst_PROGRAMS += event-gui
|
noinst_PROGRAMS += event-gui
|
||||||
|
|
||||||
event_gui_SOURCES = event-gui.c
|
event_gui_SOURCES = event-gui.c $(shared_sources)
|
||||||
event_gui_LDADD = ../src/libinput.la libshared.la $(CAIRO_LIBS) $(GTK_LIBS) $(LIBUDEV_LIBS)
|
event_gui_LDADD = ../src/libinput.la $(CAIRO_LIBS) $(GTK_LIBS) \
|
||||||
event_gui_CFLAGS = $(CAIRO_CFLAGS) $(GTK_CFLAGS) $(LIBUDEV_CFLAGS) $(AM_CFLAGS)
|
$(LIBUDEV_LIBS) $(LIBEVDEV_LIBS)
|
||||||
|
event_gui_CFLAGS = $(CAIRO_CFLAGS) $(GTK_CFLAGS) \
|
||||||
|
$(LIBUDEV_CFLAGS) $(LIBEVDEV_CFLAGS) $(AM_CFLAGS)
|
||||||
event_gui_LDFLAGS = -no-install
|
event_gui_LDFLAGS = -no-install
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@
|
||||||
#include <libinput.h>
|
#include <libinput.h>
|
||||||
#include <libevdev/libevdev.h>
|
#include <libevdev/libevdev.h>
|
||||||
|
|
||||||
|
#include "libinput-tool.h"
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
|
|
||||||
uint32_t start_time;
|
uint32_t start_time;
|
||||||
|
|
@ -896,7 +897,7 @@ mainloop(struct libinput *li)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
libinput_debug_events(struct global_options *opts, int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct libinput *li;
|
struct libinput *li;
|
||||||
struct timespec tp;
|
struct timespec tp;
|
||||||
|
|
@ -909,7 +910,7 @@ main(int argc, char **argv)
|
||||||
if (tools_parse_args(argc, argv, &context))
|
if (tools_parse_args(argc, argv, &context))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
be_quiet = context.options.quiet;
|
be_quiet = context.options.global_options.quiet;
|
||||||
|
|
||||||
li = tools_open_backend(&context);
|
li = tools_open_backend(&context);
|
||||||
if (!li)
|
if (!li)
|
||||||
|
|
@ -921,3 +922,13 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TOOLS_BUILD_STANDALONE
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct global_options opts = {0};
|
||||||
|
|
||||||
|
return libinput_debug_events(&opts, argc, argv);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
@ -34,6 +34,7 @@
|
||||||
#include <libinput-util.h>
|
#include <libinput-util.h>
|
||||||
#include <libinput-version.h>
|
#include <libinput-version.h>
|
||||||
|
|
||||||
|
#include "libinput-tool.h"
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
|
|
@ -354,39 +355,38 @@ print_device_notify(struct libinput_event *ev)
|
||||||
static inline void
|
static inline void
|
||||||
usage(void)
|
usage(void)
|
||||||
{
|
{
|
||||||
printf("Usage: %s [--help|--version]\n"
|
#if TOOLS_BUILD_STANDALONE
|
||||||
"\n"
|
printf("Usage: %s [--help|--version]\n", program_invocation_short_name);
|
||||||
|
#else
|
||||||
|
printf("Usage: libinput list-devices [--help]\n");
|
||||||
|
#endif
|
||||||
|
printf("\n"
|
||||||
"This tool creates a libinput context on the default seat \"seat0\"\n"
|
"This tool creates a libinput context on the default seat \"seat0\"\n"
|
||||||
"and lists all devices recognized by libinput and the configuration options.\n"
|
"and lists all devices recognized by libinput and the configuration options.\n"
|
||||||
"Where multiple options are possible, the default is prefixed with \"*\".\n"
|
"Where multiple options are possible, the default is prefixed with \"*\".\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
"--help ...... show this help\n"
|
"--help ...... show this help\n"
|
||||||
|
#if TOOLS_BUILD_STANDALONE
|
||||||
"--version ... show version information\n"
|
"--version ... show version information\n"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"This tool requires access to the /dev/input/eventX nodes.\n",
|
"This tool requires access to the /dev/input/eventX nodes.\n");
|
||||||
program_invocation_short_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
libinput_list_devices(struct global_options *opts, int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct libinput *li;
|
struct libinput *li;
|
||||||
struct tools_context context;
|
struct tools_context context;
|
||||||
struct libinput_event *ev;
|
struct libinput_event *ev;
|
||||||
|
|
||||||
|
#if !TOOLS_BUILD_STANDALONE
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
if (streq(argv[1], "--help")) {
|
usage();
|
||||||
usage();
|
return streq(argv[1], "--help") ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
return 0;
|
|
||||||
} else if (streq(argv[1], "--version")) {
|
|
||||||
printf("%s\n", LIBINPUT_VERSION);
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
usage();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
tools_init_context(&context);
|
tools_init_context(&context);
|
||||||
|
|
||||||
|
|
@ -406,5 +406,29 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
libinput_unref(li);
|
libinput_unref(li);
|
||||||
|
|
||||||
return 0;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TOOLS_BUILD_STANDALONE
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct global_options options = {0};
|
||||||
|
|
||||||
|
if (argc > 1) {
|
||||||
|
if (streq(argv[1], "--help")) {
|
||||||
|
usage();
|
||||||
|
return 0;
|
||||||
|
} else if (streq(argv[1], "--version")) {
|
||||||
|
printf("%s\n", LIBINPUT_VERSION);
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
usage();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return libinput_list_devices(&options, argc - optind, &argv[optind]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* TOOLS_BUILD_STANDALONE */
|
||||||
|
|
|
||||||
161
tools/libinput-tool.c
Normal file
161
tools/libinput-tool.c
Normal file
|
|
@ -0,0 +1,161 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2017 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the next
|
||||||
|
* paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
* Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <libudev.h>
|
||||||
|
|
||||||
|
#include <libinput.h>
|
||||||
|
#include <libinput-util.h>
|
||||||
|
#include <libinput-version.h>
|
||||||
|
|
||||||
|
#include "libinput-tool.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
libinput_tool_usage(void)
|
||||||
|
{
|
||||||
|
printf("Usage: libinput [GLOBAL OPTIONS] [COMMAND] [ARGS]\n"
|
||||||
|
"\n"
|
||||||
|
"This tool creates a libinput context and interacts with that context.\n"
|
||||||
|
"For detailed information about the options below, see the"
|
||||||
|
"libinput(1) man page.\n"
|
||||||
|
"\n"
|
||||||
|
"This tool usually requires access to the /dev/input/eventX nodes.\n"
|
||||||
|
"\n"
|
||||||
|
"Global options:\n"
|
||||||
|
" --help ...... show this help\n"
|
||||||
|
" --version ... show version information\n"
|
||||||
|
" --verbose ... enable verbose output for debugging\n"
|
||||||
|
" --quiet ..... reduce output (may be used with --verbose)\n"
|
||||||
|
"\n"
|
||||||
|
"Commands:\n"
|
||||||
|
" list-devices\n"
|
||||||
|
" List all devices with their default configuration options\n"
|
||||||
|
"\n"
|
||||||
|
" debug-events\n"
|
||||||
|
" Print events to stdout\n"
|
||||||
|
"\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
enum command {
|
||||||
|
COMMAND_NONE,
|
||||||
|
COMMAND_LIST_DEVICES,
|
||||||
|
COMMAND_DEBUG_EVENTS,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum global_opts {
|
||||||
|
GOPT_HELP = 1,
|
||||||
|
GOPT_VERSION,
|
||||||
|
GOPT_QUIET,
|
||||||
|
GOPT_VERBOSE,
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool
|
||||||
|
parse_args_cmd(enum command cmd,
|
||||||
|
struct global_options *global_options,
|
||||||
|
int argc, char *argv[])
|
||||||
|
{
|
||||||
|
optind = 0;
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
case COMMAND_NONE:
|
||||||
|
break;
|
||||||
|
case COMMAND_LIST_DEVICES:
|
||||||
|
return libinput_list_devices(global_options, argc, argv);
|
||||||
|
case COMMAND_DEBUG_EVENTS:
|
||||||
|
return libinput_debug_events(global_options, argc, argv);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
enum command cmd = COMMAND_NONE;
|
||||||
|
const char *command;
|
||||||
|
int option_index = 0;
|
||||||
|
struct global_options global_options = {0};
|
||||||
|
|
||||||
|
if (argc == 1) {
|
||||||
|
libinput_tool_usage();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
int c;
|
||||||
|
static struct option opts[] = {
|
||||||
|
{ "help", no_argument, 0, GOPT_HELP },
|
||||||
|
{ "version", no_argument, 0, GOPT_VERSION },
|
||||||
|
{ "quiet", no_argument, 0, GOPT_QUIET },
|
||||||
|
{ "verbose", no_argument, 0, GOPT_VERBOSE },
|
||||||
|
{ 0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
c = getopt_long(argc, argv, "+h", opts, &option_index);
|
||||||
|
if (c == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
switch(c) {
|
||||||
|
case 'h':
|
||||||
|
case GOPT_HELP:
|
||||||
|
libinput_tool_usage();
|
||||||
|
exit(0);
|
||||||
|
case GOPT_VERSION:
|
||||||
|
printf("%s\n", LIBINPUT_VERSION);
|
||||||
|
exit(0);
|
||||||
|
case GOPT_VERBOSE:
|
||||||
|
global_options.verbose = true;
|
||||||
|
break;
|
||||||
|
case GOPT_QUIET:
|
||||||
|
global_options.quiet = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
libinput_tool_usage();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (optind > argc) {
|
||||||
|
libinput_tool_usage();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
command = argv[optind];
|
||||||
|
|
||||||
|
if (streq(command, "list-devices")) {
|
||||||
|
cmd = COMMAND_LIST_DEVICES;
|
||||||
|
} else if (streq(command, "debug-events")) {
|
||||||
|
cmd = COMMAND_DEBUG_EVENTS;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Invalid command '%s'\n", command);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return parse_args_cmd(cmd, &global_options, argc - optind, &argv[optind]);
|
||||||
|
}
|
||||||
40
tools/libinput-tool.h
Normal file
40
tools/libinput-tool.h
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright © 2017 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the next
|
||||||
|
* paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
* Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LIBINPUT_TOOL_H
|
||||||
|
#define LIBINPUT_TOOL_H 1
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
struct global_options {
|
||||||
|
bool verbose;
|
||||||
|
bool quiet;
|
||||||
|
};
|
||||||
|
|
||||||
|
void libinput_tool_usage(void);
|
||||||
|
int libinput_list_devices(struct global_options *opts, int argc, char **argv);
|
||||||
|
int libinput_debug_events(struct global_options *opts, int argc, char **argv);
|
||||||
|
|
||||||
|
#endif
|
||||||
134
tools/libinput.1
Normal file
134
tools/libinput.1
Normal file
|
|
@ -0,0 +1,134 @@
|
||||||
|
.TH LIBINPUT "1"
|
||||||
|
.SH NAME
|
||||||
|
libinput \- tool to interface with libinput
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B libinput [GLOBAL OPTIONS] [COMMAND] [ARGS]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.PP
|
||||||
|
The
|
||||||
|
.I libinput
|
||||||
|
tool creates a libinput context on the default seat "seat0" and interacts
|
||||||
|
with that libinput context.
|
||||||
|
.PP
|
||||||
|
This tool usually needs to be run as root to have access to the
|
||||||
|
/dev/input/eventX nodes.
|
||||||
|
.PP
|
||||||
|
The context created by this tool is a new libinput context and independent
|
||||||
|
of that created by the X.Org libinput driver, the Wayland compositor or any
|
||||||
|
other process that utilizes libinput (henceforth called "the caller").
|
||||||
|
Configuration options set in this context do not affect any other libinput
|
||||||
|
contexts.
|
||||||
|
.SH GLOBAL OPTIONS
|
||||||
|
These options are independent of any
|
||||||
|
.B COMMAND
|
||||||
|
.TP 8
|
||||||
|
.B --help
|
||||||
|
Print help and exit
|
||||||
|
.TP 8
|
||||||
|
.B --version
|
||||||
|
Print the version and exit
|
||||||
|
.TP 8
|
||||||
|
.B --verbose
|
||||||
|
Enable verbose mode. In verbose mode, libinput will print a number of
|
||||||
|
debug messages to stdout. The exact behavior of verbose mode depends on the
|
||||||
|
.B COMMAND.
|
||||||
|
.TP 8
|
||||||
|
.B --quiet
|
||||||
|
Enable quiet mode. In quiet mode, most messages normally printed to stdout
|
||||||
|
will be omitted. The exact behavior of quiet mode depends on the
|
||||||
|
.B COMMAND.
|
||||||
|
|
||||||
|
.SH COMMANDS
|
||||||
|
All commands support a
|
||||||
|
.B --help
|
||||||
|
argument that prints command-specific usage
|
||||||
|
information (e.g.
|
||||||
|
.B libinput debug-events --help)
|
||||||
|
.TP 8
|
||||||
|
.B debug-events [ARGS]
|
||||||
|
Print all events as seen by libinput. See section
|
||||||
|
.B debug-events
|
||||||
|
.TP 8
|
||||||
|
.B list-devices
|
||||||
|
List all devices recognized by libinput. See section
|
||||||
|
.B list-devices
|
||||||
|
|
||||||
|
.SS debug-events [...]
|
||||||
|
Print all events from these devices.
|
||||||
|
.PP
|
||||||
|
This is a debugging tool only, its output may change at any time. Do not
|
||||||
|
rely on the output.
|
||||||
|
.PP
|
||||||
|
.B --device /path/to/device
|
||||||
|
.IP
|
||||||
|
Use a path backend for the device for the given path. This option is
|
||||||
|
mutually exclusive with the
|
||||||
|
.B --udev
|
||||||
|
option.
|
||||||
|
.PP
|
||||||
|
.B --grab
|
||||||
|
.IP
|
||||||
|
Exclusively grab all devices. This will prevent events from being sent to
|
||||||
|
any other caller. It is recommended this option is only used together with
|
||||||
|
the
|
||||||
|
.B --device
|
||||||
|
option, otherwise a user may not be able to terminate this tool.
|
||||||
|
.PP
|
||||||
|
.B --udev <name>
|
||||||
|
.IP
|
||||||
|
Use a udev backend for this context with the given seat name. This option is
|
||||||
|
mutually exclusive with the
|
||||||
|
.B --device
|
||||||
|
option.
|
||||||
|
.PP
|
||||||
|
.B --show-keycodes
|
||||||
|
.IP
|
||||||
|
Print all keycodes as-is. Without this argument, most key events shown by
|
||||||
|
this tool are obfuscated to avoid passwords and other sensitive
|
||||||
|
information showing up in the output.
|
||||||
|
.PP
|
||||||
|
.B --enable-<feature>
|
||||||
|
or
|
||||||
|
.B --disable-<feature>
|
||||||
|
.IP
|
||||||
|
Enable or disable the given feature. For a full list of features, see the
|
||||||
|
.B --help
|
||||||
|
output. Requests to enable or disable a feature on a device that does
|
||||||
|
not provide that feature, or where that feature is already enabled or
|
||||||
|
disabled will be silently ignored.
|
||||||
|
.PP
|
||||||
|
.B --set-<feature>=<value>
|
||||||
|
.IP
|
||||||
|
Set the given feature to the given value. For a full list of features, see
|
||||||
|
the
|
||||||
|
.B --help
|
||||||
|
output. Requests to set a feature on a device that does not provide that
|
||||||
|
feature, or where that feature is already set to that value, or where the
|
||||||
|
value is not available on that device will be silently ignored
|
||||||
|
|
||||||
|
.SS list-devices
|
||||||
|
List all devices recognized by libinput. Each device shows available
|
||||||
|
configurations the respective
|
||||||
|
.B default
|
||||||
|
configuration setting.
|
||||||
|
.PP
|
||||||
|
For configuration options that allow multiple different settings (e.g.
|
||||||
|
scrolling), all available settings are listed. The default setting is
|
||||||
|
prefixed by an asterisk (*).
|
||||||
|
.PP
|
||||||
|
Note that some specific feature may still be available on a device even when
|
||||||
|
no configuration is exposed, a lack of a configuration option does not
|
||||||
|
necessarily mean that this feature does not work.
|
||||||
|
.PP
|
||||||
|
Note that this command only lists
|
||||||
|
.B default
|
||||||
|
configuration settings, settings modified in other contextx by the caller
|
||||||
|
are not reflected in this tool.
|
||||||
|
.SH NOTES
|
||||||
|
.PP
|
||||||
|
A device may be recognized by this libinput context but not handled by the
|
||||||
|
X.Org libinput driver or the Wayland compositor.
|
||||||
|
.PP
|
||||||
|
.SH SEE ALSO
|
||||||
|
.PP
|
||||||
|
libinput(4)
|
||||||
|
|
@ -34,6 +34,7 @@
|
||||||
#include <libevdev/libevdev.h>
|
#include <libevdev/libevdev.h>
|
||||||
#include <libinput-util.h>
|
#include <libinput-util.h>
|
||||||
|
|
||||||
|
#include "libinput-tool.h"
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
|
|
||||||
enum options {
|
enum options {
|
||||||
|
|
@ -94,8 +95,13 @@ log_handler(struct libinput *li,
|
||||||
void
|
void
|
||||||
tools_usage(void)
|
tools_usage(void)
|
||||||
{
|
{
|
||||||
printf("Usage: %s [options] [--udev [<seat>]|--device /dev/input/event0]\n"
|
#if TOOLS_BUILD_STANDALONE
|
||||||
"--udev <seat>.... Use udev device discovery (default).\n"
|
printf("Usage: %s [options] [--udev [<seat>]|--device /dev/input/event0]\n",
|
||||||
|
program_invocation_short_name);
|
||||||
|
#else
|
||||||
|
printf("Usage: libinput debug-events [options] [--udev [<seat>]|--device /dev/input/event0]\n");
|
||||||
|
#endif
|
||||||
|
printf("--udev <seat>.... Use udev device discovery (default).\n"
|
||||||
" Specifying a seat ID is optional.\n"
|
" Specifying a seat ID is optional.\n"
|
||||||
"--device /path/to/device .... open the given device only\n"
|
"--device /path/to/device .... open the given device only\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
@ -127,10 +133,12 @@ tools_usage(void)
|
||||||
"\n"
|
"\n"
|
||||||
"Other options:\n"
|
"Other options:\n"
|
||||||
"--grab .......... Exclusively grab all openend devices\n"
|
"--grab .......... Exclusively grab all openend devices\n"
|
||||||
"--verbose ....... Print debugging output.\n"
|
"--help .......... Print this help.\n"
|
||||||
"--quiet ......... Only print libinput messages, useful in combination with --verbose.\n"
|
);
|
||||||
"--help .......... Print this help.\n",
|
#if TOOLS_BUILD_STANDALONE
|
||||||
program_invocation_short_name);
|
printf("--verbose ....... Print debugging output.\n"
|
||||||
|
"--quiet ......... Only print libinput messages, useful in combination with --verbose.\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -172,8 +180,10 @@ tools_parse_args(int argc, char **argv, struct tools_context *context)
|
||||||
{ "udev", no_argument, 0, OPT_UDEV },
|
{ "udev", no_argument, 0, OPT_UDEV },
|
||||||
{ "grab", no_argument, 0, OPT_GRAB },
|
{ "grab", no_argument, 0, OPT_GRAB },
|
||||||
{ "help", no_argument, 0, OPT_HELP },
|
{ "help", no_argument, 0, OPT_HELP },
|
||||||
|
#if TOOLS_BUILD_STANDALONE
|
||||||
{ "verbose", no_argument, 0, OPT_VERBOSE },
|
{ "verbose", no_argument, 0, OPT_VERBOSE },
|
||||||
{ "quiet", no_argument, 0, OPT_QUIET },
|
{ "quiet", no_argument, 0, OPT_QUIET },
|
||||||
|
#endif
|
||||||
{ "enable-tap", no_argument, 0, OPT_TAP_ENABLE },
|
{ "enable-tap", no_argument, 0, OPT_TAP_ENABLE },
|
||||||
{ "disable-tap", no_argument, 0, OPT_TAP_DISABLE },
|
{ "disable-tap", no_argument, 0, OPT_TAP_DISABLE },
|
||||||
{ "enable-drag", no_argument, 0, OPT_DRAG_ENABLE },
|
{ "enable-drag", no_argument, 0, OPT_DRAG_ENABLE },
|
||||||
|
|
@ -224,7 +234,7 @@ tools_parse_args(int argc, char **argv, struct tools_context *context)
|
||||||
options->grab = 1;
|
options->grab = 1;
|
||||||
break;
|
break;
|
||||||
case OPT_VERBOSE:
|
case OPT_VERBOSE:
|
||||||
options->verbose = 1;
|
options->global_options.verbose = 1;
|
||||||
break;
|
break;
|
||||||
case OPT_TAP_ENABLE:
|
case OPT_TAP_ENABLE:
|
||||||
options->tapping = 1;
|
options->tapping = 1;
|
||||||
|
|
@ -363,7 +373,7 @@ tools_parse_args(int argc, char **argv, struct tools_context *context)
|
||||||
options->show_keycodes = true;
|
options->show_keycodes = true;
|
||||||
break;
|
break;
|
||||||
case OPT_QUIET:
|
case OPT_QUIET:
|
||||||
options->quiet = true;
|
options->global_options.quiet = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
tools_usage();
|
tools_usage();
|
||||||
|
|
@ -482,9 +492,15 @@ tools_open_backend(struct tools_context *context)
|
||||||
struct tools_options *options = &context->options;
|
struct tools_options *options = &context->options;
|
||||||
|
|
||||||
if (options->backend == BACKEND_UDEV) {
|
if (options->backend == BACKEND_UDEV) {
|
||||||
li = open_udev(&interface, context, options->seat, options->verbose);
|
li = open_udev(&interface,
|
||||||
|
context,
|
||||||
|
options->seat,
|
||||||
|
options->global_options.verbose);
|
||||||
} else if (options->backend == BACKEND_DEVICE) {
|
} else if (options->backend == BACKEND_DEVICE) {
|
||||||
li = open_device(&interface, context, options->device, options->verbose);
|
li = open_device(&interface,
|
||||||
|
context,
|
||||||
|
options->device,
|
||||||
|
options->global_options.verbose);
|
||||||
} else
|
} else
|
||||||
abort();
|
abort();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,20 +28,21 @@
|
||||||
|
|
||||||
#include <libinput.h>
|
#include <libinput.h>
|
||||||
|
|
||||||
|
#include "libinput-tool.h"
|
||||||
|
|
||||||
enum tools_backend {
|
enum tools_backend {
|
||||||
BACKEND_DEVICE,
|
BACKEND_DEVICE,
|
||||||
BACKEND_UDEV
|
BACKEND_UDEV
|
||||||
};
|
};
|
||||||
|
|
||||||
struct tools_options {
|
struct tools_options {
|
||||||
|
struct global_options global_options;
|
||||||
enum tools_backend backend;
|
enum tools_backend backend;
|
||||||
const char *device; /* if backend is BACKEND_DEVICE */
|
const char *device; /* if backend is BACKEND_DEVICE */
|
||||||
const char *seat; /* if backend is BACKEND_UDEV */
|
const char *seat; /* if backend is BACKEND_UDEV */
|
||||||
int grab; /* EVIOCGRAB */
|
int grab; /* EVIOCGRAB */
|
||||||
bool show_keycodes; /* show keycodes */
|
bool show_keycodes; /* show keycodes */
|
||||||
bool quiet; /* only print libinput messages */
|
|
||||||
|
|
||||||
int verbose;
|
|
||||||
int tapping;
|
int tapping;
|
||||||
int drag;
|
int drag;
|
||||||
int drag_lock;
|
int drag_lock;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue