Anahtar kodlar uygun eylemle nasıl eşlenir?


18

Tarama kodlarının eşlemenin tuş kodlarıyla nasıl değiştirileceğini anladıktan sonra udev, bu soruya bakın , bu tuş kodlarının (veya eğer olacaksa olayların) uygun eyleme nasıl eşlendiğini merak ediyordum.

Bu nedenle, örneğin, volume upklavyenize basarsanız , daha sonra volumeuptuş koduna dönüştürülecek bir tarama kodu gönderilir . Ancak bu anahtar kodu nasıl ele geçirilir, ses seviyesi açılır ve uygun bildirim görüntülenir?

Benim tahminim bir yerde bir script çağrılması gerektiğidir, bu yüzden bu scriptlerin nerede olduğunu bilmek istiyorum.

EDIT: Bahsettiğim anahtar kodları, anahtar kodları xevdöner ile karıştırılmamalıdır , ama ben de bunlarla ilgileniyorum;)


3
Kabul etmiyorum, örneğin bildirim Ubuntu'ya çok özeldir, bu yüzden bildirimin nasıl gönderildiğini bilmek istiyorum . Benim tahminime göre bir yerde bir script çağrılmalıdır, bu yüzden bu scriptlerin nerede olduğunu bilmek istiyorum.
Gerhard Burger

2
Bu, Ubuntu'nun IIRC yıllarında değiştiğini ele alma şekli nedeniyle geçerli bir Ubuntu'ya özgü soru. Uygun eylemleri tetikleyen bir kısayol tuşuna basarak etkinlikte Ubuntu'da olayların sırasının ne olduğunu bilmek çok ilginç. Olası amaçlar: özel parlaklık kontrolleri , kısayol tuşu sorunları, vb. Hata ayıklama
gertvdijk

2
@Seth modası geçmiş gibi görünüyor. HAL, 10.04'ten bu yana uzun zaman önce kullanımdan kaldırıldı . Ayrıca, masaüstü bildirimlerinin nasıl tetiklendiği hakkında bilgi yoktur.
gertvdijk

1
Bugün geldi wiki.ubuntu.com/Hotkeys/Troubleshooting (bir bağlantı vardır bazı güzel işaretçileri veren wiki.ubuntu.com/Hotkeys/Architecture çok bilgilendirici). Sanırım Stephen Ostermiller'in cevabı doğru yönde, ama bu senaryoları bulmak ve değiştirmek istiyorum;)
Gerhard Burger

1
^^ Bu bilgi modası geçmiş gibi görünüyor, burada gnome-settings-daemon altında herhangi bir keybings yok ... Yine de compiz bölümü altında parlaklık için hit isabet (birlik için tahmin ediyorum?) Kim bilir nasıl notify-osdçalışır? Bence parlaklık bildirimlerinin gönderildiği yer ...
Gerhard Burger

Yanıtlar:


6

Tamam, bunu https://help.ubuntu.com/community/MultimediaKeys adresinde buldum

Klavyenizdeki bir tuşa bastığınızda, linux çekirdeği bunun için bir ham tarama kodu oluşturur (atanmışsa). Her tarama kodu bir anahtar koduyla eşlenebilir. Bu çekirdek seviyesinde. X'in anahtarları eşlemenin toplam bağımsız bir yolu vardır: X başlangıçta çekirdek anahtar kodu tablosunu okur, ardından anahtar kodunu bağımsız anahtar kodu tablosuyla eşler (çekirdek anahtar kodlarıyla aynıdır ancak farklıdır :)). Daha sonra her bir anahtar kodu bir key'e eşlenebilir, yani bir anahtarı temsil eden veya bir eylem öneren bir dize. Bu nedenle, anahtarlarımızın tamamen işlevsel olması için bir çekirdek tarama kodu / anahtar kodu artı bir X anahtar kodu / anahtar kelimesi gerekir. Tuhaf görünebilir, ancak X geliştiricilerinin çekirdekten ayrı bir klavye eşlemesi tutma nedenleri vardır. Hiç de zor değil, sadece oldukça sıkıcı bir prosedür.

