Cara menghapus caps lock delay pada keyboard aluminium Apple MacBook Pro saat di-boot ke Linux

32

Apple MacBook Pro mengalami sedikit keterlambatan pada tombol caps lock . Artinya, tombol caps lock harus ditekan sedikit lebih lama dari biasanya untuk mendaftarkan tekan tombol yang diperlukan untuk menggunakan caps lock.

Ini sangat menjengkelkan. Adakah yang tahu bagaimana menghentikannya agar tidak terjadi?

(Di atas disalin dari stackoverflow karena ditutup di sana sebagai "off topic".)

Untuk menguraikan lebih lanjut: Apple menganggap ini sebagai fitur, dan artikel basis pengetahuan mereka tidak mengungkapkan cara menonaktifkan penundaan ini.

Namun, saya punya alasan untuk percaya bahwa itu mungkin.

Khususnya, saya telah menemukan bahwa, setidaknya dalam pengalaman saya, jika Anda memetakan ulang kunci caps-lock pada Mac OS X (dalam System Preferences .. Keyboard .. Modifier Keys), dan misalnya memetakannya ke Control, maka penundaannya hilang sementara saya login ke Mac OS X.

Masalah saya adalah bahwa penundaan tetap ketika saya boot ke Ubuntu Linux, dan dalam konteks itu, bahkan ketika saya remap tombol Caps Lock untuk Kontrol, penundaan masih ada.

Jadi, pertanyaannya adalah: Bagaimana cara Apple menonaktifkan penundaan, dan yang lebih penting, bagaimana seseorang dapat meniru yang bertindak dalam konteks instalasi Linux di atas laptop?

Pembaruan: Ada utas pada pengguna super yang dapat memberikan solusi. Saya belum mencoba saran di sana (yaitu: (1) mematikan / menonaktifkan CapsLock-NoAction, dan (2) peningkatan firmware). Saya tidak tahu dari konteks utas itu apakah solusi telah diuji pada instalasi Ubuntu.

pnkfelix
sumber
Saya belum pernah melihat ini sebelumnya, tetapi saya sudah bermain dengan saya dan saya bisa melihat apa yang Anda maksud. Jika Anda menekan tombol caps lock terlalu cepat, itu tidak akan berpengaruh apa-apa. Saya tidak pernah menemukan masalah sebelumnya tetapi hanya mencoba menonaktifkan / mengaktifkan kembali trik kunci caps lock dan telah membuatnya menjadi instan! sekarang tidak masalah dengan cepat saya menekan tombol itu selalu matikan caps lock. Sangat aneh!
tom1990
Selalu berpikir saya hanya menjadi gila: p Saya bisa melihat manfaatnya, tetapi dalam beberapa situasi itu benar-benar mengganggu saya. Akan lebih baik untuk mengetahui jika itu mungkin!
OrangeBox
Memang, menonaktifkan / mengaktifkan kembali trik caps lock (di sisi Mac OS X), tampaknya membuat masalah hilang begitu salah satu kemudian reboot ke Linux. Tetapi tidak jelas bagi saya apakah efeknya permanen - Saya membiarkan komputer saya dimatikan selama beberapa waktu (beberapa minggu atau bahkan lebih dari sebulan), dan ketika saya mem-boot-nya langsung ke Linux pagi ini, sepertinya keterlambatan telah kembali. Masih cukup misterius bagiku.
pnkfelix
Jadi hanya untuk memeriksa, sepertinya tidak ada perbaikan untuk linux untuk masalah ini?
Mike HR
1
Berikut ini adalah perbaikan yang berfungsi untuk macOS dan dapat dijalankan di bawah macOS.
fel1x

Jawaban:

22

Saya sudah menemukan cara untuk melakukan ini. Singkatnya, Anda harus mengirim "Laporan Fitur" yang terdiri dari byte 0x9, 0x0, 0x0, 0x0ke perangkat hidraw yang sesuai sebagai root.

