Linux'ta önyüklenirken Apple MacBook Pro alüminyum klavyesinde kapak kilidi gecikme nasıl kaldırılır


32

Apple MacBook Pro, kapak kilitleme tuşunda hafif bir gecikme var . Yani, büyük harf kilidini kapatmak için gerekli tuşa basmak için büyük harf kilidinin normalden biraz daha uzun tutulması gerekir.

Bu süper can sıkıcı bir durum. Bunu nasıl önleyeceğini bilen var mı?

(Above arta kopyalanan stackoverflow o "konu dışı" olarak orada kapatıldı olarak.)

Daha fazla detaylandırmak için: Apple bunu bir özellik olarak kabul eder ve bilgi tabanı makalesinde bu gecikmenin nasıl devre dışı bırakılacağı açıklanmaz.

Ancak, bunun mümkün olduğuna inanmak için nedenlerim var.

Özellikle, en azından deneyimlerime göre, Mac OS X'te caps lock tuşunu yeniden eşlerseniz (Sistem Tercihleri'nde .. Klavye .. Değiştirici Tuşlar) ve örneğin Kontrol ile eşlediğinizde, gecikme süresinin kaybolduğunu öğrendim. Mac OS X’e giriş yaparken

Benim sorunum, gecikme, Ubuntu Linux'a önyüklememde kalmam ve bu bağlamda Caps Lock tuşunu Control'e yeniden ayarladığımda bile gecikme hala mevcut.

Öyleyse, soru şudur: Apple gecikmeyi nasıl devre dışı bırakıyor ve daha da önemlisi, dizüstü bilgisayarın üstüne Linux kurulumu bağlamında etki eden bir kişi nasıl çoğaltılabilir?

Güncelleme: Süper kullanıcı üzerinde geçici çözümler sağlayabilecek bir konu var . Buradaki önerileri henüz denemedim (yani: (1) CapsLock-NoAction özelliğini açıp kapatarak ve (2) ürün yazılımı yükseltmesi). Bu iş parçacığının bağlamından, geçici çözümlerin bir Ubuntu yüklemesinde test edilip edilmediğini söyleyemem.


Bunu daha önce hiç farketmemiştim, ama benimkiyle bir oyun oynadım ve ne demek istediğini anlayabiliyorum. Büyük harf kilitleme tuşuna çok hızlı dokunursanız hiçbir şey yapmaz. Daha önce hiç sorun bulamadım ama sadece caps lock tuş hizalamasını devre dışı bırakma / yeniden etkinleştirmeyi denedim ve anında oldu! Şimdi hızlı bir şekilde önemli değil, her zaman büyük harf kilidini açar. Çok ilginç!
tom1990

Her zaman sadece delirdiğimi düşündüm: p faydasını görebiliyorum, ancak bazı durumlarda beni gerçekten sinir ediyor. Mümkün olup olmadığını bilmek iyi olurdu!
OrangeBox

Gerçekten de (Mac OS X tarafında) devre dışı bırakma / yeniden etkinleştirme kepleri kilitleme numarası, sorunun ardından Linux'a yeniden başladığında sorunu ortadan kaldırıyor gibi görünmektedir. Ama etkinin kalıcı olup olmadığı bana belli değil - Makinemi bir süre kapalı bıraktım (haftalar veya belki bir aydan fazla bile) ve bu sabah doğrudan Linux'a başlattığımda, gecikme geri döndü. Hala bana çok gizemli.
pnkfelix

Yani sadece kontrol etmek için, bu sorun için linux için bir düzeltme yok gibi görünüyor?
Mike HR,

1
İşte macOS için çalışan ve macOS altında çalıştırılabilecek bir düzeltme.
fel1x

Yanıtlar:


22

Bunun nasıl yapıldığını anladım. Kısaca, baytlardan oluşan bir "Özellik Raporu" 0x9, 0x0, 0x0, 0x0nu uygun hidraw cihazına root olarak göndermelisiniz.

