Cómo eliminar el retraso de bloqueo de mayúsculas en el teclado de aluminio de Apple MacBook Pro cuando se arranca en Linux

28
  

El MacBook Pro de Apple tiene un ligero retraso en la tecla de bloqueo de mayúsculas .   Es decir, la tecla de bloqueo de mayúsculas debe mantenerse presionada un poco más.   Lo normal para registrar la pulsación de tecla necesaria para activar el bloqueo de mayúsculas.

     

Esto es super molesto. ¿Alguien sabe cómo evitar que suceda?

(Copiado anteriormente de stackoverflow como se cerró allí como "fuera de tema".)

Para elaborar más: Apple considera que esta es una característica, y su artículo de la base de conocimientos no revela cómo deshabilitar este retraso.

Sin embargo, tengo razones para creer que es posible hacerlo.

Notablemente, he encontrado que, al menos en mi experiencia, si vuelve a asignar la tecla de bloqueo de mayúsculas en Mac OS X (en Preferencias del sistema ... Teclado .. Teclas de modificación), y por ejemplo. asignarlo a Control, luego el retraso desaparece mientras estoy conectado a Mac OS X.

Mi problema es que el retraso se mantiene cuando inicio en Ubuntu Linux, y en ese contexto, incluso cuando reasigno la tecla Bloq Mayús al control, el retraso sigue presente.

Entonces, la pregunta es: ¿Cómo está Apple deshabilitando el retraso y, lo que es más importante, cómo se puede replicar ese acto en el contexto de una instalación de Linux en la parte superior de la computadora portátil?

Actualización: hay un hilo en superusuario que puede proporcionar soluciones alternativas. Todavía no he probado las sugerencias (a saber: (1) activar / desactivar CapsLock-NoAction, y (2) una actualización de firmware). No puedo decir por el contexto de ese hilo si las soluciones han sido probadas en una instalación de Ubuntu.

    
pregunta pnkfelix 06.02.2013 - 13:41

6 respuestas

19

He descubierto cómo hacer esto. En resumen, debe enviar un "Informe de características" que consiste en los bytes 0x9, 0x0, 0x0, 0x0 al dispositivo de hidraw apropiado como root.

Puede encontrar el dispositivo hidraw correcto con este comando:

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

El código para enviar el paquete de control mágico está debajo. Compila con gcc, toma el dispositivo hidraw como parámetro. Así que todo el flujo es:

  1. guarda el siguiente código como 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

Los pasos 3 y 4 deben realizarse cada vez que reinicie (o desenchufe y vuelva a enchufar el teclado); puede ponerlos en /etc/rc.local (o el equivalente de su distro) para ejecutarlos en el inicio (no necesita sudo en ese caso; y es posible que desee mover el binario compilado a /usr/local/sbin/ o algo así).

He realizado algunas comprobaciones de seguridad para la ID del proveedor, la ID del dispositivo y la longitud del descriptor del informe. Es posible que deba cambiar los dos últimos si su modelo difiere del mío.


#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; }

    
respondido por el jmrk 12.08.2015 - 19:04
12

Aquí está la solución para macOS Sierra.

Vaya a Preferencias del sistema > Accesibilidad

Cuando la ventana de accesibilidad está abierta, en la parte izquierda de la ventana, haga clic en Keyboard

Luego estarán las 2 opciones: para las teclas adhesivas y para las teclas lentas: haga clic en la casilla junto a las teclas lentas para habilitarla, luego haga clic en el botón Options... : aparecerá una nueva ventana. cree un control deslizante para cambiar el retraso de aceptación; por defecto, está en el medio. Deslice el botón completamente hacia la izquierda para que sea el menor tiempo posible.

Ahora debería estar arreglado. No he experimentado para ver si la solución se mantiene al reiniciar, pero espero que así sea.

    
respondido por el michelle 24.11.2016 - 00:31
7

EDITAR: OS X Sierra ha 'arreglado' esta solución para el retraso de bloqueo de mayúsculas intencional que proporcionan para aparentemente evitar el problema de presionarlo accidentalmente mientras se escribe. Todavía no hay una solución conocida, se actualizará cuando encuentre una!

