วิธีลบการหน่วงเวลาการล็อกตัวพิมพ์ใหญ่บนแป้นพิมพ์อะลูมิเนียม Apple MacBook Pro เมื่อบูตไปที่ Linux


32

แอปเปิ้ล MacBook Pro มีความล่าช้าเล็กน้อยบนแป้น Caps Lock นั่นคือจะต้องกดปุ่ม caps lock ค้างไว้นานกว่าปกติเล็กน้อยเพื่อลงทะเบียนการกดปุ่มที่จำเป็นในการล็อคปุ่ม caps

มันน่ารำคาญสุด ๆ ไม่มีใครรู้วิธีหยุดมันไม่ให้เกิดขึ้น?

(ด้านบนคัดลอกมาจากstackoverflowเนื่องจากถูกปิดที่นั่นเป็น "off topic")

เพื่ออธิบายเพิ่มเติมเพิ่มเติม: Apple ถือว่าคุณสมบัตินี้และบทความฐานความรู้ของพวกเขาไม่ได้เปิดเผยวิธีปิดใช้งานความล่าช้านี้

อย่างไรก็ตามฉันมีเหตุผลที่เชื่อได้ว่าเป็นไปได้

โดยเฉพาะอย่างยิ่งฉันพบว่าอย่างน้อยในประสบการณ์ของฉันถ้าคุณทำการแมปปุ่ม caps-lock บน Mac OS X (ใน System Preferences .. Keyboard .. Modifier Keys) และเช่นแผนที่ไปยังตัวควบคุมแล้วความล่าช้าจะหายไปในขณะที่ฉันลงชื่อเข้าใช้ Mac OS X

ปัญหาของฉันคือความล่าช้ายังคงอยู่เมื่อฉันบูตเข้าสู่ Ubuntu Linux และในบริบทนั้นแม้ว่าฉันจะทำการแมปปุ่ม Caps Lock ไปที่การควบคุมความล่าช้าก็ยังคงปรากฏอยู่

ดังนั้นคำถามคือ: Apple ปิดการใช้งานความล่าช้าได้อย่างไรและที่สำคัญกว่านั้นวิธีหนึ่งที่จะทำซ้ำในบริบทของการติดตั้ง Linux บนแล็ปท็อปได้อย่างไร

อัปเดต: มีเธรดในsuperuserที่อาจให้วิธีแก้ไขปัญหาได้ ฉันยังไม่ได้ลองคำแนะนำที่นั่น (คือ: (1) การสลับเปิด / ปิด CapsLock-NoAction และ (2) การอัปเกรดเฟิร์มแวร์) ฉันไม่สามารถบอกได้จากบริบทของเธรดนั้นว่าการแก้ปัญหาได้รับการทดสอบในการติดตั้ง Ubuntu หรือไม่


ฉันไม่เคยสังเกตเรื่องนี้มาก่อนเลยตอนนี้ แต่ฉันเคยเล่นกับฉันแล้วฉันจะเห็นว่าคุณหมายถึงอะไร หากคุณแตะปุ่ม Caps Lock เร็วเกินไปจะไม่ทำอะไรเลย ฉันไม่เคยพบปัญหามาก่อน แต่ลองปิดการใช้งาน / เปิดใช้งานเคล็ดลับคีย์แคปล็อคและทำให้ทันที! ตอนนี้ไม่ว่าฉันจะกดปุ่มมันเร็วแค่ไหน ที่แปลกมาก!
tom1990

ฉันมักจะคิดว่าฉันบ้าไปแล้ว: ฉันเห็นประโยชน์ของมัน แต่ในบางสถานการณ์มันทำให้ฉันรำคาญ คงจะดีถ้ารู้ว่าเป็นไปได้!
OrangeBox

