So entfernen Sie die Feststelltaste für die Apple MacBook Pro Aluminium-Tastatur beim Booten unter Linux

32

Apples MacBook Pro hat eine leichte Verzögerung bei der Feststelltaste . Das heißt, die Feststelltaste muss etwas länger als normal gedrückt werden, um den zum Aktivieren der Feststelltaste erforderlichen Tastendruck zu registrieren.

Das ist super nervig. Weiß jemand, wie er das verhindern kann?

(Oben aus Stackoverflow kopiert, da es dort als "Off Topic" geschlossen wurde.)

Weitere Informationen: Apple erachtet dies als eine Funktion, und im Knowledge Base-Artikel wird nicht beschrieben, wie diese Verzögerung deaktiviert werden kann.

Ich habe jedoch Grund zu der Annahme, dass dies möglich ist.

Bemerkenswert ist , habe ich festgestellt , dass, zumindest in meiner Erfahrung, wenn Sie die Caps-Lock - Taste auf Mac OS X neu zuordnen (in den Systemeinstellungen .. Tastatur .. Modifier Keys), und zB es zu Steuerplan, dann ist die Verzögerung weggeht während ich bei Mac OS X angemeldet bin.

Mein Problem ist, dass die Verzögerung beim Booten von Ubuntu Linux bestehen bleibt. In diesem Zusammenhang ist die Verzögerung auch dann noch vorhanden, wenn ich die Feststelltaste erneut der Steuerung zuordne.

Die Frage ist also: Wie deaktiviert Apple die Verzögerung und was noch wichtiger ist, wie kann man diese Aktion im Kontext einer Linux-Installation auf dem Laptop replizieren?

Update: Es gibt einen Thread für den Superuser , der möglicherweise Problemumgehungen bietet. Ich habe die Vorschläge dort noch nicht ausprobiert (nämlich: (1) Umschalten von CapsLock-NoAction aus / ein und (2) ein Firmware-Upgrade). Ich kann aus dem Kontext dieses Threads nicht erkennen, ob die Problemumgehungen auf einer Ubuntu-Installation getestet wurden.

pnkfelix
quelle
Ich habe das noch nie bemerkt, aber ich habe mit meinem gespielt und ich kann sehen, was du meinst. Wenn Sie zu schnell auf die Feststelltaste tippen, geschieht nichts. Ich habe es noch nie als Problem empfunden, aber ich habe nur versucht, den Feststelltastentrick zu deaktivieren / wieder zu aktivieren. jetzt egal schnell ich drücke die taste es schaltet immer die feststelltaste um. Sehr eigenartig!
tom1990
Habe immer gedacht, ich wäre nur verrückt geworden: p Ich kann seinen Nutzen sehen, aber in manchen Situationen nervt es mich wirklich. Wäre gut zu wissen, wenn es möglich ist!
OrangeBox
In der Tat scheint der Trick zum Deaktivieren / erneuten Aktivieren der Feststelltaste (auf der Mac OS X-Seite) das Problem zu beseitigen, sobald anschließend ein Neustart unter Linux durchgeführt wird. Es ist mir jedoch nicht klar, ob der Effekt dauerhaft ist - ich habe meinen Computer für einige Zeit (Wochen oder sogar länger als einen Monat) ausgeschaltet gelassen, und als ich ihn heute Morgen direkt auf Linux gebootet habe, sah es so aus, als wäre das nicht der Fall Verspätung war zurückgekehrt. Für mich immer noch ziemlich mysteriös.
PNKFELIX
Nur um zu überprüfen, scheint es für dieses Problem keinen Fix für Linux zu geben?
Mike HR
1
Hier ist ein Fix, der für macOS funktioniert und unter macOS ausgeführt werden kann.
fel1x

Antworten:

22

Ich habe herausgefunden, wie das geht. Kurz gesagt, Sie müssen einen "Feature Report", der aus den Bytes 0x9, 0x0, 0x0, 0x0besteht, als Root an das entsprechende Hidraw-Gerät senden.

Mit diesem Befehl finden Sie das richtige Hidraw-Gerät:

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

