faq.html 11.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
<!-- HTML header for doxygen 1.8.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <!-- For Mobile Devices -->
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
        <meta name="generator" content="Doxygen 1.8.13"/>
        <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
        <title>libinput: FAQs - Frequently Asked Questions</title>
        <!--<link href="tabs.css" rel="stylesheet" type="text/css"/>-->
        <script type="text/javascript" src="dynsections.js"></script>
        <script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
        <link href="doxygen.css" rel="stylesheet" type="text/css" />
        <link href="bootstrap.css" rel="stylesheet" type="text/css"/>
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
<link href="libinputdoxygen.css" rel="stylesheet" type="text/css"/>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
        <script type="text/javascript" src="doxy-boot.js"></script>
    </head>
    <body>
        <nav class="navbar navbar-default" role="navigation">
            <div class="container">
                <div class="navbar-header">
                    <a class="navbar-brand">libinput 1.7.0</a>
                </div>
            </div>
        </nav>
        <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
            <div class="content" id="content">
                <div class="container">
                    <div class="row">
                        <div class="col-sm-12 panel panel-default" style="padding-bottom: 15px;">
                            <div style="margin-bottom: 15px;">
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="misc.html">Users</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">FAQs - Frequently Asked Questions </div>  </div>
</div><!--header-->
<div class="contents">
<div class="toc"><h3>Table of Contents</h3>
<ul><li class="level1"><a href="#faq_fast_mouse">My mouse moves too fast, even at the slowest setting</a></li>
<li class="level1"><a href="#faq_enable_tapping">Why isn&#39;t touchpad tap-to-click enabled by default</a></li>
<li class="level1"><a href="#faq_kinetic_scrolling">Kinetic scrolling does not work</a></li>
<li class="level1"><a href="#faq_gpl">Is libinput GPL-licensed?</a></li>
<li class="level1"><a href="#faq_config_options">Where is the configuration stored?</a></li>
<li class="level1"><a href="#faq_configure_wayland">How do I configure my device on Wayland?</a></li>
<li class="level1"><a href="#faq_configure_xorg">How do I configure my device on X?</a></li>
<li class="level1"><a href="#faq_hwdb_changes">How to apply hwdb changes</a></li>
</ul>
</div>
<div class="textblock"><p>Frequently asked questions about libinput.</p>
<h1><a class="anchor" id="faq_fast_mouse"></a>
My mouse moves too fast, even at the slowest setting</h1>
<p>This is a symptom of high-dpi mice (greater than 1000dpi). These devices need a udev hwdb entry to normalize their motion. See <a class="el" href="motion_normalization.html">Normalization of relative motion</a> for a detailed explanation.</p>
<h1><a class="anchor" id="faq_enable_tapping"></a>
Why isn't touchpad tap-to-click enabled by default</h1>
<p>See <a class="el" href="tapping.html#tapping_default">Tap-to-click default setting</a></p>
<h1><a class="anchor" id="faq_kinetic_scrolling"></a>
Kinetic scrolling does not work</h1>
<p>The X.Org synaptics driver implemented kinetic scrolling in the driver. It measures the scroll speed and once the finger leaves the touchpad the driver keeps sending scroll events for a predetermined time. This effectively provides for kinetic scrolling without client support but triggers an unfixable <a href="https://bugs.freedesktop.org/show_bug.cgi?id=38909">bug</a>: the client cannot know that the events are from a kinetic scroll source. Scroll events in X are always sent to the current cursor position, a movement of the cursor after lifting the finger will send the kinetic scroll events to the new client, something the user does not usually expect. A key event during the kinetic scroll procedure causes side-effects such as triggering zoom.</p>
<p>libinput does not implement kinetic scrolling for touchpads. Instead it provides the <a class="el" href="group__event__pointer.html#ga2116f4bbedb61532e71d16c4f87bd4ca" title="Return the source for a given axis event. ">libinput_event_pointer_get_axis_source()</a> function that enables callers to implement kinetic scrolling on a per-widget basis, see <a class="el" href="scrolling.html#scroll_sources">Scroll sources</a>.</p>
<h1><a class="anchor" id="faq_gpl"></a>
Is libinput GPL-licensed?</h1>
<p>No, libinput is MIT licensed. The Linux kernel header file linux/input.h in libinput's tree is provided to ensure the same behavior regardless of which kernel version libinput is built on. It does not make libinput GPL-licensed.</p>
<h1><a class="anchor" id="faq_config_options"></a>
Where is the configuration stored?</h1>
<p>libinput does not store configuration options, it is up to the caller to manage these and decide which configuration option to apply to each device. This must be done at startup, after a resume and whenever a new device is detected.</p>
<p>One commonly used way to configure libinput is to have the Wayland compositor expose a compositor-specific configuration option. For example, in a GNOME stack, the gnome-control-center modifies dconf entries. These changes are read by mutter and applied to libinput. Changing these entries via the gsettings commandline tool has the same effect.</p>
<p>Another commonly used way to configure libinput is to have xorg.conf.d snippets. When libinput is used with the xf86-input-libinput driver in an X.Org stack, these options are read on startup and apply to each device. Changing properties at runtime with the xinput commandline tool has the same effect.</p>
<p>In both cases, the selection of available options and how they are exposed depends on the libinput caller (e.g. mutter or xf86-input-libinput).</p>
<p><div class="dotgraph">
<img src="dot_libinput-stack-gnome.png" alt="dot_libinput-stack-gnome.png" border="0" usemap="#dot_libinput-stack-gnome.map"/>
<map name="dot_libinput-stack-gnome.map" id="dot_libinput-stack-gnome.map"></map>
</div>
</p>
<p>This has an effect on the availability of configuration options: if an option is not exposed by the intermediary, it cannot be configured by the client. Also some configuration options that are provided by the intermediary may not be libinput-specific configuration options.</p>
<h1><a class="anchor" id="faq_configure_wayland"></a>
How do I configure my device on Wayland?</h1>
<p>See <a class="el" href="faq.html#faq_config_options">Where is the configuration stored?</a> Use the configuration tool provided by your desktop environment (e.g. gnome-control-center) or direct access to your desktop environment's configuration storage (e.g. gsettings).</p>
<h1><a class="anchor" id="faq_configure_xorg"></a>
How do I configure my device on X?</h1>
<p>See <a class="el" href="faq.html#faq_config_options">Where is the configuration stored?</a> If your desktop environment does not provide a graphical configuration tool you can use an <a href="https://www.x.org/archive/current/doc/man/man5/xorg.conf.5.xhtml">xorg.conf.d snippet</a>. Usually, such a snippet looks like this: </p><pre>
$&gt; cat /etc/X11/xorg.conf.d/99-libinput-custom-config.conf
Section "InputClass"
  Identifier "something to identify this snippet"
  MatchDriver "libinput"
  MatchProduct "substring of the device name"
  Option "some option name" "the option value"
