{"id":2272,"date":"2024-03-18T12:14:49","date_gmt":"2024-03-18T10:14:49","guid":{"rendered":"http:\/\/www.fabienm.eu\/wordpress\/?p=2272"},"modified":"2024-03-18T15:13:22","modified_gmt":"2024-03-18T13:13:22","slug":"configuration-dun-clavier-3-boutons-sous-linux","status":"publish","type":"post","link":"http:\/\/www.fabienm.eu\/wordpress\/2024\/03\/18\/configuration-dun-clavier-3-boutons-sous-linux\/","title":{"rendered":"Configuration d&rsquo;un \u00abclavier\u00bb 3 boutons sous Linux"},"content":{"rendered":"\n<p>J&rsquo;ai <s>investi<\/s> claqu\u00e9 du pognon inutilement dans un mini clavier 3 boutons + un potar chez <a href=\"https:\/\/fr.aliexpress.com\/item\/1005006308134065.html?spm=a2g0o.order_list.order_list_main.23.31ea5e5bwNN21X&amp;gatewayAdapt=glo2fra\">aliexpress<\/a>.<\/p>\n\n\n\n<p>Mon but est d&rsquo;ajouter des fonctionnalit\u00e9s hors clavier \u00abstandard\u00bb pour actionner le micro quand je parle par exemple.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"640\" src=\"http:\/\/www.fabienm.eu\/wordpress\/wp-content\/uploads\/2024\/03\/Mini-clavier-m-canique-de-jeu-Partenaires-RVB-pigments-_009.webp\" alt=\"\" class=\"wp-image-2273\" srcset=\"http:\/\/www.fabienm.eu\/wordpress\/wp-content\/uploads\/2024\/03\/Mini-clavier-m-canique-de-jeu-Partenaires-RVB-pigments-_009.webp 640w, http:\/\/www.fabienm.eu\/wordpress\/wp-content\/uploads\/2024\/03\/Mini-clavier-m-canique-de-jeu-Partenaires-RVB-pigments-_009-300x300.webp 300w, http:\/\/www.fabienm.eu\/wordpress\/wp-content\/uploads\/2024\/03\/Mini-clavier-m-canique-de-jeu-Partenaires-RVB-pigments-_009-150x150.webp 150w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption class=\"wp-element-caption\">Mini-clavier minimaliste pour ajouter des touches de fonctionnalit\u00e9 \u00e0 son pc.<\/figcaption><\/figure>\n\n\n\n<p>Au branchement le clavier est bien reconnue par le syst\u00e8me :<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code lang=\"\" class=\"hljs language-php \">$ dmesg\n&#91; <span class=\"hljs-number\">4158.860304<\/span>] usb <span class=\"hljs-number\">1<\/span><span class=\"hljs-number\">-2.3<\/span>: <span class=\"hljs-keyword\">new<\/span> full-speed USB device number <span class=\"hljs-number\">13<\/span> using xhci_hcd\n&#91; <span class=\"hljs-number\">4158.966002<\/span>] usb <span class=\"hljs-number\">1<\/span><span class=\"hljs-number\">-2.3<\/span>: <span class=\"hljs-keyword\">New<\/span> USB device found, idVendor=<span class=\"hljs-number\">1189<\/span>, idProduct=<span class=\"hljs-number\">8890<\/span>, bcdDevice= <span class=\"hljs-number\">0.00<\/span>\n&#91; <span class=\"hljs-number\">4158.966014<\/span>] usb <span class=\"hljs-number\">1<\/span><span class=\"hljs-number\">-2.3<\/span>: <span class=\"hljs-keyword\">New<\/span> USB device strings: Mfr=<span class=\"hljs-number\">0<\/span>, Product=<span class=\"hljs-number\">0<\/span>, SerialNumber=<span class=\"hljs-number\">0<\/span>\n&#91; <span class=\"hljs-number\">4159.111918<\/span>] input: HID <span class=\"hljs-number\">1189<\/span>:<span class=\"hljs-number\">8890<\/span> <span class=\"hljs-keyword\">as<\/span> \/devices\/pci0000:<span class=\"hljs-number\">00<\/span>\/<span class=\"hljs-number\">0000<\/span>:<span class=\"hljs-number\">00<\/span>:<span class=\"hljs-number\">08.1<\/span>\/<span class=\"hljs-number\">0000<\/span>:<span class=\"hljs-number\">04<\/span>:<span class=\"hljs-number\">00.3<\/span>\/usb1\/<span class=\"hljs-number\">1<\/span><span class=\"hljs-number\">-2<\/span>\/<span class=\"hljs-number\">1<\/span><span class=\"hljs-number\">-2.3<\/span>\/<span class=\"hljs-number\">1<\/span><span class=\"hljs-number\">-2.3<\/span>:<span class=\"hljs-number\">1.0<\/span>\/<span class=\"hljs-number\">0003<\/span>:<span class=\"hljs-number\">1189<\/span>:<span class=\"hljs-number\">8890.000<\/span>C\/input\/input27\n&#91; <span class=\"hljs-number\">4159.168751<\/span>] hid-generic <span class=\"hljs-number\">0003<\/span>:<span class=\"hljs-number\">1189<\/span>:<span class=\"hljs-number\">8890.000<\/span>C: input,hidraw5: USB HID v1<span class=\"hljs-number\">.11<\/span> Keyboard &#91;HID <span class=\"hljs-number\">1189<\/span>:<span class=\"hljs-number\">8890<\/span>] on usb<span class=\"hljs-number\">-0000<\/span>:<span class=\"hljs-number\">04<\/span>:<span class=\"hljs-number\">00.3<\/span><span class=\"hljs-number\">-2.3<\/span>\/input0\n&#91; <span class=\"hljs-number\">4159.168951<\/span>] usbhid <span class=\"hljs-number\">1<\/span><span class=\"hljs-number\">-2.3<\/span>:<span class=\"hljs-number\">1.1<\/span>: couldn<span class=\"hljs-string\">'t find an input interrupt endpoint\n&#91; 4159.172912] input: HID 1189:8890 Keyboard as \/devices\/pci0000:00\/0000:00:08.1\/0000:04:00.3\/usb1\/1-2\/1-2.3\/1-2.3:1.2\/0003:1189:8890.000D\/input\/input28\n&#91; 4159.232883] hid-generic 0003:1189:8890.000D: input,hidraw6: USB HID v1.00 Keyboard &#91;HID 1189:8890] on usb-0000:04:00.3-2.3\/input2\n&#91; 4159.236386] input: HID 1189:8890 as \/devices\/pci0000:00\/0000:00:08.1\/0000:04:00.3\/usb1\/1-2\/1-2.3\/1-2.3:1.3\/0003:1189:8890.000E\/input\/input29\n&#91; 4159.236693] hid-generic 0003:1189:8890.000E: input,hidraw7: USB HID v1.10 Mouse &#91;HID 1189:8890] on usb-0000:04:00.3-2.3\/input3\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>L&rsquo;appui sur n&rsquo;importe quelles touches inscrit un <code>x<\/code>, de m\u00eame qu&rsquo;en tournant le potentiom\u00e8tre.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">$ xxxxxxxxxxx<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Input remapper<\/h2>\n\n\n\n<p>Il faut donc <a href=\"https:\/\/www.linuxuprising.com\/2020\/12\/remap-keyboard-and-mouse-buttons-on.html\">configurer les touches<\/a> pour leurs donner une vraie fonctionnalit\u00e9.<\/p>\n\n\n\n<p>La plupart des distsributions Linux poss\u00e8de un outils bien utile nomm\u00e9 <code>input-remapper<\/code> et qui s&rsquo;installe avec apt sur ubuntu :<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">$ sudo apt install input-remapper<\/code><\/span><\/pre>\n\n\n<p>Le paquet \u00abdescend\u00bb un utilitaire de configuration graphique bien pratique :<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">$ input-remapper-gtk<\/code><\/span><\/pre>\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1010\" height=\"484\" src=\"http:\/\/www.fabienm.eu\/wordpress\/wp-content\/uploads\/2024\/03\/Screenshot-from-2024-03-18-10-28-00.png\" alt=\"\" class=\"wp-image-2277\" style=\"width:670px;height:auto\" srcset=\"http:\/\/www.fabienm.eu\/wordpress\/wp-content\/uploads\/2024\/03\/Screenshot-from-2024-03-18-10-28-00.png 1010w, http:\/\/www.fabienm.eu\/wordpress\/wp-content\/uploads\/2024\/03\/Screenshot-from-2024-03-18-10-28-00-300x144.png 300w, http:\/\/www.fabienm.eu\/wordpress\/wp-content\/uploads\/2024\/03\/Screenshot-from-2024-03-18-10-28-00-768x368.png 768w\" sizes=\"auto, (max-width: 1010px) 100vw, 1010px\" \/><figcaption class=\"wp-element-caption\">Input remapper permet de changer la fonctionnalit\u00e9 d&rsquo;une touche<\/figcaption><\/figure>\n\n\n\n<p>Probl\u00e8me :&nbsp;toutes les touches du miniclavier sont vues comme des <code>x<\/code>, et sont donc indif\u00e9renci\u00e9es.<\/p>\n\n\n\n<p>Il est visiblement n\u00e9cessaire de configurer\/corriger une couche plus \u00abbasse\u00bb du pilote de ce clavier.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>ch57x-keyboard-tool<\/strong><\/h2>\n\n\n\n<p>Une recherche sur le num\u00e9ro de classe HID (<strong>1189:8890<\/strong>) <a href=\"https:\/\/duckduckgo.com\/?q=HID+1189%3A8890&amp;t=newext&amp;atb=v420-1__&amp;ia=web\">dans duckduckgo<\/a> fait apparaitre des projets github permettant de piloter des clavier <code><a href=\"https:\/\/wch-ic.com\/products\/CH573.html\">ch57x<\/a><\/code>. Les deux projets suivant semble \u00eatre int\u00e9ressants:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/kriomant\/ch57x-keyboard-tool\">ch57x-keyboard-tool<\/a>: Projet qui supporte toute la game des macro-keyboard trouv\u00e9s sur aliexpress<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/devkev\/hid-minikb-libusb\">hid-minikb-libusb<\/a>:&nbsp;Projet qui semble se cantonner au 3&#215;1 boutons + potentiom\u00e8tre. Ce projet semble maintenu que par une seule personne.<\/li>\n<\/ul>\n\n\n\n<p>Le projet ch57x-keyboard-tool semble \u00eatre le plus abouti \u00e0 premi\u00e8re vue. On peut m\u00eame t\u00e9l\u00e9charger une release compil\u00e9 pour x86_64:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code lang=\"\" class=\"hljs language-javascript \">$ cd ~<span class=\"hljs-regexp\">\/T\u00e9l\u00e9chargement\/<\/span>\n$ wget https:<span class=\"hljs-comment\">\/\/github.com\/kriomant\/ch57x-keyboard-tool\/releases\/download\/v1.2.4\/ch57x-keyboard-tool-x86_64-unknown-linux-gnu.tar.gz<\/span>\n$ mkdir \/opt\/ch57x-keyboard-tool\n$ cd \/opt\/ch57x-keyboard-tool\n$ tar zxvf ~<span class=\"hljs-regexp\">\/T\u00e9l\u00e9chargements\/<\/span>ch57x-keyboard-tool-x86_64-unknown-linux-gnu.tar.gz\n$ .\/ch57x-keyboard-tool \n<span class=\"hljs-attr\">Usage<\/span>: ch57x-keyboard-tool &#91;OPTIONS] &lt;COMMAND&gt;\n\nCommands:\n  show-keys  Show supported keys and modifiers\n  validate   Validate key mappings config on stdin\n  upload     Upload key mappings <span class=\"hljs-keyword\">from<\/span> stdin to device\n  led        Select LED backlight mode\n  help       Print <span class=\"hljs-keyword\">this<\/span> message or the help <span class=\"hljs-keyword\">of<\/span> the given subcommand(s)\n\n<span class=\"hljs-attr\">Options<\/span>:\n  -h, --help  Print help information\n\nInternal options (use <span class=\"hljs-keyword\">with<\/span> caution):\n      --vendor-id &lt;VENDOR_ID&gt;                &#91;<span class=\"hljs-keyword\">default<\/span>: <span class=\"hljs-number\">4489<\/span>]\n      --product-id &lt;PRODUCT_ID&gt;              &#91;<span class=\"hljs-keyword\">default<\/span>: <span class=\"hljs-number\">34960<\/span>]\n      --address &lt;ADDRESS&gt;                    \n      --endpoint-address &lt;ENDPOINT_ADDRESS&gt;\n\n\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Un fichier de configuration en yaml est fourni <code>example-mapping.yaml<\/code>, il faut au minimum \u00e9diter le nombre et le type de touches :<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code lang=\"\" class=\"hljs language-javascript \">orientation: normal\n<span class=\"hljs-attr\">rows<\/span>: <span class=\"hljs-number\">1<\/span>\n<span class=\"hljs-attr\">columns<\/span>: <span class=\"hljs-number\">3<\/span>\n<span class=\"hljs-attr\">knobs<\/span>: <span class=\"hljs-number\">1<\/span>\n<span class=\"hljs-attr\">layers<\/span>:\n  - buttons:\n      - &#91;<span class=\"hljs-string\">\"e\"<\/span>, <span class=\"hljs-string\">\"f\"<\/span>, <span class=\"hljs-string\">\"g\"<\/span>]\n    <span class=\"hljs-attr\">knobs<\/span>:\n      - ccw: <span class=\"hljs-string\">'wheelup'<\/span>\n        <span class=\"hljs-attr\">press<\/span>: <span class=\"hljs-string\">'click'<\/span>\n        <span class=\"hljs-attr\">cw<\/span>: <span class=\"hljs-string\">'wheeldown'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Langage du code\u00a0:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Puis valider la configuration :<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">$ sudo .\/ch57x-keyboard-tool validate &lt; y-3-buttons-mapping.yaml\nconfig is valid \ud83d\udc4c<\/code><\/span><\/pre>\n\n\n<p>Si la configuration est valide on la charge dans l&rsquo;appareil :<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code lang=\"\" class=\"hljs \">$ sudo .\/ch57x-keyboard-tool upload &lt; my-3-buttons-mapping.yaml\n$ pe,<\/code><\/span><\/pre>\n\n\n<p>Le truc fonctionne nickel. Par contre si vous \u00eates un gros nerd comme moi et que votre clavier n&rsquo;est pas configur\u00e9 en azerty (qwerty m\u00eame) alors le mapping sera \u00e0 revoir en fonction du votre (<a href=\"https:\/\/bepo.fr\/wiki\/Accueil\">b\u00e9po chez moi<\/a> \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai investi claqu\u00e9 du pognon inutilement dans un mini clavier 3 boutons + un potar chez aliexpress. Mon but est d&rsquo;ajouter des fonctionnalit\u00e9s hors clavier \u00abstandard\u00bb pour actionner le micro quand je parle par exemple. Au branchement le clavier est &hellip; <a href=\"http:\/\/www.fabienm.eu\/wordpress\/2024\/03\/18\/configuration-dun-clavier-3-boutons-sous-linux\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[212,361,360,19],"class_list":["post-2272","post","type-post","status-publish","format-standard","hentry","category-non-classe","tag-bricolage","tag-ch57x","tag-clavier","tag-linux"],"_links":{"self":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/2272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/comments?post=2272"}],"version-history":[{"count":13,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/2272\/revisions"}],"predecessor-version":[{"id":2287,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/2272\/revisions\/2287"}],"wp:attachment":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/media?parent=2272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/categories?post=2272"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/tags?post=2272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}