Anda dapat menemukan perangkat hidraw yang tepat dengan perintah ini:

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

Kode untuk mengirim paket kontrol ajaib di bawah ini. Kompilasi dengan gcc, menggunakan perangkat hidraw sebagai parameter. Jadi keseluruhan aliran adalah:

  1. simpan kode di bawah ini sebagai 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

Langkah 3 dan 4 harus dilakukan setiap kali Anda me-reboot (atau mencabut dan pasang kembali keyboard); Anda dapat memasukkannya ke dalam /etc/rc.local(atau yang setara dengan distro Anda) untuk menjalankannya saat boot (Anda tidak perlu sudodalam hal itu; dan Anda mungkin ingin memindahkan biner yang dikompilasi ke dalam /usr/local/sbin/atau sesuatu).

Saya telah melakukan beberapa pemeriksaan keamanan untuk ID vendor, ID perangkat, dan panjang deskriptor laporan. Anda mungkin harus mengubah dua yang terakhir jika model Anda berbeda dari milik saya.


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

jmrk
sumber
2
Ini terlihat hebat, terima kasih! Karena ketertarikan, bagaimana Anda menemukan ini (byte sihir harus dikirim)?
Mike HR
6
@ MikeH-R: Saya menghabiskan satu hari mempelajari cara kerja protokol HID: pada dasarnya, perangkat menggambarkan paket data apa ("laporan") yang mereka pahami. Sayangnya keyboard Apple tidak menyebutkan laporan tersebut dalam deskriptor HID-nya. Namun saya menemukan dump deskriptor HID keyboard internal MacBook bahwa seseorang telah memposting yang memang berisi deskripsi laporan yang tepat, dan saya hanya mencobanya dan menemukan bahwa itu bekerja untuk keyboard kabel eksternal juga.
jmrk
Oh wow saya harus mencoba ini!
pnkfelix
(Tampaknya saya mendapatkan ukuran deskriptor yang berbeda, paling tidak. Masih saya akan menyesuaikan mereka dan melihat bagaimana hasilnya.)
pnkfelix
Saya akan menerima jawaban ini karena yang paling dekat dengan benar-benar mengakui masalah seperti yang dijelaskan dan memberikan solusi yang dapat dipercaya untuk itu (meskipun dalam kasus saya sendiri ukuran deskriptor berbeda).
pnkfelix
13

Ini adalah perbaikan untuk macOS Sierra.

Buka Preferensi Sistem > Aksesibilitas

Ketika jendela aksesibilitas terbuka - di bagian kiri jendela - klik Keyboard

Kemudian akan ada 2 opsi - untuk kunci lengket, dan untuk kunci lambat - klik kotak di sebelah tombol lambat untuk mengaktifkannya - lalu klik Options...tombol - jendela baru akan muncul dengan slider untuk mengubah penundaan penerimaan - secara default ini di tengah. Geser tombol ke kiri, sehingga waktu sesingkat mungkin.

Sekarang harus diperbaiki. Belum bereksperimen untuk melihat apakah perbaikannya tetap pada restart, tapi saya berharap itu akan terjadi.

