Linux로 부팅 할 때 Apple MacBook Pro 알루미늄 키보드에서 캡 잠금 지연을 제거하는 방법


32

Apple의 MacBook Pro는 캡 잠금 키에 약간의 지연이 있습니다. 즉, 캡 잠금 키를 잠 그려면 캡 잠금 키를 평소보다 약간 길게 눌러야합니다.

이것은 매우 성가시다. 아무도 그것을 막는 방법을 알고 있습니까?

( 이것은 "오프 주제"로 닫 혔을 때 stackoverflow 에서 복사되었습니다 .)

더 자세히 설명하기 위해 : Apple은이 기능을 기능으로 간주하며 기술 자료 기사에서는이 지연을 비활성화하는 방법을 공개하지 않습니다.

그러나 그렇게 할 수 있다고 믿을만한 이유가 있습니다.

특히, 적어도 내 경험상 Mac OS X (시스템 환경 설정 .. 키보드 .. 수정 자 키)에서 caps-lock 키를 다시 매핑하고 예를 들어 Control에 매핑하면 지연 이 사라진다 는 것을 알았습니다. Mac OS X에 로그인 한 상태에서

내 문제는 Ubuntu Linux로 부팅 할 때 지연이 남아 있으며 Caps Lock 키를 Control에 다시 매핑하더라도 지연이 여전히 존재한다는 것입니다.

문제는 애플이 어떻게 지연을 비활성화 시키는가, 그리고 더 중요한 것은 랩탑 위에 리눅스 설치와 관련하여 어떻게 복제 할 수 있는가하는 것이다.

업데이트 : 해결 방법을 제공 할 수 있는 스레드가 수퍼 유저 에 있습니다. 나는 아직 제안을 시도하지 않았습니다 (즉 : (1) CapsLock-NoAction을 켜고 끄고 (2) 펌웨어 업그레이드). 우분투 설치에서 해결 방법을 테스트했는지 여부를 해당 스레드의 컨텍스트에서 알 수 없습니다.


나는 지금까지 이것을 눈치 채지 못했지만 나는 내 것과 놀았으며 당신이 무엇을 의미하는지 볼 수 있습니다. Caps Lock 키를 너무 빨리 누르면 아무런 효과가 없습니다. 나는 전에 문제를 발견하지 못했지만 뚜껑 잠금 키 트릭을 비활성화 / 다시 활성화하려고 시도했으며 즉시 만들었습니다! 이제 아무리 빨리 키를 누르면 캡 잠금이 항상 전환됩니다. 아주 이상한!
tom1990

항상 내가 미쳐 가고 있다고 생각했다 : p 나는 그것의 이점을 볼 수 있지만, 어떤 상황에서는 실제로 나를 귀찮게한다. 가능한지 아는 것이 좋을 것입니다!
OrangeBox

