Comment supprimer le délai de verrouillage des majuscules sur le clavier en aluminium Apple MacBook Pro lors du démarrage sur Linux

32

Le MacBook Pro d'Apple a un léger retard sur la touche de verrouillage des majuscules . C'est-à-dire que la touche de verrouillage des majuscules doit être maintenue légèrement plus longue que la normale pour enregistrer la pression de touche requise pour activer le verrouillage des majuscules.

C'est super ennuyeux. Quelqu'un sait-il comment l'empêcher de se produire?

(Ci-dessus copié à partir de stackoverflow car il y était fermé comme "hors sujet".)

Pour plus de détails: Apple considère qu'il s'agit d'une fonctionnalité et leur article de la base de connaissances ne révèle pas comment désactiver ce délai.

Cependant, j'ai des raisons de croire qu'il est possible de le faire.

Notamment, j'ai constaté que, du moins d'après mon expérience, si vous remappiez la touche de verrouillage des majuscules sur Mac OS X (dans Préférences Système .. Clavier .. Touches de modification), et par exemple mappez-la sur Control, le délai disparaîtra pendant que je suis connecté à Mac OS X.

Mon problème est que le délai persiste lorsque je démarre dans Ubuntu Linux, et dans ce contexte, même lorsque je remappe la touche Caps Lock sur Control, le délai est toujours présent.

Donc, la question est: comment Apple désactive-t-il le retard, et plus important encore, comment peut-on reproduire cet acte dans le contexte d'une installation Linux sur l'ordinateur portable?

Mise à jour: il existe un fil sur le superutilisateur qui peut fournir des solutions de contournement. Je n'ai pas encore essayé les suggestions (à savoir: (1) activer / désactiver CapsLock-NoAction et (2) une mise à niveau du firmware). Je ne peux pas dire à partir du contexte de ce fil si les solutions de contournement ont été testées sur une installation Ubuntu.

pnkfelix
la source
Je n'ai jamais remarqué cela auparavant, mais j'ai joué avec le mien et je peux voir ce que tu veux dire. Si vous appuyez trop rapidement sur la touche de verrouillage des majuscules, cela ne fait rien. Je n'ai jamais trouvé de problème auparavant, mais j'ai juste essayé de désactiver / réactiver l'astuce de la touche de verrouillage des majuscules et cela l'a rendu instantané! maintenant, peu importe rapidement, j'appuie sur la touche, elle active toujours le verrouillage des majuscules. Très étrange!
tom1990
J'ai toujours pensé que je devenais fou: p Je peux voir son avantage, mais dans certaines situations, cela m'énerve vraiment. Ce serait bien de savoir si c'est possible!
OrangeBox
En effet, l'astuce de désactivation / réactivation du verrouillage des majuscules (du côté de Mac OS X) semble faire disparaître le problème une fois que l'on redémarre ensuite sur Linux. Mais il n'est pas clair pour moi si l'effet est permanent - j'ai laissé ma machine hors tension pendant un certain temps (des semaines ou peut-être même plus d'un mois), et quand je l'ai démarré directement sur Linux ce matin, il semblait que le le retard était revenu. Toujours assez mystérieux pour moi.
pnkfelix
Donc, juste pour vérifier, il ne semble pas y avoir de correctif pour Linux pour ce problème?
Mike HR
1
Voici un correctif qui fonctionne pour macOS et peut être exécuté sous macOS.
fel1x

Réponses:

22

J'ai compris comment faire ça. En bref, vous devez envoyer un "Feature Report" composé des octets 0x9, 0x0, 0x0, 0x0au périphérique de hidraw approprié en tant que root.

Vous pouvez trouver le bon périphérique de hidraw avec cette commande:

dmesg | grep Apple | grep Keyboard | grep input0 | tail -1 | sed -e 's/.*hidraw\([[:digit:]]\+\).*/\/dev\/hidraw\1/'

Le code pour envoyer le paquet de contrôle magique est ci-dessous. Compile avec gcc, prend le périphérique hidraw comme paramètre. Donc, le flux entier est:

  1. enregistrez le code ci-dessous sous disable-capslock-delay.c
  2. gcc -o disable-capslock-delay disable-capslock-delay.c
  3. HIDDEVICE=$(dmesg | grep Apple | grep Keyboard | grep input0 | tail -1 | sed -e 's/.*hidraw\([[:digit:]]\+\).*/\/dev\/hidraw\1/')
  4. sudo ./disable-capslock-delay $HIDDEVICE

