Come rimuovere il ritardo di blocco maiuscolo sulla tastiera in alluminio Apple MacBook Pro quando si avvia su Linux

29

Apple's MacBook Pro has a slight delay on the caps lock key. That is, the caps lock key has to be held down slightly longer than normal to register the key press required to engage the caps lock.

This is super annoying. Does anyone know how to stop it from happening?

(Sopra copiato da stackoverflow come è stato chiuso lì come "off topic".)

Per approfondire: Apple ritiene che questa sia una funzionalità e il loro articolo sulla knowledge base non rivela come disabilitare questo ritardo.

Tuttavia, ho motivo di credere che sia possibile farlo.

In particolare, ho trovato che, almeno nella mia esperienza, se si rimappasse il tasto Caps-Lock su Mac OS X (in Preferenze di Sistema .. Tastiera .. Tasti modificatori), e ad es. mappalo su Control, quindi il delay si spegne mentre sono connesso a Mac OS X.

Il mio problema è che il ritardo rimane quando avvio in Ubuntu Linux, e in quel contesto, anche quando rimappando il tasto Caps Lock su Control, il ritardo è ancora presente.

Quindi, la domanda è: in che modo Apple sta disabilitando il ritardo e, ancora più importante, come può replicare quell'azione nel contesto di un'installazione Linux sul laptop?

Aggiornamento: c'è una discussione su superutente che può fornire soluzioni alternative. Non ho ancora provato i suggerimenti lì (vale a dire: (1) attivazione / disattivazione di CapsLock-NoAction e (2) aggiornamento del firmware). Non posso dire dal contesto di quel thread se i workaround sono stati testati su un'installazione di Ubuntu.

    
posta pnkfelix 06.02.2013 - 13:41
fonte

6 risposte

19

Ho capito come farlo. In breve, devi inviare un "Report delle caratteristiche" composto da byte 0x9, 0x0, 0x0, 0x0 al dispositivo hidraw appropriato come root.

Puoi trovare il dispositivo hidraw giusto con questo comando:

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

Il codice per inviare il pacchetto di controllo magico è sotto. Compila con gcc, prende il dispositivo hidraw come parametro. Quindi l'intero flusso è:

  1. salva il codice sotto come 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/')
  4. sudo ./disable-capslock-delay $HIDDEVICE