Der Code zum Senden des Magic Control-Pakets ist unten angegeben. Kompiliert mit gcc, verwendet das Hidraw-Gerät als Parameter. Der gesamte Ablauf ist also:

  1. Speichern Sie den Code unten als 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

Die Schritte 3 und 4 müssen bei jedem Neustart ausgeführt werden (oder wenn Sie die Tastatur aus- und wieder einstecken). Sie können sie in /etc/rc.local(oder das Äquivalent Ihrer Distribution) einfügen, um sie beim Booten auszuführen ( sudoin diesem Fall ist dies nicht erforderlich ; möglicherweise möchten Sie die kompilierte Binärdatei in /usr/local/sbin/oder in eine andere Richtung verschieben).

Ich habe einige Sicherheitsüberprüfungen für Hersteller-ID, Geräte-ID und Berichtsdeskriptorlänge durchgeführt. Sie müssen möglicherweise die beiden letzteren ändern, wenn Ihr Modell von meinem abweicht.


#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
quelle
2
Das sieht toll aus, danke! Wie haben Sie das gefunden (die magischen Bytes, die gesendet werden müssen)?
Mike HR
6
@ MikeH-R: Ich habe einen Tag damit verbracht zu lernen, wie das HID-Protokoll funktioniert: Im Wesentlichen beschreiben Geräte, welche Datenpakete ("Berichte") sie verstehen. Leider erwähnt die Apple-Tastatur den betreffenden Bericht in ihren HID-Deskriptoren nicht. Ich fand jedoch einen Speicherauszug der HID-Deskriptoren einer internen Tastatur eines MacBook, die von jemandem veröffentlicht wurden und die die richtige Berichtsbeschreibung enthielten. Ich habe das einfach versucht und festgestellt, dass es auch für die externe kabelgebundene Tastatur funktioniert.
16.
Oh wow ich muss das ausprobieren!
PNKFELIX
(Ich scheine zumindest unterschiedliche Deskriptorgrößen zu haben. Trotzdem werde ich sie anpassen und sehen, wie es funktioniert.)
pnkfelix
Ich werde diese Antwort akzeptieren, da sie dem tatsächlichen Erkennen des beschriebenen Problems und dem Bereitstellen einer glaubwürdigen Lösung am nächsten kommt (auch wenn in meinem Fall die Deskriptorgrößen unterschiedlich sind).
PNKFELIX
13

Hier ist das Update für macOS Sierra.

Gehen Sie zu Systemeinstellungen > Barrierefreiheit

Wenn das Eingabehilfenfenster geöffnet ist, klicken Sie im linken Teil des Fensters auf Tastatur

Dann gibt es die 2 Optionen - für Sticky Keys und für Slow Keys - klickt auf das Kästchen neben Slow Keys, um es zu aktivieren - dann klickt auf die Options...Schaltfläche - ein neues Fenster wird mit einem Schieberegler zum Ändern der Akzeptanzverzögerung angezeigt - standardmäßig Das ist in der Mitte. Schieben Sie den Knopf ganz nach links, so dass es die kürzestmögliche Zeit ist.

Jetzt sollte es behoben sein. Habe noch nicht experimentiert, um zu sehen, ob der Fix beim Neustart bleibt, aber ich hoffe, dass es so sein wird.