EndSection
</pre><p>The identifier is merely a human-readable string that shows up in the log file. The MatchProduct line should contain the device name or a substring of the device name that the snippet should apply to. For a full list of option names and permitted values, see the <a href="https://www.mankier.com/4/libinput">libinput man page</a>. xorg.conf.d snippets like the above apply to hotplugged devices but can be overwritten at runtime by desktop tools. Multiple snippets may be placed into the same file.</p>
<p>For run-time configuration and testing, the <a href="https://www.x.org/archive/X11R7.5/doc/man/man1/xinput.1.html">xinput</a> debugging tool can modify a devices' properties. See the <a href="https://www.mankier.com/4/libinput">libinput man page</a> for supported property names and values. Usually, an invocation looks like this: </p><pre>
$&gt; xinput set-prop "the device name" "the property name" value [value2] [value3]
</pre><dl class="section note"><dt>Note</dt><dd>Changes performed by xinput do not persist across device hotplugs. xinput is considered a debugging and testing tool only and should not be used for permanent configurations.</dd></dl>
<h1><a class="anchor" id="faq_hwdb_changes"></a>
How to apply hwdb changes</h1>
<p>Sometimes users are asked to test updates to the <a href="https://www.freedesktop.org/software/systemd/man/hwdb.html">udev hwdb</a> or patches that include a change to the hwdb.</p>
<p>If you are testing a patch with a hwdb update, the file will be installed in the correct location. User-specific (i.e. user-written) hwdb entries for testing and debugging must be in <code>/etc/udev/hwdb.d/99-filename.hwdb</code>. You may rename the <code>filename</code> portion to something more useful, but make sure you keep the <code>.hwdb</code> suffix. Do not modify files or save files in <code>/usr/lib/udev/hwdb.d</code>.</p>
<p>Figure out the event node name of your device. Run <code>sudo evemu-describe</code> with no arguments to get a list. If your device is <code>/dev/input/event4</code>, your event node name is <code>event4</code> and you will need to replace that in the commands below.</p>
<p>Rebuild the hwdb and load the new set on your device: </p><pre class="fragment">sudo udevadm hwdb --update
sudo udevadm trigger /sys/class/input/eventX
sudo udevadm test /sys/class/input/eventX
</pre><p>With the event node matching your device. Make sure the udev property appears (or does not appear, whichever applies) in the output of the test command.</p>
<p>Once the output matches expectations, restart X or your Wayland compositor or reboot. </p>
</div></div><!-- contents -->
<!-- HTML footer for doxygen 1.8.8-->
<!-- start footer part -->
</div>
</div>
</div>
</div>
</div>
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>