Cách xóa độ trễ khóa mũ trên bàn phím nhôm Apple MacBook Pro khi khởi động Linux


32

MacBook Pro của Apple có một chút chậm trễ trên phím khóa mũ . Đó là, phím khóa mũ phải được giữ lâu hơn một chút so với bình thường để đăng ký nhấn phím cần thiết để tham gia khóa mũ.

Điều này là siêu khó chịu. Có ai biết làm thế nào để ngăn chặn nó xảy ra?

(Phía trên được sao chép từ stackoverflow khi nó được đóng ở đó dưới dạng "ngoài chủ đề".)

Để giải thích thêm: Apple coi đây là một tính năng và bài viết cơ sở kiến ​​thức của họ không tiết lộ cách vô hiệu hóa sự chậm trễ này.

Tuy nhiên, tôi có lý do để tin rằng có thể làm như vậy.

Đáng chú ý, tôi đã thấy rằng, ít nhất là theo kinh nghiệm của tôi, nếu bạn sử dụng lại phím khóa trên Mac OS X (trong Tùy chọn hệ thống .. Bàn phím .. Phím sửa đổi), và ví dụ ánh xạ nó tới Điều khiển, thì độ trễ sẽ biến mất trong khi tôi đăng nhập vào Mac OS X.

Vấn đề của tôi là sự chậm trễ vẫn còn khi tôi khởi động vào Ubuntu Linux và trong bối cảnh đó, ngay cả khi tôi sử dụng lại phím Caps Lock để Kiểm soát, sự chậm trễ vẫn còn.

Vì vậy, câu hỏi là: Làm thế nào Apple vô hiệu hóa sự chậm trễ, và quan trọng hơn, làm thế nào một người có thể sao chép hành động đó trong bối cảnh cài đặt Linux trên máy tính xách tay?

Cập nhật: Có một luồng trên superuser có thể cung cấp cách giải quyết. Tôi chưa thử các đề xuất ở đó (cụ thể là: (1) tắt / bật CapsLock-NoAction và (2) nâng cấp chương trình cơ sở). Tôi không thể biết từ ngữ cảnh của luồng đó liệu các cách giải quyết đã được kiểm tra trên bản cài đặt Ubuntu.


Tôi chưa bao giờ nhận thấy điều này trước đây, nhưng tôi đã có một vở kịch với tôi và tôi có thể thấy ý của bạn. Nếu bạn nhấn phím khóa mũ quá nhanh thì không có gì. Tôi chưa bao giờ thấy nó là một vấn đề trước đây nhưng chỉ cần thử vô hiệu hóa / kích hoạt lại thủ thuật khóa phím mũ và nó đã làm cho nó ngay lập tức! Bây giờ không có vấn đề gì nhanh chóng tôi nhấn phím nó luôn luôn bật nắp khóa. Rất lạ!
tom1990

Luôn nghĩ rằng tôi đang phát điên: p Tôi có thể thấy lợi ích của nó, nhưng trong một số tình huống, nó thực sự làm tôi khó chịu. Sẽ là tốt để biết nếu nó có thể!
OrangeBox

Thật vậy, thủ thuật vô hiệu hóa / kích hoạt lại mũ khóa (về phía Mac OS X), dường như sẽ khiến vấn đề biến mất một khi sau đó một lần nữa khởi động lại Linux. Nhưng tôi không rõ liệu hiệu ứng có phải là vĩnh viễn không - tôi đã tắt máy trong một thời gian (vài tuần hoặc thậm chí hơn một tháng) và khi tôi khởi động thẳng vào Linux sáng nay, có vẻ như sự chậm trễ đã trở lại. Vẫn còn khá bí ẩn đối với tôi.
pnkfelix

Vì vậy, chỉ để kiểm tra, dường như không có một bản sửa lỗi cho linux cho vấn đề này?
Mike HR

1
Đây là một bản sửa lỗi hoạt động cho macOS và có thể chạy trong macOS.
fel1x

Câu trả lời:


22

Tôi đã tìm ra cách để làm điều này. Nói tóm lại, bạn phải gửi "Báo cáo tính năng" bao gồm các byte 0x9, 0x0, 0x0, 0x0đến thiết bị hidraw thích hợp làm root.