Yani keycode'lar keysym ile eşleştirilir, peki keysym'ler nerede? Bu soruyu buldum ve yanıtladım: Bugünlerde tüm X anahtarlarının bir listesini nerede bulabilirim? Ses seviyesi tuşları hakkında konuştuğumuz için,XF86keysym.h , cevapta belirtilen kaynak kodunda .

Bilgisayarımdaki bu dosyada birim için aşağıdakileri buldum:

#define XF86XK_AudioLowerVolume 0x1008FF11   /* Volume control down        */
#define XF86XK_AudioMute    0x1008FF12   /* Mute sound from the system */
#define XF86XK_AudioRaiseVolume 0x1008FF13   /* Volume control up          */

Tuhaf ... başka her şeyden farklı değerler, belki anahtarları işlemek için birden fazla sistem var mı? http://crunchbang.org/forums/viewtopic.php?id=16656


Xubuntu kullanıyorum ve tuşları kontrol etmek için, eylemleri elle eşlemeliyim (böyle xubuntu'da klavye kısayollarımı nasıl değiştirebilirim? ). Ancak bildirimler tuşa basar ve buna göre hareket ediyormuş gibi bağımsız görünmektedir, Ubuntu'daki diğer programların bu şekilde ayarlandığı anlamına gelebilir, bu nedenle komut dosyalarını anahtarlarla eşleştirmeye gerek yoktur.

Bu yüzden programların artık anahtarı aldığından eminim (bu yüzden komut dosyaları bulunmayacak).

Xubuntu'da Pulse Audio ile bu sorunu yaşadım ve ses seviyesini değiştirmek için özel komut dosyaları kullandım, Pulse'un Sessiz tuşunu, Sessiz tuşunun Alsa ve PulseAudio'yu susturduğu görülüyordu , ancak sadece Alsa'nın ilginç çözümler için yaptığı sesi açıyor .


NotifyOSD hakkında bunu kontrol edin https://wiki.ubuntu.com/NotifyOSD#Volume_changes

Bu diyagramlara bakarsanız: https://wiki.ubuntu.com/NotifyOSD#Architecture

Özellikle bu: resim açıklamasını buraya girin

DBus veya HAL formunu alan bir "donanım anahtar dinleyicisi" olduğunu gösterir. Daha sonra ses ve parlaklık simgelerinin Notify-OSD kaynağında bulunduğu "görsel öğeyi sistemden alır" ve sonra balonu oradan yapar.


Bunların hepsi kafa karıştırıcı, ama anladığım kadarıyla (şimdiye kadar):

raw scancode (ex. e016)> keycode (ex. 160)> keysym (ex. XF86AudioMute)> gnome-settings-daemon (ex. ses şiddeti)> DBus sinyali> notify-osd için donanım tuşları-dinleyici (veya diğer program dinleme)


Görünüşe göre bu bir yere gidiyor! Başlangıçta CW olarak işaretlendi, bu yüzden hala gelişiyorsunuz? :)
gertvdijk

Evet, biraz daha bakmam gerek, diyagramda çok fazla soru işareti var.
Mateo

Bu arada yanlışlıkla bir topluluk wiki cevabı haline getirdin mi? Belki onu geri almak için bir mod isteyin ... Oh ve bu grafikler muhtemelen biraz güncel değil, çünkü HAL uzun süredir kullanılmıyor ... En azından bir yere gidiyoruz: D
Gerhard Burger


@gertvdijk Biliyorum, ama özleyeceği tüm upvotes için utanç verici olurdu;)
Gerhard Burger

1

Çoğu durumda, çalıştırılan komut dosyası yoktur. Olayların pencere yöneticisine veya ayarlar arka plan programına gönderilmesine neden olurlar. Bu işlemde komut dosyası oluşturmanın farkında olduğum tek zaman, özel anahtar bağlamaları yapılandırdığınız zamandır. Özel tuş bağları için komut satırları (yürütülebilir dosyalar veya komut dosyaları) ekleyebilir ve bunların tuşlara bağlanmasını sağlayabilirsiniz.