michelle
sumber
Saya menjadi bersemangat sebentar, tetapi ketika saya pergi untuk melihat di sini, kunci lambat tidak diaktifkan sehingga hanya bekerja untuk orang-orang yang menggunakan kunci lambat :( suatu hari saya akan memiliki kunci kunci topi berharga saya kembali!
Bradley
4
Ini mengurangi sedikit, tetapi masih lebih lambat untuk mengaktifkan caps-lock daripada mematikan. Juga tingkat pengulangan kunci melambat ke perayapan, meskipun pengaturannya tercepat. (Sierra 10.12.6)
scipilot
1
ini bukan solusi yang tepat untuk masalah yang ada karena memperlambat keyrepat dan Anda tidak lagi dapat menghapus hal-hal dengan benar saat menahan backspace.
Denialos
7

EDIT: Ini sepertinya menjadi pertanyaan pendaratan yang populer bagi pengguna yang ingin menghapus penundaan pada tombol kunci caps di OS X. Pada OS X Mojave,

Pergi ke System Preferences; Aksesibilitas; Keyboard; aktifkan Slow Keys dan masuk ke opsi; ubah penundaan ke minimum. Satu-satunya efek samping yang tidak diinginkan yang saya perhatikan sejauh ini adalah tindakan backspace yang lambat saat menahannya. Secara umum saya menggunakan CMD + A / CMD + SHIFT + L / R / CMD + SHIFT + CTRL + L / R tetap jadi itu bukan masalah besar.

Pada El Capitan dan sebelumnya,

Solusinya cukup sulit dipahami, dan Anda tidak akan benar-benar tahu Anda menghapusnya kecuali Anda secara khusus mencoba untuk menyingkirkannya sejak awal. Cara saya akan menunjukkan kepada Anda adalah murni untuk versi terbaru (saat ini) dari OSX, Yosemite. Namun Anda dapat benar-benar menerapkan metode ini untuk versi sebelumnya dan masa depan.

Solusinya sederhana. Jika Anda menavigasi ke Keyboard di preferensi Sistem melalui logo apel di sudut kiri atas Anda akan mencapai layar ini! [Masukkan deskripsi gambar di sini] [1]

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

Jika Anda mengklik tombol kunci pengubah, Anda dapat mengubah fungsi masing-masing tombol yang dapat diprogram. Yang harus Anda lakukan adalah mengatur tombol caps lock untuk tidak ada tindakan dan tekan ok untuk membawa Anda kembali ke menu keyboard. Setelah selesai, kembali ke tombol pengubah dan ganti tombol caps lock kembali ke caps lock dan ini akan menghapus penundaan! Perhatikan bahwa perbaikan ini tetap dilakukan sampai Anda tidur, nyalakan kembali, atau matikan perangkat. Pada titik mana keterlambatan diaktifkan kembali.

Mereka perbaikan aneh, dan itu menimbulkan pertanyaan mengapa mereka tidak memberikan opsi untuk menghapus penundaan ketika perbaikan ini murni berbasis perangkat lunak. Tapi hei, setidaknya ada jalan!

Senang capsing.

Bradley
sumber
Bagaimana cara mengatasi masalah saya di Linux?
pnkfelix
Untuk menjadi lebih jelas: pertanyaan awal mengatakan: "... penundaan hilang saat saya masuk ke Mac OS X. Masalah saya adalah bahwa penundaan tetap ketika saya boot ke Ubuntu Linux, dan dalam konteks itu, bahkan ketika saya memetakan kembali Tombol Caps Lock untuk Kontrol, penundaan masih ada. "
pnkfelix
Ah! Saya mengerti, saya kira saya harus membaca pertanyaan OP lebih hati-hati. Saya menemukan di OSX bahwa melepas ikatan tombol caps sepenuhnya dan rebinding menyelesaikan masalah. Mungkin penundaan itu tetap karena Anda mengikat untuk mengendalikan? Pantas untuk dicoba jika Anda belum bekerja :)
Bradley
1
Pendekatan ini tidak berpengaruh bagi saya. (Sierra 10.12.6)
scipilot
3

Buka preferensi sistem> aksesibilitas> keyboard> aktifkan tombol lambat> ubah penundaan penerimaan hingga ke kiri (pendek)! Ini berhasil untuk saya.