실제로, Mac OS X 측의 캡 잠금 / 비활성화 캡 트릭은 문제가 Linux로 재부팅되면 사라지는 것처럼 보입니다. 그러나 효과가 영구적인지 여부는 분명하지 않습니다. 제 컴퓨터를 몇 시간 (몇 주 또는 한 달 이상) 동안 꺼 두었다가 오늘 아침에 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부팅시 그것들을 실행하기 위해 (또는 배포판에 상응하는) 넣을 수 있습니다 ( 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 디스크립터에서 해당 보고서를 언급하지 않습니다. 그러나 올바른 보고서 설명이 포함 된 누군가가 게시 한 MacBook의 내부 키보드의 HID 설명자 덤프를 찾았습니다. 단순히 시도하여 외부 유선 키보드에서도 작동한다는 것을 알았습니다.
jmrk

와우, 이걸 해봐야 해!
pnkfelix

(최소한 다른 디스크립터 크기를 얻는 것 같습니다. 그래도 조정하고 어떻게 작동하는지 보겠습니다.)
pnkfelix

이 답변은 설명 된대로 실제로 문제를 인정하고 그것에 대한 믿을만한 해결책을 제공하는 데 가장 가깝기 때문에이 대답을 받아 들일 것입니다 (내 경우에는 설명자 크기가 다르더라도).
pnkfelix 2011

13

다음은 macOS Sierra의 수정 사항입니다.

시스템 환경 설정 > 접근성으로 이동

때 접근성 창이 열려 - 창의 왼쪽에 - 클릭 키보드

그런 다음 고정 키 및 느린 키의 두 가지 옵션이 있습니다. 느린 키 옆의 상자를 클릭하여 활성화 한 다음 Options...버튼 을 클릭하십시오 . 새 창에는 기본적으로 수락 지연을 변경하는 슬라이더가 나타납니다. 이것은 중간에 있습니다. 가장 짧은 시간이되도록 버튼을 왼쪽 끝까지 밉니다.

이제 수정해야합니다. 다시 시작해도 픽스가 유지되는지 실험 해 보지 않았지만 해결되기를 바랍니다.


나는 초 동안 흥분하지만 난 여기 찾아 갔을 때, 느린 키가 너무에만 느린 키를 사용하는 사람들을 위해 작동 :( 언젠가는 내 소중한 캡 키를 다시 고정해야합니다 사용할 수 없습니다되었다!
브래들리

4
이렇게하면 조금 줄어 들지만 여전히 전원을 끄는 것보다 Caps-Lock을 켜는 것이 더 느립니다. 또한 설정이 가장 빠른 경우에도 키 반복 속도가 크롤링 속도가 느려집니다. (Sierra 10.12.6)
scipilot

1
키 입력 속도가 느려지고 백 스페이스를 유지할 때 더 이상 항목을 제대로 삭제할 수 없으므로 현재 문제에 대한 적절한 해결책이 아닙니다.
Denialos

7

편집 : 이것은 OS X에서 caps lock 키의 지연을 제거하려는 사용자에게 인기있는 방문 질문 인 것 같습니다. OS X Mojave에서

시스템 환경 설정으로 이동하십시오. 접근성; 건반; 느린 키를 활성화하고 옵션으로 이동하십시오. 지연을 최소로 줄이십시오. 내가 지금까지 목격 한 원치 않는 부작용은 백 스페이스를 누르고있을 때 느린 백 스페이스 동작입니다. 일반적으로 나는 CMD + A / CMD + SHIFT + L / R / CMD + SHIFT + CTRL + L / R을 사용하므로 큰 문제는 아닙니다.

엘 캐피 탄과 그 이전에

이 솔루션은 매우 애매 모호하므로 처음부터 구체적으로 제거하려고 시도하지 않는 한 실제로 제거했다는 것을 알지 못할 것입니다. 내가 당신에게 보여줄 방법은 전적으로 최신 버전의 OSX 요세미티를위한 것입니다. 그러나이 방법을 이전 및 이후 버전에 절대적으로 적용 할 수 있습니다.

해결책은 간단합니다. 왼쪽 상단에있는 애플 로고를 통해 시스템 환경 설정에서 키보드로 이동하면이 화면이 나타납니다! [여기에 이미지 설명 입력] [1]

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

수정 자 키 버튼을 클릭하면 프로그래밍 가능한 각 키의 기능을 변경할 수 있습니다. Caps Lock 키가 동작하지 않도록 설정하고 확인을 누르면 키보드 메뉴로 돌아갑니다. 완료되면 수정 자 키로 돌아가서 Caps Lock 키를 Caps Lock으로 다시 변경하면 지연이 제거됩니다! 이 수정 사항은 장치를 절전 모드로 전환하거나 다시 시작하거나 전원을 끌 때까지 그대로 유지됩니다. 이 시점에서 지연이 복원됩니다.

그들은 이상한 수정이며,이 수정이 순수한 소프트웨어 기반 일 때 지연을 제거하는 옵션을 제공하지 않는 이유에 대해 의문을 제기합니다. 그러나 적어도 방법이 있습니다!

행복한 캡핑.


이것이 리눅스에서 내 문제를 어떻게 해결합니까?
pnkfelix

더 명확하게 말하면 : 원래 질문은 "... Mac OS X에 로그인하는 동안 지연이 사라집니다. 내 문제는 Ubuntu Linux로 부팅 할 때 지연이 남아 있으며 해당 컨텍스트에서 Caps Lock 키를 제어하려면 지연이 여전히 존재합니다. "
pnkfelix

아! 나는 OP 질문을 더 신중하게 읽어야한다고 생각합니다. OSX에서 caps 키를 완전히 바인딩 해제하고 리 바인딩하면 문제가 해결되는 것으로 나타났습니다. 대신 컨트롤을 바인딩하기 때문에 지연이 남아 있습니까? 아직 해결 방법이 없다면 모든 것을 시도해 볼 가치가 있습니다 :)
Bradley

1
이 접근법은 나에게 아무런 영향을 미치지 않았다. (Sierra 10.12.6)
scipilot

3

시스템 환경 설정> 손쉬운 사용> 키보드> 느린 키 활성화> 수락 지연 변경 (왼쪽)으로 이동하십시오 (짧음)! 이것은 나를 위해 일했습니다.


Mac OS X의 단계를 설명하고 있습니까? 질문에 설명 된대로 Ubuntu Linux의 문제를 어떻게 해결합니까?
pnkfelix

네 맞습니다. 우분투 리눅스를 모르겠습니다. 죄송합니다. 필자는 "Apple MacBook Pro 알루미늄 키보드 *에서 캡 잠금 지연을 제거하는 방법"이라는 제목과 "애플이 지연을 비활성화하는 방법"이라는 문제를 해결하고 있다고 생각합니다. P : :-) 안부 토마스, 스웨덴 * 그 질문은 내가 발견하고 나 자신을 해결할 수 있도록이 트레드 아무것도 도움이 읽는 이유
토마스 칼 - 에릭 Jönsson

