Як зняти затримку блокування заглушок на алюмінієвій клавіатурі Apple MacBook Pro під час завантаження в Linux


32

MacBook Pro від Apple має невелику затримку на клавіші блокування кришок . Тобто клавішу блокування ковпачків потрібно утримувати трохи довше, ніж звичайно, щоб зареєструвати натискання клавіш, необхідне для замикання блокування ковпачків.

Це супер дратує. Хтось знає, як не допустити цього?

(Вище скопійовано з stackoverflow, оскільки він там був закритий як "off topic".)

Щоб детальніше зупинитися: Apple вважає цю особливість, а стаття їх бази знань не розкриває, як відключити цю затримку.

Однак у мене є підстави вважати, що це можна зробити.

Примітно, я виявив, що, принаймні зі свого досвіду, якщо ви перезавантажуєте клавішу "Caps-Блокування" на Mac OS X (в System Preferences .. Клавіатура .. Клавіші модифікатора), і, наприклад, відображати її в Control, тоді затримка минає поки я ввійшов у Mac OS X.

Моя проблема полягає в тому, що затримка залишається, коли я завантажуюся в Ubuntu Linux, і в цьому контексті, навіть коли я перезавантажую клавішу Caps Lock для управління, затримка все ще присутня.

Отже, питання полягає в тому, як Apple відключає затримку, і що ще важливіше, як можна повторити цей акт у контексті встановлення Linux на ноутбуці?

Оновлення: на суперпоширенні є нитка, яка може забезпечити обхідні шляхи. Я ще не пробував там пропозицій (а саме: (1) вимкнення / вимкнення CapsLock-NoAction та (2) оновлення мікропрограмного забезпечення). Я не можу сказати з контексту цього потоку, чи були вирішені обхідні шляхи на установці Ubuntu.


Я ніколи цього не помічав, але в мене була гра з моєю, і я бачу, що ти маєш на увазі. Якщо натиснути клавішу блокування шапки занадто швидко, вона нічого не робить. Я ніколи не знаходив це проблемою раніше, але просто спробував відключити / повторно ввімкнути фокус клавіші Caps Lock, і це зробило це моментально! тепер незалежно від швидкого натискання клавіші він завжди перемикає блокування ковпачків. Дуже дивно!
tom1990

Завжди думав, що я просто збожеволів: p Я бачу його користь, але в деяких ситуаціях це мене справді дратує. Було б добре знати, чи можливо це!
OrangeBox

Дійсно, фокус відключення / повторного ввімкнення шапки блокування (на стороні Mac OS X), здається, не усуває проблему, як тільки згодом перезавантажується в Linux. Але мені незрозуміло, чи ефект є постійним - я залишив свою машину вимкненою на деякий час (тижні або, можливо, навіть більше місяця), і коли я вранці завантажив її прямо до Linux, здавалося, що затримка повернулася. Все ще досить загадково для мене.
pnkfelix

Отже, лише щоб перевірити, чи не існує виправлення Linux для цієї проблеми?
Майк HR

1
Ось виправлення, яке працює для macOS і може запускатися під macOS.
fel1x

Відповіді:


22

Я зрозумів, як це зробити. Коротше кажучи, ви повинні надіслати "Звіт про особливості", що складається з байтів, 0x9, 0x0, 0x0, 0x0до відповідного пристрою hidraw як root.

Ви можете знайти потрібний пристрій переслідування за допомогою цієї команди:

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

Код для відправлення магічного пакета управління знаходиться нижче. Компілюється з gcc, приймає пристрій hidraw як параметр. Отже, весь потік:

  1. збережіть код нижче як 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

Кроки 3 та 4 потрібно виконувати щоразу, коли ви перезавантажуєтесь (або відключайте штепсель та повторно підключайте клавіатуру); ви можете помістити їх у /etc/rc.local(або еквівалент вашого дистрибутива), щоб виконати їх під час завантаження ( sudoу цьому випадку вам не потрібно ; і, можливо, ви хочете перенести складений бінарний файл у /usr/local/sbin/щось подібне).

Я вклав кілька перевірок безпеки щодо ідентифікатора постачальника, ідентифікатора пристрою та довжини дескриптора звіту. Можливо, вам доведеться змінити останні два, якщо ваша модель відрізняється від моєї.


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


2
Це чудово виглядає, дякую! з інтересу, як ви це виявили (магічні байти, необхідні для надсилання)?
Майк HR