Les étapes 3 et 4 doivent être effectuées à chaque redémarrage (ou débranchez et rebranchez le clavier); vous pouvez les mettre dans /etc/rc.local(ou l'équivalent de votre distribution) pour les exécuter au démarrage (vous n'avez pas besoin sudodans ce cas; et vous voudrez peut-être déplacer le binaire compilé dans /usr/local/sbin/ou quelque chose).

J'ai effectué quelques vérifications de sécurité pour l'ID du fournisseur, l'ID de l'appareil et la longueur du descripteur de rapport. Vous devrez peut-être changer les deux derniers si votre modèle diffère du mien.


#include <linux/hidraw.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) { if (argc != 2 || strcmp(argv[1], "-h") == 0) { printf("Pass a hidraw device as the first and only parameter!\n"); printf("You may find the right device with:\n"); printf(" dmesg | grep Apple | grep Keyboard | grep input0 | tail -1 | " "sed -e 's/.hidraw\([[:digit:]]\+\)./\/dev\/hidraw\1/'\n"); return 1; } int fd, i, res, desc_size = 0; char buf[256]; struct hidraw_devinfo info; char *device = argv[1]; fd = open(device, O_RDWR | O_NONBLOCK); if (fd < 0) { perror("Unable to open device"); return 1; } memset(&info, 0, sizeof(info)); memset(buf, 0, sizeof(buf)); // Get Report Descriptor Size res = ioctl(fd, HIDIOCGRDESCSIZE, &desc_size); if (res < 0) { perror("HIDIOCGRDESCSIZE"); } if (desc_size != 75) { printf("Error: unexpected descriptor size %d; you've probably got " "the wrong hidraw device!\n", desc_size); return 1; } // Get Raw Info res = ioctl(fd, HIDIOCGRAWINFO, &info); if (res < 0) { perror("HIDIOCGRAWINFO"); } else { if (info.vendor != 0x05ac) { printf("Error: Wrong vendor ID, make sure you got the right " "hidraw device!\n"); return 1; } if (info.product != 0x0250) { printf("Warning: Unknown product ID 0x%x!\n", info.product); } } // Get Feature buf[0] = 0x09; // Report Number res = ioctl(fd, HIDIOCGFEATURE(256), buf); if (res < 0) { perror("HIDIOCGFEATURE"); } else { printf("HID Feature Report (before change):\n\t"); for (i = 0; i < res; i++) printf("%hhx ", buf[i]); puts("\n"); } // Set Feature buf[0] = 0x09; // Report Number buf[1] = 0x00; // Report data buf[2] = 0x00; // padding buf[3] = 0x00; // padding res = ioctl(fd, HIDIOCSFEATURE(4), buf); if (res < 0) { perror("HIDIOCSFEATURE"); } else { printf("Caps lock delay disabled.\n"); } // Get Feature buf[0] = 0x09; // Report Number res = ioctl(fd, HIDIOCGFEATURE(256), buf); if (res < 0) { perror("HIDIOCGFEATURE"); } else { printf("HID Feature Report (after change):\n\t"); for (i = 0; i < res; i++) printf("%hhx ", buf[i]); puts("\n"); } close(fd); return 0; }