EDITAR: Parece que hay personas que vienen de Google que intentan solucionar genéricamente el error de retraso de bloqueo de mayúsculas. ¡Esta solución también funciona en El Capitán!

En primer lugar, permítame decirle que definitivamente hay una forma de eliminar el retraso del bloqueo de mayúsculas. Yo mismo prefiero usar el bloqueo de mayúsculas sobre el cambio solo desde una perspectiva de comodidad, ya que el bloqueo de las tapas está más cerca de mi dedo meñique que la mayor parte del tiempo.

La solución es bastante esquiva, y realmente no sabría que la eliminó a menos que estuviera tratando específicamente de deshacerse de ella en primer lugar. La forma en que lo voy a mostrar es puramente para la última versión (actual) de OSX, Yosemite. Sin embargo, absolutamente puede aplicar este método a versiones anteriores y futuras.

La solución es simple. Si navega a Teclado en las preferencias del sistema a través del logotipo de Apple en la esquina superior izquierda, llegará a esta pantalla

Si hace clic en el botón de las teclas modificadoras, puede cambiar la función de cada una de las teclas programables. Todo lo que tiene que hacer es configurar la tecla de bloqueo de mayúsculas a ninguna acción y presionar OK para regresar al menú del teclado. Una vez hecho esto, vuelva a las teclas modificadoras y cambie la tecla de bloqueo de mayúsculas de nuevo a bloqueo de mayúsculas y esto eliminará la demora. Tenga en cuenta que esta solución permanece en su lugar hasta que usted duerma, reinicie o apague el dispositivo. En ese momento se restablece el retraso.

Es una solución extraña, y plantea la pregunta de por qué no ofrecen una opción para eliminar el retraso cuando esta solución se basa exclusivamente en el software. Pero oye, ¡al menos hay un camino!

Encapuchados felices.

    
respondido por el Bradley 15.05.2015 - 12:56
3

Ir a las preferencias del sistema > accesibilidad > teclado > habilitar teclas lentas > cambio de aceptación retardo todo el camino a la izquierda (corto)! Esto funcionó para mí.

    
respondido por el Thomas Carl-Erik Jönsson 17.11.2016 - 10:23
2

Sé con certeza que el retraso del bloqueo de mayúsculas es una característica del firmware en el propio teclado, por lo que puede estar seguro de que la demora se produce sin importar a qué sistema operativo esté accediendo el teclado en este momento.

También sé que Apple no ofrece una ruta para actualizar el firmware a un nivel inferior, por lo que todos tendremos que esperar hasta que alguien con suficiente experiencia en el hardware envíe las herramientas y los pasos que realizó para engañar al hardware para que cargue el firmware más antiguo. (o proporcione lo que parece un firmware más nuevo que hace retroceder la demora a cómo funcionó antes sin demora alguna).

Pido disculpas por la falta de respuesta, pero el camino para lograrlo está bien iluminado y puede ayudar a otros a actuar (seleccionar un teclado más antiguo, o abstenerse de actualizar el firmware) mientras tanto, mientras esperamos una respuesta real. Solución para implementar un temporizador corto o no en la tecla de bloqueo de mayúsculas.

    
respondido por el bmike 13.04.2013 - 18:09
0

La solución "activar / desactivar CapsLock-NoAction" a la que se refiere el OP funciona tanto en mi teclado Mac con cable como en mi MacBookPro. Bradley dice que esto solo funciona en Yosemite, pero lo he usado con éxito en Snow Leopard (10.6.8) y Mavericks (10.9.5). También probé esto dentro de una máquina virtual Kubuntu y el bloqueo de mayúsculas siguió funcionando correctamente dentro de la máquina virtual.

  • Abra la preferencia del sistema del teclado y haga clic en Modifier Keys... :

  • EstablezcalateclaBloqMayúsenNoActionyhagaclicenOK:

  • VuelveahacerclicenModifierKeys...,configuralateclaBloqMayúsenCapsLockyhazclicenOK:

Esto solo permanecerá vigente hasta el próximo reinicio.

    
respondido por el Neil Steiner 07.08.2015 - 18:35

Lea otras preguntas en las etiquetas