Thomas Carl-Erik Jönsson
sumber
Apakah Anda menjelaskan langkah di Mac OS X? Bagaimana cara mengatasi masalah di Ubuntu Linux, seperti yang dijelaskan dalam pertanyaan?
pnkfelix
Ya benar. Saya tidak tahu Ubuntu Linux, maaf. Saya pikir saya sedang memecahkan judul utama "Bagaimana menghapus penundaan kunci caps pada keyboard aluminium Apple MacBook Pro *" dan mungkin pertanyaan "Bagaimana Apple menonaktifkan penundaan". :-) Salam Hormat Thomas, Swedia * Pertanyaan itu adalah alasan saya menemukan dan membaca tapak ini dan tidak ada yang membantu sehingga saya menyelesaikannya sendiri: P
Thomas Carl-Erik Jönsson
2
Sesuai jawaban Michelle: Ini memang mengurangi sedikit, tetapi masih lebih lambat untuk mengaktifkan caps-lock daripada mematikan. Juga tingkat pengulangan kunci melambat ke perayapan, meskipun pengaturannya tercepat. (Sierra 10.12.6)
scipilot
2

Saya tahu pasti bahwa caps lock delay adalah fitur dari firmware pada keyboard itu sendiri - sehingga Anda dapat yakin bahwa waktu tunda terjadi tidak peduli apa OS yang dikendarai keyboard saat ini.

Saya juga tahu bahwa Apple tidak menawarkan jalur untuk mem-flash firmware ke tingkat yang lebih rendah sehingga kita semua harus menunggu sampai seseorang dengan pengalaman perangkat keras yang cukup blog alat dan langkah-langkah yang mereka lakukan untuk mengelabui perangkat keras agar memuat firmware yang lebih lama (atau menyediakan apa yang tampak seperti firmware yang lebih baru yang mengembalikan penundaan ke cara kerjanya sebelumnya tanpa penundaan.)

Saya minta maaf atas jawaban yang tidak dijawab, tetapi jalur untuk menyelesaikannya menyala dengan baik dan dapat membantu orang lain mengambil tindakan (memilih keyboard yang lebih lama - atau menahan diri untuk tidak memperbarui firmware) sementara waktu sementara kami menunggu solusi nyata untuk diterapkan timer pendek atau tidak ada pada tombol caps lock.

bmike
sumber
2
Satu detail yang saya bingung dalam jawaban Anda: Apakah Anda mengatakan itu salah bahwa ketika seseorang memetakan kembali kunci caps-lock di Mac OS X, penundaan itu hilang? (Saya tidak tahu bagaimana cara menafsirkan pernyataan Anda "waktu tunda terjadi tidak peduli apa OS yang dikendarai keyboard saat ini"; tetapi itu bertentangan dengan pengalaman langsung saya - kecuali Apple menggunakan beberapa API tidak berdokumen pada firmware untuk menyesuaikan waktu?)
pnkfelix
Tambang saya telah dipetakan ulang ke ESC dan penahanan yang sedikit lebih lama masih diperlukan. Saya melakukan ini menggunakan aplikasi pihak ketiga yang disebut Seil, dan tidak melalui fungsi apa pun yang terpasang di dalam OSX. Mengganggu, pasti - bukankah pengembang mereka menggunakan Vim? Ya ampun.
intuited
0

Solusi "toggling CapsLock-NoAction off / on" yang mengacu OP berfungsi pada keyboard Mac kabel saya dan keyboard MacBookPro saya. Bradley mengatakan ini hanya bekerja pada Yosemite, tetapi saya telah menggunakannya dengan sukses pada Snow Leopard (10.6.8) dan Mavericks (10.9.5). Saya juga telah menguji ini di dalam Kubuntu VM dan Caps Lock terus bekerja dengan benar di dalam VM.

  • Buka Preferensi Sistem Keyboard, dan klik Modifier Keys...:

masukkan deskripsi gambar di sini

  • Setel tombol Caps Lock ke No Action, dan klik OK:

                    masukkan deskripsi gambar di sini

  • Klik Modifier Keys...lagi, dan atur tombol Caps Lock Caps Lock, dan klik OK:

                    masukkan deskripsi gambar di sini

Ini hanya berlaku sampai reboot berikutnya.

Neil Steiner
sumber
1
Ini tidak berpengaruh bagi saya. (Sierra 10.12.6, keyboard USB Mac dan internal pada MBPro)
scipilot