Bạn có thể tìm đúng thiết bị hidraw bằng lệnh này:

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

Mã để gửi gói điều khiển ma thuật dưới đây. Biên dịch với gcc, lấy thiết bị hidraw làm tham số. Vì vậy, toàn bộ dòng chảy là:

  1. lưu mã dưới đây như 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

Bước 3 và 4 phải được thực hiện mỗi khi bạn khởi động lại (hoặc rút phích cắm và cắm lại bàn phím); bạn có thể đặt chúng vào /etc/rc.local(hoặc tương đương với distro của bạn) để thực thi chúng khi khởi động (bạn không cần sudotrong trường hợp đó và bạn có thể muốn chuyển nhị phân đã biên dịch sang /usr/local/sbin/hoặc một cái gì đó).

Tôi đã đưa vào một số kiểm tra an toàn cho ID nhà cung cấp, ID thiết bị và báo cáo độ dài mô tả. Bạn có thể phải thay đổi hai cái sau nếu mô hình của bạn khác với mô hình của tôi.


#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
Điều này có vẻ tuyệt vời, cảm ơn! Không quan tâm, làm thế nào bạn tìm thấy cái này (các byte ma thuật cần phải được gửi)?
Mike HR

6
@ MikeH-R: Tôi đã dành một ngày để tìm hiểu cách thức hoạt động của giao thức HID: về cơ bản, các thiết bị mô tả các gói dữ liệu ("báo cáo") mà chúng hiểu. Thật không may, bàn phím Apple không đề cập đến báo cáo được đề cập trong phần mô tả HID. Tuy nhiên, tôi đã tìm thấy một bản mô tả HID bàn phím bên trong của MacBook mà ai đó đã đăng có chứa mô tả báo cáo đúng và tôi chỉ đơn giản thử nó và thấy rằng nó cũng hoạt động cho bàn phím có dây bên ngoài.
jmrk

Oh wow tôi phải thử cái này!
pnkfelix

(Ít nhất là tôi có được các kích thước mô tả khác nhau, ít nhất là vậy. Tôi vẫn sẽ điều chỉnh chúng và xem nó hoạt động như thế nào.)
pnkfelix

Tôi sẽ chấp nhận câu trả lời này bởi vì nó gần nhất để thực sự thừa nhận vấn đề như được mô tả và cung cấp một giải pháp đáng tin cậy cho nó (mặc dù trong trường hợp của riêng tôi, kích thước mô tả là khác nhau).
pnkfelix

13

Đây là bản sửa lỗi cho macOS Sierra.

Chuyển đến Tùy chọn hệ thống > Trợ năng

Khi cửa sổ trợ năng mở - ở phần bên trái của cửa sổ - nhấp Bàn phím

Sau đó, sẽ có 2 tùy chọn - cho các phím dính và cho các phím chậm - nhấp vào hộp bên cạnh các phím chậm để bật nó - sau đó nhấp vào Options...nút - một cửa sổ mới sẽ xuất hiện một thanh trượt để thay đổi độ trễ chấp nhận - theo mặc định cái này ở giữa Trượt nút sang bên trái, để đó là thời gian ngắn nhất có thể.

Bây giờ nó sẽ được sửa chữa. Chưa thử nghiệm để xem liệu sửa chữa có còn khi khởi động lại không, nhưng tôi hy vọng rằng nó sẽ được.