อันที่จริงเคล็ดลับการปิดใช้งาน / เปิดใช้งานตัวล็อกแคป (บนฝั่ง Mac OS X) ดูเหมือนจะทำให้ปัญหาหายไปเมื่อรีบูตลีนุกซ์ในภายหลัง แต่มันก็ไม่ชัดเจนสำหรับฉันหากผลกระทบนี้ถาวร - ฉันปล่อยเครื่องทิ้งไว้สักพัก (สัปดาห์หรืออาจจะมากกว่าเดือน) และเมื่อฉันบูตมันตรงกับ Linux เมื่อเช้านี้ดูเหมือนว่า กลับมาล่าช้า ยังค่อนข้างลึกลับสำหรับฉัน
pnkfelix

ดังนั้นเพื่อตรวจสอบดูเหมือนว่าจะไม่มีการแก้ไขสำหรับ linux สำหรับปัญหานี้หรือไม่?
Mike HR

1
นี่คือการแก้ไขที่ใช้งานได้กับ macOS และสามารถทำงานภายใต้ macOS
fel1x

คำตอบ:


22

ฉันคิดวิธีการทำเช่นนี้ กล่าวโดยย่อคุณต้องส่ง "รายงานคุณลักษณะ" ซึ่งประกอบด้วยไบต์0x9, 0x0, 0x0, 0x0ไปยังอุปกรณ์ hidraw ที่เหมาะสมในฐานะรูท

คุณสามารถค้นหาอุปกรณ์ hidraw ที่เหมาะสมด้วยคำสั่งนี้:

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(หรือเทียบเท่าของ distro ของคุณ) เพื่อดำเนินการตอนบู๊ต (คุณไม่ต้องการsudoในกรณีนั้นและคุณอาจต้องการย้ายไบนารี่ที่คอมไพล์แล้ว/usr/local/sbin/หรือบางอย่าง)

ฉันได้ทำการตรวจสอบความปลอดภัยเกี่ยวกับ ID ผู้ขาย ID อุปกรณ์และความยาวตัวบอกรายงาน คุณอาจต้องเปลี่ยนสองอย่างหลังถ้าแบบจำลองของคุณแตกต่างจากของฉัน


#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
มันดูดีมากขอบคุณ! จากความสนใจคุณพบสิ่งนี้ได้อย่างไร (จำเป็นต้องส่งไบต์มายากล)
Mike HR

6
@ MikeH-R: ฉันใช้เวลาทั้งวันในการเรียนรู้วิธีการทำงานของโปรโตคอล HID: โดยพื้นฐานแล้วอุปกรณ์ต่าง ๆ อธิบายว่าแพ็กเก็ตข้อมูล ("รายงาน") พวกเขาเข้าใจอะไร น่าเสียดายที่แป้นพิมพ์ของ Apple ไม่ได้กล่าวถึงรายงานที่เป็นปัญหาในตัวอธิบาย HID อย่างไรก็ตามฉันพบดัมพ์ของตัวอธิบาย HID ของคีย์บอร์ดภายในของ MacBook ที่มีคนโพสต์ซึ่งมีคำอธิบายรายงานที่ถูกต้องและฉันก็ลองมันและพบว่ามันใช้งานได้กับคีย์บอร์ดแบบใช้สายภายนอกเช่นกัน
jmrk

โอ้ว้าฉันต้องลองดู!
pnkfelix

(ฉันดูเหมือนจะมีขนาดอธิบายแตกต่างกันอย่างน้อยที่สุดฉันยังจะปรับและดูวิธีการทำงาน)
pnkfelix

ฉันจะยอมรับคำตอบนี้เพราะมันใกล้เคียงที่สุดที่จะยอมรับปัญหาตามที่อธิบายไว้และนำเสนอวิธีแก้ปัญหาที่น่าเชื่อถือ (แม้ว่าในกรณีของฉันเองขนาดตัวบ่งชี้จะแตกต่างกัน)
pnkfelix

13

นี่คือการแก้ไขสำหรับ macOS Sierra

ไปที่การตั้งค่าระบบ > การเข้าถึง