6
@ MikeH-R: Я провів день, вивчаючи, як працює протокол HID: по суті, пристрої описують, які пакети даних ("звіти") вони розуміють. На жаль, клавіатура Apple не згадує відповідний звіт у своїх дескрипторах HID. Однак я знайшов дамп дескрипторів HID внутрішньої клавіатури MacBook, які хтось розмістив, які містять правильний опис звіту, і я просто спробував це і виявив, що він працює і для зовнішньої дротової клавіатури.
jmrk

О, ух, я мушу спробувати це!
pnkfelix

(Я, здається, отримую різні розміри дескрипторів, як мінімум. Все-таки я їх відрегулюю і побачу, як це виходить.)
pnkfelix

Я прийму цю відповідь, оскільки це найближче до фактичного визнання проблеми як описаної та надання правдоподібного її вирішення (навіть якщо в моєму випадку розміри дескрипторів відрізняються).
pnkfelix

13

Ось виправлення для macOS Sierra.

Перейдіть у розділ Налаштування системи > Доступність

Коли вікно доступності відкрито - у лівій частині вікна натисніть Клавіатура

Тоді з'являться два варіанти - для липких клавіш та для повільних клавіш - натисніть поле поруч із повільними клавішами, щоб увімкнути це - потім натисніть Options...кнопку - у новому вікні з’явиться повзунок, щоб змінити затримку прийняття - за замовчуванням це посередині. Просуньте кнопку вліво, щоб це було найкоротшим часом.

Тепер це слід виправити. Не експериментували, чи не вдається виправити помилку при перезапуску, але сподіваюся, що це станеться.


Я хвилювався на секунду, але коли я пішов шукати сюди, повільні клавіші не ввімкнули, тому працює лише для людей, які використовують повільні клавіші :( одного дня я поверну свій дорогоцінний ключ блокування ковпачків!
Бредлі,

4
Це дещо зменшує його, але все ж повільніше вмикати шапки-блокування, ніж вимикати. Також швидкість повторення клавіш сповільнюється до повзання, навіть якщо налаштування увімкнено найшвидше. (Сьєрра 10.12.6)
вчений пілот

1
це не є правильним вирішенням проблеми, оскільки вона сповільнює keyrepat, і ви більше не зможете належним чином видалити речі, утримуючи задню область.
Деніалос

7

EDIT: Це, здається, є популярним питанням посадки для користувачів, які хочуть зняти затримку на клавіші блокування заглушок в ОС X. Що стосується OS X Mojave,

Перейдіть до системних налаштувань; Доступність; Клавіатура; включити повільні клавіші та перейти до параметрів; зменшіть затримку до мінімуму. Єдиний небажаний побічний ефект, який я помітив до цього часу, - це повільна дія в зворотному просторі, коли його утримують. Як правило, я використовую CMD + A / CMD + SHIFT + L / R / CMD + SHIFT + CTRL + L / R так чи інакше, тому це не велика проблема.

Як в Ель-Капітан, так і раніше,

Рішення досить невловиме, і ви насправді не знаєте, що ви його видалили, якщо б ви спеціально не намагалися його позбутися. Я буду вам показувати виключно для (останньої) останньої версії OSX, Yosemite. Однак ви можете абсолютно застосувати цей метод до попередніх та майбутніх версій.

Рішення просте. Якщо ви перейдете до клавіатури в системних налаштуваннях через логотип яблука у верхньому лівому куті, ви дістанетесь до цього екрану! [Введіть опис зображення тут] [1]

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

Якщо натиснути кнопку модифікаторних клавіш, ви зможете змінити функцію кожної з програмованих клавіш. Все, що вам потрібно зробити, - це встановити клавішу блокування заглушок без жодних дій і натиснути ОК, щоб повернути вас до меню клавіатури. Після закінчення поверніться до клавіш модифікатора та змініть клавішу "caps lock" назад на "lock lock", і це зніме затримку! Зауважте, що це виправлення залишається в силі, поки ви не спите, перезавантажуєте або не вимикаєте пристрій. У цей момент затримка відновлюється.

Вони є дивними виправленнями, і виникає питання, чому вони не надають можливість зняти затримку, коли це виправлення базується лише на програмному забезпеченні. Але ей, принаймні спосіб є!

Щасливі ковзання.


Як це вирішує мою проблему в Linux?
pnkfelix

Щоб було зрозуміліше: в оригінальному запитанні було сказано: "... затримка минає під час входу в Mac OS X. Моя проблема полягає в тому, що затримка залишається під час завантаження в Ubuntu Linux, і в цьому контексті, навіть коли я перевстановлюю Клавіша Caps Lock для керування, затримка все ще присутня. "
pnkfelix

Ах! Я бачу, я думаю, я повинен уважніше читати питання щодо ОП. На OSX я виявив, що розв’язання клавіші "caps" повністю та повторне прив'язування вирішило проблему. Можливо, затримка залишається, бо замість цього ви зобов’язуєтесь керувати? Варто спробувати все, якщо у вас ще немає роботи :)
Бредлі

1
Такий підхід для мене не мав жодного ефекту. (Сьєрра 10.12.6)
вчений пілот

3

Перейдіть до системних налаштувань> доступність> клавіатура> увімкнути повільні клавіші> змінити затримку прийняття повністю вліво (коротко)! Це працювало для мене.


Ви описуєте крок у Mac OS X? Як це вирішує проблему в Ubuntu Linux, як описано в питанні?
pnkfelix

Так, правильно. Я не знаю Ubuntu Linux, вибачте. Я думаю, що я вирішую головну назву "Як зняти затримку блокування заглушок на алюмінієвій клавіатурі Apple MacBook Pro *" і, можливо, питання "Як Apple відключає затримку". :-) З найкращими побажаннями Томас, Швеція * Це питання є причиною того, що я знайшов і прочитав цей протектор, і нічого не допомогло, тому я вирішив його сам: P
Томас Карл-Ерік Йонссон