Lütfen Ubuntu'da tuş bağlantılarını yedekleme hakkında bir soruya yazdığım bu cevaba bakın: GNOME klavye kısayolları nerede saklanıyor? Özel tuş bağlamaları da dahil olmak üzere tüm tuş bağlarını yedekleyen veya geri yükleyen bir komut dosyası var. Komut dosyasını çalıştırırsanız, dconf içinde tuş bağlantılarının nerede saklandığını ve hangi uygulamanın key olayı hakkında bilgilendirildiğini görebilirsiniz.


masaüstü bildirimleri nasıl tetiklenir?
Gerhard Burger

Gnome ayar arka plan programının örneğin hacim ve parlaklık durumundakileri tetiklemekten sorumlu olduğuna inanıyorum.
Stephen Ostermiller

2
Senaryonuzu çalıştırdım, ama tek yaptığı şey Sistem Ayarları> Klavye> Kısayollar ile erişebileceğiniz kısayolları almak, örneğin parlaklığa herhangi bir referans bulamadım.
Gerhard Burger

anahtarları almak için harika bir komut dosyası.
Mateo

0

Cevap Sürücüler ile ilgilidir .

İşletim sistemiyle etkileşim kurmak için her donanımın bir sürücüsü olmalıdır.

Alıntı http://www.linuxforu.com/2010/11/understanding-linux-device-drivers/ :

Bir sürücü , komutası altındaki varlığı sürer, yönetir, kontrol eder, yönetir ve izler . Bir otobüs sürücüsünün bir otobüsle yaptığı şey, bir aygıt sürücüsü bir fare, klavye, monitör, sabit disk, Web kamera, saat ve daha fazlası gibi bir bilgisayar aygıtıyla (bilgisayara bağlı herhangi bir donanım) yapar.

Ayrıca, bir “pilot” bir kişi, hatta bir kişi tarafından izlenen otomatik bir sistem (örneğin uçaklardaki otomatik pilot sistemi) olabilir. Benzer şekilde, belirli bir donanım parçası bir yazılım parçası (bir aygıt sürücüsü) tarafından kontrol edilebilir veya başka bir donanım aygıtı tarafından kontrol edilebilir ve bu da bir yazılım aygıtı sürücüsü tarafından yönetilebilir. İkinci durumda, böyle bir kontrol cihazına genellikle bir cihaz kontrolörü denir. Bu, bir cihazın kendisi olmak için, genellikle bir otobüs sürücüsü olarak adlandırılan bir sürücüye de ihtiyaç duyar.

Bir aygıtta Kontrol / Durum bitlerini ve Veri bitlerini saklayan bir aygıt kaydı vardır. Bazı verilerin aktarılması gerektiğinde, genellikle Veri bitleri ayarlanarak gönderilir.

Bu nedenle, klavyenizdeki bir tuşa her bastığınızda, kayıtta bazı veriler yazılır. Bu bitler aygıt sürücüsü tarafından okunur ve uygun eylem gerçekleştirilir. Bu kısa bir açıklama.

Bağlantılar:


3
Uhm ... Sürücülerin aslında klavyemde bastığım tuşun anlamı hakkında hiçbir fikri olmadığını sanmıyorum . Dizüstü bilgisayarlardaki bazı özel kısayol tuşu aygıtlarının bunun için bir sürücüye ihtiyacı olabilir - ancak bu, "ses açma" gibi normal multimedya kısayol tuşlarını kapsamaz. Bu, çekirdeğin / X / DE'nin daha yaygın bir alanında ele alınmalıdır. Ayrıca Linux kerner aygıt sürücüsü programlama hakkında referansların çok geniş olduğunu düşünüyorum.
gertvdijk

Çoğu modern klavyeler için Ubuntu'nun evdevsürücüyü kullandığını düşünüyorum , ama bunun nasıl yardımcı olacağını görmüyorum ...
Gerhard Burger
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.