Tôi đã rất phấn khích trong giây lát nhưng khi tôi đến đây, các phím chậm không được bật nên chỉ hoạt động cho những người sử dụng các phím chậm :( một ngày nào đó tôi sẽ lấy lại khóa mũ quý giá của mình!
Bradley

4
Điều này không làm giảm nó một chút, nhưng việc bật nắp khóa chậm hơn là tắt. Ngoài ra, tốc độ lặp lại của phím chậm lại khi thu thập dữ liệu, mặc dù cài đặt được bật nhanh nhất. (Sierra 10.12.6)
scipilot

1
đây không phải là một giải pháp thích hợp cho vấn đề hiện tại vì nó làm chậm quá trình gõ phím và bạn không còn có thể xóa nội dung chính xác khi giữ phím lùi.
Denialos

7

EDIT: Đây dường như là một câu hỏi hạ cánh phổ biến cho người dùng đang tìm cách loại bỏ độ trễ trên phím khóa mũ trong OS X. Kể từ OS X Mojave,

Đi đến Tùy chọn hệ thống; Khả năng tiếp cận; Bàn phím; bật Slow Keys và đi vào các tùy chọn; giảm độ trễ xuống mức tối thiểu Tác dụng phụ không mong muốn duy nhất tôi nhận thấy cho đến nay là hành động lùi chậm khi giữ nó. Nói chung, tôi sử dụng CMD + A / CMD + SHIFT + L / R / CMD + SHIFT + CTRL + L / R vì vậy nó không phải là một vấn đề lớn.

Kể từ El Capitan và trước đó,

Giải pháp khá khó nắm bắt và bạn sẽ không thực sự biết bạn đã loại bỏ nó trừ khi bạn đặc biệt cố gắng loại bỏ nó ngay từ đầu. Cách tôi sẽ chỉ cho bạn hoàn toàn dành cho phiên bản mới nhất (hiện tại) của OSX, Yosemite. Tuy nhiên, bạn hoàn toàn có thể áp dụng phương pháp này cho các phiên bản trước và tương lai.

Giải pháp rất đơn giản. Nếu bạn điều hướng đến Bàn phím trong tùy chọn Hệ thống thông qua biểu tượng táo ở góc trên cùng bên trái, bạn sẽ đến màn hình này! [Nhập mô tả hình ảnh tại đây] [1]

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

Nếu bạn nhấp vào nút phím bổ trợ, bạn có thể thay đổi chức năng của từng phím được lập trình. Tất cả bạn phải làm là đặt phím khóa mũ thành không có hành động và nhấn ok để đưa bạn trở lại menu bàn phím. Sau khi hoàn tất, quay trở lại các phím bổ trợ và thay đổi phím khóa mũ trở lại khóa mũ và điều này sẽ loại bỏ độ trễ! Lưu ý rằng bản sửa lỗi này vẫn được giữ nguyên cho đến khi bạn ngủ, khởi động lại hoặc tắt nguồn thiết bị. Tại thời điểm đó, sự chậm trễ được phục hồi.

Chúng là những bản sửa lỗi kỳ lạ và nó đặt ra câu hỏi tại sao chúng không cung cấp tùy chọn để loại bỏ sự chậm trễ khi bản sửa lỗi này hoàn toàn dựa trên phần mềm. Nhưng này, ít nhất là có một cách!

Chúc mừng mũ.


Làm thế nào để giải quyết vấn đề của tôi trong Linux?
pnkfelix

Để rõ ràng hơn: câu hỏi ban đầu cho biết: "... sự chậm trễ biến mất trong khi tôi đăng nhập vào Mac OS X. Vấn đề của tôi là sự chậm trễ vẫn còn khi tôi khởi động vào Ubuntu Linux, và trong bối cảnh đó, ngay cả khi tôi ánh xạ lại Phím Caps Lock để Kiểm soát, sự chậm trễ vẫn còn. "
pnkfelix

À! Tôi thấy, tôi đoán tôi nên đọc các câu hỏi OP cẩn thận hơn. Tôi đã tìm thấy trên OSX rằng việc bỏ ràng buộc phím mũ hoàn toàn và việc đóng lại đã giải quyết được vấn đề. Có lẽ sự chậm trễ vẫn còn bởi vì bạn ràng buộc để kiểm soát thay thế? Đáng để thử mọi thứ nếu bạn chưa có công việc xung quanh :)
Bradley

1
Cách tiếp cận này không có tác dụng đối với tôi. (Sierra 10.12.6)
scipilot

3

Chuyển đến tùy chọn hệ thống> khả năng truy cập> bàn phím> bật phím chậm> thay đổi độ trễ chấp nhận sang bên trái (ngắn)! Điều này làm việc cho tôi.


Bạn đang mô tả một bước trong Mac OS X? Làm thế nào để giải quyết vấn đề này trong Ubuntu Linux, như được mô tả trong câu hỏi?
pnkfelix