jmrk
la source
2
Cela a l'air génial, merci! par intérêt, comment avez-vous trouvé cela (les octets magiques à envoyer)?
Mike HR
6
@ MikeH-R: J'ai passé une journée à apprendre comment fonctionne le protocole HID: essentiellement, les appareils décrivent les paquets de données ("rapports") qu'ils comprennent. Malheureusement, le clavier Apple ne mentionne pas le rapport en question dans ses descripteurs HID. Cependant, j'ai trouvé un vidage des descripteurs HID d'un clavier interne d'un MacBook que quelqu'un avait posté et qui contenait la bonne description du rapport, et j'ai simplement essayé et j'ai constaté que cela fonctionne également pour le clavier filaire externe.
jmrk
Oh wow, je dois essayer ça!
pnkfelix
(Il semble que j'obtienne au moins des tailles de descripteurs différentes. Je vais quand même les ajuster et voir comment cela fonctionne.)
pnkfelix
Je vais accepter cette réponse car elle est la plus proche de reconnaître réellement le problème tel que décrit et de lui fournir une solution crédible (même si dans mon cas, les tailles des descripteurs sont différentes).
pnkfelix
13

Voici le correctif pour macOS Sierra.

Allez dans Préférences Système > Accessibilité

Lorsque la fenêtre d'accessibilité est ouverte - sur la partie gauche de la fenêtre - cliquez sur Clavier

Ensuite, il y aura les 2 options - pour les touches persistantes et pour les touches lentes - cliquez sur la case à côté des touches lentes pour l'activer - puis cliquez sur le Options...bouton - une nouvelle fenêtre apparaîtra avec un curseur pour modifier le délai d'acceptation - par défaut c'est au milieu. Faites glisser le bouton à fond vers la gauche, afin que ce soit le plus court possible.

Maintenant, cela devrait être corrigé. Je n'ai pas expérimenté pour voir si le correctif persiste au redémarrage, mais j'espère que ce sera le cas.

michelle
la source
Je me suis excité pendant une seconde, mais quand je suis allé voir ici, les touches lentes n'étaient pas activées, cela ne fonctionne donc que pour les personnes qui utilisent les touches lentes :( un jour, je récupérerai ma clé de verrouillage des majuscules!
Bradley
4
Cela le réduit un peu, mais il est toujours plus lent d'activer le verrouillage des majuscules que de le désactiver. De plus, le taux de répétition des touches ralentit jusqu'à une analyse, même si le paramètre est activé le plus rapidement. (Sierra 10.12.6)
scipilot
1
ce n'est pas une bonne solution au problème actuel car il ralentit la réparation des clés et vous ne pouvez plus supprimer correctement les éléments lorsque vous maintenez le retour arrière.
Denialos
7

EDIT: Cela semble être une question d'atterrissage populaire pour les utilisateurs qui cherchent à supprimer le retard sur la touche de verrouillage des majuscules dans OS X. Depuis OS X Mojave,

Accédez aux Préférences Système; Accessibilité; Clavier; activer les touches lentes et aller dans les options; baissez le délai au minimum. Le seul effet secondaire indésirable que j'ai remarqué jusqu'à présent est une action de retour arrière lente lorsque vous le maintenez enfoncé. En général, j'utilise CMD + A / CMD + SHIFT + L / R / CMD + SHIFT + CTRL + L / R de toute façon, ce n'est donc pas un gros problème.

Depuis El Capitan et plus tôt,

La solution est assez difficile à atteindre et vous ne sauriez pas vraiment que vous l'avez supprimée à moins que vous n'essayiez spécifiquement de vous en débarrasser en premier lieu. La façon dont je vais vous montrer est purement pour la dernière version (actuelle) d'OSX, Yosemite. Cependant, vous pouvez absolument appliquer cette méthode aux versions précédentes et futures.

La solution est simple. Si vous accédez au clavier dans les préférences système via le logo Apple dans le coin supérieur gauche, vous atteindrez cet écran! [Entrez la description de l'image ici] [1]

[1]: http://i.stack.imgur.com/DIbZD.png

Si vous cliquez sur le bouton des touches de modification, vous pouvez modifier la fonction de chacune des touches programmables. Tout ce que vous avez à faire est de régler la touche de verrouillage des majuscules sur aucune action et d'appuyer sur ok pour vous ramener au menu du clavier. Une fois cela fait, retournez dans les touches de modification et changez la touche de verrouillage des majuscules en verrouillage des majuscules et cela supprimera le retard! Notez que ce correctif reste en place jusqu'à ce que vous dormiez, redémarriez ou éteigniez l'appareil. À quel moment le délai est rétabli.

Ce sont des correctifs étranges, et la question se pose de savoir pourquoi ils ne fournissent pas d'option pour supprimer le retard lorsque ce correctif est purement basé sur un logiciel. Mais bon, au moins il y a un moyen!

Heureux chavirement.

Bradley
la source
Comment cela résout-il mon problème sous Linux?
pnkfelix
Pour être plus clair: la question d'origine disait: "... le délai disparaît lorsque je suis connecté à Mac OS X. Mon problème est que le délai persiste lorsque je démarre sous Ubuntu Linux, et dans ce contexte, même lorsque je remappe le Touche de verrouillage des majuscules pour contrôler, le retard est toujours présent. "
pnkfelix
Ah! Je vois, je suppose que je devrais lire les questions OP plus attentivement. J'ai trouvé sur OSX que le fait de délier complètement la touche majuscules et de relier a résolu le problème. Peut-être que le retard persiste parce que vous vous engagez à contrôler à la place? Cela vaut la peine d'essayer tout si vous n'avez pas encore de solution :)
Bradley
1
Cette approche n'a eu aucun effet pour moi. (Sierra 10.12.6)
scipilot
3

Allez dans les préférences système> accessibilité> clavier> activez les touches lentes> modifiez le délai d'acceptation complètement à gauche (court)! Cela a fonctionné pour moi.

Thomas Carl-Erik Jönsson
la source
Décrivez-vous une étape dans Mac OS X? Comment cela résout-il le problème dans Ubuntu Linux, comme décrit dans la question?
pnkfelix
Oui correct. Je ne connais pas Ubuntu Linux, désolé. Je pense que je résous le titre principal "Comment supprimer le délai de verrouillage des majuscules sur le clavier en aluminium Apple MacBook Pro *" et peut-être la question "Comment Apple désactive-t-il le délai". :-) Cordialement Thomas, Suède * Cette question est la raison pour laquelle j'ai trouvé et lu cette bande de roulement et rien n'y a aidé alors je l'ai résolu moi-même: P
Thomas Carl-Erik Jönsson
2
Selon la réponse de Michelle: Cela le réduit un peu, mais il est toujours plus lent d'activer le verrouillage des majuscules que de le désactiver. De plus, le taux de répétition des touches ralentit jusqu'à une analyse, même si le paramètre est activé le plus rapidement. (Sierra 10.12.6)
scipilot
2

Je sais avec certitude que le délai de verrouillage des majuscules est une caractéristique du micrologiciel sur le clavier lui-même - vous pouvez donc être sûr que le retard se produit, quel que soit le système d'exploitation que le clavier pilote actuellement.

Je sais également qu'Apple n'offre pas de chemin pour flasher le firmware à un niveau inférieur, nous devrons donc tous attendre que quelqu'un possédant une expérience matérielle suffisante blogue les outils et les étapes qu'ils ont exécutés pour inciter le matériel à charger l'ancien firmware (ou fournir ce qui ressemble à un firmware plus récent qui régresse le délai de fonctionnement sans délai.)

Je m'excuse pour la non-réponse, mais le chemin pour y parvenir est bien éclairé et cela peut aider les autres à prendre des mesures (sélectionner un clavier plus ancien - ou s'abstenir de mettre à jour le firmware) en attendant pendant que nous attendons une vraie solution à mettre en œuvre une minuterie courte ou nulle sur la touche de verrouillage des majuscules.