michelle
quelle
Ich habe mich eine Sekunde lang aufgeregt, aber als ich hier nachgesehen habe, waren langsame Tasten nicht aktiviert. Das funktioniert nur für Leute, die langsame Tasten verwenden :( Eines Tages werde ich meine kostbare Feststelltaste wieder haben!
Bradley
4
Dadurch wird der Wert zwar etwas verringert, das Aktivieren der Feststelltaste ist jedoch langsamer als das Deaktivieren. Auch die Schlüsselwiederholungsrate verlangsamt sich auf einen Crawl, obwohl die Einstellung am schnellsten ist. (Sierra 10.12.6)
Scipilot
1
Dies ist keine richtige Lösung für das vorliegende Problem, da dadurch die Tastatureingabe verlangsamt wird und Sie keine Inhalte mehr ordnungsgemäß löschen können, wenn Sie die Rücktaste gedrückt halten.
Denialos
7

BEARBEITEN: Dies scheint eine beliebte Landing-Frage für Benutzer zu sein, die die Verzögerung der Feststelltaste in OS X entfernen möchten. Ab OS X Mojave

Gehen Sie zu den Systemeinstellungen. Zugänglichkeit; Tastatur; aktiviere Slow Keys und gehe auf Optionen ein; Reduzieren Sie die Verzögerung auf das Minimum. Der einzige unerwünschte Nebeneffekt, den ich bisher bemerkt habe, ist die langsame Rücktaste, wenn ich sie gedrückt halte. Im Allgemeinen verwende ich CMD + A / CMD + UMSCHALT + L / R / CMD + UMSCHALT + STRG + L / R, es ist also kein großes Problem.

Ab El Capitan und früher

Die Lösung ist ziemlich schwer zu finden, und Sie würden nicht wirklich wissen, dass Sie sie entfernt haben, es sei denn, Sie haben ausdrücklich versucht, sie überhaupt loszuwerden. Die Art, wie ich Ihnen zeigen werde, ist nur für die (aktuelle) neueste Version von OSX, Yosemite. Sie können diese Methode jedoch auf frühere und zukünftige Versionen anwenden.

Die Lösung ist einfach. Wenn Sie in den Systemeinstellungen über das Apple-Logo in der oberen linken Ecke zu Tastatur navigieren, gelangen Sie zu diesem Bildschirm! [Bildbeschreibung hier eingeben] [1]

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

Wenn Sie auf die Schaltfläche mit den Zusatztasten klicken, können Sie die Funktion jeder der programmierbaren Tasten ändern. Alles, was Sie tun müssen, ist, die Feststelltaste auf "Keine Aktion" zu setzen und "OK" zu drücken, um zum Tastaturmenü zurückzukehren. Wenn Sie fertig sind, kehren Sie zu den Modifikatortasten zurück und ändern Sie die Feststelltaste wieder in Feststelltaste. Dadurch wird die Verzögerung aufgehoben! Beachten Sie, dass dieses Update an Ort und Stelle bleibt, bis Sie das Gerät in den Energiesparmodus versetzen, neu starten oder herunterfahren. An diesem Punkt wird die Verzögerung wieder hergestellt.

Es handelt sich um seltsame Korrekturen, und es stellt sich die Frage, warum keine Option zum Entfernen der Verzögerung bereitgestellt wird, wenn diese Korrektur rein softwarebasiert ist. Aber hey, zumindest gibt es einen Weg!

Viel Spaß beim Kentern.

Bradley
quelle
Wie löst das mein Problem unter Linux?
pnkfelix
Um es klarer zu machen: Die ursprüngliche Frage lautete: "... die Verzögerung verschwindet, während ich unter Mac OS X angemeldet bin. Mein Problem ist, dass die Verzögerung beim Booten von Ubuntu Linux und in diesem Zusammenhang auch beim erneuten Zuordnen von" "erhalten bleibt Feststelltaste auf Steuerung, die Verzögerung ist noch vorhanden. "
pnkfelix
Ah! Ich denke, ich sollte OP-Fragen genauer lesen. Unter OSX stellte ich fest, dass das vollständige Aufheben der Bindung der Feststelltaste und das erneute Binden das Problem lösten. Vielleicht bleibt die Verzögerung bestehen, weil Sie stattdessen an die Kontrolle gebunden sind? Es lohnt sich, alles zu versuchen, wenn Sie noch keine Lösung gefunden haben :)
Bradley
1
Dieser Ansatz hatte für mich keine Wirkung. (Sierra 10.12.6)
Scipilot
3

Gehen Sie zu den Systemeinstellungen> Eingabehilfen> Tastatur> Langsame Tasten aktivieren> Akzeptanzverzögerung ganz nach links ändern (kurz)! Das hat bei mir funktioniert.