I passaggi 3 e 4 devono essere eseguiti ogni volta che si riavvia (o scollegare e ricollegare la tastiera); puoi metterli in /etc/rc.local (o l'equivalente della tua distro) per eseguirli all'avvio (in questo caso non hai bisogno di sudo , e potresti voler spostare il file binario compilato in /usr/local/sbin/ o qualcosa).

Ho inserito alcuni controlli di sicurezza per ID del fornitore, ID del dispositivo e lunghezza del descrittore del rapporto. Potrebbe essere necessario cambiare gli ultimi due se il tuo modello è diverso dal mio.


#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/'\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; }

    
risposta data 12.08.2015 - 19:04
fonte
12

Ecco la correzione per macOS Sierra.

Vai a Preferenze di sistema > Accessibilità

Quando la finestra di accessibilità è aperta, nella parte sinistra della finestra, fai clic su Tastiera

Poi ci saranno le 2 opzioni - per i tasti permanenti, e per i tasti lenti - fai clic sulla casella accanto ai tasti lenti per attivarla - quindi fai clic sul pulsante Options... - verrà visualizzata una nuova finestra trovare un cursore per modificare il ritardo di accettazione - per impostazione predefinita questo è nel mezzo. Fai scorrere il pulsante completamente a sinistra, in modo che sia il più breve possibile.

Ora dovrebbe essere corretto. Non ho sperimentato per vedere se la correzione rimane al riavvio, ma sono fiducioso che lo farà.

    
risposta data 24.11.2016 - 00:31
fonte
7

MODIFICA: OS X Sierra ha "risolto" questa correzione per il ritardo intenzionale del blocco maiuscole che forniscono per evitare apparentemente il problema di premerlo accidentalmente durante la digitazione. Nessuna soluzione nota, verrà aggiornata quando ne trovo una!

EDIT: sembra che ci siano persone che arrivano qui da Google che provano a riparare genericamente il bug di ritardo di caps lock. Questa correzione funziona anche in El Capitan!

Prima di tutto lascia che ti dica che c'è sicuramente un modo per rimuovere il ritardo del blocco maiuscole. Io personalmente preferisco usare il Caps Lock Over Shift solo dal punto di vista del comfort, con il blocco delle maiuscole che si avvicina al mio mignolo piuttosto che spostare la maggior parte del tempo.

La soluzione è abbastanza elusiva, e non sapresti davvero di averlo rimosso a meno che tu non stessi cercando in particolare di sbarazzartene. Il modo in cui ti mostrerò è puramente per l'ultima versione (attuale) di OSX, Yosemite. Tuttavia, puoi applicare questo metodo in modo assoluto alle versioni precedenti e future.

La soluzione è semplice. Se navighi su Tastiera nelle preferenze di Sistema tramite il logo Apple nell'angolo in alto a sinistra, raggiungerai questa schermata

Facendo clic sul pulsante dei tasti di modifica, è possibile modificare la funzione di ciascuno dei tasti programmabili. Tutto quello che devi fare è impostare il tasto di blocco maiuscole su nessuna azione e premere ok per tornare al menu della tastiera. Una volta fatto, torna nei tasti modificatori e cambia la chiave di blocco maiuscole in maiuscole e questo rimuoverà il ritardo! Si noti che questa correzione rimane attiva fino a quando non si è in grado di spegnere, riavviare o spegnere il dispositivo. A quel punto il ritardo viene ripristinato.

È una strana soluzione, e solleva la domanda perché non forniscono un'opzione per rimuovere il ritardo quando questa correzione è puramente basata sul software. Ma hey, almeno c'è un modo!

Happy capsing.

    
risposta data 15.05.2015 - 12:56
fonte
3

Vai alle preferenze di sistema > accessibilità > tastiera > abilita le chiavi lente > cambia il ritardo di accettazione fino a sinistra (breve)! Questo ha funzionato per me.

    
risposta data 17.11.2016 - 10:23
fonte
2

So per certo che il blocco del blocco maiuscolo è una funzionalità del firmware sulla tastiera stessa, quindi puoi essere certo che il ritardo si verificherà indipendentemente dal sistema operativo in uso al momento.

So anche che Apple non offre un percorso per aggiornare il firmware a un livello inferiore, quindi dovremo aspettare fino a quando qualcuno con esperienza hardware sufficiente bloccherà gli strumenti e i passaggi che hanno eseguito per ingannare l'hardware nel caricamento del firmware precedente (o fornire quello che sembra un firmware più recente che regredisce il ritardo a come ha funzionato prima senza alcun ritardo.)

Mi scuso per la mancata risposta, ma il percorso per farlo è ben illuminato e può aiutare gli altri ad agire (selezionando una vecchia tastiera - o astenendosi dall'aggiornare il firmware) nel frattempo mentre aspettiamo una vera soluzione per implementare un timer breve o nullo sul tasto BLOC MAIUSC.

    
risposta data 13.04.2013 - 18:09
fonte
0

La soluzione "toggling CapsLock-NoAction off / on" a cui fa riferimento l'OP funziona sia con la mia tastiera Mac cablata che con la mia tastiera MacBookPro. Bradley dice che funziona solo su Yosemite, ma l'ho usato con successo su Snow Leopard (10.6.8) e Mavericks (10.9.5). Ho anche testato questo all'interno di una VM di Kubuntu e Caps Lock ha continuato a funzionare correttamente all'interno della VM.

  • Apri la preferenza di sistema della tastiera e fai clic su Modifier Keys... :

  • ImpostailtastoBlocMaiuscsuNoActionefaiclicsuOK:

  • FainuovamenteclicsuModifierKeys...eimpostailtastoBlocMaiuscsuCapsLock,quindifaiclicsuOK:

Questo rimane valido fino al prossimo riavvio.

    
risposta data 07.08.2015 - 18:35
fonte

Leggi altre domande sui tag