เมื่อหน้าต่างการช่วยสำหรับการเข้าถึงเปิดอยู่ทางด้านซ้ายของหน้าต่างให้คลิกแป้นพิมพ์

จากนั้นจะมีตัวเลือก 2 ตัวเลือก - สำหรับปุ่มปักหมุดและสำหรับปุ่มช้า - คลิกที่กล่องถัดจากOptions...ปุ่มเลื่อนช้าเพื่อเปิดใช้งาน - จากนั้นคลิกปุ่ม - หน้าต่างใหม่จะปรากฏขึ้นพร้อมแถบเลื่อนเพื่อเปลี่ยนการตอบรับล่าช้า - ตามค่าเริ่มต้น สิ่งนี้อยู่ตรงกลาง เลื่อนปุ่มไปทางซ้ายจนสุดเพื่อให้เป็นเวลาที่สั้นที่สุด

ตอนนี้มันควรได้รับการแก้ไข ยังไม่ได้ทดลองเพื่อดูว่าการแก้ไขยังคงอยู่เมื่อเริ่มต้นใหม่หรือไม่ แต่ฉันหวังว่าจะเป็นเช่นนั้น


ฉันตื่นเต้นเป็นเวลาหนึ่งวินาที แต่เมื่อฉันไปดูที่นี่ไม่ได้เปิดใช้งานแป้นช้าจึงใช้ได้กับผู้ที่ใช้แป้นพิมพ์ช้า: (วันหนึ่งฉันจะปลดล็อคปุ่มที่มีค่าของตัวเองกลับคืน!
Bradley

4
สิ่งนี้จะลดลงเล็กน้อย แต่ก็ยังช้ากว่าที่จะเปิดใช้ตัวพิมพ์ใหญ่กว่าปิด นอกจากนี้อัตราการทำซ้ำที่สำคัญจะช้าลงเป็นการรวบรวมข้อมูลแม้ว่าการตั้งค่าจะเร็วที่สุด (Sierra 10.12.6)
scipilot

1
นี่ไม่ใช่วิธีแก้ปัญหาที่เหมาะสมเนื่องจากมันจะทำให้ keyrepat ช้าลงและคุณจะไม่สามารถลบสิ่งต่าง ๆ ได้อย่างถูกต้องเมื่อถือ backspace
Denialos

7

แก้ไข: นี่เป็นคำถามเชื่อมโยงไปถึงยอดนิยมสำหรับผู้ใช้ที่ต้องการลบความล่าช้าในปุ่ม caps lock ใน OS X ตั้งแต่ OS X Mojave

ไปที่การตั้งค่าระบบ; การใช้; แป้นพิมพ์; เปิดใช้งานปุ่มช้าและไปที่ตัวเลือกต่างๆ ลดการหน่วงเวลาให้น้อยที่สุด ผลข้างเคียงที่ไม่พึงประสงค์เพียงอย่างเดียวที่ฉันสังเกตเห็นก็คือแบ็คสเปซช้าเมื่อถือไว้ โดยทั่วไปฉันใช้ CMD + A / CMD + SHIFT + L / R / CMD + SHIFT + CTRL + L / R อย่างไรก็ตามมันไม่ใช่ปัญหาใหญ่

ตั้งแต่ El Capitan และรุ่นก่อนหน้า

วิธีการแก้ปัญหาค่อนข้างเข้าใจยากและคุณจะไม่ทราบว่าคุณลบมันออกไปนอกเสียจากว่าคุณพยายามกำจัดมันโดยเฉพาะในตอนแรก วิธีที่ฉันจะแสดงให้คุณเห็นนั้นล้วน แต่เป็นเวอร์ชั่นล่าสุดของ OSX, Yosemite อย่างไรก็ตามคุณสามารถใช้วิธีนี้กับเวอร์ชันก่อนหน้าและในอนาคตได้

การแก้ปัญหานั้นง่าย หากคุณนำทางไปยังแป้นพิมพ์ในการตั้งค่าระบบผ่านโลโก้ Apple ที่มุมซ้ายบนคุณจะไปถึงหน้าจอนี้! [ป้อนคำอธิบายภาพที่นี่] [1]

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

หากคุณคลิกปุ่มตัวดัดแปลงคุณจะสามารถเปลี่ยนฟังก์ชั่นของแต่ละปุ่มที่ตั้งโปรแกรมได้ สิ่งที่คุณต้องทำคือตั้งค่าปุ่ม caps lock ให้ไม่มีการกระทำและกด ok เพื่อนำคุณกลับไปที่เมนูแป้นพิมพ์ เมื่อทำเสร็จแล้วกลับไปที่ปุ่มปรับเปลี่ยนและเปลี่ยนปุ่ม Caps Lock กลับไปเป็นปุ่ม Caps Lock และจะเป็นการลบความล่าช้า! โปรดทราบว่าการแก้ไขนี้ยังคงมีผลอยู่จนกว่าคุณจะเข้าสู่โหมดเริ่มต้นใหม่หรือปิดอุปกรณ์ ที่จุดใดเวลาหน่วงจะเริ่มต้นใหม่

พวกเขากำลังแก้ไขที่แปลกและมันก็เป็นคำถามว่าทำไมพวกเขาถึงไม่มีตัวเลือกในการลบความล่าช้าเมื่อการแก้ไขนี้เป็นซอฟต์แวร์ที่ใช้หมดจด แต่เดี๋ยวก่อนอย่างน้อยก็มีวิธี!

มีความสุข


สิ่งนี้จะช่วยแก้ปัญหาของฉันใน Linux ได้อย่างไร
pnkfelix

เพื่อความชัดเจน: คำถามเดิมกล่าวว่า: "... ความล่าช้าจะหายไปในขณะที่ฉันเข้าสู่ระบบ Mac OS X ปัญหาของฉันคือความล่าช้ายังคงอยู่เมื่อฉันบูตเข้าสู่ Ubuntu Linux และในบริบทนั้นแม้ว่าฉันจะทำการแมปใหม่ ปุ่ม Caps Lock เพื่อควบคุมความล่าช้ายังคงปรากฏอยู่ "
pnkfelix

Ah! ฉันเห็นฉันเดาว่าฉันควรอ่านคำถามเกี่ยวกับ OP ให้ละเอียดขึ้น ฉันพบใน OSX ที่ไม่สามารถผูกปุ่ม caps ได้อย่างสมบูรณ์และการ rebinding แก้ไขปัญหาได้ บางทีความล่าช้าอาจเกิดขึ้นเพราะคุณผูกพันที่จะควบคุมแทนหรือไม่ มูลค่าพยายามทุกอย่างถ้าคุณยังไม่ได้ทำงานรอบ ๆ :)
แบรดลีย์

