36 votos

Cómo eliminar el retraso del bloqueo de mayúsculas en el teclado de aluminio del Apple MacBook Pro

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

Esto es súper molesto. ¿Alguien sabe cómo evitar que ocurra?

(Copiado de arriba de stackoverflow ya que se cerró allí como "off topic").

Para profundizar en el tema: Apple considera esto una característica, y su artículo de la base de conocimientos no revela cómo desactivar este retraso.

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

En particular, he comprobado que, al menos en mi experiencia, si reasignas la tecla de bloqueo de mayúsculas en Mac OS X (en Preferencias del Sistema Teclado Teclas modificadoras), y por ejemplo la asignas a Control, entonces el retraso se va mientras estoy conectado a Mac OS X.

Mi problema es que el retraso se mantiene cuando arranco en Ubuntu Linux, y en ese contexto, incluso cuando reasigno la tecla Caps Lock a Control, el retraso sigue presente.

Así que la pregunta es: ¿Cómo desactiva Apple 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 sobre el portátil?

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

24voto

jmrk Puntos 161

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

Puedes encontrar el dispositivo hidraw correcto con este comando:

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

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

  1. guardar el código de abajo 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\1/')
  4. sudo ./disable-capslock-delay $HIDDEVICE

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

He puesto algunas comprobaciones de seguridad para el ID del proveedor, el ID del dispositivo y la longitud del descriptor del informe. Puede que tengas que cambiar los dos últimos si tu 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\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;
}

16voto

Brandon Puntos 1

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

Ir a Preferencias del sistema > Accesibilidad

Cuando la ventana de accesibilidad está abierta - en la parte izquierda de la ventana - haga clic en Teclado

A continuación, habrá 2 opciones - para las teclas fijas, y para las teclas lentas - haga clic en la casilla junto a las teclas lentas para habilitarlo - a continuación, haga clic en el Options... se abrirá una nueva ventana con un control deslizante para cambiar el tiempo de aceptación, que por defecto está en el centro. Deslice el botón hacia la izquierda, para que sea el menor tiempo posible.

Ahora debería estar arreglado. No he experimentado para ver si el arreglo se mantiene al reiniciar, pero tengo la esperanza de que lo haga.

7voto

Bradley Puntos 121

EDIT: Esta parece ser una pregunta popular de aterrizaje para los usuarios que buscan eliminar el retraso en la tecla de bloqueo de mayúsculas en OS X. A partir de OS X Mojave,

Ir a Preferencias del Sistema; Accesibilidad; Teclado; activar Teclas Lentas y entra en opciones; baja el retardo al mínimo. El único efecto secundario no deseado que he notado hasta ahora es la lentitud de la acción de retroceso al mantenerla presionada. Generalmente uso CMD+A / CMD+SHIFT+L/R / CMD+SHIFT+CTRL+L/R así que no es un gran problema.

A partir de El Capitán y anteriores,

La solución es bastante elusiva, y no se sabría realmente que que lo has eliminado a menos que hayas intentado deshacerte de él en primer lugar. de deshacerse de él. La forma en que voy a mostrar es puramente para la (actual) última versión de OSX, Yosemite. Sin embargo, usted puede absolutamente aplicar este método a las versiones anteriores y futuras.

La solución es sencilla. Si navegas hasta Teclado en las a través del logo de la Apple en la esquina superior izquierda, llegarás a llegarás a esta pantalla

enter image description here

Si hace clic en el botón de las teclas modificadoras, podrá cambiar la función de cada una de las teclas que son programables. Todo lo que tienes que hacer es hacer es poner la tecla de bloqueo de mayúsculas a ninguna acción y pulsar ok para volver al menú del teclado. Una vez hecho esto, vuelve a las teclas modificadoras y cambie la tecla de bloqueo de mayúsculas de nuevo a bloqueo de mayúsculas y esto eliminará el retraso. Tenga en cuenta que esta solución se mantiene hasta que usted duerme, reiniciar o apagar el dispositivo. En ese momento el retardo se se restablece.

Son arreglos extraños, y se plantea la pregunta de por qué no proporcionan una opción para eliminar el retraso cuando este arreglo es puramente de software. Pero bueno, ¡al menos hay una manera!

Felizmente, el taponamiento.

3voto

Ve a las preferencias del sistema > accesibilidad > teclado > activar las teclas lentas > cambiar el retardo de aceptación completamente a la izquierda (corto). Esto me ha funcionado.

2voto

Oskar Puntos 1242

Sé con certeza que el retardo del bloqueo de mayúsculas es una característica del firmware del propio teclado, así que puedes estar seguro de que el retardo se produce independientemente del sistema operativo que esté manejando el teclado en ese momento.

También sé que Apple no ofrece una ruta para flashear el firmware a un nivel inferior, así que todos tendremos que esperar hasta que alguien con suficiente experiencia en hardware publique en el blog 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 retroceda el retraso a como funcionaba antes sin ningún retraso).

Me disculpo por la falta de respuesta, pero el camino para lograr esto está bien iluminado y puede ayudar a otros a tomar medidas (seleccionar un teclado más antiguo - o abstenerse de actualizar el firmware) mientras esperamos una solución real para implementar un temporizador corto o no en la tecla de bloqueo de mayúsculas.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X