Bu komut ile doğru hidraw cihazını bulabilirsiniz:

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

Sihirli kontrol paketini gönderecek kod aşağıdadır. Gcc ile derler, hidraw cihazını parametre olarak alır. Yani tüm akış:

  1. aşağıdaki kodu farklı kaydet 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. ve 4. adımların her yeniden başlatılmasında (veya klavyenin fişini takıp yeniden taktığınızda) yapılması gerekir; /etc/rc.localönyükleme sırasında çalıştırmak için bunları (veya distro'nuzun eşdeğeri) koyabilirsiniz ( sudobu durumda gerek yoktur ; derlenmiş ikili dosyayı bir /usr/local/sbin/şeye taşımak isteyebilirsiniz ).

Satıcı kimliği, cihaz kimliği ve rapor tanımlayıcı uzunluğu için bazı güvenlik kontrolleri yaptım. Modeliniz benimkinden farklıysa, ikinci ikisini değiştirmeniz gerekebilir.


#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
Bu harika görünüyor, teşekkürler! ilgi dışında, bunu nasıl buldun (gönderilmesi gereken sihirli baytlar)?
Mike HR,

6
@ MikeH-R: HID protokolünün nasıl çalıştığını öğrenmek için bir gün harcadım: temelde, cihazlar hangi veri paketlerini ("raporlar") anladıklarını açıklar. Ne yazık ki, Apple klavyesi, söz konusu rapordan HID tanımlayıcılarında bahsetmiyor. Ancak bir MacBook'un dahili klavyesinin, birinin gönderdiği HID tanımlayıcılarını doğru rapor açıklamasını içeren bir dökümü buldum ve basitçe denedim ve harici kablolu klavyede de çalıştığını gördüm.
jmrk

Vay canına, bunu denemek zorundayım!
pnkfelix

(En azından farklı tanımlayıcı boyutlarına sahip
gibiyim

Bu cevabı kabul edeceğim, çünkü sorunu tanımlandığı şekilde kabul etmenin ve buna makul bir çözüm sağlamanın en yakını geliyor (benim durumumda tanımlayıcı boyutları farklı olsa bile).
pnkfelix

13

MacOS Sierra için düzeltme burada.

Gidin Sistem Tercihleri > Erişilebilirlik

Erişilebilirlik penceresi açıkken - pencerenin sol tarafında - Klavye

Sonra 2 seçenek olacak - yapışkan tuşlar ve yavaş tuşlar için - yavaş tuşların yanındaki kutuyu tıklatarak etkinleştirin - sonra Options...tuşa tıklayın - kabul gecikmesini değiştirmek için kaydırıcıyla yeni bir pencere açılır - varsayılan olarak bu ortada. Düğmeyi sonuna kadar sola doğru kaydırın, böylece mümkün olan en kısa süre kalır.

Şimdi düzeltilmeli. Düzeltme işleminin yeniden başlatılmaya devam edip etmediğini görmek için deneme yapmadım, ancak bunun olacağını umuyorum.


Bir saniyeliğine heyecanlandım ama buraya bakmaya başladığımda, yavaş tuşlar etkin değildi, bu yüzden sadece yavaş tuşlar kullanan insanlar için çalışıyor :( bir gün değerli kapaklarımın kilit anahtarını geri alacağım!
Bradley

4
Bu onu biraz azaltır, ancak kapak kilidini açmak için kapatmadan daha yavaş. Ayrıca, ayar en hızlı açık olmasına rağmen, anahtar tekrarlama hızı bir taramaya yavaşlar. (Sierra 10.12.6)
18'de scipilot

1
Bu, keyrepat'ı yavaşlattığı için eldeki probleme uygun bir çözüm değildir ve geri almayı sürdürdüğünüzde artık bir şeyleri silemezsiniz.
Denialos

7

EDIT: Bu, OS X'teki caps lock tuşundaki gecikmeyi kaldırmak isteyen kullanıcılar için popüler bir açılış sorusu gibi görünüyor. OS X Mojave'den itibaren,

Sistem Tercihlerine Git; Ulaşılabilirlik; Tuş takımı; Yavaş Tuşları etkinleştir ve seçeneklere gir; gecikmeyi en aza indirin. Şimdiye kadar farkettiğim tek istenmeyen yan etki, basılı tutarken yavaş geri hareket. Genel olarak CMD + A / CMD + ÜST KRKT + L / R / CMD + ÜST KRKT + CTRL + L / R'yi kullanıyorum, bu yüzden büyük bir sorun değil.

El Capitan ve öncesi

Çözüm oldukça belirsiz ve ilk başta özellikle ondan kurtulmaya çalışmadığınız sürece onu kaldırdığınızı gerçekten bilemezsiniz. Size göstereceğim yol tamamen OSX'in (şimdiki) en yeni sürümü olan Yosemite için. Ancak bu yöntemi önceki ve gelecekteki sürümlere kesinlikle uygulayabilirsiniz.

Çözüm basit. Sol üst köşedeki elma logosuyla Sistem tercihlerinde Klavye'ye giderseniz bu ekrana erişeceksiniz! [Resim tanımını buraya girin] [1]

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

Değiştirici tuşlar düğmesini tıklarsanız, programlanabilir tuşların her birinin işlevini değiştirebilirsiniz. Yapmanız gereken tek şey, caps lock tuşunu işlem yapmamaya ayarlamak ve sizi klavye menüsüne geri getirmek için ok düğmesine basmak. Tamamlandıktan sonra, değiştirici tuşlarına geri dönün ve büyük harf kilidini büyük harf kilidine geri getirin; Siz bu uykuyu siz uyuyacak, yeniden başlatana ya da kapatana kadar yerinde kaldığını unutmayın. Bu noktada gecikme eski durumuna getirilir.

Bunlar garip düzeltmeler ve bu düzeltme yalnızca yazılım tabanlı olduğunda gecikmeyi kaldırma seçeneği sunmadıkları sorusunu soruyor. Ama hey, en azından bir yolu var!

Mutlu yakalama.


Bu benim Linux'taki sorunumu nasıl çözer?
pnkfelix

Daha açık olmak gerekirse: Asıl soru şöyle dedi: "... Mac OS X'e giriş yaparken gecikme kayboluyor. Sorunum, gecikmeyi Ubuntu Linux'a başlattığımda ve bu bağlamda, yeniden gönderdiğim zaman bile kalması. Caps Lock tuşunu kontrol etmek için gecikme hala var. "
pnkfelix

Ah! Anladığım kadarıyla OP sorularını daha dikkatli okumalıyım. OSX'te caps tuşunu tamamen açmanın ve yeniden bağlamanın sorunu çözdüğünü öğrendim. Belki de gecikme kalır, bunun yerine kontrolü kontrol ettiğiniz için? Henüz bir işiniz yoksa, her şeyi denemeye değer :)
Bradley 21

1
Bu yaklaşımın benim için bir etkisi olmadı. (Sierra 10.12.6)
18'de scipilot

3

Sistem tercihleri> erişilebilirlik> klavye> yavaş tuşları etkinleştir> kabul gecikmesini sola doğru değiştir (kısa)! Bu benim için çalıştı.


Mac OS X'te bir adımı açıklıyor musunuz? Bu, Ubuntu Linux'taki sorunu, soruda açıklandığı gibi nasıl çözer?
pnkfelix

Evet doğru. Ubuntu Linux'u tanımıyorum üzgünüm. Sanırım ana başlık "Apple MacBook Pro aluminyum klavyede kapakların kilitlenme gecikmesinin nasıl kaldırılacağı *" ve belki de "Apple gecikmenin nasıl devre dışı bırakılacağı" sorusudur. :-) Saygılarımızla Thomas, İsveç * Bu soru, bu sırtı bulmam ve okumamın ve hiçbir şeyin yardım etmemesinin sebebi bu yüzden kendim çözdüm: P
Thomas Carl-Erik Jönsson

2
Michelle'in cevabına göre: Bu biraz azaltıyor, ancak büyük harf kilidini açmak hala kapanıyor. Ayrıca, ayar en hızlı açık olmasına rağmen, anahtar tekrarlama hızı bir taramaya yavaşlar. (Sierra 10.12.6)
18'de scipilot

2

Büyük harf kilit gecikmesinin klavyenin kendisindeki ürün yazılımının bir özelliği olduğunu kesin olarak biliyorum - bu nedenle, klavyenin o anda kullandığı işletim sistemi ne olursa olsun gecikme zamanlamasının gerçekleştiğinden emin olabilirsiniz.

Ayrıca Apple’ın bellenimi daha düşük bir seviyeye çıkarmak için bir yol sunmadığını da biliyorum; bu nedenle, yeterli donanıma sahip birisinin eski donanıma yüklenmesini sağlamak için donanımları kandırmak için gerçekleştirdikleri araçları ve adımları bloglamadan önce beklememiz gerekecek. daha önce hiçbir gecikme olmadan nasıl çalıştığını geciktiren gerileyen yeni bir üretici yazılımına benzeyen şey.)

Yanıt veremediğim için özür dilerim, ancak bunu başarmanın yolu iyi aydınlatılmış ve gerçek bir çözümün uygulanmasını beklerken, aynı zamanda başkalarının da harekete geçmesine yardımcı olabilir (daha eski bir klavyeyi seçmek - ya da bellenimi yükseltmekten kaçınmak). caps lock tuşunda kısa veya hiç zamanlayıcı yok.


2
Cevabınızda kafamı karıştırdığım bir ayrıntı: Mac OS X'te caps lock tuşunu yeniden açtığında gecikmenin ortadan kalkması yanlış mı diyorsunuz? ("Şu anda klavyenin hangi işletim sistemi kullanıyor olursa olsun gecikme zamanlaması gerçekleşir" ifadenizi nasıl yorumlayabileceğimi bilmiyorum; ancak bu doğrudan deneyimime aykırı - Apple Apple’ı ayarlamak için bellenimsiz bir API kullanıyorsa zamanlama?)
pnkfelix

Benimkiler ESC'ye yeniden gönderildi ve biraz daha uzun süre beklemeye devam etmek gerekiyor. Bunu, Seil adında üçüncü bir uygulamayı kullanarak yaptım ve OSX’e yerleşik herhangi bir işlevsellik yapmadan yaptım. Sinir bozucu, elbette - geliştiricileri Vim kullanmıyor mu? Tanrım.
intuited

0

OP’nin hem kablolu Mac klavyem hem de MacBookPro klavyemde çalıştığı "açık / kapalı CapsLock-NoAction kapalı / açık" çözümü. Bradley, bunun yalnızca Yosemite'de çalıştığını söylüyor, ancak Snow Leopard (10.6.8) ve Mavericks (10.9.5) üzerinde başarıyla kullandım. Bunu bir Kubuntu VM içinde de test ettim ve Caps Lock, VM içinde doğru çalışmaya devam etti.

  • Klavye Sistem Tercihini açın ve üzerine tıklayın Modifier Keys...:

görüntü tanımını buraya girin

  • Caps Lock tuşunu konumuna getirin No Actionve tıklayın OK:

                    görüntü tanımını buraya girin

  • Tıklayın Modifier Keys...tekrar ve Caps Lock tuşu ayarlamak Caps Lockve tıklayın OK:

                    görüntü tanımını buraya girin

Bu sadece bir sonraki yeniden başlatmaya kadar geçerli kalır.


1
Bunun benim için bir etkisi olmadı. (Sierra 10.12.6, Mac USB klavyesi ve MBPro'da dahili)
18'de 0:25
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.