1
วิธีการนี้ไม่มีผลกระทบใด ๆ กับฉัน (เซียร์ 10.12.6)
scipilot

3

ไปที่การตั้งค่าระบบ> การเข้าถึง> แป้นพิมพ์> เปิดใช้งานปุ่มช้า> เปลี่ยนการตอบรับล่าช้าไปทางซ้าย (สั้น)! สิ่งนี้ใช้ได้สำหรับฉัน


คุณอธิบายถึงขั้นตอนหนึ่งใน Mac OS X หรือไม่? สิ่งนี้จะแก้ปัญหาใน Ubuntu Linux ได้อย่างไรตามที่อธิบายไว้ในคำถาม
pnkfelix

ใช่ถูกต้อง. ฉันไม่รู้จัก Ubuntu Linux ขอโทษ ฉันคิดว่าฉันกำลังแก้ไขชื่อหลัก "วิธีลบการหน่วงเวลาการล็อคแคปบนแป้นพิมพ์อะลูมิเนียม Apple MacBook Pro *" และอาจเป็นคำถาม "วิธีการที่ Apple ปิดการหน่วงเวลา" :-) ขอแสดงความนับถือโธมัส, สวีเดน * คำถามนั้นคือเหตุผลที่ฉันพบและอ่านดอกยางนี้และไม่มีอะไรช่วยเลยฉันจึงแก้ไขมันด้วยตัวเอง: P
Thomas Carl-Erik Jönsson