Vâng chính xác. Tôi không biết Ubuntu Linux, xin lỗi. Tôi nghĩ rằng tôi đang giải quyết tiêu đề chính "Cách loại bỏ độ trễ khóa mũ trên bàn phím nhôm Apple MacBook Pro *" và có thể là câu hỏi "Làm thế nào để Apple vô hiệu hóa độ trễ". :-) Trân trọng Thomas, Thụy Điển * Câu hỏi đó là lý do tôi tìm thấy và đọc được bước đi này và không có gì giúp tôi tự giải quyết: P
Thomas Carl-Erik Jönsson

2
Theo câu trả lời của Michelle: Điều này sẽ giảm đi một chút, nhưng việc bật nắp khóa vẫn chậm hơn so với tắt. Ngoài ra, tốc độ lặp lại của phím chậm lại khi thu thập dữ liệu, mặc dù cài đặt được bật nhanh nhất. (Sierra 10.12.6)
scipilot

2

Tôi biết chắc chắn rằng độ trễ khóa mũ là một tính năng của phần sụn trên chính bàn phím - vì vậy bạn có thể tin tưởng rằng thời gian trễ xảy ra cho dù bàn phím đang chạy hệ điều hành nào.

Tôi cũng biết rằng Apple không cung cấp đường dẫn để flash firmware xuống mức thấp hơn nên tất cả chúng ta sẽ phải đợi cho đến khi ai đó có đủ kinh nghiệm về phần cứng viết blog các công cụ và các bước họ thực hiện để lừa phần cứng tải firmware cũ hơn (hoặc cung cấp trông giống như một chương trình cơ sở mới hơn, hồi quy độ trễ cho cách thức hoạt động trước đó mà không có bất kỳ độ trễ nào.)

Tôi xin lỗi vì đã không trả lời, nhưng con đường để thực hiện điều này vẫn sáng và nó có thể giúp người khác hành động (chọn một bàn phím cũ hơn - hoặc kiềm chế nâng cấp phần sụn) trong khi chúng tôi chờ đợi một giải pháp thực sự một bộ đếm thời gian ngắn hoặc không có trên phím khóa mũ.


2
Một chi tiết tôi bối rối trong câu trả lời của bạn: Bạn có nói sai không khi một lần lặp lại khóa mũ trong Mac OS X, độ trễ sẽ biến mất? . thời gian?)
pnkfelix

Tôi đã khai thác lại ESC và việc giữ lâu hơn một chút vẫn là cần thiết. Tuy nhiên, tôi đã làm điều này bằng cách sử dụng ứng dụng của bên thứ ba có tên là Seil và không thông qua bất kỳ chức năng nào được tích hợp trong OSX. Làm phiền, để chắc chắn - không phải nhà phát triển của họ sử dụng Vim? Trời ạ.
trực giác

0

Giải pháp "bật / tắt CapsLock-NoAction" mà OP đề cập đến hoạt động trên cả bàn phím Mac có dây và bàn phím MacBookPro của tôi. Bradley cho biết điều này chỉ hoạt động trên Yosemite, nhưng tôi đã sử dụng thành công trên Snow Leopard (10.6.8) và Mavericks (10.9.5). Tôi cũng đã thử nghiệm điều này bên trong máy ảo Kubfox và Caps Lock tiếp tục hoạt động chính xác bên trong máy ảo.

  • Mở Tùy chọn hệ thống bàn phím và nhấp vào Modifier Keys...:

nhập mô tả hình ảnh ở đây

  • Đặt phím Caps Lock thành No Actionvà nhấp OK:

                    nhập mô tả hình ảnh ở đây

  • Nhấp Modifier Keys...lại lần nữa và đặt phím Caps Lock thành Caps Lockvà nhấp OK:

                    nhập mô tả hình ảnh ở đây

Điều này chỉ còn hiệu lực cho đến khi khởi động lại tiếp theo.


1
Điều này không có tác dụng đối với tôi. (Sierra 10.12.6, bàn phím Mac USB và nội bộ trên MBPro)
scipilot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.