2
Michelle의 답변에 따르면 : 이것은 조금 줄이지 만 여전히 잠금을 설정하는 것보다 끄는 것이 느립니다. 또한 설정이 가장 빠른 경우에도 키 반복 속도가 크롤링 속도가 느려집니다. (Sierra 10.12.6)
scipilot

2

Caps Lock Delay가 키보드 자체의 펌웨어 기능이라는 것을 확실히 알고 있습니다. 따라서 현재 키보드가 어떤 OS를 구동하든 지연 타이밍이 발생한다고 확신 할 수 있습니다.

또한 Apple은 펌웨어를 낮은 수준으로 플래시 할 수있는 경로를 제공하지 않으므로 충분한 하드웨어 경험이있는 사람이 이전 펌웨어를로드하도록 하드웨어를 속이기 위해 수행 한 도구 및 단계를 블로그에 올릴 때까지 기다려야합니다. 지연없이 이전 작동 방식으로 지연되는 최신 펌웨어의 모양

나는 대답이없는 것에 대해 사과하지만이를 성취 할 수있는 길은 밝고 실제 솔루션이 구현되기를 기다리는 동안 다른 사람들이 조치를 취하는 데 도움이 될 수 있습니다 (이전 키보드 선택 또는 펌웨어 업그레이드 금지) caps lock 키에 짧거나없는 타이머.


2
대답에서 혼란스러워 한 가지 세부 사항 : Mac OS X에서 caps-lock 키를 다시 매핑하면 지연이 사라진다는 것이 잘못된 것입니까? (나는 키보드가 현재 어떤 OS를 구동하든 지연 타이밍이 발생한다고 진술을 해석하는 다른 방법을 모른다. 그러나 Apple이 문서화되지 않은 API를 펌웨어에 사용하여 조정하지 않는 한 내 직접 경험과 모순된다. 타이밍?)
pnkfelix

ESC로 다시 매핑했으며 약간 더 길게 보류해야합니다. 그러나 Seil이라는 타사 앱을 사용 하여이 작업을 수행했지만 OSX에 내장 된 기능을 사용하지 않았습니다. 성가신 일입니다. 개발자가 Vim을 사용하지 않습니까? 이런.
직관

0

OP가 참조하는 "CapsLock-NoAction 끄기 / 켜기"솔루션은 유선 Mac 키보드와 MacBookPro 키보드 모두에서 작동합니다. 브래들리는 이것이 요세미티에서만 작동한다고 말하지만 스노우 레오파드 (10.6.8)와 매버릭스 (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.