2
ตามคำตอบของมิเชล: สิ่งนี้จะลดมันลงเล็กน้อย แต่ก็ยังช้ากว่าที่จะเปิดใช้ตัวพิมพ์ใหญ่กว่าปิด นอกจากนี้อัตราการทำซ้ำที่สำคัญจะช้าลงเป็นการรวบรวมข้อมูลแม้ว่าการตั้งค่าจะเร็วที่สุด (เซียร์ 10.12.6)
scipilot

2

ฉันรู้แน่ ๆ ว่าการหน่วงเวลาการล็อคแคปเป็นคุณลักษณะของเฟิร์มแวร์บนแป้นพิมพ์เอง - ดังนั้นคุณจึงมั่นใจได้ว่าเวลาการหน่วงเวลาเกิดขึ้นไม่ว่าระบบปฏิบัติการของแป้นพิมพ์จะขับรถอย่างไรในขณะนี้

ฉันรู้ว่า Apple ไม่มีเส้นทางให้แฟลชเฟิร์มแวร์ในระดับที่ต่ำกว่าดังนั้นเราทุกคนจะต้องรอจนกว่าผู้ที่มีประสบการณ์ด้านฮาร์ดแวร์มากพอจะบล็อกเครื่องมือและขั้นตอนที่พวกเขาทำเพื่อหลอกให้ฮาร์ดแวร์โหลดเฟิร์มแวร์รุ่นเก่า สิ่งที่ดูเหมือนว่าเฟิร์มแวร์รุ่นใหม่ที่ถอยหลังความล่าช้าในการทำงานมาก่อนโดยไม่ล่าช้า)

ฉันขอโทษสำหรับคำตอบที่ไม่ตอบ แต่เส้นทางที่จะทำให้บรรลุผลนั้นดีและอาจช่วยให้ผู้อื่นดำเนินการได้ (การเลือกคีย์บอร์ดเก่า - หรือละเว้นจากการอัพเกรดเฟิร์มแวร์) ในเวลาเฉลี่ยในขณะที่เรารอวิธีแก้ปัญหาจริง ๆ ตัวจับเวลาสั้นหรือไม่มีเลยบนปุ่ม Caps Lock


2
รายละเอียดหนึ่งที่ฉันสับสนในคำตอบของคุณ: คุณกำลังบอกว่าเป็นเรื่องผิดหรือเปล่าที่เมื่อมีใครทำการแมปปุ่ม caps-lock ใน Mac OS X ความล่าช้าจะหายไป? (ฉันไม่ทราบว่าจะตีความคำสั่งของคุณอย่างไร "การกำหนดเวลาหน่วงเกิดขึ้นไม่ว่าระบบปฏิบัติการของแป้นพิมพ์จะขับรถในขณะนี้" แต่นั่นขัดแย้งกับประสบการณ์โดยตรงของฉัน - หาก Apple ใช้ API ที่ไม่มีเอกสารกับเฟิร์มแวร์ กำหนดเวลา?)
pnkfelix

ฉันทำการแมปไปยัง ESC แล้วและยังจำเป็นต้องพักอีกต่อไป ฉันทำสิ่งนี้โดยใช้แอปของบุคคลที่สามชื่อ Seil แต่ไม่ใช่ผ่านการทำงานใด ๆ ที่มีอยู่ใน OSX น่ารำคาญเพื่อให้แน่ใจ - นักพัฒนาของพวกเขาไม่ได้ใช้ Vim ใช่ไหม โธ่
intuited

0

โซลูชัน "toggling CapsLock-NoAction off / on" ที่ OP อ้างถึงทำงานได้ทั้งบนคีย์บอร์ด 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)
scipilot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.