bmike
la source
2
Un détail qui m'embrouille dans votre réponse: dites-vous qu'il est faux que lorsque l'on remappe la touche de verrouillage des majuscules dans Mac OS X, le délai disparaisse? (Je ne sais pas comment interpréter autrement votre déclaration "le délai de temporisation se produit quel que soit le système d'exploitation que le clavier pilote en ce moment"; mais cela contredit mon expérience directe - à moins qu'Apple n'utilise une API non documentée au micrologiciel pour ajuster le timing?)
pnkfelix
J'ai remappé le mien sur ESC et la prise légèrement plus longue est toujours nécessaire. Je l'ai fait en utilisant une application tierce appelée Seil, cependant, et non via une fonctionnalité intégrée à OSX. Ennuyeux, bien sûr - leurs développeurs n'utilisent-ils pas Vim? Décidément.
intuition
0

La solution «basculer CapsLock-NoAction off / on» à laquelle l'OP fait référence fonctionne à la fois sur mon clavier Mac filaire et sur mon clavier MacBookPro. Bradley dit que cela ne fonctionne que sur Yosemite, mais je l'ai utilisé avec succès sur Snow Leopard (10.6.8) et Mavericks (10.9.5). J'ai également testé cela à l'intérieur d'une machine virtuelle Kubuntu et le verrouillage des majuscules a continué de fonctionner correctement à l'intérieur de la machine virtuelle.

  • Ouvrez la préférence du système de clavier et cliquez sur Modifier Keys...:

entrez la description de l'image ici

  • Définissez la clé de verrouillage des majuscules sur No Action, puis cliquez sur OK:

                    entrez la description de l'image ici

  • Cliquez à Modifier Keys...nouveau sur , définissez la clé de verrouillage des majuscules sur Caps Lock, puis cliquez sur OK:

                    entrez la description de l'image ici

Cela ne reste en vigueur qu'au prochain redémarrage.

Neil Steiner
la source
1
Cela n'a eu aucun effet pour moi. (Sierra 10.12.6, clavier USB Mac et interne sur MBPro)
scipilot