2
Відповідно до відповіді Мішеля: Це трохи зменшує його, але все ж повільніше вмикати шапки-блокування, ніж вимикати. Також швидкість повторення клавіш сповільнюється до повзання, навіть якщо налаштування увімкнено найшвидше. (Сьєрра 10.12.6)
вчений пілот

2

Я точно знаю, що затримка блокування заглушок є особливістю вбудованого програмного забезпечення на самій клавіатурі - тому ви можете бути впевнені, що час затримки відбувається незалежно від того, яку ОС клавіатура веде в даний момент.

Я також знаю, що Apple не пропонує шляху прошивки мікропрограмного забезпечення на нижчий рівень, тому нам усім доведеться чекати, поки хтось із достатньою кількістю апаратного досвіду блогів інструменти та кроки, які вони виконали, щоб обманути апаратне забезпечення завантаження старішої прошивки (або забезпечити що виглядає як новіша прошивка, яка регенерує затримку до того, як вона працювала раніше без жодних затримок.)

Прошу вибачення за невідповідь, але шлях до цього добре освітлений, і це може допомогти іншим вжити заходів (вибравши старішу клавіатуру - або утримавшись від оновлення мікропрограмного забезпечення) в середній час, поки ми будемо чекати реального рішення для впровадження короткий або без таймера на клавіші блокування шапки.


2
Один деталь, про який я плутаюсь у вашій відповіді: Ви говорите, що це неправда, що коли перезаписуєте клавішу cap-lock у Mac OS X, затримка минає? (Я не знаю, як інакше інтерпретувати ваше твердження: "час затримки трапляється незалежно від того, яка ОС працює клавіатурою в даний момент"; але це суперечить моєму прямому досвіду - якщо тільки Apple не використовує якийсь недокументований API для прошивки для налаштування терміни?)
pnkfelix

У мене шаблони перероблені на ESC, і дещо довше утримання все ще потрібно. Я зробив це за допомогою стороннього додатка під назвою Seil, але не через будь-яку функціональність, вбудовану в OSX. Дратівливо, щоб бути впевненим - чи не розробники використовують Vim? Гез.
інтуїтивно,

0

Рішення "включення / ввімкнення CapsLock-NoAction off / on", яке стосується ОП, працює як на моїй проводовій клавіатурі Mac, так і на моїй клавіатурі MacBookPro. Бредлі каже, що це працює лише на Йосеміті, але я його успішно використовував на Snow Leopard (10.6.8) та Mavericks (10.9.5). Я також перевірив це всередині Kubuntu VM і Caps Lock продовжував правильно працювати всередині VM.

  • Відкрийте налаштування системи клавіатури та натисніть на Modifier Keys...:

введіть тут опис зображення

  • Встановіть для клавіші Caps Lock No Actionта натисніть OK:

                    введіть тут опис зображення

  • Клацніть Modifier Keys...ще раз, встановіть клавішу Caps Lock Caps Lockі натисніть OK:

                    введіть тут опис зображення

Це залишається в силі до наступного перезавантаження.


1
Це не мало для мене ефекту. (Sierra 10.12.6, клавіатура Mac USB та внутрішня версія MBPro)
науковець
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.