Thomas Carl-Erik Jönsson
quelle
Beschreiben Sie einen Schritt in Mac OS X? Wie löst dies das Problem in Ubuntu Linux, wie in der Frage beschrieben?
PNKFELIX
Ja richtig. Ich kenne Ubuntu Linux nicht, sorry. Ich denke, ich löse den Haupttitel "So entfernen Sie die Verzögerung der Feststelltaste auf der Apple MacBook Pro-Aluminiumtastatur *" und möglicherweise die Frage "Wie deaktiviert Apple die Verzögerung?". :-) Mit freundlichen Grüßen Thomas, Schweden * Diese Frage ist der Grund, warum ich dieses Profil gefunden und gelesen habe, und nichts hat geholfen. Ich habe es selbst gelöst: P
Thomas Carl-Erik Jönsson
2
Laut der Antwort von Michelle: Dies verringert den Wert ein wenig, aber es ist immer noch langsamer, die Feststelltaste einzuschalten, als sie auszuschalten. Auch die Schlüsselwiederholungsrate verlangsamt sich auf einen Crawl, obwohl die Einstellung am schnellsten ist. (Sierra 10.12.6)
Scipilot
2

Ich weiß mit Sicherheit, dass die Verzögerung der Feststelltaste eine Funktion der Firmware auf der Tastatur selbst ist. Sie können also sicher sein, dass die Verzögerungszeit ungeachtet des aktuellen Betriebssystems der Tastatur abläuft.

Ich weiß auch, dass Apple keinen Weg anbietet, um die Firmware auf eine niedrigere Ebene zu flashen, so dass wir alle warten müssen, bis jemand mit ausreichender Hardwareerfahrung die Tools und Schritte bloggt, die er ausgeführt hat, um die Hardware zum Laden der älteren Firmware zu verleiten (oder bereitzustellen) Wie sieht es mit einer neueren Firmware aus, die die Verzögerung auf das bisherige Niveau zurückführt?

Ich entschuldige mich für die Nichtbeantwortung, aber der Weg, dies zu erreichen, ist gut beleuchtet und kann anderen helfen, in der Zwischenzeit Maßnahmen zu ergreifen (Auswahl einer älteren Tastatur - oder Verzicht auf ein Upgrade der Firmware), während wir auf die Implementierung einer echten Lösung warten Ein kurzer oder kein Timer auf der Feststelltaste.

bmike
quelle
2
Ein Detail, über das ich in Ihrer Antwort verwirrt bin: Wollen Sie damit sagen, dass es falsch ist, wenn man die Feststelltaste in Mac OS X neu zuordnet, dass die Verzögerung wegfällt? (Ich weiß nicht, wie ich sonst Ihre Aussage interpretieren soll: "Das Delay-Timing passiert, egal auf welchem ​​Betriebssystem die Tastatur gerade fährt"; dies widerspricht jedoch meiner direkten Erfahrung - es sei denn, Apple verwendet eine undokumentierte API, um die Firmware anzupassen Timing?)
PNKFELIX
Ich habe meine auf ESC umgestellt und der etwas längere Halt ist noch nötig. Ich habe dies mit einer Drittanbieter-App namens Seil gemacht und nicht über eine in OSX integrierte Funktionalität. Ärgerlich, um sicher zu sein - verwenden ihre Entwickler nicht Vim? Meine Güte.
Intuited
0

Die "Umschalten von CapsLock-NoAction aus / ein" -Lösung, auf die sich das OP bezieht, funktioniert sowohl auf meiner kabelgebundenen Mac-Tastatur als auch auf meiner MacBookPro-Tastatur. Bradley sagt, dass dies nur bei Yosemite funktioniert, aber ich habe es erfolgreich bei Snow Leopard (10.6.8) und Mavericks (10.9.5) eingesetzt. Ich habe dies auch in einer Kubuntu-VM getestet, und die Feststelltaste funktionierte in der VM weiterhin ordnungsgemäß.

  • Öffnen Sie die Systemeinstellung Tastatur und klicken Sie auf Modifier Keys...:

Bildbeschreibung hier eingeben

  • Stellen Sie die Feststelltaste auf No Actionund klicken Sie auf OK:

                    Bildbeschreibung hier eingeben

  • Klicken Sie Modifier Keys...erneut auf, setzen Sie die Feststelltaste auf Caps Lockund klicken Sie auf OK:

                    Bildbeschreibung hier eingeben

Dies bleibt nur bis zum nächsten Neustart wirksam.

Neil Steiner
quelle
1
Das hatte für mich keine Auswirkung. (Sierra 10.12.6, Mac USB-Tastatur und intern auf MBPro)
Scipilot